Este sencillo script me lo facilitó un amigo y realmente no sé de donde lo sacó pero está muy bueno. Lo que el escript hace básicamente es que desempaqueta
un .deb dentro de una carpeta temporal y luego después que lo modifiques, te lo vuelve a empaquetar. Las opciones vienen explicadas dentro del script una vez que le damos todos los permisos y lo ejecutamos. El script contiene esto adentro:
#!/bin/bash
#——————————————————————
# Copyright (C) 2005, Mario Izquierdo mariodebian[AT]gmail[dot]com
# You may distribute this software under the GPL License
#——————————————————————
# directorio donde montaremos el mirror
# no poner la ultima barra
# edita esta variable
#
#despues añadir al sources.list la siguiente linea
#deb file:///mirror/extra ./
mirror_extra=”/mirror/extra”
# NO EDITES DESDE AQUI
#variables más comodas
modificador=$1
fichero=$2
destino=$3
ayuda() {
echo “Uso de empaqueta_deb.sh”
echo “”
echo “ Desempaquetar:”
echo “ empaqueta_deb.sh –desempaqueta (-d) /ruta/donde/este/archivo.deb”
echo “ Esto descomprime nuestro deb a un directorio temporal”
echo “ /tmp/paquete/tmp/”
echo “”
echo “ Empaquetar:”
echo “ empaqueta_deb.sh –empaqueta (-e) [-a /destino/del/mirror]“
echo “ Esto empaqueta el deb préviamente desempaquetado”
echo “ generando de nuevo el archivo .deb”
echo “ “
echo “ ejemplos:”
echo “”
echo “ empaqueta_deb.sh -d /usr/src/sofilin_0.0.3_i386.deb”
echo “”
echo “ empaqueta_deb.sh -e -a /mirror/extra”
exit 0
}
desempaqueta() {
#salimos si no hay argumento en $fichero
if [ "$fichero" == "" ]; then
echo “No se ha especificado ningún paquete .deb”;
exit 1
fi
#miramos que no haya otro paquete para sobreescribirlo accidentamente
if [ -f "/tmp/paquete/tmp/DEBIAN/control" ]; then
nombre_p=`cat /tmp/paquete/tmp/DEBIAN/control |grep ^Package: | awk ‘{print $2}’`
version_p=`cat /tmp/paquete/tmp/DEBIAN/control |grep ^Version: | awk ‘{print $2}’`
echo “###################################”
echo “# #”
echo “# Ya hay un paquete deb en /tmp #”
echo “# ======># ${nombre_p}_${version_p} “
echo “# ¿Quiere seguir? #”
echo “# #”
echo -n “################################### (S/n) “
read seguir
if [ "$seguir" == "n" ];then
echo “Saliendo…”
exit 1
fi
fi
#localizamos el deb (ruta relativa o absoluta lo sabemos porque
# $fichero comience o no por /)
if [ "`echo $fichero | cut -c1`" == "/" ];then
fichero=$fichero
else
fichero=`pwd`/$fichero
echo “la ruta completa es: $fichero”
fi
#descomprimir cada cosa en su sitio
cd /tmp/
rm -rf paquete 2>/dev/null
mkdir paquete
cd /tmp/paquete
ar x $fichero >/dev/null
mkdir tmp
cd tmp
tar xzpf ../data.tar.gz
mkdir DEBIAN
cd DEBIAN
tar xzpf ../../control.tar.gz
echo “Desempaquetado.”
exit 0
}
empaqueta() {
cd /tmp/paquete/tmp/
dpkg –build . ..
cd ..
ls *.deb
echo “Aquí tienes tu .deb”
}
if [ "$#" == "0" ]; then
ayuda
fi
if [ "$modificador" == "--help" ]; then
ayuda
fi
if [ "$modificador" == "--desempaqueta" ] ; then
desempaqueta
fi
if [ "$modificador" == "-d" ] ; then
desempaqueta
fi
if [ "$modificador" == "--empaqueta" ]; then
empaqueta
fi
if [ "$modificador" == "-e" ]; then
empaqueta
fi
#si no hemos deficnido destino ponemos uno por defecto
if [ "$destino" == "" ]; then
destino=$mirror_extra
fi
if [ "$fichero" == "-a" ]; then
echo “Copiando paquete en $destino …”
cp *.deb $destino
echo “Actualizando mirror…”
cd $destino
dpkg-scanpackages ./ /dev/null | gzip -9c > ./Packages.gz
if [ ! -f "$destino/Sources.gz" ]; then
#creamos el Sources.gz si no existe
touch Sources
gzip Sources
fi
echo “”
echo “HECHO”
fi
Comentarios recientes