Précédent Remonter Suivant
Une erreur à corriger, une suggestion à faire, une contribution à apporter ? N'hésitez-plus ! Just write it!

Chapitre 5  Gestion avancée

5.1  Construire un paquet Debian

Cette question ne sera pas développée dans ce document, essentiellement parce que d'autres, plus complets, y sont consacrés. Par exemple :

  1. Guide des nouveaux responsables Debian
    http://www.debian.org/doc/devel-manuals#maint-guide

  2. Guide de référence du responsable Debian
    http://www.debian.org/doc/devel-manuals#devref

5.2  Paramétrage des outils Debian

apt-get

5.3  Inspecter le contenu d'un paquet

Pour accéder/visualiser le contenu d'un paquet (.deb) en laissant le fichier intact, plusieurs solutions :
  1. utiliser la commande
    dpkg-deb --extract
  2. utiliser le mode spécialisé d'Emacs dénommé debview
  3. utiliser l'outils «couteau suisse» mc

5.4  Modifier les scripts d'installation

Modifier les scripts d'installation avant d'installer un paquet pkg.deb .
Se placer dans un répertoire de travail mkdir tmp
Extraire le contenu du paquet dans le-dit répertoire dpkg-deb -x pkg.deb tmp
Extraire les fichiers de contrôle dpkg-deb --control pkg.deb tmp/DEBIAN
Les éditer (effectuer les modifications souhaitées) vi debian/*
Refermer le paquet dpkg-deb -b tmp

5.5  Recompilation de paquet

(Frédéric Petit)

Plusieurs raisons peuvent conduire à vouloir recompiler un paquet Debian :
  1. Les options de compilation des paquets de Debian ne vous conviennent pas.

  2. Recompiler les sources avec votre propre processeur peut rendre l'exécution du programme plus performante (une personne de la liste m'a parlé de progs pour le « multimédia », genre optimisation pour un Pentium MMX, mais là, je n'ai pas d'exemple).
La recompilation d'un paquet Debian se décompose en trois étapes :
  1. récupération des fichiers nécessaires par télécharegemnt du "paquet source" correspondant;
  2. compilation des sources, ce qui crée un paquet Debian ;
  3. installation de ce paquet, c'est-à-dire la procédure normale d'installation des paquets Debian.

5.5.1  Récupération des sources

Il y a deux méthodes : l'ancienne, qui consiste à télécharger les fichiers à la main, et de les décompresser de la même manière. La nouvelle consiste à demander à apt de le faire.

Méthode Debian
Si vous préférez utiliser apt , il suffit (en supposant que vous avez des lignes commençant par deb-src dans votre sources.list ) de taper :
apt-get source <paquet>

et
apt se charge de tout : L'option --download-only. permet de ne pas les décompacter automatiquement.

Méthode artisanale
Pour suivre l'ancienne méthode, il suffit d'aller sur votre moteur de recherche préféré pour les paquets Debian, et de taper le nom du paquet désiré. Le serveur vous propose alors évidemment de rapatrier le paquet pré-compilé, mais, ici, ce sont les sources qui nous intéressent. Et il y a trois fichiers à récupérer :
paquet.orig.tar.gz Les sources originels
paquet.dsc Fichier descriptif du paquet Debian
paquet.diff.gz Modifications apportées aux sources pour faire le paquet

sachant que le nom du paquet des deux premiers fichiers contient non seulement la version du programme, évidemment, mais aussi son numéro de version pour Debian.

Une fois rapatriés, vous les décompressez, par exemple dans
/usr/src . Ne faites pas la décompression en tant que super-utilisateur, mais rajoutez plutôt votre nom d'utilisateur au groupe src (voir `Questions sur les permissions' ?? ). Ainsi vous pourrez y décompresser les sources et faire ce que vous voulez, sans grand risque.

Enfin, pour décompresser les paquets, il faut utiliser la commande
dpkg-source(1), avec l'option '-x' pour les extraire. Cette commande a pour résultat de créer un répertoire, du nom du paquet en question.

Ce répertoire est tout à fait classique et semblable à celui que l'on aurait obtenu à partir d'un « tarball », à ceci près que dans notre cas, on y trouve un répertoire debian/
.

5.5.2  Paramétrage du paquet

Avant de lancer la (re)compilation du paquet, vous avez l'opportunité d'en modifier les principaux paramètres.

5.5.3  Compilation du paquet

Préambule

Lors des étapes de recompilation de paquet, le système vérifie que vous avez les droits de root . Or normalement, vous ne l'êtes pas. Comment contourner ce problème? En utilisant la commande fakeroot(1). Pour cela, il suffit juste de faire précéder la commande de compilation par l'appel de fakeroot, par exemple :
fakeroot ./debian/rules binary

ou
fakeroot dpkg-buildpackage

À la main

  1. ./configure
    (la plupart des programmes utilisent autoconf/autmake/configure aujourd'hui),
  2. ./debian/rules binary .

Note les options de compilation du paquet (i.e options du "./configure") sont définies (voire redéfinies) dans le fichier debian/rules
(fichier makefile qui réalise la construction du paquet)



Semi-automatique

La seconde méthode est d'utiliser une commande toute faite pour cela, à savoir dpkg-buildpackage(1), sans argument.

Vous obtenez ainsi un paquet nom_pack_arch.deb, où arch représente le type de processeur que vous avez (i386 pour les PC Intel), qui se trouve dans le répertoire /usr/src
, donc en dehors du répertoire de compilation.

Automatique

La troisième méthode est de demander à apt de tout faire : l'animal, non content de savoir télécharger les sources et de décompresser l'archive, sait aussi les recompiler à la volée. Si vous précisez l'option ---compile (ou -b) sur la ligne qui demande de télécharger les sources, apt lance automatiquement dpkg-buildpackage...
  1. apt-get build-dep le-package
  2. apt-get source -b le-package
  3. installation (voir 3.3.3))

5.5.4  Rétroportage/Backport

Sachant que la majorité des dépendances caractérisant un paquet sont calculées lors de sa compilation, la recompilation permet d'obtenir un paquet parfaitement adapté à la machine (matériel, système, libraires) utilisée pour ce faire.

Une application importante de ce principe consiste à recompiler sur une machine «stable» des paquets (dont les sources sont) pris dans la distribution «unstable». Cette technique, le rétroportage, présente l'avantage indéniable de réduire de manière importante le nombre de paquets dont la mise à jour est induite par les dépendances spécifiées par «unstable».

Attention, l'objectif annexe du rétroportage étant de calculer les dépendances au plus juste, il faut veiller à utiliser avec modération les outils Debian (apt-get build-dep) car ceux-ci vont chercher à rétablir les dépendances initiales! En conséquence, un rétroportage «strict» peut nécessiter de procéder manuellement et par tatonnements...


5.6  Comparer la base des paquets et les fichiers installés?

Comme on l'a vu plus haut, il est facile de déterminer si un fichier appartient à un paquet et si oui lequel avec la commande dpkg -S toto. Mais comment déterminer sur une arborescence entière quels fichiers manquent et quels fichiers ne devraient pas être présents? La solution est l'utilisation de cruft .

cruft rapporte la différence entre la liste des fichiers qui devraient être installés selon la base et la liste de ceux réellement présents sur le disque. Il permet donc de faire du ménage ou de réinstaller des paquets détériorés.

5.7  Vérifier l'intégrité d'un paquet installé

Les paquets utilisent maintenant des signatures MD5. On peut donc utiliser ces signatures pour vérifier que les fichiers installés sur le disque correspondent bien à ceux contenus dans le paquet. Pour ce faire, il suffit d'utiliser debsums . Voici quelques exemples d'utilisation :
  • vérification des fichiers du paquet apt .

    L'option -s
    (silent) signifie que seules les différences seront rapportées.
    debsums -s apt


  • vérification de l'ensemble des paquets.
    debsums -s
À l'heure où ces lignes sont écrites, tous les paquets ne contiennent pas encore de signature. Pour obtenir la liste des paquets non signés, utiliser :
debsums -l

5.8  Construire un mirroir local

  • Inspiré de Rémi Suinot
Par pure curiosité, et aussi parce que je ne trouve jamais les CDs d'installation de debian lorsque je veux installer un paquet, je me suis posé la question 'comment pourrais-je faire pour avoir toujours les paquets à portés de main...'. Et quasi immédiatement, m'est venu l'idée d'un mirroir ftp local, puisque j'ai de la place sur mon disque dur, et aussi car proftp tourne déjà sur mon serveur! Il ne restait plus qu'à concrétiser. Comme il m'est impossible de récupérer le contenu d'un mirroir (avec un simple modem... ), la seule solution a été de prendre le contenu des cd d'installation de woody (7 cd) et d'utiliser leur contenu.

Les images ISO de Woody utilisées ci-après sont (par exemple) ici :

ftp://ftp.crans.org/pub/Distribs-Linux/Debian/Debian-woody-iso/
Ces images doivent donc être transférées sur la machine qui fera office de serveur/mirror dans (par exmeple) /var/tmp.

Pour la version final du 'projet', je passerai par les cd, qu'un ami me gravera.

Il faut monter les images comme si c'était un système de fichier 'normal':

Modifier /etc/fstab
en conséquence :

# montage des images iso de debian woody:
# file system    mount point      type    options      dump    pass
/var/tmp/debian-30r0-i386-binary-1.iso    /var/cache/ftp/iso-1   \
auto  ro,user,noauto  0  0
/var/tmp/debian-30r0-i386-binary-2.iso    /var/cache/ftp/iso-2   \
auto  ro,user,noauto  0  0
/var/tmp/debian-30r0-i386-binary-3.iso    /var/cache/ftp/iso-3   \
auto  ro,user,noauto  0  0
/var/tmp/debian-30r0-i386-binary-4.iso    /var/cache/ftp/iso-4   \
auto  ro,user,noauto  0  0
/var/tmp/debian-30r0-i386-binary-5.iso    /var/cache/ftp/iso-5   \
auto  ro,user,noauto  0  0
/var/tmp/debian-30r0-i386-binary-6.iso    /var/cache/ftp/iso-6   \
auto  ro,user,noauto  0  0
/var/tmp/debian-30r0-i386-binary-1_NONUS.iso
# /var/cache/ftp/iso-nonus   \
auto   ro,user,noauto  0  0

puis je monte avec une boucle local, l'image iso qui se trouve dans /var/tmp/, dans /var/cache/ftp/iso-1 (pour le premièr cd). Comme je ne veux pas que les images aient les autorisation root, j'utilise les options uid et gid de la commande mount:

sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-1
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-2
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-3
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-4
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-5
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-6
sudo mount -o loop -o uid=1004 -o gid=1004 /var/cache/ftp/iso-nonus
À présent cela fonctionne, ces commandes (sans le 'sudo' du début) sont placées dans le script de démarrage /etc/init.d/mountall.sh qui monte tous les systèmes de fichier pour que toutes les images ISO soit montées dès la mise en route du serveur.

Les lignes pour /etc/apt/sources.list

# pour le cd binary-1
deb ftp://adresse.serveur/iso-1 woody main contrib
deb ftp://adresse.serveur/iso-1 woody/non-US main contrib

[...]

# pour le cd binary-6
deb ftp://adresse.serveur/iso-6 woody main contrib
deb ftp://adresse.serveur/iso-6 woody/non-US main contrib

# pour le cd binary-1_NONUS
deb ftp://adresse.serveur/iso-nonus woody main contrib
deb ftp://adresse.serveur/iso-nonus woody/non-US main contrib

apt-get update
doit donner une sortie de la forme :

Hit ftp://adresse.serveur woody/main Packages
Hit ftp://adresse.serveur woody/main Release
Hit ftp://adresse.serveur woody/contrib Packages
Hit ftp://adresse.serveur woody/contrib Release
.
.
Hit ftp://adresse.serveur woody/non-US/contrib Packages
Hit ftp://adresse.serveur woody/non-US/contrib Release
Reading Package Lists... Done
Building Dependency Tree... Done
Debriefing
«Ce fut moins compliqué que je ne le pensais. Ce qui m'a causé le plus de problème, c'est la configuration du serveur ftp, afin d'avoir un accès anonymous. Pour le reste, je me suis basé sur les messages d'erreurs d'apt, lorsqu'il n'arrivait pas à trouver un fichier, ainsi que sur les documents des CD d'installation. Une fois bien compris le principe, c'est très facile à utiliser».

5.8.1  Autres solutions

  • Utiliser un outil Debian spécifique : debmirror
Cet outil permet de construire et maintenir un miroir (même partiel) de distribution(s) Debian. Il permet de gérer une sélection arbitraire de :
distributions
stable, testing, unstable...
architectures
i386, sparc, alpha, ...
sections
main, contrib, non-free, ...

Précédent Remonter Suivant