Salut les ruminants, et le bonjour à Larry.
Dans un précédent billet, j’avais présenté succintement Gentoo, et ses nombreuses qualités. Mais Gentoo n’est rien, sans son mythique gestionnaire de paquets, Portage.
Portage est le gestionnaire de paquets de Gentoo. Tout comme on a APT (Advanced Packaging Tool) pour debian and co, Yum (Yellow dog Updater Modified) pour Fedora, Pacman pour Archlinux, et bien d’autres encore.
Au lieu d’utiliser des fichiers binaires déjà compilés comme tous les autre gestionnaires, Portage est un arbre composé d’ebuilds, petits fichiers servant à compiler et installer les sources de tout de que vous voudrez mettre dans votre distribution.
La puissance de gentoo réside dans la compilation des sources, et c’est précisément la puissance de portage : Au lieu d’installer des paquets et leurs dépendances a posteriori, les dépendances entre paquets sont fixées avant la compilation. Le compilateur en tient donc compte, lors de la compilation, ce qui n’est pas possible avec des binaires.
Comme son nom ne l’indique absolument pas, la commande liée à portage (comme le apt-get pour apt) est… émerge, émerge est la commande par laquelle on met à jour la liste de sources, on compile et installe installe les mises à jour, les nouveaux paquets…
L’utilitaire émerge s’appuie pour choisir les sources et surtout lors de la compilation sur les choix de l’utilisateur (vous), par des variables d’environnement passées en paramètres. Et toute la subtilité réside dans le choix de celles-ci.
Les paramètres principaux sont les CFLAGS et les CXXFLAGS, qui servent à ajouter des paramètres dans la ligne de commande lors de l’appel du compilateur en C et en C++ respectivement.
Les autres paramètres, en non des moindres, sont les USE flags, paramètres lors de la compilation des programmes. Cela permet de choisir les options et à optimiser notre futur installateur, en indiquant quoi prendre en charge (interface graphique, supports matériels, etc). C’est dans le choix de ces USE flags que la puissance de Gentoo se révèle. Dans un binaire classique compilé pour toutes les machines, on va inclure un maximum d’options. Ici, on inclut uniquement celles que l’on veut, qui sont en général celles de notre système.
Après la compilation, l’installation sera aussi rapide, et en général plus rapide que pour un système classique de binaires précompilés, car le binaire compilé est plus léger (il comprend moins d’options).
Ces choix sont la puissance de gentoo et révèlent la faiblesse de l’utilisateur : On peut effectivement choisir d’inclure toutes les options, notre système fonctionnera, mais il sera comme un autre, aussi lourd. Et on aura perdu du temps à tout compiler.
Parce que c’est ici que le bât blesse :
Dans un système de binaires précompilés, on n’a pas à compiler ses paquets (C’est bête à dire, mais il faut le rappeler). Donc on a un gain de temps au moment de l’ajout d’un programme, vu qu’on ne fait qu’installer le binaire. Sous Gentoo, on prends les sources, on compile, puis on installe. Et suivant la manière dont est fait le programme, la compilation peut prendre un temps… considérable.
Je prendrais deux exemples, emblématiques à mes yeux : Opéra et Chromium. J’ai installé les deux sur ma machine, et les deux fonctionnent parfaitement. Les deux s’installent aussi vite également, et plus vite qu’avec des binaires classiques. Par contre, la manière dont ils sont faits fait que leur durée de compilation est différente.
Pour Opéra, qui est lié à plein de paquets et qui s’intègre comme une « petite brique » parmi les autres, je mets quelques minutes à compiler le programme.Pour compiler Chromium, qui doit intégrer dans ses sources tous les autres paquets dont il dépend lors de sa compilation, il me faut 3 à 8 heures. Et quand on connaît le nombre de mises à jour de Chromium par semaine, ça devient vite fatiguant de laisser tourner le PC les journées et les nuits pour compiler chaque foutue nouvelle mise à jour.
Pour info, j’ai un PC qui date d’il y a 6 ans, avec un processeur Intel Celeron double coeur cadencé à 2.7Ghz, 2Go de RAM, et 4Go de Swap (sur un HD comprenant 8Go de SSD). Ce qui n’est pas une config exceptionnelle, mais qui permet de compiler sereinement. Gentoo s’adapte à de bien plus gros systèmes (PC de jeux) comme à de bien plus petits systèmes (smartphones).
Le reproche qui est souvent fait à Gentoo, et à juste titre dans le cas de Chromium, c’est que la compilation avant l’installation permet de faire gagner du temps lors du lancement des programmes et de leur utilisation, mais il faut mettre en parallèle les secondes ou minutes gagnées avec le temps perdu précédemment en compilation. Gagner 15s lors de chaque lancement de Gimp vaut-il la perte de 20 minutes de compilation à chaque mise à jour…
C’est à voir. Suivant les programmes utilisés et leur fréquence mise à jour, on perd plus ou moins de temps en compilation, et on en gagne lors de l’utilisation de ceux-ci.
Parlons un peu technique à présent :
Pour paramétrer tout les flags, il vous faudra aller dans le fichier /etc/make.conf pour inscrire vos CFLAGS et CXXFLAGS. Il est aussi possible d’y mettre toutes les autres options USE et autres, mais ça devient vite le bazar.
Donc tout utilisateur de Gentoo prendra soin d’écrire ses autre paramètres tels que :
- USE flags dans /etc/portage/package.use
- Keyword dans /etc/portage/package.accept_keywords (oui, parfois il faut déclarer des mots clés en complément, mais je ne m’étendrais pas sur ce sujet)
- Licences dans /etc/portage/package.license (dans le cas où l’on utilise des logiciels ayant des licences propriétaire, même s’ils publient tout ou partie de leurs sources)
Et les commandes de base sont :
emerge –sync (pour mettre à jour la liste des sources)
emerge –update –newuse –deep @world (pour mettre à jour le système)
emerge –depclean (pour supprimer les dépendances devenues inutiles)
revdep-rebuild pour reconstruire les dépendances cassées
/!\ AVANT de faire emerge –depclean, il faut toujours mettre à jour son système. /!\
C’est d’ailleurs explicitement dit dans le manuel ici. Et après avoir executé cette commande, il est très très fortement conseillé de faire un redep-rebuild pour revérifier l’arborescence des paquets.
Revdep-rebuild est un outil pratique, qui en cas de librairie manquante suite à la suppression d’un paquet, recompilera uniquement la librairie pour la réintégrer dans votre système, au lieu de réinstaller le paquet en entier. Ainsi, le système reste le plus léger possible.
Tout ça pour vous donner un tout petit aperçu de portage, qui constitue le coeur de Gentoo (après son kernel), et qui fait toute sa force.
Le but des use flag n’est pas de speeder d’un quart de seconde vos applis mais plus de maitriser votre systeme.
Par exemple KDE sans les outils d’indexations ou bien syslog-ng avec un back end mysql …
J’en passe et des meilleures, ca permet de bien comprendre un systeme linux, de se faire plaisir en le customisant et apprendre un peu tous les jours.
J’utilise en general sabayon sur mon portable mais les USE flags me manquent !
A noter la richesse des packages sans avoir à utiliser les ppa, la possibilité de mixer la version stable et unstable, de limiter les dependances et puis le petit pincement de coeur au reboot du kernel pour savoir si on a pas oublié l’option qui empeche le systeme de booter ;-)
A noter que j’ai eu qques ennuis de dependances cassée (fixé avec revdep-build) mais c’est plutot stable (aie les upgrade ubuntu ou fedora) et rolling release.
Très beau billet (malgré le bordel qu’il m’a foutu sur le site cette nuit) :)
Par contre ça donne pas envie de tester Gentoo (si ce n’est pour l’apprentissage). La compil ça a l’air assez contraignant quand même.
Moo !!!