Desempaquete DEB, edite postinst y vuelva a empaquetar DEB fácilmente

Desempaquete DEB, edite postinst y vuelva a empaquetar DEB fácilmente

Estoy intentando instalar el SDK OpenCL de Intel, pero los archivos DEB son conversiones defectuosas desde RPM (consulteaquípara los curiosos). Necesito editar el postinstscript en el DEB que me proporcionan.

¿Cómo puedo tomar un DEB existente, extraer el contenido (incluida la información de control) y luego volver a empaquetar el contenido para crear un nuevo DEB? Solo editaré archivos, no se agregarán ni eliminarán archivos.

Respuesta1

El comando principal para manipular paquetes deb esdpkg-deb.

Para descomprimir el paquete, cree un directorio vacío y cambie a él, luego ejecútelo dpkg-debpara extraer su información de control y los archivos del paquete. Úselo 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 el script enfakeroot. Tenga en cuenta que debe ejecutar toda la secuencia en fakeroot, no cada uno 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 complicarse con los permisos, puede mantener el archivo de datos intacto y modificar sólo el archivo de control. dpkg-debno proporciona una manera de hacer eso. Afortunadamente, los paquetes deb están en un formato estándar: sonararchivo. Por lo tanto, puede utilizarlo arpara extraer el archivo de control, modificar sus archivos y utilizarlo arnuevamente 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

DeberíaAgrega unentrada del registro de cambiosy cambiar elnúmero de versiónsi modifica algo en el paquete. La infraestructura para manipular paquetes de Debian supone que si dos paquetes tienen el mismo nombre y versión, son el mismo paquete. Añade un sufijo alrevisión_debianparte al final del número de versión; Por razones de clasificación, el sufijo debe comenzar con ~, por ejemplo , 1.2.3-4.1se convierte en 1.2.3-4.1~johnjumper1.

En lugar de utilizar herramientas de shell, puede utilizar Emacs. Eldpkg-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 utilizar de forma interactiva o mediante script.

Respuesta2

Puedes usarfpmcon la --after-installopción de reemplazar el postinstscript, así:

fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb

Respuesta3

Si sólo desea extraer archivos de un archivo .deb, 7-Zip es conveniente. 7-Zip admite archivos "ar" para "descomprimir únicamente". (No es necesario cambiar el nombre del archivo; abre *.deb como "ar" y muestra "data.tar" en su interior).

información relacionada