Compilar y descompilar un .deb
Hola a todos aquellos que desean iniciarse en el mundo del Software Libre aqui les dejo un Script que he encontrado espero para que les resulte. Es una cosa muy facil debes seguir estos pasos:
- Abrir el kwrite (en caso de Kde) o gedit (en caso de Gnome), si esto no te sale o no los tienes intalados solamente habre algún Editor de Texto.
- Ahora debes pegar esto que te muestro:
#!/bin/bash#——————————————————————
# Copyright (C) 2008, Maikel Stinga & Mario Izquierdo
# 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=$3ayuda() {
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
fiif [ "$modificador" == "--help" ]; then
ayuda
fiif [ "$modificador" == "--desempaqueta" ] ; then
desempaqueta
fiif [ "$modificador" == "-d" ] ; then
desempaqueta
fiif [ "$modificador" == "--empaqueta" ]; then
empaqueta
fiif [ "$modificador" == "-e" ]; then
empaqueta
fi#si no hemos deficnido destino ponemos uno por defecto
if [ "$destino" == "" ]; then
destino=$mirror_extra
fiif [ "$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
3.Pegalo en el Editor de texto y guardalo con este nombre empaqueta_deb.sh (Debiado a que esto es un Bash) debes guardarlo en /usr/bin. Me inmagino ya lo que piensas no puedes guardarlo hay debido a que no tienes permiso, por tanto debes hacerlo por consola siendo root, después ejecutar el mc y busca el sitio donde debes pegarlo (/usr/bin).
4.Luego siendo root debes darle los siguientes permisos al archivo
chmod 775 empaqueta_deb.sh
5.Ahora para ejecutar el Script debes hacer esto:
Para desempaquetar:
empaqueta_deb.sh -d /ruta donde esta el archivo
Para empaquetar:
empaqueta_deb.sh -e
Nota: El .deb generado se guardara en /tmp/paquete