[ << ]
[ < ]
[ 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 ]
[ > ]
[ >> ]
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|