Monthly Archives: January 2012

Portage internals

Maintenant que nous savons ce qu’est Portage, comprenons simplement comment il fonctionne. Que se passe-t’il lorsque l’on veut installer un package, et d’ailleurs ça ressemble à quoi un package sous Gentoo ?

Les ebuilds

Les packages disponibles dans l’arbre portage sont représentés par des fichiers appelés ebuilds. Les ebuilds contiennent toutes les informations nécessaires à la manipulation du package en question par portage (où télécharger les sources, quelle licence protège le logiciel, quelle est l’URL du projet, etc…).

Pour toute action vis à vis d’un package, portage se base sur les informations des ebuilds correspondants. Je dis des ebuilds car un ebuild contient aussi la version du package qu’il représente. Il y a donc autant de fichiers ebuild que de versions disponibles d’un  package. Prenons l’exemple du package www-client/firefox :

$ ls /usr/portage/www-client/firefox

firefox-3.6.20.ebuild
firefox-3.6.22.ebuild
firefox-8.0.ebuild
firefox-9.0.ebuild

Les versions 3.6.20, 3.6.22, 8.0 et 9.0 sont donc disponibles sur portage. Si nous voulions des informations supplémentaires ou installer une de ces versions de firefox, portage n’aurait qu’à exécuter les instructions contenues dans le fichier ebuild correspondant, et voilà !

Quand Mozilla sortira firefox 10, un développeur ou contributeur Gentoo devra créer l’ebuild pour cette version afin qu’il soit disponible dans portage, il est donc crucial de tenir sa liste d’ebuilds à jour sur son système.

Synchroniser portage

Mettre à jour portage, c’est donc mettre à jour la liste des ebuilds disponibles sur son système !

# emerge --sync

Le fameux sync télécharge les nouveaux ebuilds et supprime les obsolètes pour nous, c’est grâce à cela que nous disposerons du nouveau firefox quand il sortira, et il en va bien sûr de même pour tous les packages.

Les développeurs et contributeurs Gentoo tiennent ensemble à jour un arbre portage commun qui est téléchargé et répliqué par des serveurs qu’on appelle mirrors (le terme mirroir signifie qu’ils contiennent une copie exacte de l’arbre de développement). Tous les utilisateurs répliquent à leur tour leur arbre portage local (par défaut dans /usr/portage/) en se connectant sur un de ces serveurs mirrors lors du sync.

A l’heure où j’écris ces lignes, le portage tree contient 15459 packages représentant 29931 ebuilds !

Portage basics

Les distributions Linux disposent toutes de ce qu’on appelle un gestionnaire de paquet dit package management system ou plus simplement package manager.

  • Un package manager est un ensemble de programmes et d’outils permettant l’automatisation de l’installation / mise à jour / configuration / désinstallation de logiciels sur un système.

Sous Gentoo Linux, le gestionnaire de paquet s’appelle portage. Il permet de manipuler les packages disponible sur notre système Gentoo.

  • Un package représente un logiciel disponible à travers le package manager. Selon les distributions il peut prendre différentes formes comme par exemple une archive compressée.

Portage

Portage est écrit en python et en bash. C’est sans conteste l’un des package manager les plus flexibles et performants car il offre des possibilités de personnalisation très fines des packages que l’on souhaite installer sur son système.

La liste des packages disponibles à l’installation est organisée dans une arborescence de dossiers, c’est ce qu’on appelle le portage tree. Le nom “arbre portage” fait référence à l’arborescence organisée par catégorie des packages. Cette arborescence est stockée par défaut dans le dossier /usr/portage/ dont voici un exemple :

/usr/portage/www-apache
/usr/portage/www-apps
/usr/portage/www-client
/usr/portage/www-misc

Dans chaque catégorie, on retrouve un dossier par package disponible :

/usr/portage/www-client/chromium
/usr/portage/www-client/firefox
/usr/portage/www-client/opera

On voit que firefox et opera font partie de la catégorie www-client, leur nom complet de package sous Gentoo est :

  • www-client/firefox
  • www-client/opera

Bien sûr, on pourra aussi les appeler par leur petit nom mais il est important de noter qu’il est possible que deux packages aient le même nom s’ils font partie d’une arborescence différente. Mieux vaut donc toujours les appeler par leur nom complet.

Les commandes

Toutes les commandes suivantes font partie de portage et permettent de le manipuler. La plus connue est sans aucun doute emerge.

/usr/bin/ebuild
/usr/bin/egencache
/usr/bin/emerge
/usr/bin/portageq
/usr/bin/quickpkg
/usr/bin/repoman

/usr/sbin/archive-conf
/usr/sbin/dispatch-conf
/usr/sbin/emaint
/usr/sbin/emerge-webrsync
/usr/sbin/env-update
/usr/sbin/etc-update
/usr/sbin/fixpackages
/usr/sbin/regenworld
/usr/sbin/update-env
/usr/sbin/update-etc

Dans un prochain post, je parlerai de l’utilisation des principales commandes de portage et de leur configuration.