USE флаги — очень важный аспект Gentoo. Прочитав эту главу, вы научитесь обращаться с ними и разберетесь, как USE флаги влияют на систему. 2 2012-07-24
Что такое USE флаги? Смысл USE флагов

Устанавливая Gentoo (или любой другой дистрибутив, или даже операционную систему вообще), вы выбираете те или иные возможности в зависимости от среды, с которой работаете. Установка сервера отличается от установки рабочей станции, а установка игровой станции — от платформы 3D-рендеринга.

Это касается не только того, какие пакеты устанавливать, но и какие функции определенных пакетов должны поддерживаться. Если вам не нужен OpenGL, то зачем вам его ставить и встраивать поддержку OpenGL в большинство программ? Если вы не собираетесь использовать KDE, зачем собирать пакеты с его поддержкой, если они работают и без этого?

Чтобы помочь пользователям в выборе того, что устанавливать/активировать, а что — нет, мы захотели дать им простой способ описания рабочей среды. Это позволяет пользователю решить, что же ему на самом деле надо, и облегчить работу с Portage, нашей системой управления пакетами.

Определение USE флагов

Рассмотрим USE флаги. USE флаг — это ключевое слово, включающее сведения о поддержке и зависимостях определенного понятия или функции. При определении какого-либо USE флага, Portage узнает, что вам нужна поддержка соответствующей функции. Конечно, это также влияет на сведения о зависимостях пакета.

Давайте рассмотрим конкретный пример — ключевое слово kde. Если в вашей переменной USE нет этого слова, то все пакеты, где поддержка KDE является необязательной, собрираются без нее. Все пакеты, где зависимость от KDE является необязательной, устанавливаются без установки библиотек KDE (по зависимости). Если же вы определите ключевое слово kde, то эти пакеты будут собираться с поддержкой KDE, а KDE будет установлен в качестве необходимого.

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

Какие USE флаги существуют?

Есть два типа USE флагов: глобальные и локальные.

  • Глобальный USE флаг используется несколькими пакетами и является системным. Это то, что большинство видит в качестве USE флагов.
  • Локальный USE флаг используется единичным пакетом для настройки определенных параметров самого пакета.

Список доступных глобальных USE флагов можно найти в сети или локально в /usr/portage/profiles/use.desc.

Список локальных USE флагов находится в вашей системе в /usr/portage/profiles/use.local.desc.

Использование USE флагов Объявление постоянных USE флагов

В надежде, что вы убедились в важности USE флагов, теперь мы расскажем, как их объявлять.

Как сказано ранее, все USE флаги объявляются в переменной USE. Чтобы упростить пользователям поиск и выбор флагов, мы предлагаем значение USE по умолчанию, которое представляют собой список USE флагов, как нам кажется, наиболее часто используемых пользователями Gentoo. Это значение приведено в файле make.defaults вашего профиля.

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

Давайте взглянем на значение по умолчанию для профиля 10.0:

(в этом примере объединяются значения из base, default/linux,
default/linux/x86 и default/linux/x86/10.0/)
USE="a52 aac acpi alsa branding cairo cdr dbus dts dvd dvdr emboss encode exif
fam firefox flac gif gpm gtk hal jpeg lcms ldap libnotify mad mikmod mng mp3
mp4 mpeg ogg opengl pango pdf png ppds qt3support qt4 sdl spell
startup-notification svg tiff truetype vorbis unicode usb X xcb x264 xml xv 
xvid"

Как видите, эта переменная уже содержит достаточно много ключевых слов. Не меняйте файл make.defaults для настройки переменной USE под свои нужды: изменения в этом файле аннулируются при обновлении Portage!

Для изменения значения по умолчанию, нужно добавлять или удалять ключевые слова из переменной USE. Это делается глобально, определением переменной USE в /etc/portage/make.conf. В эту переменную можно добавить нужные вам USE флаги, или удалить ненужные. Для удаления флага, его надо указывать со знаком минус в виде приставки («-»).

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

USE="-kde -qt4 ldap"
Объявление USE флагов для отдельных пакетов

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

Например, вам не нужна глобальная поддержка berkdb, но она необходима в mysql:

dev-db/mysql berkdb

Естественно, можно в явном виде отключить USE флаги для определенного пакета. Например, если вам не нужна поддержка java в PHP:

dev-php/php -java
Объявление временных USE флагов

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

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

# USE="-java" emerge seamonkey
Наследование

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

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

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

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

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

# emerge --update -deep --newuse world

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

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

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

# revdep-rebuild

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

USE флаги отдельных пакетов Просмотр доступных USE флагов

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

# emerge --pretend --verbose seamonkey
These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild R ] www-client/seamonkey-1.0.7 USE="crypt gnome java -debug -ipv6
-ldap -mozcalendar -mozdevelop -moznocompose -moznoirc -moznomail -moznopango
-moznoroaming -postgres -xinerama -xprint" 0 kB

emerge — не единственное средство для решения этой задачи. Существует программа, специально предназначенная для вывода информация о пакетах. Она называется equery и находится в пакете gentoolkit. Для начала установим этот пакет:

# emerge gentoolkit

Теперь для просмотра USE флагов какого-нибудь пакета запустим equery с аргументом uses. Пусть это будет пакет gnumeric:

# equery --nocolor uses =gnumeric-1.6.3 -a
[ Searching for packages matching =gnumeric-1.6.3... ]
[ 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.6.3 ]
 U I
- - 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.
+ + gnome  : Adds GNOME support
+ + python : Adds support/bindings for the Python language
- - static : !!do not set this during bootstrap!! Causes binaries to be
             statically linked instead of dynamically