Gentoo Logo

[ << ] [ < ] [ Sommaire ] [ > ] [ >> ]


6. Fonctionnalités avancées de Portage

Table des matières :

6.a. Introduction

Pour la plupart des utilisateurs, l'information reçue jusqu'à présent est suffisante. Mais Portage est capable de bien plus. Bien que ces autres fonctionnalités s'adressent aux utilisateurs avancés ou à des problèmes très spécifiques, cela ne constitue cependant pas une excuse suffisante pour ne pas les documenter ici.

Bien entendu, de cette abondance de flexibilité jaillissent une multitude de cas potentiels. Il serait tout à fait impossible de les envisager tous dans ce document. Nous préférons plutôt nous focaliser sur quelques cas génériques que vous pouvez adapter à votre besoin particulier. Si vous avez besoin de trucs et astuces encore plus spécifiques, vous pouvez peut-être les trouver sur le Wiki de Gentoo.

Des informations sur la plupart, si ce n'est la totalité, de ces fonctionnalités additionnelles peuvent être facilement trouvées en se plongeant en profondeur dans les pages de manuel de Portage.

Exemple de code 1.1 : lecture des pages de manuel de Portage

$ man portage
$ man make.conf

Pour terminer cette courte introduction, sachez que, sagissant de fonctionnalités avancées, si celles-ci sont mal utilisées, le débogage et la mise au point peuvent être très difficiles. Assurez-vous de mentionner que vous uilisez ces fonctionnalités si vous rapportez ce que vous croyez être un bogue.

6.b. Variables d'environnement par paquet

Utilisation de /etc/portage/env

Par défaut, la compilation des paquets utilise les variables d'environnement définies dans /etc/portage/make.conf, comme CFLAGS, MAKEOPTS et autres. Dans certains cas, vous souhaitez peut-être fournir d'autres variables pour certains paquets particuliers. Pour le faire, Portage permet d'utiliser /etc/portage/env et /etc/portage/package.env.

Le fichier /etc/portage/package.env contient la liste des paquets pour lesquels vous voulez utiliser des variables spécifiques ainsi que des identifiants qui renseignent Portage sur les changements désirés. Portage recherche la variable correspondant au nom de l'identifiant, que vous avez choisi vous-même, dans le fichier/etc/portage/env/<identifier>.

Exemple: utilisation du débogage pour certains paquets

À titre d'exemple, nous validons le débogage pour le paquet media-video/mplayer.

En premier lieu, nous définissons les variables de débogage dans un fichier appelé /etc/portage/env/debug-cflags. Le nom est choisi arbitrairement, mais reflète la raison du changement de variables pour faciliter la compréhension si nous y revenons beaucoup plus tard.

Exemple de code 2.1 : contenu de /etc/portage/env/debug-cflags

CFLAGS="-O2 -ggdb -pipe"
FEATURES="${FEATURES} nostrip"

Ensuite, nous balisons le paquet media-video/mplayer pour qu'il utilise ce contenu :

Exemple de code 2.2 : contenu de /etc/portage/package.env

media-video/mplayer debug-cflags

6.c. Intervenir dans le procesus de compilation

Utilisation de /etc/portage/bashrc et des fichiers associés

Quand Portage travaille à partir d'ebuilds, il utilise un environnement bash dans lequel il appelle les différentes fonctions de la compilation (telles que src_prepare, src_configure, pkg_postinst, etc.). Mais Portage vous permet de définir un environnement bash vous-même.

L'avantage d'utiliser votre propre environnement bash est que vous pouvez intervenir dans le processus de compilation/installation (emerge) à chacune de ses étapes. Ceci peut être fait pour chacune des compilations/installations (via /etc/portage/bashrc) ou en utilisant des environnements par paquet (via /etc/portage/env comme nous l'avons vu précédemment).

Pour intervenir dans le processus, l'environnement bash peut se mettre à l'écoute des variables EBUILD_PHASE, CATEGORY et également des variables qui sont toujours disponibles pendant le développement d'ebuilds (comme P, PF, ...). Selon la valeur de ces variables, il peut alors exécuter les étapes additionnelles que vous avez prévues.

Exemple: mise à jour de fichiers de base de données

Dans cet exemple, nous utilisons /etc/portage/bashrc pour appeler des applications de base de données pour nous assurer que leurs bases de données sont à jour par rapport au système. Les applications utilisées dans l'exemple sont aide (un outil de détection d'intrusion) et updatedb (à utiliser avec locate), mais ce ne sont que des exemples. Ne prenez pas ceci pour un guide pour AIDE ;-)

Afin d'utiliser /etc/portage/bashrc dans ce cas, nous devons "intervenir" dans les fonctions postrm (après retrait de fichiers) et postinst (après installation de fichiers) par ce que c'est le moment auquel les fichiers du système de fichiers ont été modifiés.

Exemple de code 3.1 : exemple de /etc/portage/bashrc

if [ "${EBUILD_PHASE}" == "postinst" ] || [ "${EBUILD_PHASE}" == "postrm" ];
then
  echo ":: appel de  aide --update pour mettre à jour sa base de données";
  aide --update;
  echo "::  appel de  updatedb  pour mettre à jour sa base de données";
  updatedb;
fi

6.d. Exécution de tâches après --sync

L'emplacement /etc/portage/postsync.d

Jusqu'à maintenant, nous avons parlé d'intervenir dans le processus des ebuilds. Néanmoins, Portage dispose l'une autre fonction importante : la mise à jour de l'arbre de Portage. Afin d'exécuter des tâches après la mise à jour de l'arbre, placez un script dans /etc/portage/postsync.d et assurez-vous qu'il est exécutable.

Exemple: exécution de eix-update

Si vous n'utilisez pas eix-sync pour mettre l'arbre à jour, vous pouvez toujours faire en sorte que sa base de données soit mise à jour après l'exécution de emerge --sync (ou emerge-webrsync) en plaçant un lien symbolique vers /usr/bin/eix appelé eix-update dans le dossier /etc/portage/postsync.d.

Exemple de code 4.1 : exécution de eix-update après une opèration de synchronisation

# ln -s /usr/bin/eix /etc/portage/postsync.d/eix-update

Note : si vous utilisez un autre nom, vous devez à la place, placer un script qui appelle /usr/bin/eix-update. Le code de eix regarde comment il a été appelé pour déterminer la fonction qu'il doit appeler. Si vous mettez un lien symbolique vers eix qui ne s'appelle pas eix-update, ça ne marchera pas..

6.e. Redéfinition de paramètres de profil

L'emplacement /etc/portage/profile

Par défaut, Gentoo utilise les paramètres contenus dans le profil vers lequel pointe /etc/portage/make.profile (un lien symbolique vers le bon dossier des profils). Ces profils définissent aussi bien les paramètres spécifiques que ceux hérités d'autres profils (via leur fichier parent).

En utilisant /etc/portage/profile, vous pouvez écraser des paramètres de profil comme packages (quels sont les paquets qui sont considérés comme appartenant au système) , des options forcées de USE etc.

Exemple: ajout de nfs-utils au système

Si vous utilisez des systèmes de fichiers basés sur NFS pour des systèmes de fichiers assez critiques, vous pouvez désirer avoir net-fs/nfs-utils "protected" (protégé) en tant que paquet indispensable au système, ce qui fera que Portage vous alertera fortement en cas de tentative de suppression.

Pour le faire, nous ajoutons le paquet à /etc/portage/profile/packages, prefixé par une *:

Exemple de code 5.1 : contenu de /etc/portage/profile/packages

*net-fs/nfs-utils

6.f. Application de correctifs non standards

Utilisation de epatch_user

Pour gérer plusieur ebuilds de la même manière, les développeurs d'ebuids utilisent eclasses (sortes de bibliothèques de shell) qui définissent des fonctions d'usage courant. L'une de ces eclasses est eutils.eclass qui contient une fonction intéressante appelée epatch_user.

La fonction epatch_user applique les correctifs de code source qui sont placés dans le premier répertoire trouvé sous /etc/portage/patches/<category>/<package>[-<version>[-<revision>]]. Malheureusement, tous les ebuilds n'appellent pas automatiquement cette fonction, et donc, vous contenter de placer votre correctif à cet emplacement ne suffit pas toujours.

Heureusement, avec l'information dispensée plus haut, vous pouvez appeler cette fonction en intervenant dans le processus, par exemple, dans la phase prepare . La fonction peut être appelée autant de fois que vous le désirez - elle n'appliquera les correctifs qu'une seule fois.

Exemple: application de correctifs à Firefox

Le paquet www-client/firefox est l'un de ceux qui appellent déjà epatch_user depuis l'ebuild, vous n'avez donc pas besoin de redéfinir quoi que ce soit.

Si vous voulez appliquer un correctif à firefox (par ce qu'un développeur vous a par exemple fourni un correctif et demandé de vérifier qu'il corrige un bogue que vous avez rapporté), placez le correctif dans /etc/portage/patches/www-client/firefox (il est certainement mieux d'utiliser le nom complet , y compris la version, de manière à ce que le correctif n'interfère pas avec des versions ultérieures de firefox).


[ << ] [ < ] [ Sommaire ] [ > ] [ >> ]


Imprimer

Voir tout

Dernière mise à jour le 11 avril 2013

Résumé : Au fil du temps, Portage évolue et mûrit. De nouvelles fonctionnalités sont continuellement ajoutées dont beaucoup s'adressent à des utilisateurs plus avancés. Ce chapitre entre dans les détails de ces fonctionnalités spécifiques.

Sven Vermeulen
Auteur

Grant Goodyear
Relecteur

Roy Marples
Auteur

Daniel Robbins
Auteur

Chris Houser
Auteur

Jerry Alexandratos
Auteur

Seemant Kulleen
Développeur Gentoo x86

Tavis Ormandy
Développeur Gentoo Alpha

Jason Huebel
Développeur Gentoo AMD64

Guy Martin
Développeur Gentoo HPPA

Pieter Van den Abeele
Développeur Gentoo PPC

Joe Kallar
Développeur Gentoo SPARC

John P. Davis
Correcteur

Pierre-Henri Jondot
Correcteur

Eric Stockbridge
Correcteur

Rajiv Manglani
Correcteur

Jungmin Seo
Correcteur

Stoyan Zhekov
Correcteur

Jared Hudson
Correcteur

Colin Morey
Correcteur

Jorge Paulo
Correcteur

Carl Anderson
Correcteur

Jon Portnoy
Correcteur

Zack Gilburd
Correcteur

Jack Morgan
Correcteur

Benny Chuang
Correcteur

Erwin
Correcteur

Joshua Kinard
Correcteur

Stuart Longland
Correcteur

Tobias Scherbaum
Correcteur

Joshua Saddler
Correcteur

Gerald J. Normandin Jr.
Relecteur

Donnie Berkholz
Relecteur

Ken Nowack
Relecteur

Lars Weiler
Contributeur

Xavier Neys
Correcteur, traducteur

Camille Huot
Traducteur

Benjamin Girault
Traducteur

Olivier Fisette
Traducteur

Olivier Roomans
Traducteur

Vincent Strubel
Traducteur

Clément Varaldi
Traducteur

José Fournier
Traducteur

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.