PkgBuild - um gerenciador de construção de pacotes

Publicado por Natsu Dragneel (última atualização em 27/11/2018)

[ Hits: 1.060 ]

Homepage: https://notabug.org/infinityuser01

Download pkgbuild.sh




Esse é um gerenciador de construção de pacotes. Por favor, ainda está em estágio ALPHA, ou seja, falta muita coisa!

No futuro, será integrado com o spawn. Idéias e bugs serão ouvidos.

Funções para serem usadas no buildpkg:

prepare_pkg ()
install_pkg ()
remove_pkg ()
triggers_pkg ()
clean_pkg ()

InfinityUser01

  



Esconder código-fonte

#!/bin/bash

# this is a pkgbuild, a simple buildsystem to spawn.
# so, the pkgbuild is criated to use on InfinityOS. But can easy
# be used on others distros. Making the work, more easy.
# Based on the makepkg of archlinux.

# This is a project open source and free, is under the license MIT
# 2018, by InfinityUser01

# Variables for control de color.
RED_COLOR="\033[1;31m"
GENERIC_C="\033[0m"
YELLOW_CL="\033[1;34m"

LOG_PATH="/tmp/buildpkg.$RANDOM"
IS_CLEAN_END="true"

# Function: trigger
# Use: to check some command used on the buildpkg
# Return: Nothing

trigger () {
   TRIGGER_ID="$RANDOM"
   
   echo "Trigger [$TRIGGER_ID]: $1"
   echo "Trigger [$TRIGGER_ID]: $1 is checking" >> $LOG_PATH
   
   if [ ! "$(which $1)" ]; then
      die "io.trigger.id.$TRIGGER_ID" "Unable to process trigger: $1"
   fi
}


# Function: check_arch
# Use: To get the arch by the system
# Return: Arch (i386), (x86_64)

check_arch () {
   ARCH_MATCH=`uname -m`
   
   if [ "$ARCH_MATCH" == 'x86_64' ]; then
      printf "x86_64"
   else
      printf "i386"
   fi
   
}

arch_use=$(check_arch)

# Function get_date
# Use: Get date from the system
# Return: Nothing.

get_date () {
   DATE_NOW=`date '+%Y-%m-%d %H:%M:%S'`
   printf "$DATE_NOW"
}


# Function: warn $1, $2
# Use: Print a warn internal error
# Return: Nothing.
warn () {
   echo "*** System Warning: $1, Reason $2 ***" >> $LOG_PATH
   echo -e "$YELLOW_CL*** WARN: $1, Reason: $2 *** $GENERIC_C"
}

# Function: die $1, $2
# Use: Kill by some internal error
# Return: Nothing.

die () { 
   echo "*** System Error; $1, Reason: $2" >> $LOG_PATH
   echo -e "$RED_COLOR*** System Error / $1 *** $GENERIC_C"
   echo -e "  -> Reason: $2"
   exit 1
}

# Function: do_checkup
# Use: Checkup by the building env
# Return: Nothing.

do_checkup () {
   # check if the buildpkg file is on the folder.

   if [ ! -e './buildpkg' ]; then
      die "io.do_checkup.internal.buildpkg" "Missing the buildpkg file to build the program."
   fi
   
   # check the source library...
   source ./buildpkg
   
   # check the package version

   if [ "$pkg_ver" == "" ]; then
      die "io.do_checkup.internal.buildpkg" "Missing the pkg_ver= on the ./buildpkg"
   fi
   
   # check the package name

   if [ "$pkg_name" == "" ]; then
      die "io.do_checkup.internal.buildpkg" "Missing the pkg_name= on the ./buildpkg"
   fi
   
   # Check the architure compatible with the system

   if [ "$pkg_arch" == "" ]; then
      die "io.do_checkup.internal.buildpkg" "Missing the pkg_arch=() on the ./buildpkg"
   fi
   
   # check arch by arch if is compatible

   Arch=""
   
   for i in "${pkg_arch[@]}"; do
      if [ "$i" == "$arch_use" ] || [ "$i" == "any" ]; then
         Arch="$i"
         break
      fi
   done
   
   if [ "$Arch" == "" ]; then
      die "io.do_checkup.internal.buildpkg" "Arch is incompatible to build"
   fi
   
   # Check the description of package "not required"

   if [ "$pkg_desc" == "" ]; then
      warn "io.do_checkup.internal.buildpkg" "Unable to handle the pkg_desc. Is null or not exist."
   fi
   
   # # /// New log info /// # #
   echo "- Package Name: $pkg_name" >> $LOG_PATH
   echo "- Package Vers: $pkg_ver" >> $LOG_PATH
   echo "- Package Description: $pkg_desc" >> $LOG_PATH
   echo "- Arch: $Arch" >> $LOG_PATH
   
}


do_checkup 

# Ok, if the build reach this point, is time for build the package, but, needs to be checked 
# the args... The buildpkg has support to:

# 1: Install   ->  "Install package, compiling from source"
# 2: Remove   ->  "Remove the package, compiling from source"
# 3: Clean   ->  "Clean the package, clean the source, of clean building."

# The pkgbuild can support then, 4 functions:
# prepare_pkg    () ->   Prepare a new package 'download and descompress package'
# install_pkg    () ->   Install a package './configure and make phase'      -> Require ROOT
# remove_pkg    () ->   Remove a package './configure; make remove'      -> Require ROOT
# clean_pkg    () ->   Delete all files.

ROOT_MODE="false" 
if [ $EUID -eq 0 ]; then
   ROOT_MODE="true"
else
   warn "io.rootcheck.function" "Install or other required functions aren't work"
fi

# Queue Mode.
QUEUE=()
MODE_LOCK="false"

for i in "$@"; do
   case $i in
      install)
         if [ "$ROOT_MODE" == "false" ]; then
            die "io.queue.check" "unable to run install mode."
         else
            if [ "$MODE_LOCK" == "false" ]; then
               QUEUE+=("install.mode")
               MODE_LOCK="true"
            else
               warn "io.queue.check" "mode is locked."
            fi
         fi
         ;;
      remove)
         if [ "$ROOT_MODE" == "false" ]; then
            die "io.queue.check" "unable to run remove mode."
         else
            if [ "$MODE_LOCK" == "false" ]; then
               QUEUE+=("remove.mode")
               MODE_LOCK="true"
            else
               warn "io.queue.check" "mode is locked"
            fi
         fi
         ;;
      clean)
         QUEUE+=("clean.mode")
         ;;
      -no-clean)
         IS_CLEAN_END="false"
         echo "Clean on end: {false}" >> $LOG_PATH 
         ;;
      *)
         warn "io.queue.check" "No instruction found: $i"
         ;;
   esac 
done

# Write queue on the log
echo "Queue :: ${QUEUE[@]}" >> $LOG_PATH


# User input ask if wants install.
while :
do
   read -p "Put your editor or (y,Y) or (n,N) for actions: " edopt
   if [ "$edopt" == "N" ] || [ "$edopt" == "n" ]; then
      exit 1
   elif [ "$edopt" == "y" ] || [ "$edopt" == "Y" ]; then
      break
   else
      if [ ! "$(which $edopt)" ]; then
         echo "editor or command not found."
      else
         echo "Called editor: $edopt" >> $LOG_PATH
         $edopt ./buildpkg
         echo "You want start build?"
      fi
   fi
done



# Start to build.

echo "Is building the package: $pkg_name, Version: $pkg_ver"
echo "Checking some triggers: "
triggers_pkg

# Start the building, by the prepare.
echo "Prepare Pkg: $(get_date)" >> $LOG_PATH
prepare_pkg

if [ $? -ne 0 ]; then
   die "io.prepare_pkg.run" "Failed to run prepare_pkg" 
fi

# start to process the queue
for i in "${QUEUE[@]}" ; do
   if [ "$i" == "install.mode" ]; then
      echo "Install mode as initialized on $(get_date)" >> $LOG_PATH
      install_pkg
      if [ $? -ne 0 ]; then
         die "io.queue.install" "Unable to install package"
      fi
      
   elif [ "$i" == "remove.mode" ]; then
      echo "Remove mode as initialized on $(get_date)" >> $LOG_PATH
      remove_pkg
      if [ $? -ne 0 ]; then
         die "io.queue.remove" "Unable to remove package" 
      fi 
      
   elif [ "$i" == "clean.mode" ]; then
      echo "Cleanup performed: $(get_date)" >> $LOG_PATH
      clean_pkg
   else
      warn "io.queue.reading" "invalid operation: $i" 
   fi
done 

# Do cleanup, if you want to remove this, is just put:
# -not-clean

if [ "$IS_CLEAN_END" == "true" ]; then clean_pkg; fi

Scripts recomendados

Armazenando Endereços Web

Manter o servidor conectado a internet pelo rp-pppoe

diario

Script para o Qemu usando Dialog

Simulado para provas LPI nível 1


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts