Handbook:Parts/Working/USE/ru

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

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

Для того, чтобы помочь пользователям в решении, что устанавливать/активировать, а что нет, Gentoo захотела дать пользователю простой способ в описании его/ее окружения. Такой способ поможет пользователю решить, что им действительно нужно, а также облегчит работу с portage, что позволит сделать более полезные решения.

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

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

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

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


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

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

Профиль, на который ссылается система, читается из симлинка. Каждый профиль работает поверх других профилей, поэтому конечный результат в итоге будет суммой всех профилей. В самом верху находится базовый профиль.

Для просмотра действующих на данный момент USE-флагов (всех) используйте :

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

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

Например для отключения поддержки KDE и QT, но включения поддержки ldap, следующие USE-флаги должны быть определены в :

Объявление USE-флагов для отдельных пакетов
Иногда пользователям нужно определить некий USE-флаг для одного (или нескольких) приложений, не для всей системы. Чтобы достичь этого, отредактируйте. Как правило, это один файл, но, также, может быть и каталогом; смотрите для более подробной информации. Следующий пример подразумевает, что это единственный файл.

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

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

Объявление временных USE-флагов
Иногда пользователям нужно установить USE-флаг на короткое время. Вместо редактирования файла дважды (чтобы сделать изменения и отменить их в переменной USE), просто определите переменную USE как переменную окружения. Запомните, что эти настройки будут применены только к введенной команде; перекомпиляция или обновление этого приложения (в явном виде или как часть обновления системы) отменят изменения, которые были сделаны с помощью временного изменения определений USE-флага.

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

Старшинство
Of course there is a certain precedence on what setting has priority over the USE setting. The precedence for the USE setting is, ordered by priority (first has lowest priority):
 * 1) Default USE setting declared in the  files part of your profile
 * 2) User-defined USE setting in
 * 3) User-defined USE setting in
 * 4) User-defined USE setting as environment variable

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

Adapting the entire system to the new USE flags
After having altered USE flags, the system should be updated to reflect the necessary changes. To do so, use the  option with :

Next, run portage's depclean to remove the conditional dependencies that were emerged on the "old" system but that have been obsoleted by the new USE flags.

When depclean has finished, run to rebuild the applications that are dynamically linked against shared objects provided by possibly removed packages. is part of the package; don't forget to emerge it first.

When all this is accomplished, the system is using the new USE flag settings.

Просмотр доступных USE-флагов
Возьмем для примера seamonkey: какие USE-флаги он использует? Чтобы найти это мы воспользуемся с опциями   и  :

isn't the only tool for this job. In fact, there is a tool dedicated to package information called which resides in the  package

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

Satisfying REQUIRED_USE conditions
Some ebuilds require or forbid certain combinations of USE flags in order to work properly. This is expressed via a set of conditions placed in a REQUIRED_USE expression. This conditions ensure that all features and dependencies are complete and that the build will succeed and perform as expected. If any of these are not met, emerge will alert you and ask you to fix the issue.

Некоторые примеры для выражений REQUIRED_USE предоставлены ниже: