El comando principal para manipular los paquetes deb es dpkg-deb.
Para desempaquetar el paquete, cree un directorio vacío y cámbielo, luego ejecútelo dpkg-debpara extraer su información de control y los archivos del paquete. Use dpkg-deb -bpara reconstruir el paquete.
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Tenga en cuenta que a menos que su script se ejecute como root, los permisos y la propiedad de los archivos se dañarán en la etapa de extracción. Una forma de evitar esto es ejecutar su script en fakeroot. Tenga en cuenta que debe ejecutar toda la secuencia fakeroot, no cada una dpkg-debindividualmente, ya que es el fakerootproceso que mantiene la memoria de los permisos de los archivos que no se pueden crear tal como están.
fakeroot sh -c '
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
'
En lugar de meterse con los permisos, puede mantener intacto el archivo de datos y modificar solo el archivo de control. dpkg-debno proporciona una manera de hacer eso. Afortunadamente, los paquetes deb están en un formato estándar: son ararchivos. Por lo tanto, puede usar arpara extraer el archivo de control, modificar sus archivos y arvolver a usarlo para reemplazar el archivo de control por una nueva versión.
mkdir tmp
cd tmp
ar p ../original.deb control.tar.gz | tar -xz
# edit postinst
cp ../original.deb ../fixed.deb
tar czf control.tar.gz *[!z]
ar r ../fixed.deb control.tar.gz
Debe agregar una entrada de registro de cambios y cambiar el número de versión si modifica algo en el paquete. La infraestructura para manipular los paquetes de Debian supone que si dos paquetes tienen el mismo nombre y versión, son el mismo paquete. Agregue un sufijo a la parte debian_revision al final del número de versión; por razones de clasificación, el sufijo debería comenzar ~, por ejemplo, se 1.2.3-4.1convierte en 1.2.3-4.1~johnjumper1.
En lugar de usar herramientas de shell, puede usar Emacs. El dpkg-dev-elpaquete (que es su propio upstream ya que es un paquete nativo de Debian) contiene modos para editar .debarchivos y editar registros de cambios de Debian. Emacs se puede usar de forma interactiva o con secuencias de comandos.
-einterruptor de pies por minuto para cambiar el archivo de control:fpm -e -s deb -t deb ../old.deb. Esto abrirá el archivo de control en su editor.fakeroot bashe intentar emitir comandos no funcionará con respecto a la propiedad, ¡y elarmétodo es increíblemente rápido para archivos de deb grandes!dpkg-deb -Rlos modos se mantuvieron ydpkg-deb -brestablecer lauid:gidde los archivos extraídos0:0. No necesitaba fakeroot (imagino que podría haber problemas si no se establecieron {u, g} archivos de identificación dentro del archivo, pero ese no fue el caso en mi situación./etco/varque deben pertenecer a un grupo específico.Puede usar fpm con la
--after-installopción de reemplazar elpostinstscript, así:fuente