View previous topic :: View next topic |
Author |
Message |
kopp Advocate
Joined: 09 Apr 2004 Posts: 2885 Location: Grenoble, France
|
Posted: Sun Jan 29, 2006 3:04 pm Post subject: [doc] Les options de la variable USE |
|
|
Ce guide n'a pour but que de regrouper les diverses informations trouvées sur le forum afin d'en faciliter la recherche. Les deux ressources principales sont ces deux fils de discussion :
https://forums.gentoo.org/viewtopic-t-427711.html
https://forums.gentoo.org/viewtopic-t-399739.html
Objectif :
Présenter les options de la variable USE (USE-flags en anglais), comment les chercher et comment les gérer.
I - INTRODUCTION
À quoi servent les options de la variable USE ?
Ces options ont pour but de configurer les paramètres de compilation des programmes lors de l'utilisation de la commande emerge. Cela correspond donc aux paramètres qui seront passés lors du ./configure pour ceux qui sont habitués à compiler manuellement. Elles permettent donc à l'utilisateur de choisir les fonctionnalités dont ils ont besoin : support d'une interface graphique, de tel matériel, etc. Exemple : l'option X : Adds support for X11.
Ce sont ces options qui font, en grande partie, la puissance de Portage : elles permettent une liberté de choix totale sur ce que veut l'utilisateur et permet de différencier le compilé du pré-compilé : ici, on n'a que ce qu'on veut contrairement aux paquets précompilés où on a, par défaut, un maximum d'options incluses.
Par contre, il est important de noter que la variable USE n'empêche pas l'installation de paquets. Avoir l'option -X n'empêchera pas de taper emerge x11-base/xorg-x11 et d'installer Xorg. Pas plus que si on veut installer un paquet qui dépend directement de gtk, l'option -gtk n'empêchera pas d'installer gtk. Les options ne sont là que pour les supports optionnels, par exemple d'un paquet étant fait soit pour Qt, soit pour gtk, les options -qt gtk permettront de ne compiler que l'interface gtk et ne nécessitera donc pas l'installation de Qt
Il y a deux types d'options :
globales : ce sont des options de types génériques, qui peuvent affecter tous les paquets avec sensiblement le même effet.
locales : ces options affectent en général un seul paquet, ou plusieurs de manières différentes.
II - EN PRATIQUE
1 - Listes des options
Comme il y a deux types d'options, il y a logiquement deux listes. La manière la plus simple d'y accéder, c'est d'utiliser celles contenues dans le répertoire /usr/portage/profile. Les deux fichiers sont :
use.desc pour les options globales. Les options sont listées de la manière suivante : nom - description.
Exemple :ipv6 - Adds support for IP version 6
use.local.desc pour les options locales. Elles sont listées sous la forme suivante : paquet_affecté:nom - description.
Exemple : media-video/mplayer:nvidia - Enables support for the nvidia xvmc video driver
La liste des options globales est aussi disponible sur le site de Gentoo :
http://www.gentoo.org/dyn/use-index.xml
2 - Définition d'une option
Pour obtenir la définition d'une option, il y a plusieurs méthodes :
https://forums.gentoo.org/viewtopic-t-428121-highlight-.html- la simple :
Code: | cat /usr/portage/profiles/use.* | grep nom_de_l_option |
la plus geek : ajouter ceci à votre fichier ~/.bash_rc : Code: | usedesc () {
local portdir=$(sed -n 's:^PORTDIR=::p' /etc/make.conf);
[ -z "$portdir" ] && portdir=/usr/portage;
grep -h "$1.*\ -\ " ${portdir}/profiles/use.* | gawk -F ' - ' ' { print (" \033[32;01m* \033[31;01m%s \033[0;01m- \033[36;01m%s\033[0;0m\n", $1, $2) }'
} | Il suffit ensuite de taper usedesc nom_de_l_option. Merci à TGL pour ce script.
l'utilisation d'outils : par exemple, euse qui est fourni par le paquet app-portage/gentoolkit. Code: | euse -i nom_de_l_option | vous donne une description. Il y a d'autres paquets comme app-portage/euses qui en font autant, voire plus.
3 - Utilisation
a - savoir quelles options affectent un paquet
Rien de plus simple, il suffit d'utiliser l'option --verbose de emerge
Code: | emerge --pretend --verbose nomdupaquet |
Exemple :
Code: | emerge -pv media-video/mplayer
(...)
media-video/mplayer-1.0_pre7-r1 USE="X alsa directfb dvd dvdread encode gif gtk ipv6 jpeg mad mmx nls opengl oss png real sdl sse svga truetype vorbis win32codecs xmms xv xvid -3dfx -3dnow -3dnowext -aac -aalib -arts -bidi -bindist -bl -cdparanoia -cpudetection -custom-cflags -debug -dga -doc -dts -dv -dvb -edl -esd -fbcon -ggi -i8x0 -jack -joystick -libcaca -lirc -live -livecd -lzo -matroska -matrox -mmxext -mythtv -nas -nvidia -rtc -samba -sse2 -tga -theora -v4l -v4l2 -xanim -xinerama -xvmc" |
Ici, la liste est particulièrement longue, cela fait donc un bon exemple. (« Plus y en a, mieux c'est », pour ne pas dire « plus c'est long... » )
Pour savoir quels effets ont ces options, reportez-vous au paragraphe précédent.
Il est aussi possible d'utiliser l'utilitaire equery, lui aussi fourni par le paquet app-portage/gentoolkit :
Code: | equery uses nom_du_paquet |
Ceci donne aussi directement la définition des options.
Pour l'effet pratique, i.e. les paquets qui seront installés en dépendance selon les options choisies, utilisez la méthode suivante : Code: | USE="nomdesoptions" emerge --pretend nomdupaquet |
Attention : l'utilisation de USE=" " comme ceci est à proscrire pour passer l'option définitivement lors de la compilation. Pour savoir comment configurer les options pour qu'elles aient effet, voyez le paragraphe suivant.
Remarque : sur l'architecture AMD64, il est possible de voir apparaître des options entre parenthèses dans la liste : il s'agit
des options mmx, 3dnow, sse et sse2
En voici un exemple : Code: | emerge transcode --pretend --verbose
[ebuild R ] media-video/transcode-0.6.14-r3 (-3dnow) +X +a52 (-altivec) -dv +dvdread +encode -fame +gtk +imagemagick +jpeg -lzo -mjpeg (-mmx) +mpeg +network +ogg -quicktime +sdl (-sse) (-sse2) +theora +truetype -v4l +vorbis +xml2 +xvid 0 kB |
Ceci est dû au fait que ces options sont ignorées pour l'achitecture AMD64 car elles activent sur certains paquets l'utilisation de code 32bits pour l'optimisation. Ceci est mentionné dans le manuel AMD64. C'est donc aux mainteneurs des paquets de faire le choix dans l'ebuild d'activer ces optimisations lorsqu'elles sont disponibles. On en voit un exemple dans l'ebuild de transcode 1.0 : Code: | if use amd64; then
myconf="${myconf} --enable-mmx --enable-3dnow \
--enable-sse --enable-sse2" |
b - configurer les options
Il y a plusieurs façons de spécifier les options : les fichiers /etc/make.conf et /etc/portage/package.use.
Le fichier /etc/make.conf est utile pour activer ou désactiver des options globales sur tout le système. Par exemple, si vous ne voulez pas d'interface graphique via X, il faut mettre USE="-X" dans ce fichier. Par contre, si vous utilisez Gnome, il faut y ajouter les options gnome gtk. Bref, vous avez compris l'idée.
Par contre, si vous voulez activer/désactiver une option globale pour un seul paquet uniquement, il vous faut alors utiliser le fichier /etc/portage/package.use en le remplissant de la manière suivante : catégorie/paquet option.
Exemple, désactiver le support des langues pour les pages man, afin de ne pas avoir les manpages-fr en dépendance : Code: | echo "sys-apps/man-pages -nls" >> /etc/portage/package.use |
Le fichier package.use est aussi utilisé pour les options locales. Les effets étant divers selon les paquets, il est donc recommandé d'utiliser ce fichier plutôt que le make.conf. Par exemple, l'option nvidia est beaucoup de significations différentes, et l'effet n'est pas forcément celui désiré.
Remarques :
- il existe de nombreux outils permettant d'éditer la variable USE, comme euse cité plus haut, app-portage/profuse, app-portage/ufed, app-portage/flagedit, etc avec plus ou moins de possibilités (l'ajout dans package.use n'est pas disponible pour tous)
- la méthode USE="..." emerge blabla n'est pas valide car elle ne conserve pas l'option passée à la compilation, et lors d'une recompilation ou d'une mise à jour, le paramètre sera perdu et cela peut causer des problèmes lors de l'utilisation.
- lorsque vous modifier la variable USE, n'oubliez pas de lancer
Code: | emerge --ask --update --deep --verbose --newuse world | pour que ces changements prennent effet.
c - la fonction auto-use de Portage
Portage a été affecté d'un comportement très sujet à controverse : l'auto-use, c'est-à-dire l'ajout automatique d'options à la variable USE lors de l'installation de certains paquets. La liste des paquets et options associées est disponible dans le fichier /usr/portage/profiles/base/use.defaults. Le problème de cette fonction est que lorsqu'un paquet est désinstallé, l'option associée est retirée à moins qu'elle n'ait été explicitement déclarée dans /etc/make.conf ou /etc/portage/package.use et cela peut poser des problèmes. Le sujet a été longuement débattu, et cette fonction a été retirée dans portage 2.1_pre4.
Si pour le moment, vous voulez la contourner, il y a bien entendu une astuce, c'est de modifier l'ordre de priorité des définitions de la variable USE qui vaut par défaut : "env:pkg:conf:auto:defaults".
Pour la modifier, il suffit de rajouter USE_ORDER="env:pkg:conf:defaults" (c'est-à dire enlever auto de la liste) au fichier /etc/make.conf : Code: | echo "USE_ORDER=\"env:pkg:conf:defaults\"" >> /etc/make.conf | Modifier autrement l'ordre de cette variable n'a pas vraiment de sens. Vous pouvez quand même retirer defaults si vous avez une bonne raison de le faire.
d - le comportement de --newuse depuis Portage 2.1
Le comportement de l'option --newuse a été modifié à partir de Portage 2.1. En effet, lorsqu'une option USE est retirée ou ajoutée à IUSE dans l'ebuild d'un paquet, emerge --newuse --ask --verbose --deep world va vous proposer de recompiler ce paquet, que l'option ait été activée ou désactivée. Cela s'explique par le fait que le retrait d'une option ne précise pas quelle option est maintenant choisie par défaut, il faut donc recompiler pour être certain que le comportement considéré n'ait pas changé.
Ces options seront affichées en jaune dans la sortir d'emerge avec l'option --verbose.
Voilà, je pense en avoir suffisament dit sur le sujet pour que vous puissiez vous débrouiller. Je tiens à rajouter aussi qu'il existe un article sur la variable USE dans le manuel de Gentoo, traduit en français, donc pas d'excuse pour ne pas le lire. La lecture des deux discussions citées au début est aussi intéressante pour voir des exemples de configurations intéressants.
Mise à jour 22/11/06 : ajout d'un passage sur le comportement de Portage 2.1
Mise à jour 17/02/06 : ajout d'une remarque sur les options ignorées pour AMD64
Last edited by kopp on Wed Nov 22, 2006 10:31 pm; edited 4 times in total |
|
Back to top |
|
|
kernelsensei Bodhisattva
Joined: 22 Feb 2004 Posts: 5619 Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)
|
Posted: Sun Jan 29, 2006 3:13 pm Post subject: |
|
|
Beau 1 000eme post !! Te voilà vétéran avec une belle contribution
c'est bon, on a compris, tu peux arrêter de faire du postcount++ maintenant que t'es vétéran ^^; _________________ $ ruby -e'puts " .:@BFegiklnorst".unpack("x4ax7aaX6ax5aX15ax4aax6aaX7ax2aX5aX8 \
axaX3ax8aX4ax6aX3aX6ax3ax3aX9ax4ax2aX9axaX6ax3aX2ax4ax3aX4aXaX12ax10aaX7a").join' |
|
Back to top |
|
|
ghoti Advocate
Joined: 30 Dec 2002 Posts: 3634 Location: Belgium
|
Posted: Sun Jan 29, 2006 3:33 pm Post subject: |
|
|
Difficile de faire plus clair et plus complet !
Bravo !
PS : cette histoire de 1000ème post c'est tout de même suspect ! |
|
Back to top |
|
|
geekounet Bodhisattva
Joined: 11 Oct 2004 Posts: 3772 Location: Wellington, Aotearoa
|
Posted: Sun Jan 29, 2006 6:16 pm Post subject: |
|
|
Bravo aussi ! Ca sera utile à beaucoup de gens, cette question étant trop souvent reposée.
Je voudrais juste ajouter que l'auto-use est désactivé depuis portage 2.1_pre4 |
|
Back to top |
|
|
kopp Advocate
Joined: 09 Apr 2004 Posts: 2885 Location: Grenoble, France
|
Posted: Sun Jan 29, 2006 6:23 pm Post subject: |
|
|
Ah, au temps pour moi, je n'ai pas vérifié s'il y avait une version plus récente que la mienne et c'était toujours actif chez moi. Je corrige ça de suite.
Faudra aussi que je pense à faire une mise à jour tiens, je commence à avoir pas mal de paquets de retard.
Merci |
|
Back to top |
|
|
anigel Bodhisattva
Joined: 14 Apr 2003 Posts: 1894 Location: Un petit bled pas loin de Limoges ;-)
|
Posted: Sun Feb 12, 2006 4:58 pm Post subject: |
|
|
Je l'avais zappé cette doc. C'est clair, superbement présenté, rien à redire !
Merci beaucoup ! _________________ Il y a 10 sortes d'individus en ce bas-monde : ceux qui causent binaire, et les autres. |
|
Back to top |
|
|
yoyo Bodhisattva
Joined: 04 Mar 2003 Posts: 4273 Location: Lyon - France
|
Posted: Mon Feb 13, 2006 8:33 am Post subject: |
|
|
excellente_contribution++
Par contre, la "méthode simple" pour obtenir la définition d'une option me paraît compliquée :
Code: | grep nom_de_l_option /usr/portage/profiles/use.* | est largement suffisant.
Ça n'est pas la première fois que je vois ça ("cat blabla | grep blibli") et je n'en vois toujours pas l'intérêt. Une âme charitable pourraît-elle éclairer ma lanterne ?? _________________ La connaissance s'accroît quand on la partage.
JCB |
|
Back to top |
|
|
TGL Bodhisattva
Joined: 02 Jun 2002 Posts: 1978 Location: Rennes, France
|
Posted: Mon Feb 13, 2006 10:55 am Post subject: |
|
|
yoyo wrote: | Par contre, la "méthode simple" pour obtenir la définition d'une option me paraît compliquée :
Code: | grep nom_de_l_option /usr/portage/profiles/use.* | est largement suffisant.
Ça n'est pas la première fois que je vois ça ("cat blabla | grep blibli") et je n'en vois toujours pas l'intérêt. Une âme charitable pourraît-elle éclairer ma lanterne ?? |
Quand on passe plusieurs fichiers à grep, du coup il les nomme dans les résultats. Je suppose que c'est pour éviter ce bruit supplémentaire que kopp passe par un cat. Mais le plus simple, ça serait d'utiliser ta méthode, avec l'option "-h": Code: | % grep -h flag /usr/portage/profiles/use*.desc | Ou bien si on veut chercher vraiment just le flag nommé "flag", mais éviter les descriptions ou "flag" apparait, ou encore le flag "flagplop", on peut utiliser: Code: | % egrep -h '(^|:)flag -' /usr/portage/profiles/use*.desc | Bon, ouais, ça se complique... |
|
Back to top |
|
|
TGL Bodhisattva
Joined: 02 Jun 2002 Posts: 1978 Location: Rennes, France
|
Posted: Mon Feb 13, 2006 11:14 am Post subject: Re: [doc] Les options de la variable USE |
|
|
kopp wrote: | c - la fonction auto-use de Portage
...
Si pour le moment, vous voulez la contourner, il y a bien entendu une astuce, c'est de modifier l'ordre de priorité des définitions de la variable USE qui vaut par défaut : "env:pkg:conf:auto:defaults".
Pour la modifier, il suffit de rajouter USE_ORDER="env:pkg:conf:auto:defaults" au fichier /etc/make.conf | Peut-être qu'ici il faudrait préciser que si ce qu'on veut c'est supprimer les auto-USE, alors il faut supprimer le ":auto" dans la liste. Donc plutôt: Code: | # echo "USE_ORDER=\"env:pkg:conf:defaults\"" >> /etc/make.conf | Et puis éventuellement préciser qu'en dehors de cette modification là, il n'y a rien d'autre qu'il soit raisonnable de changer. Enfin, c'est subjectif, mais bon, mettre par exemple les flags globaux comme plus prioritaires que ceux locaux, ça n'aurait pas beaucoup de sens.
Y'a juste "defaults" qu'on pourrait penser à virer aussi (ça, c'est les flags globaux par défaut, qui viennent du profile utilisé), mais c'est plus propre de mettre un -* au début de son USE dans make.conf pour ça. (Attention, c'est pas un truc que je conseille particulièrement hein : autant les flags auto c'est vraiment une nuisance, autant dans les flags defaults il y en a certains qui sont vraiment indispensables à la bonne marche du système, donc ne vous lancez là dedans que si vous savez ce que vous faites...). |
|
Back to top |
|
|
yoyo Bodhisattva
Joined: 04 Mar 2003 Posts: 4273 Location: Lyon - France
|
Posted: Mon Feb 13, 2006 1:48 pm Post subject: |
|
|
TGL wrote: | Quand on passe plusieurs fichiers à grep, du coup il les nomme dans les résultats. Je suppose que c'est pour éviter ce bruit supplémentaire que kopp passe par un cat. Mais le plus simple, ça serait d'utiliser ta méthode, avec l'option "-h": Code: | % grep -h flag /usr/portage/profiles/use*.desc | | OK, merci pour l'explication.
Perso je préfère avoir le nom de fichier, ça m'influence pour placer mon flag (make.conf vs packages.use). _________________ La connaissance s'accroît quand on la partage.
JCB |
|
Back to top |
|
|
TGL Bodhisattva
Joined: 02 Jun 2002 Posts: 1978 Location: Rennes, France
|
Posted: Mon Feb 13, 2006 2:05 pm Post subject: |
|
|
yoyo wrote: | Perso je préfère avoir le nom de fichier, ça m'influence pour placer mon flag (make.conf vs packages.use). | Ouais mais de toute façon ça tu le vois parceque le format des lignes n'est pas le même :
- dans use.desc : flag - La description
- dans use.local.desc : category/package:flag - La description |
|
Back to top |
|
|
kopp Advocate
Joined: 09 Apr 2004 Posts: 2885 Location: Grenoble, France
|
Posted: Mon Feb 13, 2006 4:37 pm Post subject: |
|
|
Hop, merci pour les remarques, je vais faire quelques changement. Pour l'histoire de l'auto-use, petite faute de recopie j'ai oublié d'enlever le auto dans ma phrase
Sinn pour la méthode simple, je crois pas qu'il y ait de raisons particulières, j'ai juste fait comme ça sans trop réfléchir |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|