Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[doc] Les options de la variable USE
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
kopp
Advocate
Advocate


Joined: 09 Apr 2004
Posts: 2885
Location: Grenoble, France

PostPosted: Sun Jan 29, 2006 3:04 pm    Post subject: [doc] Les options de la variable USE Reply with quote

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
View user's profile Send private message
kernelsensei
Bodhisattva
Bodhisattva


Joined: 22 Feb 2004
Posts: 5619
Location: Woustviller/Moselle/FRANCE (49.07°N;7.02°E)

PostPosted: Sun Jan 29, 2006 3:13 pm    Post subject: Reply with quote

Beau 1 000eme post !! ;) Te voilà vétéran avec une belle contribution :D

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
View user's profile Send private message
ghoti
Advocate
Advocate


Joined: 30 Dec 2002
Posts: 3624
Location: Belgium

PostPosted: Sun Jan 29, 2006 3:33 pm    Post subject: Reply with quote

Difficile de faire plus clair et plus complet !
Bravo ! :)

PS : cette histoire de 1000ème post c'est tout de même suspect ! :lol:
Back to top
View user's profile Send private message
geekounet
Bodhisattva
Bodhisattva


Joined: 11 Oct 2004
Posts: 3772
Location: Wellington, Aotearoa

PostPosted: Sun Jan 29, 2006 6:16 pm    Post subject: Reply with quote

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
View user's profile Send private message
kopp
Advocate
Advocate


Joined: 09 Apr 2004
Posts: 2885
Location: Grenoble, France

PostPosted: Sun Jan 29, 2006 6:23 pm    Post subject: Reply with quote

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
View user's profile Send private message
anigel
Bodhisattva
Bodhisattva


Joined: 14 Apr 2003
Posts: 1894
Location: Un petit bled pas loin de Limoges ;-)

PostPosted: Sun Feb 12, 2006 4:58 pm    Post subject: Reply with quote

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
View user's profile Send private message
yoyo
Bodhisattva
Bodhisattva


Joined: 04 Mar 2003
Posts: 4273
Location: Lyon - France

PostPosted: Mon Feb 13, 2006 8:33 am    Post subject: Reply with quote

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. :wink:

Ç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
View user's profile Send private message
TGL
Bodhisattva
Bodhisattva


Joined: 02 Jun 2002
Posts: 1978
Location: Rennes, France

PostPosted: Mon Feb 13, 2006 10:55 am    Post subject: Reply with quote

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. :wink:

Ç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
View user's profile Send private message
TGL
Bodhisattva
Bodhisattva


Joined: 02 Jun 2002
Posts: 1978
Location: Rennes, France

PostPosted: Mon Feb 13, 2006 11:14 am    Post subject: Re: [doc] Les options de la variable USE Reply with quote

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
View user's profile Send private message
yoyo
Bodhisattva
Bodhisattva


Joined: 04 Mar 2003
Posts: 4273
Location: Lyon - France

PostPosted: Mon Feb 13, 2006 1:48 pm    Post subject: Reply with quote

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). :roll:
_________________
La connaissance s'accroît quand on la partage.
JCB
Back to top
View user's profile Send private message
TGL
Bodhisattva
Bodhisattva


Joined: 02 Jun 2002
Posts: 1978
Location: Rennes, France

PostPosted: Mon Feb 13, 2006 2:05 pm    Post subject: Reply with quote

yoyo wrote:
Perso je préfère avoir le nom de fichier, ça m'influence pour placer mon flag (make.conf vs packages.use). :roll:
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
View user's profile Send private message
kopp
Advocate
Advocate


Joined: 09 Apr 2004
Posts: 2885
Location: Grenoble, France

PostPosted: Mon Feb 13, 2006 4:37 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
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