USE flags

Updated 4 June 2019

What are USE flags?

What USE flags are for

When installing Calculate (or any other distribution, indeed), you select features depending on the environment you will be using. Installing a server requires different setup procedures than installing a workstation, while installing a game station is different as well from installing a 3D rendering platform.

This applies not only to which packages to install, but also to which features of those should be supported. If you do not need OpenGL, why would you install it and enable OpenGL support in your software? If you are not going to use KDE, why build packages with KDE support if they can be used without it?

USE flags are an easy way to define the desktop environment. They help users choose what to install or enable and what not. Thus, the user can decide for themselves what they really need and make it easier to work with the Portage package manager.

Definition

Let's look at USE flags. A USE flag is a keyword that includes information about the support and dependencies of a particular environment or function. When you define a USE flag, Portage will know that you need support for a specific function. Of course, this may modify the package's dependencies as well.

Let's look at an example - say, the "kde" USE flag. If your USE values do not include this, then all packages that do not need KDE support will be compiled without it. Все пакеты, где зависимость от KDE является необязательной, устанавливаются без установки библиотек KDE (по зависимости). Если же вы определите ключевое слово "kde", то эти пакеты будут собираться с поддержкой KDE, а KDE будет установлен в качестве необходимого.

Правильно определяя ключевые слова, вы создаете систему, специально подогнанную под ваши потребности.

Types

USE flags can be global or local.

  • A global USE flag is used by several packages and is system-wide.
  • A local USE flag is used by a specific package, as it defines its finer functionality.

A list of the available global USE flags can be either here on the site or locally on your computer, at /usr/portage/profiles/use.desc.

All local USE flags are stored on your computer, at /usr/portage/profiles/use.local.desc.

Using USE flags

Declare permanent USE flags

Each Calculate Linux flavour has its own optimized set of USE flags.

Профиль, на который ориентируется ваша система, указывается символьной ссылкой /etc/portage/make.profile. Каждый профиль основывается на предыдущем, более крупном, а итоговый складывается из всех профилей. The base profile, (/usr/portage/profiles/base) has the highest priority.

В качестве примера можно посмотреть значение USE-флагов профиля Calculate Directory Server:

...
USE="acl amd64 bash-completion berkdb bittorrent bzip2 cli cracklib crypt cups cxx dri exif foomaticdb fortran ftp gdbm gif gpm iconv imap ipv6 jpeg jpeg2k ldap logrotate maildir mmx modules mudflap multilib ncurses nfs nls nptl nptlonly openmp pam pcre perl png pppd python radius readline samba session sse sse2 ssl sysfs tcpd tiff truetype unicode userlocales xorg zlib" ...

Как видите, эта переменная уже содержит достаточно много ключевых слов.

Для изменения значения по умолчанию следует добавлять или удалять ключевые слова из переменной USE. Such adding or removing is done globally, i.e. by redefining the USE variable in make.conf. You can add new USE flags or remove the ones you do not need. To remove a flag, prefix it with a minus symbol («-»).

Например, чтобы убрать поддержку KDE и QT, добавив при этом поддержку ldap, можно определить в /etc/portage/make.conf/custom переменную USE следующего вида:

USE="-kde -qt ldap"

By default, Calculate Linux uses a binary profile, ignoring your custom USEs. Чтобы использовать изменения во время установки или обновления пакетов используйте флаг -N (или --newuse)". For instance:

emerge -uN world

Update USE flags for specific packages

Иногда нужно определить некоторые USE-флаги только для одного или нескольких пакетов, не трогая системных настроек. Для этого необходимо создать файл в каталоге /etc/portage/package.use/ и отредактировать его значение. Имя файла может быть любым, удобным для вас.

Например, вам не нужна глобальная поддержка berkdb, но она необходима в mysql. Here is an example of /etc/portage/package.use/mysql:

dev-db/mysql berkdb

Естественно, можно в явном виде отключить USE-флаги для определенного пакета. Предположим, что вам не нужна поддержка java в PHP. Here is an example of /etc/portage/package.use/nojava:

dev-php/php -java

Set temporary USE flags

