Desempaqueta y empaqueta .deb


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

Anuncios

5 comentarios en “Desempaqueta y empaqueta .deb

  1. WordPress modifica las comillas y los guiones dobles con lo cual el script es inusable tal y como está puesto. Además genera un archivo deb de “mala calidad” según el Centro de Software.
    De todas formas SIEMPRE se agradece el esfuerzo que hace todo el mundo para ayudar a los demás y este es un claro ejemplo de ello y porque el software libre es grande.
    Muchas gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s