Extraction de paquets « .deb », « .rpm », « .txz », etc.

Comment extraire le contenu d'un paquet de ma distribution ?

Les paquets des distributions sont généralement des archives dont le format dépend de la distribution. Ils contiennent les binaires et librairies/bibliothèques des différents logiciels dans leur arborescence finale plus des fichiers définissants ce qui doit être fait avant et après l’installation des paquets, et éventuellement des informations tel que la version du logiciel, ses dépendances, etc. Les binaires sont le résultat de la compilation des différents logiciels.

Les « .deb » pour Debian, Ubuntu et leurs dérivés

Les paquets Debian ce décompose en 2 archives « tar » compressées au format « gz » plus un fichier renseignant la version du packaging Debian (2.0 pour le moment) regroupés dans une archive « ar ». L’extraction ce déroule donc en 2 temps :

  • extraction des données de l’archive « ar » ;
  • décompression du « tar.gz » contenant les binaires (« data.tar.gz »).

Ce qui donne :

fhh@mafalda ~/tmp $ mkdir deb
fhh@mafalda ~/tmp $ cd deb/
fhh@mafalda ~/tmp/deb $ ar xv ../dovecot-common_1.0.15-2.3+lenny1_amd64.deb 
x - debian-binary
x - control.tar.gz
x - data.tar.gz
fhh@mafalda ~/tmp/deb $ tar xvf data.tar.gz 
./
./etc/
./etc/init.d/
...

L’archive compressée « control.tar.gz » contiens les scripts et actions a exécuter par le système lors de l’installation du paquet ainsi que sa signature :

fhh@mafalda ~/tmp/deb $ tar xvf control.tar.gz 
./
./preinst
./prerm
./conffiles
./postrm
./postinst
./control
./md5sums

Les « .rpm » pour RedHat, CentOS, Mandriva, Fedora, et dérivé

Le format de paquets RPMs ou « RedHat Package Manager » à été créé par RedHat pour la distributions de binaires. Pour simplifier disons que les informations concernant le paquet, ses dépendances, sa signature et les actions à effectuer lors de l’installation sont stockés sous forme binaire dans le paquet avec les binaires de l’application compressées au format cpio.

L’extraction des binaires nécessite l’utilisation d’un utilitaire du type « rpm2cpio » permettant de récupérer l’archive « cpio ». Nous obtenons donc pour l’extraction :

fhh@mafalda ~/tmp $ mkdir rpm
fhh@mafalda ~/tmp $ cd !$
cd rpm
fhh@mafalda ~/tmp/rpm $ rpm2cpio ../dovecot-1.2.11-3.fc13.x86_64.rpm | cpio -ivd
./etc/dovecot.conf
./etc/pam.d/dovecot
...

où les options de « cpio » choisie donnent :

  • « i » pour « extract » (extraire) ;
  • « v » pour « verbose » (affichage de ce qui est extrait) ;
  • « d » pour la création des répertoires nécessaires.

Le « rpm » extrait est issu de Fedora, mais la méthode s’applique sans distinction à tous les RPMs (exemple pour CentOS) :

fhh@mafalda ~/tmp $ mkdir rpm.centOS
fhh@mafalda ~/tmp $ cd rpm.centOS/
fhh@mafalda ~/tmp/rpm.centOS $ rpm2cpio ../dovecot-1.0.7-7.el5.x86_64.rpm | cpio -ivd
./etc/dovecot.conf
./etc/pam.d/dovecot
...

Les « .tgz » et « .txz » de Slackware et de ses dérivés

Les paquets Slackware sont des archives compressées aux formats « tar gz » ou « tar XZeven ». C’est donc « tar » qui vous offrira la décompression de ces archives :

fhh@mafalda ~/tmp $ mkdir txz
fhh@mafalda ~/tmp $ cd !$
cd txz
fhh@mafalda ~/tmp/txz $ tar xvf ../dovecot-1.2.10-i486-1sl.txz
tar: Taille de l'enregistrement = 16 blocs
./
usr/
...
install/
install/slack-desc
install/doinst.sh
install/slack-required

NOTE : Il peut arriver, en fonction de la version de vos outils, que l’extraction de ses archives vous soient refusée :

fhh@mafalda ~/tmp/txz $ tar xvf ../dovecot-1.2.10-i486-1sl.txz
tar: Ceci ne ressemble pas à une archive de type « tar »
tar: On saute à l'en-tête suivant
tar: Arrêt avec code d'échec à cause des erreurs précédentes

ou :

fhh@mafalda ~/tmp/txz $  tar xvf dovecot-1.2.10-i486-1sl.txz 
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors

dans ce cas renommez le paquet en utilisant l’option pleinement qualifiée de l’extension. « txz » Devient alors « tar.xz », « tgz » devient « tar.gz » tous comme « tbz2 » deviendrait « tar.bz2 » :

fhh@mafalda ~/tmp/txz $ cp ../dovecot-1.2.10-i486-1sl.txz ../dovecot-1.2.10-i486-1sl.tar.xz
fhh@mafalda ~/tmp/txz $ tar xvf ../dovecot-1.2.10-i486-1sl.tar.xz
tar: Taille de l'enregistrement = 16 blocs
...

ou, beaucoup plus proprement, précisez le format d’extraction à « tar » (« z » pour gz, « j » pour bzip2, et « J » pour xz) :

fhh@mafalda ~/tmp/txz $ tar xJvf ../dovecot-1.2.10-i486-1sl.txz
tar: Taille de l'enregistrement = 16 blocs
...

Le répertoire « install » de l’archive contiens les différentes informations sur le paquet et celles nécessaires à son installation :

  • slack-desc, description du paquet ;
  • doinst.sh, script d’installation ;
  • slack-required, liste les dépendances du paquet.

Les « .pkg.tar.xz » d’Archlinux

Tous comme les paquets Slackware, les « .pkg.tar.xz » sont des archives compressées au format XZeven (successeur de « lzma ») plus performant que gz (jusqu’à 4 fois plus performant). L’extraction d’une telle archive est des plus classique, elle s’effectue par « invocation » de « tar » :

fhh@mafalda ~/tmp $ mkdir pkg.tar.xz
fhh@mafalda ~/tmp $ cd !$
cd pkg.tar.xz
fhh@mafalda ~/tmp/pkg.tar.xz $ tar xvf ../dovecot-2.0.0-1-x86_64.pkg.tar.xz
tar: Taille de l'enregistrement = 16 blocs
.PKGINFO
.INSTALL
etc/
...

« .PKGINFO » Contient les informations sur le paquet (dépendances, version, etc.) tandis que « .INSTALL » définit les actions a effectuer avant et après l’installation du paquet.

Les « .ebuilds » de Gentoo et de ses dérivés

Les « ebuilds » NE SONT PAS DES PAQUETS ! Ce sont des fichiers texte permettant à « emerge » (le gestionnaire de logiciel de Gentoo) de télécharger les sources et de les compiler en utilisant les options définie par l’administrateur. La lecture de l’un de ces fichiers depuis votre arborescence portage ne pose pas de réelle difficulté.

Les ipk d’OpenWRT, Openmoko, etc.

Une nouvelle fois nous retrouvons une archive « tar.gz » pour les paquets « .ipk ». Comme pour les paquets Debian, ils contiennent des « tar.gz » séparant les données d’installation (control.tar.gz) des binaires (data.tar.gz) (voir la partie concernant les « .deb » ci dessus) :

fhh@mafalda ~/tmp $ mkdir ipk
fhh@mafalda ~/tmp $ cd ipk/
fhh@mafalda ~/tmp/ipk $ tar xzvf ../dovecot_1.2.10-2_brcm47xx.ipk
./debian-binary
./data.tar.gz
./control.tar.gz
fhh@mafalda ~/tmp/ipk $ tar xvf data.tar.gz # donne les binaires...
./
usr/
...
fhh@mafalda ~/tmp/ipk $ tar xvf control.tar.gz # donne les informations
./
./postinst
./conffiles
./control

L’archive compressée « control.tar.gz » contient le script des actions a effectuer dans « postinst », la liste des fichiers de configuration du binaire dans « conffiles » et enfin les informations sur le paquet dans « control ».

Un paquet « .ipk » peut être assimilé à un paquet « .deb » dont on aurrai changé le format d’archivage…

Conclusion

Il existe une multitude de format de paquets. Ce post ne ce veux pas exhaustif, cependant, n’hésitez pas a signaler le pakaging utilisé par votre distribution s’il a été oublié.

2 réflexions au sujet de « Extraction de paquets « .deb », « .rpm », « .txz », etc. »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *