Portage: USE флаги

Смысл использования USE флагов

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

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

Если кому-то не хочется, работать в среде KDE, то и компилировать пакеты с поддержкой KDE не имеет смысла.
Именно для этого и нужны USE флаги. С их помощью формируется рабочая среда в Gentoo Linux.

Установка USE флагов

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

Рассмотрим влияние флага kde на поведение Portage. Если этот флаг не указан в переменной USE, пакеты, которые имеют опциональную поддержку kde будут собраны без поддержки kde. А пакеты, имеющие опциональную зависимость kde, будут установлены без  установки библиотек kde (как зависимости). Когда флаг kde определен, все эти пакеты будут скомпилированы с поддержкой kde, а библиотеки kde будут установлены в качестве зависимости.

Правильно определяя USE флаги можно адаптировать систему под потребности пользователя.

Типы USE флагов

Есть два типа 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).
Для просмотра активных USE флагов (полный список), используйте emerge --info:

root # emerge --info | grep ^USE
USE="a52 aac acpi alsa branding cairo cdr dbus dts ..."

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

Для изменение настроек по умолчанию переменной USE - добавьте или удалите из нее ключевые слова. Это делается глобально, определением переменной USE в файле /etc/portage/make.conf. В этой переменной можно добавить необходимые дополнительные USE флаги или удалить использование флагов, которые больше не нужны. Последнее делается с помощью префикса ключевое слово с знаком минус (-).
Например, чтобы отключить поддержку KDE и QT и добавить поддержку для LDAP, следующие USE флаги должны быть определены в /etc/portage/make.conf:

 FILE  /etc/portage/make.conf
USE="-kde -qt4 ldap"

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

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

Например, включим в mysql поддержку только berkdb:

 FILE  /etc/portage/package.use
dev-db/mysql berkdb

Аналогичным образом возможно отключить USE флаги для определенного приложения. Например, чтобы отключить поддержку java в PHP (но оставить для всех остальных пакетов путем объявления USE флага в make.conf):

 FILE  /etc/portage/package.use
dev-php/php -java

Объявление временных USE флагов

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

В следующем примере, при установке seamonkey, java временно удалятся из переменной USE:

root # USE="-java" emerge seamonkey

Приоритет

Приоритет использования USE флагов определятся в зависимости от того где они определены. Ниже приведены способы определения USE флагов отсортированные по приоритетности (первый имеет самый низкий приоритет):

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

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

root # emerge --info

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

После изменения USE флагов, система должна быть обновлена, чтобы применить необходимые изменения. Это до этого воспользуйтесь командой emerge с опцией --newuse:

root # emerge --update --deep --newuse @world

Затем, запустите emerge с опцией --depclean чтобы удалить зависимости, собранные под "старые" настройки USE флагов, и более не актуальные.

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

root # emerge -p --depclean

После завершения работы depclean, запустите revdep-rebuild для восстановления приложений, которые динамически слинкованы с общими библиотеками, входящими в состав потенциально удаленных пакетов. Программа revdep-rebuild является частью пакета app-portage/gentoolkit; не забудьте сначала установить его.

root # revdep-rebuild

После этого, система будет приведена в соответствие с новыми настройки USE флагов.

USE флаги пакетов

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

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

root # 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, который является частью пакета app-portage/gentoolkit.

root # emerge --ask app-portage/gentoolkit

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

user $ 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
              https://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

Удовлетворение условия REQUIRED_USE

Некоторые ебилды требуют разрешить или запретить определенные комбинации USE флагов для того, чтобы работать должным образом. Это выражается с помощью условия REQUIRED_USE. Это условие гарантирует, что все функции и зависимости являются полными, сборка удастся, работать будет как и ожидалось. Если какое-либо из них не выполняется, emerge предупредит вас и попросит исправить проблему.
Некоторые примеры условий, приведены ниже.

Пример  Описание
REQUIRED_USE="foo? ( bar )" Если foo установлен, bar тоже должен быть установлен
REQUIRED_USE="foo? ( !bar )" Если foo установлен, bar не должен быть установлен
REQUIRED_USE="foo? ( || ( bar baz ) )" Если foo установлен, bar или baz тоже должен быть установлен
REQUIRED_USE="^^ ( foo bar baz )" Только один из foobar или baz должен быть установлен
REQUIRED_USE="|| ( foo bar baz )" По крайней мере один из foobar или baz должен быть установлен
REQUIRED_USE="?? ( foo bar baz )" Не более чем один из foobar или baz должен быть установлен

   

Добавить комментарий