web-dev-qa-db-fra.com

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

Je voudrais créer un nouveau paquet deb pour installer des séries de fichiers. Si possible, j'aimerais décompresser le dossier contenant ces fichiers dans le cadre de l'installation dans un emplacement de dossier connu. À défaut, il serait très utile de savoir comment conditionner les dossiers et les fichiers sources.

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

Donnons un exemple:

~/mypluginfolder/ contient les fichiers x, y, un sous-dossier appelé abc et à l'intérieur de celui-ci, 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 myfiles.tar dans un 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 - le tableau de bord a besoin d’être source, nous recherchons des endroits où déposer les dossiers et fichiers sources dans la structure du paquet deb.


Cela finira par devenir une série de packages PPA de tableau de bord individuels.

Ce que je préfère (mais que je ne serais peut-être pas capable de réaliser ...) est de garder mon emballage au minimum - créer une série de paquets à partir d'un modèle et ajuster le strict minimum (changelog etc + la structure du fichier tar/fichier et dossier) .

23
fossfreedom

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), d'où "tous". Si vous avez une source C, vous devez utiliser Architecture: AMD64 i386 dans votre fichier source controlname__.


créer un paquet prêt pour Launchpad

Cela finira par devenir une série de packages PPA de tableau de bord individuels.

Ce que je préfère (mais que je ne serais peut-être pas capable de réaliser ...) est de garder mon emballage au minimum - créer une série de paquets à partir d'un modèle et ajuster le minimum (fichier de modifications, etc. + le fichier tar).

Launchpad n'accepte que les packages source. Créez donc un rulesqui installe les fichiers aux emplacements appropriés. Pour plus de commodité, je vais utiliser debhelper . Le répertoire avec vos fichiers devrait ressembler à:

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

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

Le fichier changelogpeut être modifié à l'aide de la commande dchname__, disponible dans le package devscriptsname__. rules(utilisant debhelper) devrait 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 de vous trouver dans un répertoire nommé <package-name>-<version>. Vous trouverez plus d'informations sur le comportement override_ et la commande dhà la page page de manuel correspondante .

Le Guide du nouveau responsable Debian m'a été très utile pour comprendre ceci, il est recommandé de le lire. Des exemples d’emballages peuvent être trouvés sur https://github.com/Bumblebee-Project/bumblebee-ppa .


créer un paquet à partir d'une arborescence de fichiers existante

dpkg-deb -b peut être utilisé pour créer des archives à partir d'une arborescence de fichiers existante. Commencez par créer un répertoire qui doit être nommé d'après votre paquet. Je suppose que vous voulez le nommer mypluginet le mettre dans /usr/share/rhythmbox/plugins/mypluginfolder. En outre, créez le répertoire DEBIAN(majuscule!) Pour stocker les informations sur le package:

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

Copiez vos fichiers:

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

Ensuite, vous aurez besoin d’un fichier appelé control situé à myplugin/DEBIAN/control qui décrit le paquet. Le contenu d'un tel fichier est indiqué 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 paquet. La commande suivante répertorie le contenu des entrées de fichier et de répertoire de mypluginname__:

find myplugin -ls

Si vous êtes satisfait, construisez le paquet dans le répertoire en cours:

dpkg-deb -b myplugin .

Un nouveau fichier apparaîtra, nommé ainsi: <package>_<version>_<architecture>.deb qui est dans cet exemple myplugin_1.0-1_all.deb. Vous pouvez utiliser le programme lesspour jeter un coup d'œil dans le fichier. Par exemple, less myplugin_1.0-1_all.deb.

31
Lekensteyn