¿Cómo crear un archivo DEB manualmente?

46

Quiero crear un archivo DEB manualmente. Me gustaría proporcionar una carpeta que contenga datos para instalar y un script que se ejecutará después de la instalación.

es posible?

margarita
fuente
¿No es muy buena la respuesta que eliges?
Gigamegs el
@David, en realidad lo hice con "dpkg-deb", es mucho más fácil, es por eso que elegí a Gilles, al enumerar los archivos en la carpeta del paquete me da una visión clara del archivo para colocar allí. Así que creo que su respuesta es mejor ...
Daisy
También he enumerado todos los archivos en el paquete.
Gigamegs
11
@David quiero decir, ¿argumentar que su respuesta es derivada es una cosa, pero "no es una muy buena respuesta"? La respuesta de Gilles es excelente; no importa si tu respuesta fue primero, la suya es mucho más completa. Y no hay nada de malo en tomar una respuesta existente y ampliarla; eso es algo bueno
Michael Mrozek

Respuestas:

57

Hacer un paquete fuente

Mi recomendación es hacer un paquete fuente. Instale build-essential , debhelper , dh-make . Cambie al directorio donde están los archivos que desea instalar (el nombre del directorio debe tener la forma $PACKAGE-$VERSION, por ejemplo, myapp-4.2-1para su primer intento de empaquetar Myapp V4.2), y ejecútelo dh_make --createorig. Responde a las preguntas. Debhelper creará la infraestructura básica necesaria para construir un paquete mediante la generación de archivos en un subdirectorio llamado debian, tanto algunos archivos obligatorios como plantillas para archivos opcionales. Es posible que deba modificar algunos de estos archivos:

  • Edite debian/rulespara construir lo que necesita construir e instale los archivos en el lugar correcto. Si solo necesita copiar algunos archivos y no compilar cosas, simplemente edite el archivo debian/installpara especificar qué archivos deben instalarse y dónde.
  • Edite debian/copyrightpara agregar información de licencia sobre su paquete e información sobre dónde obtener la última versión (si corresponde).
  • Edite debian/changelogpara eliminar la referencia a un ITP (eso solo es relevante si está trabajando para el proyecto Debian). Cambiar el nombre debian/postinst.exde debian/postinsty añadir sus comandos posteriores a la instalación allí. Si luego actualiza su paquete, ejecútelo debchange -ipara agregar una entrada de registro de cambios o edite el archivo en Emacs (con dpkg-dev-el instalado).

Ejecute dpkg-buildpackage -rfakeroot -us -ucpara compilar el .debpaquete (elimínelo -us -ucsi desea firmar el paquete con su clave PGP).

Hacer un paquete binario directamente

Si decide hacer un paquete binario directamente sin construirlo a partir de un paquete fuente, lo cual no es realmente más fácil porque no hay tantas herramientas para facilitar el proceso, necesitará cierta familiaridad básica con el formato de los paquetes deb. Se describe en el Manual de políticas de Debian , en particular el cap. 3 (formato de paquetes binarios) , cap. 5 (archivos de control) , cap. 6 (scripts de instalación) y apéndice B (manipulación de paquetes binarios) .

Asegúrese de que su paquete instala los archivos esperados /usr/share/doc/copyright(que contienen la licencia del contenido del paquete, así como dónde encontrar la última versión del paquete) y /usr/share/doc/changelog.Debian.gz(que contiene el registro de cambios del paquete deb). No los necesita si solo va a usar el paquete internamente, pero es mejor tenerlos.

Sobre Debian y derivados

Si tiene las herramientas de Debian disponibles, úselas dpkg-debpara construir el paquete. En el directorio que contiene los datos a instalar, agregue un directorio llamado DEBIANen el nivel superior, que contenga los archivos de control y las secuencias de comandos de mantenimiento.

$ ls mypackage-42
DEBIAN etc usr var
$ dpkg-deb -b mypackage-42

El camino difícil

Si no tiene las herramientas de Debian, cree un archivo de los archivos que desea empaquetar data.tar.gz, un archivo separado de los archivos de control llamados control.tar.gz(sin subdirectorios) y un archivo de texto llamado debian-binaryy que contiene el texto 2.0.

cd mypackage-42
tar czf ../data.tar.gz [a-z]*
cd DEBIAN
tar czf ../../control.tar.gz *
cd ../..
echo 2.0 > debian-binary
ar r mypackage-42.deb debian-binary control.tar.gz data.tar.gz

Se necesita al menos un archivo de control con los campos Package, Maintainer, Priority, Architecture, Installed-Size, Version, y cualquier declaración de dependencia necesaria.

Se llama al script que se ejecutará después de la instalación postinst. Asegúrese de hacerlo ejecutable. Va al costado control.

Convertir un paquete binario de un formato diferente

Si ya tiene un paquete binario de otra distribución, puede usar alien para convertirlo.

