Estoy intentando instalar el SDK OpenCL de Intel, pero los archivos DEB son conversiones defectuosas desde RPM (consulteaquípara los curiosos). Necesito editar el postinst
script 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-deb
para extraer su información de control y los archivos del paquete. Úselo 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 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-deb
individualmente, ya que es el fakeroot
proceso 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-deb
no proporciona una manera de hacer eso. Afortunadamente, los paquetes deb están en un formato estándar: sonar
archivo. Por lo tanto, puede utilizarlo ar
para extraer el archivo de control, modificar sus archivos y utilizarlo 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
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.1
se convierte en 1.2.3-4.1~johnjumper1
.
En lugar de utilizar herramientas de shell, puede utilizar Emacs. Eldpkg-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 utilizar de forma interactiva o mediante script.
Respuesta2
Puedes usarfpmcon la --after-install
opción de reemplazar el postinst
script, 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).