PkgBuild - um gerenciador de construção de pacotes
Publicado por Natsu Dragneel (última atualização em 27/11/2018)
[ Hits: 1.554 ]
Homepage: https://notabug.org/infinityuser01
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
#!/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
Mover e redimensionar janelas para os cantos da tela
Script de monitoramento de host por icmp (ping )
Nenhum comentário foi encontrado.
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (7)
De volta para o futuro - ou melhor, para o presente (parte 2) (0)









