Comment créer un package deb qui installe une série de fichiers

23

Je voudrais créer un tout nouveau package deb pour installer une série de fichiers. Si possible, je voudrais décompresser le dossier contenant ces fichiers dans le cadre de l'installation dans un emplacement de dossier connu. À défaut, certaines connaissances sur la façon de regrouper les dossiers et fichiers source seraient très utiles.

La question est - est-ce possible et si oui - comment?

Donnons un exemple:

~/mypluginfolder/contient les fichiers x, yun sous-dossier appelé abcet à l'intérieur d'un autre fichier appelé z.

Je veux tarer ce dossier: tar -cvf myfiles.tar ~/mypluginfolder

Je suppose que mon paquet Debian ressemblerait à

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

Est-il possible de décompresser en quelque sorte myfiles.tarun emplacement de dossier connu par exemple

/usr/share/rhythmbox/plugins/

Ainsi, le résultat final serait:

/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 - en supposant que le tableau de bord a besoin de la source, des conseils sont demandés pour savoir où déposer les dossiers et fichiers source dans la structure du paquet deb.


Cela deviendra éventuellement une série de packages PPA de rampe de lancement individuels.

Ce que je préfère (mais peut-être pas en mesure d'atteindre ...) est de garder mon packaging au minimum - créer une série de packages à partir d'un modèle et ajuster le strict minimum (changelog etc + la structure du fichier tar / fichier & dossier) .

liberté libre
la source
Euh ... pourquoi voulez-vous qu'un .deb fasse l' extraction du goudron ? Pourquoi ne pas simplement prendre le code source du tar et créer le deb à partir de zéro avec la source?
Thomas Ward
2
Une possibilité pourrait être que vous mouilliez l'archive tar d'un autre endroit, le style Adobe Flash.
2012
@jrg, qui télécharge le programme d'installation .bin, pas une archive tar. Le style d'emballage d'Adobe ne fournit pas la source (sa source fermée). Le concept, cependant, est toujours le même, téléchargez le code ailleurs et puis extrayez / installez (je suis nit = difficile ici: P)
Thomas Ward
@LordofTime Même différence. ; p
jrg

Réponses:

31

Ci-dessous, je suppose que la source est ouverte (par exemple les scripts Python) qui ne sont donc liés à aucune architecture (par exemple amd64 ou i386), donc "tous". Si vous avez une source C, vous devez l'utiliser Architecture: amd64 i386dans votre controlfichier source .


création d'un package prêt pour Launchpad

Cela deviendra éventuellement une série de packages PPA de rampe de lancement individuels.

Ce que je préfère (mais peut-être pas en mesure d'atteindre ...) est de garder mon packaging au minimum - créer une série de packages à partir d'un modèle et ajuster le strict minimum (changelog etc + le fichier tar).

Launchpad accepte uniquement les packages source, alors créez un rulesqui installe les fichiers aux bons endroits. Pour plus de commodité, j'utiliserai debhelper . Le répertoire contenant vos fichiers devrait ressembler à:

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

Un debian/copyrightfichier peut également être utile pour informer les utilisateurs des licences associées au package. Je ne pense pas que vous ayez besoin d'un postinstscript car il vous suffit d'extraire certains fichiers. compatdevrait contenir le niveau de compatibilité de debhelper, disons "8". (veuillez vous référer à la page de manuel de debhelper pour plus de détails)

Le changelogfichier peut être édité avec la dchcommande, disponible dans le devscriptspackage. Le rules(en utilisant debhelper) doit contenir:

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

Rendez-le exécutable en utilisant chmod 755 debian/rules. Un paquet source peut être construit en utilisant debuild -S. Assurez-vous d'être dans un répertoire nommé <package-name>-<version>. Plus d'informations sur le override_comportement et la dhcommande peuvent être trouvées sur sa page de manuel .

Le guide des nouveaux responsables Debian m'a été très utile pour comprendre cela, c'est une lecture recommandée. Des exemples d'emballage peuvent être trouvés sur https://github.com/Bumblebee-Project/bumblebee-ppa .


création d'un package à partir d'une arborescence de fichiers existante

dpkg-deb -bpeut être utilisé pour créer des tarballs à partir d'une arborescence de fichiers existante. Tout d'abord, commencez par créer un répertoire qui doit être nommé d'après votre package. Je suppose que vous voulez le nommer mypluginet le mettre /usr/share/rhythmbox/plugins/mypluginfolder. De plus, créez le DEBIANrépertoire (en majuscules!) Pour stocker les informations sur le package:

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

Copiez sur vos fichiers:

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

Ensuite, vous aurez besoin d'un soi-disant fichier de contrôle situé dans myplugin/DEBIAN/controllequel décrit le package. Le contenu d'un tel fichier est mis ci-dessous:

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.

Maintenant, vous pouvez éventuellement vérifier le contenu de votre package. La commande suivante répertorie le contenu des entrées de fichier et de répertoire de myplugin:

find myplugin -ls

Si vous êtes satisfait, construisez le package dans le répertoire courant:

dpkg-deb -b myplugin .

Un nouveau fichier apparaîtra, nommé comme <package>_<version>_<architecture>.debcelui de cet exemple myplugin_1.0-1_all.deb. Vous pouvez utiliser le lessprogramme pour consulter le fichier. Par exemple less myplugin_1.0-1_all.deb,.

Lekensteyn
la source
3
+1 génie absolu - Je m'incline devant vous, monsieur. Merci!
fossfreedom
Merci pour cette grande aide! J'ai eu quelques problèmes avec le fichier de contrôle cependant, au final cela a fonctionné, mais ne me demandez pas comment;)
Gerhard Burger