Login Logout

HowtoDebian/Packages

Cette page a été importée automatiquement de notre ancien wiki mais n’a pas encore été révisée.

Howto Debian packages

Gestion des packages

Voir les évolutions de version proposées :

# aptitude upgrade -sV

Packages held

# aptitude search ~ahold

Unattended upgrades / Auto upgrades

Sur un serveur non critique (backup, dev, …) on peut vouloir faire les mises à jour automatiquement.

Pour cela il faut installer le paquet unattended-upgrades et faire « dpkg-reconfigure -plow unattended-upgrades ».

La configuration se trouve dans /etc/apt/apt.conf.d/50unattended-upgrades. On peut choisir où envoyer le mail de rapport ou encore si on doit redémarrer la machine automatiquement si nécessaire, etc.

Créer un paquet Debian

Génération de l’arborescence debian/

Cette étape consiste à créer une arborescence qui constituera le paquet Debian. On peut l’automatiser simplement avec la commande dh_make :

cd futur-paquet-0.1
dh_make

NOTE : le nom du répertoire doit obligatoirement être de la forme nom-version (nom peut contenir des minuscules, chiffres et tirets).

En utilisant dh_make sans options, il essayera de deviner les informations dont il a besoin. On peut forcer celles ci en les spécifiant sur la ligne de commande. Pour les plus utiles :

  • -c : la licence du programme ;
  • -e : l’adresse email du responsable du paquet (vous) ;
  • -p : nom du paquet, si le nom du répertoire courant n’est pas sous la forme standard ;
  • -f : chemin vers l’archive contenant les sources. Si elle n’existe pas, utilisez l’option –createorig.

Le type de paquet vous sera demandé lors de l’exécution.

Édition de certains fichiers importants

dh_make a créé de nombreux fichiers dans le répertoire debian/. Certains sont indispensables, d’autres moins. Par exemple (si vous ne vous en servez pas) vous pouvez supprimer tous les *.ex, des templates servant d’exemple.

rm *.ex
rm *.EX

Voici une rapide explication à propos des fichiers importants :

  • le fichier control : il décrit de manière générale le paquet. Plusieurs champs sont à compléter, notamment :
  • Section : voir la liste ici ;
  • Homepage : le site du programme ;
  • Architecture : any par défaut, ce qui va générer un paquet par architecture. Dans le cas d’un script shell par exemple, on préférera all (un seul paquet est généré car compatible avec toutes les architectures) ;
  • Depends : indiquez ici le nom et la version des paquets dont dépends éventuellement le programme (en général des bibliothèques) ;
  • Description : le champ doit contenir une description courte, suivi d’une description longue (sur la ligne suivante, indentée d’un espace).
  • le fichier changelog : il décrit les changements qui ont été fait sur le programme. À priori, il est déjà complété avec un « Initial release ». Supprimez juste le « (Closes: #nnnn) » puisque c’est la première version.
  • le fichier copyright : il contient la licence sous laquelle est distribué le programme. dh_make l’a partiellement remplit, il vous reste à indiquer le(s) développeur(s) du programme ainsi que le texte de la licence.
  • le fichier rules : c’est en fait un fichier Makefile, qui décrit les règles de construction et d’installation du paquet. Dans le cas d’un script unique, et qui ne nécessite pas de configuration/compilation :

C’est le célèbre ./debian/rules qui gère donc la compilation et la copie des fichiers dans la future arborescence. Si l’on simplement copier un script, on peut par exemple rajouter ceci à la fin de la cible install :

    install -d -m 0755 -o root -g root $(CURDIR)/debian/futur-paquet
    install    -m 0755 -o root -g root nom-du-script $(CURDIR)/debian/futur-paquet

Construction du paquet

Maintenant nous pouvons construire le paquet à l’aide de la commande :

$ debuild -us -uc

Si aucune erreur n’est apparue, votre paquet est prêt à être installé et/ou poussé sur un dépôt non officiel.

Créer un paquet pour un module PHP Pear ou Pecl

La commande dh-make-pecl (ou dh-make-pear) permet de télécharger l’archive depuis les dépôts PHP puis de créer l’arborescence du paquet Debian en pré remplissant certains fichiers (notamment le debian/rules) :

dh-make-pecl --maintainer "John Doe <jdoe@example.com>" --only 5 pecl-package

Manipulation d’un paquet (binaire)

Pour certaines (mauvaises) raisons, on peut être amené à vouloir modifier un paquet binaire… notamment un maintainer script par exemple.

$ ar x foo.deb
$ ls
control.tar.gz data.tar.gz debian-binary
$ tar xf control.tar.gz
$ vim preinst
<hack...hack...hack>
$ tar cvf control.tar.gz md5sums postrm control prerm preinst postinst
$ ar r foo.deb control.tar.gz

Et voilà, on a modifié le preinst du paquet foo.deb.

FAQ

Erreur lintian : mkdir -p failed at /usr/share/perl5/Lintian/Unpacker.pm line 224

mkdir -p /tmp/temp-lintian-lab-6xngeaELBD/pool/d/devscripts/devscripts_2.13.8_amd64_binary failed at  /usr/share/perl5/Lintian/Unpacker.pm line 224.

C’est probablement que votre système n’a pas assez de mémoire. Avec un strace lintian vous obtiendrez peut-être :

clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f09117029d0) = -1 ENOMEM (Cannot allocate memory)

Savoir si un package est installé

# apt-cache search php | grep apc
php-apc - APC User Cache for PHP 5 (transitional package)
php5-apcu - APC User Cache for PHP 5
# dpkg -l php-apc | grep ^ii

Savoir la hiérarchie des fichiers créés suite installation d’un package

# dpkg -L php-apc
/.
/usr
/usr/lib
/usr/lib/php5
/usr/lib/php5/20090626
...

hold / unhold

# apt-mark hold youtube-dl
youtube-dl passé en figé (« hold »).

# apt-mark unhold youtube-dl
Annulation de l'état figé pour youtube-dl.