Gilles 'SO- deja de ser malvado'
fuente
3
OMI es una copia de mi respuesta? ¿Qué piensas?
Gigamegs
1
La respuesta presupone que el OP sabe cómo usar emacs. ¿Es realmente necesario emacs aquí? Para editar los registros de cambios, creo que uno puede usar dch -i.
Faheem Mitha
¿Qué está arhaciendo que tarno es?
mmstick
@mmstick Es un formato diferente. No sé por qué los diseñadores del formato deb decidieron usar ar aquí.
Gilles 'SO- deja de ser malvado'
1
Si desea cambiar el nombre y el correo electrónico que dh_make --createorigusos, es necesario export DEBEMAIL="[email protected]"y export DEBFULLNAME="Firstname Lastname"de antemano.
Ryan
10

En primer lugar, debe crear una carpeta de compilación y un archivo de sus archivos: tar czvf data.tar.gz files

Luego, en la carpeta de compilación, debe crear un archivo de control con algunas informaciones deseadas:

 Package: xxxxxx
 Version: 0.0.1
 Section: user/hidden 
 Priority: optional
 Architecture: armel
 Installed-Size: `du -ks usr|cut -f 1`
 Maintainer: Your Name <[email protected]>
 Description: This is optional, but creates warnings if left out

Luego puede agregar de forma independiente los scripts de shell preinst, postint, prerm y postrm para controlar el comportamiento previo y posterior a la instalación y previo y posterior a la eliminación del archivo .deb y luego puede crear el archivo de control con tar: tar czvf control.tar.gz control preinst postinst prerm postrm

A continuación, necesita un archivo debian-binaria: echo 2.0 > debian-binary. En su carpeta de compilación debería tener ahora estos archivos: debian-binary control.tar.gzy data.tar.gz.

Finalmente necesitas un arpaquete para crear el archivo .deb:ar -r xxx.deb debian-binary control.tar.gz data.tar.gz

Gigamegs
fuente
1
Sobre ar -r xxx.deb debian-binary control.tar.gz data.tar.gzesto podría valer la pena enfatizar que el orden es importante: el control debe venir antes que los datos.
Hibou57
@Bytemain, la respuesta más votada se ve parcialmente basada en su texto, pero le agrega detalles y es más fácil de leer. la secuencia que podemos copiar / pegar lo hace particularmente más atractivo.
mariotomo
3

Hago muchos paquetes, y hacer uno completo no es un asunto trivial. En una nota positiva, los archivos y las secuencias de comandos son mucho menos trabajo. Puede crear dicho paquete, de manera muy simple, con una herramienta conocida como debreate .

Debreate es una GUI realmente simple, solo para crear paquetes DEB simples. Puede especificar qué archivos, a dónde van y si / qué debe ejecutarse en la publicación / preinstalación / desinstalación. Solía ​​hacer todos mis paquetes de la manera estándar, pero después de comenzar a usar esta herramienta, solo regresaré cuando sea necesario.

JM Becker
fuente
1

Me encontré con esto con Zimbra 7 en Debian usando sus paquetes de Ubuntu. (Soy terco, me gusta Debian> bUbuntu a pesar de que Zimbra lo lanzó solo para Ubuntu). No estoy seguro de cómo trabajé antes, ¡estoy seguro de que no tuve que hacer esto cuando instalé esto anteriormente!

mkdir new
for i in *.deb
 do echo `date`: working on $i
 ar x $i
 cd control
 rm * 2> /dev/null
 tar -xzpvf ../control.tar.gz
 tr "_" "-" < control > control2
 mv -v control2 control
 tar -czpvf ../control.tar.gz .
 cd ..
 ar r new/$i debian-binary control.tar.gz data.tar.gz
done
rm -rf debian-binary control.tar.gz data.tar.gz control

Todos sus nuevos archivos .deb estarán en new/.

Nota : esto estaba en squeeze - dpkg en wheezy tiene --force-bad-version ahora.

matemáticas
fuente
1

Para la creación rápida de paquetes, puede usar el programa checkinstall. Realiza una instalación del programa, observa los cambios y crea un paquete deb o rpm.

indefinido
fuente
Esto suena como una gran opción para rastrear paquetes que debe instalar desde la fuente. ¿Puedes ofrecer más detalles? Por ejemplo, en el transcurso de la instalación, puede cambiar enlaces simbólicos, eliminar archivos, editar archivos de configuración, agregar demonios, etc. ¿en qué medida checkinstall rastrea y deshace estos cambios? ¿Puedes modificar fácilmente su salida para agregar scripts prerm y postrm?
AatG
mira wiki.debian.org/CheckInstall Si quieres cambiar las cosas durante la instalación, la forma más fácil es modificar Makefile para cambiar la sección de instalación. prerm / postrm: no encontré la forma de modificarlo. Es solo para pequeños programas que permiten una desinstalación simple.
indefinido
-4
$ apt-get install build-essential dh-make debhelper devscripts
$ wget http://nmap.org/dist/nmap-LAST.tar.bz2
$ tar xf nmap-LAST.tar.bz2
$ cd nmap-LAST
$ dh_make -s -e [email protected] -f ../nmap-LAST.tar.bz2
$ apt-get install libgtk2.0-dev flex bison libpcap0.8-dev \
  libpcre3-dev binutils-dev python-all-dev
$ dpkg-buildpackage
Killinks
fuente