Иногда необходимо установить какой-то USE-флаг только на один раз. Вместо того, чтобы дважды редактировать /etc/portage/make.conf/custom (сначала добавить изменения USE, а потом удалить), можно просто объявить USE как переменную среды. Помните, что в этом случае при переустановке или обновлении приложения (явном или в составе обновления системы) ваши изменения будут утеряны!

Например, уберем java из значения USE на время установки firefox:

USE="-java" emerge firefox

Наследование

Нетрудно догадаться, что существует определенная последовательность формирования значения USE: вы же не хотите, например, объявить USE="-java" только для того, чтобы узнать, что java всё ещё включена из-за значения с более высоким приоритетом. Последовательность установки значения USE в порядке приоритета (от меньшего к большему) такова:

  • значение USE по умолчанию, объявленное в файлах make.defaults в составе вашего профиля;
  • значение, определенное пользователем в /etc/portage/make.conf/custom;
  • значение, указанное пользователем в файлах /etc/portage/package.use/;
  • значение, определенное пользователям в переменной среды.

Чтобы выяснить, какие настройки USE в конечном счете видит Portage, запустите emerge --info. Эта команда выводит значения всех переменных (включая USE), используемые Portage:

emerge --info

Адаптация всей системы под новые USE-флаги

Если вы изменили свои USE-флаги и хотите обновить всю систему в соответствии с новым значением USE, запустите emerge с параметром --newuse:

Пример полной пересборки системы:

emerge -uDN world

Теперь запустите функцию Portage depclean, чтобы удалить условные зависимости, присутствующие в прежней системе, но уже не нужные при новом составе USE-флагов.

Предупреждение: Запуск emerge -c (или --depclean) является опасной операцией, которую следует использовать с осторожностью. Дважды проверьте список «ненужных» пакетов и убедитесь, что не удалятся нужные пакеты. В следующем примере мы добавляем ключ -a, чтобы depclean потребовал подтверждения перед удалением.

To delete unnecessary packages, run:

emerge -ac

Когда depclean закончит свою работу, запустите revdep-rebuild, чтобы пересобрать программы, динамически связанные с библиотеками, входящими в потенциально удаленные пакеты:

revdep-rebuild

После выполнения всех этих действий ваша система полностью перейдёт на новые значения USE-флагов.

USE-флаги отдельных пакетов

Просмотр доступных USE-флагов

Возьмем, к примеру, firefox: какие USE-флаги он может использовать? Чтобы это выяснить, запустим emerge с параметрами -p (или --pretend) и -v (или --verbose).

For instance:

emerge -pv firefox

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] www-client/firefox-3.6.13  USE="alsa bindist custom-optimization dbus ipc libnotify -gnome -java -startup-notification -system-sqlite -wifi" LINGUAS="bg de en es fr it pl pt_BR ru uk -af -ar -as -be -bn -bn_BD -bn_IN -ca -cs -cy -da -el -en_GB -en_US -eo -es_AR -es_CL -es_ES -es_MX -et -eu -fa -fi -fy -fy_NL -ga -ga_IE -gl -gu -gu_IN -he -hi -hi_IN -hr -hu -id -is -ja -ka -kk -kn -ko -ku -lt -lv -mk -ml -mr -nb -nb_NO -nl -nn -nn_NO -oc -or -pa -pa_IN -pt -pt_PT -rm -ro -si -sk -sl -sq -sr -sv -sv_SE -ta -ta_LK -te -th -tr -vi -zh_CN -zh_TW" 0 kB

emerge - не единственное средство для решения этой задачи. Существует программа equery, специально предназначенная для вывода информация о пакетах. Для просмотра USE-флагов какого-нибудь пакета запустим equery с аргументом uses. Пусть это будет пакет app-office/gnumeric:

equery uses app-office/gnumeric-1.10.13 -a

[ Searching for packages matching app-office/gnumeric-1.10.13... ]
[ 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 app-office/gnumeric-1.10.13 ]
 U I
 - - gnome  : Adds GNOME support
 + + perl   : Adds support/bindings for the Perl language
 + + python : Adds support/bindings for the Python language