# [HOWTO] Les USE flags de Gentoo

## loopx

Bonjour, 

Voici un tuto permettant d'expliquer, de manière très légère, les différents USE flags que j'utilise courament.

Ca se trouve ICI : http://pix-mania.dyndns.org/web_plugin/documentation/DocumentationServlet?action=showpage&id=3

Tous vos commentaire sont les bienvenus   :Wink: 

Si le lien est cassé, voici une copie de la doc :

Gentoo - les USE flags

Objectifs

Description non exhaustive des "flags" que l'on rencontre avec la distribution Gentoo Linux. Ceux-ci sont important à connaitre car un oubli provoque des pertes de fonctionnalités généralement inatendue par l'utilisateur final. Il est donc bon de savoir ce que permet tel ou tel flag.

Cette documentation ne se veut pas exhaustive!

Note: une bref description existe déjà dans votre installation. Utiliser cette commande pour afficher la liste présente sur votre système Linux Gentoo:

```
# less /usr/portage/profiles/use.desc
```

Chaque USE flag (ou flag tout court, peut importe le type) peut être activé ou désactivé (ajout d'un '-' collé devant le nom du flags; exemple: "-use") ou ne pas être présent du tout, ce qui aura pour effet de laisser le système choisir si il sera ou non activé par défaut.

Certain USE peuvent être activé automatiquement; si cela ne vous convient pas, vous pouvez forcer la désactivation de ceux-ci en les ajoutant et en les désactivant.

Tous les flags (USE, INPUT_DEVICES, VIDEO_CARDS, LINGUAS et autre) sont à placer dans le fichier de configuration de Gentoo Linux, à savoir : "make.conf" se trouvant sous le répertoire "/etc/".

Pour afficher votre fichier de configuration, utiliser cette commande :

```
$ cat /etc/make.conf
```

Voici un exemple de make.conf :

```
CFLAGS="-O2 -march=i686 -fomit-frame-pointer -pipe"

CHOST="i686-pc-linux-gnu"

CXXFLAGS="${CFLAGS}"

USE="x264 tunepimp qt3support exif kipi xcb amr subtitles mplayer theora real aiglx nsplugin visualization gstreamer imlib -esd gif encode spell mikmod xmms mp3 mpeg -sdl xml png ogg unicode mad motif sndfile truetype javascript iproute2 tiff ppds qt3 qt4 scanner pdf wifi gphoto2 audiofile sensord logitech-mouse xine lm_sensors kdeenablefinal -mythtv -apache2 -apache v4l ffmpeg xvmc aac aalib asf jpeg2k xscreensaver oracle arts glitz cairo nptl nptlonly dri ipv6 -mysql jpg jpeg xprint a52 ssl socks5 mozilla ithreads threads pthreads xosd java -gnome sdk fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow X avi directfb gtk xv dts dvdread dvdr opengl alsa cdrom dvd mmx 3dnow dma udma dri xorg kde ati avi dga dio dts vorbis win32codecs xinerama dbus hal divx4linux network xvid quicktime xv samba acpi"

INPUT_DEVICES="keyboard mouse evdev"

VIDEO_CARDS="radeon"

LINGUAS="fr"
```

Liste et description

 *Quote:*   

> 3dnow            : active l'utilisation des instructions 3Dnow des processeurs AMD
> 
> a52              : codec audio
> 
> aac              : codec audio
> ...

 

Trucs et astuces

Il est possible de demander au système d'afficher la description d'un USE flag sans devoir aller voir dans le fichier "use.desc" vous même; utilier cette commande pour avoir une brève description :

```
$ euse -i USE_FLAG
```

Vous pouvez aussi demander, à cette commande, l'activation ou la désactivation d'un USE flag :

```
# euse -E USE_FLAG

# -D USE_FLAG
```

Voici un exemple :

```
loopx@loop ~ $ euse -i mmx

global use flags (searching: mmx)

************************************************************

[+ C  ] mmx - Adds support for optimizations for Pentium MMX and Athlon class processors

local use flags (searching: mmx)

************************************************************

no matching entries found

loopx@loop ~ $ euse -D mmx

ERROR: /etc/make.conf is not writable

loopx@loop ~ $ su

Mot de passe :

loop loopx # euse -D mmx

/etc/make.conf was modified, a backup copy has been placed at /etc/make.conf.euse_backup

loop loopx # euse -E mmx

/etc/make.conf was modified, a backup copy has been placed at /etc/make.conf.euse_backup
```

Dans l'exemple précédent, on constate que le fichier "make.conf" à été sauvegardé et qu'il est nécessaire d'être super utilisateur pour pouvoir activer/désactiver un USE flag. En regardant le "make.conf" modifié, on constate qu'il y a eu un certain "ménage" dans les USE flags; ceux-ci sont automatiquement écrit sur plusieurs ligne ce qui peut faciliter la lecture.

L'outil "equery" présent dans le package "gentoolit" peut s'avérer, lui aussi, très intéressant. Il permet d'afficher les USE flags activé pour un packet donné; on peut aussi s'appercevoir si un packet demandera recompilation ou non (si un USE à été changé et que le packet installé n'a pas encore pris en compte ce changement ... il doit dès lors être recompilé). Cet outil permet donc l'affichage des USE flags du packet installé et aussi, les USE flags actuellement configuré pour le système.

```
equery uses PAQUET
```

Voici un exemple d'utilisation :

```
loopx@loop ~ $ equery uses ffmpeg

[ Searching for packages matching ffmpeg... ]

[ Colour Code : set unset ]

[ Legend : Left column  (U) - USE flags from make.conf              ]

[        : Right column (I) - USE flags packages was installed with ]

[ Found these USE variables for media-video/ffmpeg-0.4.9_p20070616-r2 ]

 U I

 + + X        : Adds support for X11

 + + a52      : Enables support for decoding ATSC A/52 streams used in DVD

 + + aac      : Enables support for MPEG-4 AAC Audio

 - - altivec  : Adds support for optimizations for G4 and G5/ppc970 processors

 + + amr      : Enables Adaptive Multi-Rate Audio support

 - - debug    : Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see http://www.gentoo.org/proj/en/qa/backtraces.xml

 - - doc      : Adds extra documentation (API, Javadoc, etc)

 + + encode   : Adds support for encoding of audio or video files

 - - ieee1394 : Enable FireWire/iLink IEEE1394 support (dv, camera, ...)

 + + imlib    : Adds support for imlib, an image loading and rendering library

 + + ipv6     : Adds support for IP version 6

 + + mmx      : Adds support for optimizations for Pentium MMX and Athlon class processors

 + + network  : Enables network streaming support

 + + ogg      : Adds support for the Ogg container format (commonly used by Vorbis, Theora and flac)

 - - oss      : Adds support for OSS (Open Sound System)

 - - sdl      : Adds support for Simple Direct Layer (media library)

 - - test     : Workaround to pull in packages needed to run with FEATURES=test. Portage-2.1.2 handles this internally, so don't set it in make.conf/package.use anymore

 + + theora   : Adds support for the Theora Video Compression Codec

 + + threads  : Adds threads support for various packages. Usually pthreads

 + + truetype : Adds support for FreeType and/or FreeType2 fonts

 + + v4l      : Enables video4linux support

 + + vorbis   : Adds support for the OggVorbis audio codec

 + + x264     : Enable h264 encoding using x264

 + + xvid     : Adds support for xvid.org's open-source mpeg-4 codec

 + + zlib     : Adds support for zlib (de)compression

Dans l'exemple précédent, remarquer les deux colonnes nomées respectivement U et I :

- U : ce sont les USE flags actuellement configuré dans le système (voir make.conf)

- I : les flags du paquet actuellement installé sur le système
```

Si je modifie le fichier de configuration de Gentoo (make.conf) et que je désactive le USE flag "X" (-X), alors, la première colonne affichera un "-" alors que la deuxième affichera toujours un "+" vu que le paquet n'a pas encore été recompilé.

Un petit script, trouvé sur le forum Gentoo (auteur: bemis) permet d'afficher les USE flags à activer selon votre processeur (très intéressant) :

```
#!/bin/bash

# pull in /etc/make.conf for system portdir variable

source /etc/make.conf

# make use of PORTDIR for portage-profile location

if [[ ! $PORTDIR ]]

 then PORTDIR="/usr/portage"

fi

# dump output through uniq for SMP systems

CPUFLAGS=($(grep flags /proc/cpuinfo | uniq))

# shove all of the output into an array for sorting

USEFLAGS=$(

# walk through our array checking global and local flags

for flag in ${CPUFLAGS[@]:2}

 do

  grep -h "^$flag " $PORTDIR/profiles/use.desc

  grep -h ":$flag " $PORTDIR/profiles/use.local.desc

done)

echo -e "Global Flags: "

echo "$USEFLAGS" | grep -v "/"

echo -e "Local Flags (port:flag - description):"

echo "$USEFLAGS" | grep "/"
```

Voici un exemple d'utilisation :

```
loopx@loop ~ $ sh check-use-cpu.sh

Global Flags:

mmx - Adds support for optimizations for Pentium MMX and Athlon class processors

sse - fast floating point optimization for PentiumIII+ class chips

3dnow - Adds support for 3dnow multimedia processor instructions

Local Flags (port:flag - description):

app-emulation/xen:pae - Enable support for PAE kernels (usually x86-32 with >4GB memory)

media-plugins/vdr-softdevice:mmxext - enables mmx2 support

media-video/dxr3player:mmxext - Enables mmxext instructions

media-video/mplayer:mmxext - Enables mmx2 support

media-sound/mpg123:3dnowext - Enable 3dnowext cpu instructions

media-video/dxr3player:3dnowext - Enable 3dnowext cpu instructions

media-video/mplayer:3dnowext - Enable 3dnowext cpu instructions
```

-- 

ndm : Un peu de mise en page pour rendre le tuto plus lisible et suppression des lignes obligeant à "scroller" en haut de la page.

----------

## swilmet

Très chouette initiative, les descriptions fournies ne sont parfois pas suffisantes, et quand on débute c'est pas évident.

Tu devrais peut-être préciser comment savoir si on a besoin de mmx, sse, sse2, ... (cat /proc/cpuinfo).

Et aussi parler de euse et de equery, qui est plus pratique que lire le fichier use.desc :

```
euse -i <useflag>

equery uses <ebuild>
```

----------

## loopx

Très juste, je ferais ca.

A la base, j'ai terminé cette doc tantot, mais c'est du "vite fait" qui doit encore être amélioré ...

Enfin, la je vais me reconsacré au developpement de la plateforme Web parce que il y a quelques problèmes assez grave ...   Je continuerais la doc plus tard   :Wink: 

EDIT: euse  :Surprised:    tu m'apprend un truc la   :Cool: 

merci  :Smile: 

----------

## Mickael

Et le script de KillerWhile, Check_flags : 

```
#!/bin/bash

for i in `grep flags /proc/cpuinfo | head -n 1 | cut -d":" -f2 | sed "s/dts//"`

do

    euse -i -g $i | grep -v searching | grep $i

done

```

----------

## loopx

Voilà, c'est mis à jour  :Smile: 

----------

## kopp

Sans vouloir faire la self-promotion, j'avais aussi écrit un article là dessus qui recouvre ce que tu dis, qui en oublie certaine chose et peut etre en dis autre chose :

https://forums.gentoo.org/viewtopic-t-428121.html

Il existe aussi sur le wiki Gentoo Fr

----------

## anigel

Là je dois dire, je suis assez estomaqué.

Suite à la discussion que nous avons eu il y a quelques jours, et probablement aux discussions que tu as eu avec d'autres que moi depuis, tu t'es enfin décidé à recopier ici les documentations issues de tes efforts. Merci à toi.

Par contre, si c'était pour procéder de cette manière, je crois qu'en fait tu avais totalement raison : il valait mieux les laisser chez toi, ces docs. L'effort de mise à disposition de tes docs est pour l'instant comparable à celui nécessaire au coulage d'un bronze. En tous le cas le résultat s'y apparente : c'est très compact, peu engageant, ça manque de couleur et finalement on a aucune envie de voir précisemment de quoi il retourne.

De plus, si j'ai bien compris le principe des 3 posts qui précèdent celui que je suis en train de rédiger, tu as décidé de ne pas mettre à jour cette doc, mais uniquement de la poser là pour "faire plaisir" et avoir la paix (la preuve : cette doc n'est pas à jour malgré le commentaire ci-dessus). C'est assez en accord avec ta signature, qui, pardonne-moi, est d'un mauvais goût tout à fait déplacé ici : si ce forum n'est pas digne de recevoir ta prose, n'hésite pas : fait le ménage, ouvre un sujet dans chroniques de geeks, et fais-toi de la pub gratuite pour ton petit chez toi ! Assume ! Tu veux tout héberger à domicile, et rien-à-foutre-la-disponibilité, fais-le ! Et si ton frère se prend les pieds dans le tapis, qu'EDF te coupe le jus pendant que tu te trempe dans l'océan. Quand ta plate-forme web se viande, idem ! etc...

Alors voilà, moi je l'assume : cette attitude me choque, ta signature également, et franchement, rien de tout ça n'est digne de l'esprit commautaire qui devrait présider à un travail de ce type.

A bon entendeur...

----------

## loopx

 *anigel wrote:*   

> Là je dois dire, je suis assez estomaqué.
> 
> Suite à la discussion que nous avons eu il y a quelques jours, et probablement aux discussions que tu as eu avec d'autres que moi depuis, tu t'es enfin décidé à recopier ici les documentations issues de tes efforts. Merci à toi.
> 
> Par contre, si c'était pour procéder de cette manière, je crois qu'en fait tu avais totalement raison : il valait mieux les laisser chez toi, ces docs. L'effort de mise à disposition de tes docs est pour l'instant comparable à celui nécessaire au coulage d'un bronze. En tous le cas le résultat s'y apparente : c'est très compact, peu engageant, ça manque de couleur et finalement on a aucune envie de voir précisemment de quoi il retourne.
> ...

 

Merci  :Smile: 

j'ai lu le début, je ne lirais pas la suite ... Moi j'en connais déjà 1, un couleur de bronze   :Wink: 

Tu sais, rien ne t'oblige à la lire ma doc ... et surtout, rien ne te force à la pourrir un peu plus   :Laughing: 

EDIT: c'est bon, y a plus de "chef des travaux fini" qui veut me mordre les fesses ?

----------

## kwenspc

 *loopx wrote:*   

> 
> 
> EDIT: c'est bon, y a plus de "chef des travaux fini" qui veut me mordre les fesses ?

 

Ah ouais mais nan ^^ 

En postant un travail perso publiquement tu t'exposes de fait au critiques, et implicitement tu es censés les accepter ou du moins accepter qu'elles existent. (Pas obligés dans tenir compte bien sûr)

Faut surtout pas qu'elles te vexe, mais faut essayer de comprendre pourquoi elles existent. Et là en l'occurrence je les trouve assez constructives.

----------

## loopx

 *kwenspc wrote:*   

>  *loopx wrote:*   
> 
> EDIT: c'est bon, y a plus de "chef des travaux fini" qui veut me mordre les fesses ? 
> 
> Ah ouais mais nan ^^ 
> ...

 

Y a aucun problème, je sais qu'elles existent et tout et tout... mais faudrait pas que le monde s'écroule sous les principes... et que les principes de certain mettent à bous les idées des autres (qui sont, sauf abu de ma part, des idées respectables!).

Maintenant, la pièce est faite pour être mise sur un trou ^^   donc voilà, mais je perd un peu patience à force d'être critiquer moulte fois pour la même chose (qui est d'importance mineur, le principal étant d'apporter une aide ... fiable ou non à 100% !).

Je précise d'avance que je n'ai pas envie de re-entrer en discussion inutile pour ma dernière phrase   :Wink: 

je   :Arrow:   []

EDIT: je précise que ma doc est, actuellement, mise à jour sur le forum (et non, je viens pas de le faire à l'instant)

----------

