Cómo crear un paquete deb que instale una serie de archivos

23

Me gustaría crear un nuevo paquete de Deb para instalar una serie de archivos. Si es posible, me gustaría descomprimir la carpeta que contiene estos archivos como parte de la instalación en una ubicación de carpeta conocida. De lo contrario, algunos conocimientos sobre cómo empaquetar las carpetas y archivos de origen serían muy útiles.

La pregunta es: ¿es esto posible? De ser así, ¿cómo?

Vamos a dar un ejemplo:

~/mypluginfolder/contiene los archivos x, yuna subcarpeta llamada abcy dentro de ese otro archivo llamado z.

Quiero tar esta carpeta: tar -cvf myfiles.tar ~/mypluginfolder

Supongo que mi paquete Debian se vería así

myfiles.tar.gz
myfiles+ppafoss_0.1-1/
   myfiles.tar
   DEBIAN
      changelog, compat, control, install, rules source

¿Es posible de alguna manera descomprimir myfiles.taren una ubicación de carpeta conocida, por ejemplo

/usr/share/rhythmbox/plugins/

Así, el resultado final sería:

/usr/share/rhythmbox/plugins/mypluginfolder
/usr/share/rhythmbox/plugins/mypluginfolder\x
/usr/share/rhythmbox/plugins/mypluginfolder\y
/usr/share/rhythmbox/plugins/mypluginfolder\abc\z

Si, suponiendo que launchpad necesita fuente, se solicita asesoramiento sobre dónde debo colocar las carpetas y archivos de origen en la estructura del paquete deb.


Esto eventualmente se convertirá en una serie de paquetes individuales PPA de launchpad.

Lo que prefiero (pero es posible que no pueda lograr ...) es mantener mi paquete al mínimo: crear una serie de paquetes a partir de una plantilla y ajustar el mínimo (registro de cambios, etc. + la estructura del archivo / archivo y carpeta tar) .

fossfreedom
fuente
Um ... ¿por qué quieres un .deb para hacer la extracción de alquitrán ? ¿Por qué no simplemente tomar el código fuente del tar y crear el deb desde cero con la fuente?
Thomas Ward
2
Una posibilidad podría ser que saques el tarball de otro lugar, estilo adobe-flash.
jrg
@jrg, que descarga el instalador .bin, no un tarball. adobe packaging style no proporciona la fuente (su fuente cerrada). Sin embargo, el concepto sigue siendo el mismo: descargue el código de otro lugar y luego extraiga / instale (estoy siendo nit = quisquilloso aquí: P)
Thomas Ward
@LordofTime La misma diferencia. ; p
jrg

Respuestas:

31

A continuación, supongo que la fuente está abierta (por ejemplo, scripts de Python) que, por lo tanto, no están vinculados a ninguna arquitectura (por ejemplo, amd64 o i386), por lo tanto, "todos". Si tiene alguna fuente C, debe usarla Architecture: amd64 i386en su controlarchivo fuente .


creando un paquete listo para Launchpad

Esto eventualmente se convertirá en una serie de paquetes individuales PPA de launchpad.

Lo que prefiero (pero es posible que no pueda lograr ...) es mantener mi empaque al mínimo: crear una serie de paquetes a partir de una plantilla y ajustar el mínimo (registro de cambios, etc. + el archivo tar).

Launchpad solo acepta paquetes fuente, así que cree uno rulesque instale los archivos en los lugares correctos. Por conveniencia, usaré debhelper . El directorio con sus archivos debería verse así:

debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...

Un debian/copyrightarchivo también puede ser útil para informar a los usuarios sobre las licencias asociadas con el paquete. No creo que necesites un postinstscript ya que solo necesitas extraer algunos archivos. compatdebe contener el nivel de compatibilidad de debhelper, diga "8". (consulte la página del manual de debhelper para obtener más detalles)

El changelogarchivo se puede editar con el dchcomando, disponible desde el devscriptspaquete. El rules(usando debhelper) debe contener:

#!/usr/bin/make -f
%:
    dh $@
override_dh_install:
    dh_install mypluginfolder/ /usr/share/rhythmbox/plugins

Hazlo ejecutable usando chmod 755 debian/rules. Se puede construir un paquete fuente usando debuild -S. Asegúrese de estar en un directorio llamado <package-name>-<version>. Puede encontrar más información sobre el override_comportamiento y el dhcomando en su página de manual .

La Guía para nuevos mantenedores de Debian fue muy valiosa para que entendiera esto, es una lectura recomendada. Puede encontrar ejemplos de empaques en https://github.com/Bumblebee-Project/bumblebee-ppa .


crear paquete desde el árbol de archivos existente

dpkg-deb -bse puede usar para crear tarballs a partir de un árbol de archivos existente. Primero, comience con la creación de un directorio que debe llamarse después de su paquete. Asumiré que quieres nombrarlo mypluginy ponerlo /usr/share/rhythmbox/plugins/mypluginfolder. Además, cree el DEBIANdirectorio (en mayúsculas) para almacenar la información del paquete:

mkdir -p myplugin/usr/share/rhythmbox/plugins/mypluginfolder
mkdir myplugin/DEBIAN

Copie sobre sus archivos:

cp -r ~/mypluginsfolder myplugin/usr/share/rhythmbox/plugins

A continuación, necesitará un llamado archivo de control ubicado en el myplugin/DEBIAN/controlque se describe el paquete. El contenido de dicho archivo se muestra a continuación:

Package: myplugin
Version: 1.0-1
Maintainer: You <[email protected]>
Architecture: all
Description: plugins for Rhythmbox
 Longer description here
 .
 As you can see, new paragraph are split by a single dot,
 and lines have to be indented by one space.

Ahora, opcionalmente, puede verificar el contenido de su paquete. El siguiente comando enumera el contenido de las entradas de archivo y directorio de myplugin:

find myplugin -ls

Si está satisfecho, cree el paquete en el directorio actual:

dpkg-deb -b myplugin .

Aparecerá un nuevo archivo, llamado como el <package>_<version>_<architecture>.debque está en este ejemplo myplugin_1.0-1_all.deb. Puede usar el lessprograma para echar un vistazo al archivo. Por ejemplo, less myplugin_1.0-1_all.deb.

Lekensteyn
fuente
3
+1 genio absoluto - Me inclino ante usted señor. ¡Gracias!
fossfreedom
Gracias por esta gran ayuda! Sin embargo, tuve algunos problemas con el archivo de control, al final funcionó, pero no me pregunten cómo;)
Gerhard Burger