Handbook:AMD64/Working/USE

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Handbook:AMD64/Working/USE and the translation is 100% complete.
AMD64 Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка файла stage
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система сценариев инициализации
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети OpenRC
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление


Что такое USE-флаги

Идея USE-флагов

При установке Gentoo пользователи делают выбор в зависимости от среды, в которой они работают. Настройка для сервера отличается от настройки для рабочего места. Система для игр отличается от системы для 3D-рендеринга.

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

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

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

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

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

Если флаг kde определён, тогда эти пакеты будут скомпилированы с поддержкой KDE, а библиотеки KDE будут установлены в виде зависимостей.

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

Использование USE-флагов

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

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

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

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

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

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

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

Например, для отключения поддержки KDE и Qt и включения поддержки LDAP в /etc/portage/make.conf следует указать следующие USE-флаги:

ФАЙЛ /etc/portage/make.confИзменение USE-флагов в make.conf
USE="-kde -qt5 ldap"

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

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

Например, чтобы включить поддержку Blu-ray только в пакете VLC:

ФАЙЛ /etc/portage/package.useВключение поддержки Blu-ray в VLC
media-video/vlc bluray
Совет
Если package.use существует в виде каталога (а не одного файла), локальные USE-флаги для конкретного пакета могут определены путём простого создания файла в каталоге package.use/. Подойдёт любое имя файла, однако рекомендуется придерживаться определённой схемы. Одной из таких схем является использование имени пакета в качестве названия файла. Например, указание USE-флага bluray для пакета media-video/vlc может определено следующим образом:

root #echo "media-video/vlc bluray" >> /etc/portage/package.use/vlc

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

ФАЙЛ /etc/portage/package.useОтключение поддержки bzip2 в PHP
dev-lang/php -bzip2

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

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

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

root #USE="-pulseaudio" emerge www-client/seamonkey

Приоритет

Конечно, есть приоритет в том, какие настройки будут преобладать над другими настройками USE. Последовательность для настроек USE, отсортированная по приоритету (сперва меньший приоритет):

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

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

root #emerge --info

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

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

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

Далее, запустите очистку зависимостей Portage (depclean), чтобы удалить зависимости, которые были необходимы в «старой» системе, но теперь, с новыми USE-флагами, устарели.

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

После завершения работы depclean emerge может предложить пересобрать приложения, которые динамически связаны с общими объектами, удалёнными вместе с устаревшими пакетами. Portage сохранит необходимые библиотеки до тех пор, пока не будет выполнено это действие, чтобы не допустить нарушение работы приложений. Portage хранит список необходимых для пересборки пакетов в наборе preserved-rebuild. Чтобы выполнить пересборку пакетов, запустите:

root #emerge @preserved-rebuild

После того, как эта команда будет завершена, систему можно считать настроенной в соответствии с новыми USE-флагами.

USE-флаги, специфичные для пакета

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

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

root #emerge --pretend --verbose www-client/seamonkey
These are the packages that would be merged, in order:
 
Calculating dependencies... done!
[ebuild  N     ] www-client/seamonkey-2.48_beta1::gentoo  USE="calendar chatzilla crypt dbus gmp-autoupdate ipc jemalloc pulseaudio roaming skia startup-notification -custom-cflags -custom-optimization -debug -gtk3 -jack -minimal (-neon) (-selinux) (-system-cairo) -system-harfbuzz -system-icu -system-jpeg -system-libevent -system-libvpx -system-sqlite {-test} -wifi" L10N="-ca -cs -de -en-GB -es-AR -es-ES -fi -fr -gl -hu -it -ja -lt -nb -nl -pl -pt-PT -ru -sk -sv -tr -uk -zh-CN -zh-TW" 216,860 KiB
 
Total: 1 package (1 new), Size of downloads: 216,860 KiB

emerge — не единственная утилита, которую можно использовать для этой задачи. Есть специальная утилита для получения информации о пакете под названием equery из пакета app-portage/gentoolkit.

root #emerge --ask app-portage/gentoolkit

Теперь запустите equery с аргументом uses для получения списка USE-флагов для определённого пакета. Например, для пакета app-portage/portage-utils:

user $equery --nocolor uses =app-portage/portage-utils-0.93.3
[ Legend : U - final flag setting for installation]
[        : I - package is installed with flag     ]
[ Colors : set, unset                             ]
 * Found these USE flags for app-portage/portage-utils-0.93.3:
 U I
 + + nls       : Add Native Language Support (using gettext - GNU locale utilities)
 + + openmp    : Build support for the OpenMP (support parallel computing), requires >=sys-devel/gcc-4.2 built with USE="openmp"
 + + qmanifest : Build qmanifest applet, this adds additional dependencies for GPG, OpenSSL and BLAKE2B hashing
 + + qtegrity  : Build qtegrity applet, this adds additional dependencies for OpenSSL
 - - 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 )" Только один из foo, bar или baz должен быть установлен.
REQUIRED_USE="|| ( foo bar baz )" Хотя бы один из foo bar или baz должен быть установлен (но можно больше).
REQUIRED_USE="?? ( foo bar baz )" Установка необязательна, но только один из foo bar или baz может быть установлен.