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.
@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).
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.
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-binarycontrol.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
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.
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.
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.
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.
Respuestas:
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-1
para su primer intento de empaquetar Myapp V4.2), y ejecútelodh_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 llamadodebian
, tanto algunos archivos obligatorios como plantillas para archivos opcionales. Es posible que deba modificar algunos de estos archivos:debian/rules
para 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 archivodebian/install
para especificar qué archivos deben instalarse y dónde.debian/copyright
para agregar información de licencia sobre su paquete e información sobre dónde obtener la última versión (si corresponde).debian/changelog
para eliminar la referencia a un ITP (eso solo es relevante si está trabajando para el proyecto Debian). Cambiar el nombredebian/postinst.ex
dedebian/postinst
y añadir sus comandos posteriores a la instalación allí. Si luego actualiza su paquete, ejecútelodebchange -i
para agregar una entrada de registro de cambios o edite el archivo en Emacs (con dpkg-dev-el instalado).Ejecute
dpkg-buildpackage -rfakeroot -us -uc
para compilar el.deb
paquete (elimínelo-us -uc
si 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-deb
para construir el paquete. En el directorio que contiene los datos a instalar, agregue un directorio llamadoDEBIAN
en el nivel superior, que contenga los archivos de control y las secuencias de comandos de mantenimiento.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 llamadoscontrol.tar.gz
(sin subdirectorios) y un archivo de texto llamadodebian-binary
y que contiene el texto2.0
.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 costadocontrol
.Convertir un paquete binario de un formato diferente
Si ya tiene un paquete binario de otra distribución, puede usar alien para convertirlo.
fuente
dch -i
.ar
haciendo quetar
no es?dh_make --createorig
usos, es necesarioexport DEBEMAIL="[email protected]"
yexport DEBFULLNAME="Firstname Lastname"
de antemano.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:
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.gz
ydata.tar.gz
.Finalmente necesitas un
ar
paquete para crear el archivo .deb:ar -r xxx.deb debian-binary control.tar.gz data.tar.gz
fuente
ar -r xxx.deb debian-binary control.tar.gz data.tar.gz
esto podría valer la pena enfatizar que el orden es importante: el control debe venir antes que los datos.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.
fuente
Consulte el Wiki de Debian sobre Empaquetado , tal vez
equivs
(ver enlace) ya satisfaga sus requisitos.La página de Wikipedia sobre el
deb
formato de archivo también incluye muchos enlaces útiles.fuente
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!
Todos sus nuevos archivos .deb estarán en
new/
.Nota : esto estaba en squeeze - dpkg en wheezy tiene --force-bad-version ahora.
fuente
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.
fuente
fuente