Estoy intentando instalar el SDK OpenCL de Intel, pero los archivos DEB son conversiones defectuosas de RPM (consulte aquí para los curiosos). Necesito editar el postinst script en el DEB que proporcionan.

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

Comentarios

  • la parte de desempaquetado se puede hacer desde midnight commander (apt install mc) – simplemente presione enter en un archivo deb

Responder

El El comando principal para manipular paquetes deb es dpkg-deb .

Para descomprimir el paquete, cree un directorio vacío y cambiar a él, luego ejecute dpkg-deb para extraer su información de control y los archivos del paquete. Utilice dpkg-deb -b para 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 esté ejecutando como root, los archivos » los permisos y la propiedad se dañarán en la etapa de extracción. Una forma de evitar esto es ejecutar el script en fakeroot . Tenga en cuenta que debe ejecutar la secuencia completa en fakeroot, no cada dpkg-deb individualmente, ya que «es el fakeroot proceso que mantiene la memoria de los permisos de los archivos que» no se pueden crear 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 ensuciar con permisos, puede mantener el archivo de datos intacto y modificar solo el archivo de control. dpkg-deb no proporciona una forma de hacerlo. Afortunadamente, los paquetes deb tienen un formato estándar: «son archivos ar . Por lo tanto, puede usar ar para extraer el archivo de control, modificar sus archivos y usar ar nuevamente 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 la número de versión si modifica algo en el paquete. La infraestructura para manipular paquetes Debian asume 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 debe comenzar con ~, p. ej. 1.2.3-4.1 se convierte en 1.2.3-4.1~johnjumper1.

En lugar de usar herramientas de shell, puede usar Emacs. El dpkg-dev-el paquete (que es su propio upstream ya que es un paquete nativo de Debian) contiene modos para editar .deb archivos y editar registros de cambios de Debian. Emacs se puede usar de forma interactiva o con un script.

Comentarios

  • También puede usar el -e de fpm para cambiar el archivo de control: fpm -e -s deb -t deb ../old.deb. Esto abrirá el archivo de control en su editor.
  • por cierto, fakeroot bash y tratar de emitir comandos no funcionará con respecto a la propiedad, y el ar ¡El método es increíblemente rápido para archivos deb grandes!
  • Gracias. Esto fue útil. Usando dpkg-deb -R los modos se mantuvieron y dpkg-deb -b restableció el uid:gid de los archivos extraídos a 0:0. ¿No ' no necesitaba fakeroot (imagino que podría haber problemas si hubiera archivos de identificación {u, g} configurados dentro del archivo, pero no ' t es el caso en mi situación.
  • @PSkocik No solo archivos setxid, también, por ejemplo, archivos y directorios en /etc o /var que deben pertenecer a un grupo específico.
  • Gracias por la excelente respuesta. ¿Hay alguna manera de garantizar que el paquete reconstruido frente al paquete original tenga el mismo md5sum?

Respuesta

Puede usar fpm con --after-install opción para reemplazar la secuencia de comandos postinst, así:

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

Comentarios

  • Para instalar fpm en Debian / Ubuntu: sudo apt-get install ruby-dev build-essential; sudo gem install fpm

Respuesta

Si solo desea extraer archivos de un archivo .deb le, 7-Zip es conveniente. 7-Zip admite archivos «ar» para «solo desempaquetar». (No es necesario cambiar el nombre del archivo; abre * .deb como «ar» y muestra «data.tar» dentro).

Comentarios

  • Bienvenido al sitio y gracias por su contribución.Tenga en cuenta que el OP solicitó específicamente " desempaquetar DEB … y volver a empaquetar DEB ". Quizás puedas editar tu publicación para abordar ese tema también.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *