#!/bin/sh ############################################################################## # # checkinstall # # # ######################## # # # # Instala (con "make install" o con el comando que se le pasa en su primer # # argu mento) un programa compilado, desde su directorio # # fuente, que se espera que se llame "programa-x.x...x" donde x son los # # numeros de version. Genera en el directorio actual un paquete compatible # # con Slacware llamado "programa-x.x...x.tgz". # # # # Necesita tener en /tmp el espacio completo que ocupe el programa ya # # instalado en el sistema. # # # ############################################################################## DIRECTORIO_FUENTE=`pwd` NOMBRE_DEL_PAQUETE=`basename $DIRECTORIO_FUENTE`-pak.tgz if [ -z "$1" ]; then INSTALLCMD='make install' else INSTALLCMD=$1 fi echo if ! [ -d /tmp/package ]; then # Me aseguro de que existan echo "Creando directorio /tmp/package" # los directorios indispensables mkdir /tmp/package fi if ! [ -d $DIRECTORIO_FUENTE/doc-pak ]; then echo "No existe el direcorio de documentacion del paquete (./doc-pak)" echo -n "Quieres continuar asi [S/N]? " read SN SN=`echo $SN | tr 'a-z' 'A-Z'` if ! [ $SN = "S" ]; then echo "Abortando instalacion." exit 1; fi fi # Realizamos la instalacion del programa desde el directorio fuente # echo "Instalando con \"$INSTALLCMD...\"" installwatch -o /tmp/newfiles.tmp $INSTALLCMD &> /tmp/install.log if [ $? -gt 0 ]; then echo cat /tmp/install.log echo echo "*************************************************************" echo "* Hubo un error al ejecutar la instalacion. Abortando. *" echo "* Los detalles estan en /tmp/install.log. *" echo "*************************************************************" echo exit fi (echo echo ' ***************************************' echo ' * Resultados de la instalacion. *' echo ' * Puedes verlos en /tmp/install.log *' echo ' ***************************************' echo cat /tmp/install.log) | more echo # # Quito la basura de la lista de archivos modificados # cat /tmp/newfiles.tmp | cut -f 3 | egrep -v '/dev|/tmp' | sort -u > /tmp/newfiles # # Preparo los archivos para crear el paquete en /tmp/package # echo echo 'Copiando los archivos al directorio temporal' echo 'para generar el paquete de instalacion...' cd / for i in `cat /tmp/newfiles`; do if ! [ -d $i ]; then (tar cp $i| tar xvpC /tmp/package) &> /tmp/checkinstall.log fi done # Copio los archivos de documentacion if [ -d $DIRECTORIO_FUENTE/doc-pak ]; then # Existen archivos ahi? mkdir -p /tmp/package/usr/doc/`basename $DIRECTORIO_FUENTE` cd $DIRECTORIO_FUENTE/doc-pak tar cp * | tar xvpC /tmp/package/usr/doc/`basename $DIRECTORIO_FUENTE` \ &> /dev/null fi # # Creo el paquete (TODO: Automatizar esta parte) # echo echo '**********************************************************************' echo ' Creando el paquete...' echo '**********************************************************************' cd /tmp/package makepkg $NOMBRE_DEL_PAQUETE mv $NOMBRE_DEL_PAQUETE $DIRECTORIO_FUENTE # # Instalo el paquete para que quede en la lista de paquetes instalados # de Slackware, poder ver sus contenidos con pkgtool o quitarlo con removepkg # installpkg $DIRECTORIO_FUENTE/$NOMBRE_DEL_PAQUETE # # Quito la basura de /tmp # echo echo 'Eliminando archivos temporales...' rm -rf /tmp/{newfiles*,package/*} echo echo '**********************************************************************' echo " Listo. El paquete creado se llama $NOMBRE_DEL_PAQUETE" echo " Se encuentra en $DIRECTORIO_FUENTE/$NOMBRE_DEL_PAQUETE" echo echo " Tambien instale el paquete con installpkg. Lo puedes" echo " desinstalar con removepkg." echo '**********************************************************************' echo