Une erreur à corriger, une suggestion à faire, une contribution à apporter ?
N'hésitez-plus ! Just write it!
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 :
-
-
5.2 Paramétrage des outils Debian
apt-get
-
Utiliser un autre apt.conf
| apt-get |
--config-file autre-apt.conf |
- Utiliser un autre sources.list (!!pas d'espace entre les deux-points)
| apt-get |
-o Dir::Etc::SourceList=/home/phil/sources.list |
- Augmenter la taille maximale du cache : dans
/etc/apt/apt.conf
placer la ligne
APT::Cache-Limit "42123456";
- "Verrouiller" l'utilisation d'une distribution : dans
/etc/apt/apt.conf
placer la ligne
APT::Default-Release "stable";
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 :
-
utiliser la commande
- utiliser le mode spécialisé d'Emacs dénommé
debview
- 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 :
-
Les options de compilation des paquets de Debian ne vous
conviennent pas.
- 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 :
-
récupération des fichiers nécessaires par télécharegemnt du
"paquet source" correspondant;
- compilation des sources, ce qui crée un paquet Debian ;
- 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 :
et apt
se charge de tout :
-
localiser les fichiers,
- les télécharger,
- et les décompacter!
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 :
ou
À la main
-
./configure
(la plupart des programmes
utilisent autoconf/autmake/configure aujourd'hui),
- ./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...
-
-
- 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.
- vérification de l'ensemble des paquets.
À 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 :
5.8 Construire un mirroir local
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
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, ...