Este script lo hice, en primera instancia para aprender un poco y también por su utilidad.
#/bin/sh
# CompileWorld
# By Msdark (msdark@archilinux.us)
#
# Copyright (C) 2008 Matías Hernández
#
#
# Licensed under the GNU General Public License Version 3
#
# Este Script sirve para compilar todos los paquetes instalados en el sistema
#
# Para esto, revisa que paquetes han sido instalados con
# pacman -Q -e
# Una vez recuperados los paquetes instalados, el script
# busca en el arbol de directorios ABS por el PKGBUILD de cada paquete
# para ejecutar la compilación con makepkg.
#
# Por Defecto el directorio de trabajo del script es /tmp/compileworld
# Al finalizar el funcionamiento del script, este directorio es borrado
#
############## DIRECTORIOS DE TRABAJO #################
TMP="/tmp/compileworld"
PKG_FILE="$TMP/paquetes"
PKG_FILE_TMP="$TMP/paquetes.tmp"
PKG_DIR_FILE="$TMP/directorios"
############## VARIABLES DE SISTEMA ##################
REPOSITORIO=''
######################################################
#
# Revisa si el usuario es root
#
function check_root(){
ROOT_UID=0
E_NONROOT=67
if [ "$UID" -ne "$ROOT_UID" ]; then
printf "$(gettext "%s Necesitas ser root")\n" "$CMD_NAME"
exit $E_NONROOT
fi
}
#
# Revisa si existe un binario especifico
# si no muestra un mensaje de error
#
function chequea_requerimientos(){
if ! which $1 >/dev/null 2>&1; then
printf "${LRED}$(gettext "Necesitas instalar %s!")\n" "$1"
exit 1
fi
}
#
# Chequea cada uno de los requerimientos del script
#
function requerimientos(){
chequea_requerimientos "pacman"
chequea_requerimientos "abs"
chequea_requerimientos "tar"
chequea_requerimientos "makepkg"
}
#
# Genera variables para la salida a colores
#
function salida_color(){
DEFA="33[1;0m"
BOLD="33[1;1m"
LRED="33[1;31m"
LGRE="33[1;32m"
YELL="33[1;33m"
LBLU="33[1;34m"
}
#
# Se encarga de manejar el entorno
# limpia los directorios y crea lo necesario
#
function enviroment(){
rm -rf /tmp/compileworld &> /dev/null
mkdir -p /tmp/compileworld
salida_color
}
#
#obtiene los paquetes instalados explicitamente
#
function get_paquetes(){
pacman -Q -e > $PKG_FILE_TMP
while read linea; do
#paquete=$linea | awk '{print $1}'
#echo $paquete >> $PKG_FILE
echo $linea | awk '{print $1}' >> $PKG_FILE
done /dev/null
}
#
#Obtiene el directorio ABS de cada paquete instalado
#
function get_directorio_abs(){
while read linea; do
printf "${LGRE}$(gettext "Buscando el directorio de %s")\n${DEFA}" $linea
directorio=`find /var/abs/ -name $linea -print` &> /dev/null
echo $linea $directorio >> $PKG_DIR_FILE
done < $PKG_FILE
}
#
# Ejecuta la compilacion de cada paquete con makepkg
#
function compilar(){
cd $1
makepkg --asroot -c -C -i
}
#
# Busca el PKGBUILD de cada paquete
# y lo guarda en un nuevo arbol de directorios en el directorio de trabajo
#
function get_pkgbuild(){
#$1 nombre del paquete
#$2 directorio del paquete
if [ ! $2 ]; then
printf "${LRED}$(gettext "Imposible encontrar PKGBUILD del paquete %s No se compilara")\n${DEFA}" $1
else
printf "${LGRE}$(gettext "PKGBUILD de %s ENCONTRADO")\n${DEFA}" $1
mkdir -p $TMP/$1
cp $2/* $TMP/$1
compilar "$TMP/$1"
fi
}
#
# Ejecuta las funciones necesarias para la compilacion de cada paquete
#
function generar_compilacion(){
while read linea; do
paquete=`echo $linea | awk '{print $1}'`
directorio=`echo $linea | awk '{print $2}'`
get_pkgbuild "$paquete" "$directorio"
done < $PKG_DIR_FILE
}
#
# MAIN
#
function main(){
source gettext.sh
enviroment
check_root
requerimientos
get_paquetes
get_directorio_abs
generar_compilacion
rm -rf $BUILD_DIRECTORY
}
main $@
Para ejecutarlo simplemente darle permisos de ejución:
chmod +x compileWorld
y luego ejecutar
$ ./compileWorld
Saludos
Se dice en…