This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Handbook:AMD64/Working/USE
Что такое USE-флаги
Идея 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-флагов можно найти на странице основного или локально в файле /usr/portage/profiles/use.desc.
- Локальные USE-флаги используются конкретным пакетом, чтобы определить параметры самого пакета. Список доступных локальных 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 под персональную нужду: изменения в этих файлах будут отменены при следующем обновлении Gentoo репозитория!
Чтобы изменить такие настройки по умолчанию добавьте или удалите ключевые слова в/из переменную USE. Это можно сделать глобально определяя переменную USE в файле /etc/portage/make.conf. В этой переменной можно добавить дополнительные необходимые USE-флаги, или удалить USE-фдаги, которые больше не нужны. Для удаления необходимо добавить перед ключевым словом префикс в виде знака минус (-
).
Например для отключения поддержки KDE и Qt, но включения поддержки LDAP, следующие USE-флаги должны быть определены в /etc/portage/make.conf:
USE="-kde -qt4 -qt5 ldap"
Объявление USE-флагов для отдельных пакетов
Иногда пользователям нужно определить некий USE-флаг для одного (или нескольких) приложений, не для всей системы. Чтобы достичь этого, отредактируйте /etc/portage/package.use. package.use как правило, это один файл, но, тем не менее, может быть и каталогом; смотрите совет ниже и man 5 portage для более подробной информации. Следующий пример подразумевает, что package.use это единственный файл.
Например, чтобы включить поддержку Blu-ray только в пакете VLC:
media-video/vlc bluray
If package.use is pre-existing as a directory (opposed to a single file), packages can have their local USE flags modified by simply creating files under the package.use/ directory. Any file naming convention can work, however it is wise to implement a coherent naming scheme. One convention is to simply use the package name as the title for the child file. For example, setting the
bluray
USE flag locally for the media-video/vlc package can be performed as follows:root #
echo "media-video/vlc bluray" >> /etc/portage/package.use/vlc
Аналогично можно запретить использование USE-флагов для определенного приложения. Например, чтобы отключить поддержку bzip2 в PHP (но оставить такую поддержку для всех остальных пакетов, благодаря определению USE-флага в файле make.conf):
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, отсортированная по приоритету (сперва меньший приоритет):
- настройки USE по умолчанию объявляются в файла make.defaults, часть выбранного профиля
- определенные пользователем настройки USE в файле /etc/portage/make.conf
- определенные пользователем настройки USE в файле /etc/portage/package.use
- определенные пользователем настройки USE как переменная окружения.
Чтобы отобразить финальные настройки, как их видит Portage, выполните emerge --info. Это отобразит список соответствующих переменных (включая переменные USE) с их текущими значениями, как их видит Portage.
root #
emerge --info
Адаптация всей системы под новые USE-флаги
После изменений USE-флагов система должна быть обновлена, чтобы изменения вступили в силу. Чтобы сделать это, используйте опцию --newuse
для emerge:
root #
emerge --update --deep --newuse @world
Далее, запустите очистку зависимостей Portage (depclean), чтобы удалить условные зависимости, которые присутствовали на "старой" системе, но теперь устарели с новыми USE-флагами.
Запуск команды emerge --depclean опасная операция и должна использоваться с осторожностью. Дважды проверьте предоставленный список "ненужных (obsoleted)" пакетов, чтобы убедиться, что не удаляться нужные пакеты. В следующем примере мы добавили
-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 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-флаги для определенного пакета. Например, для пакета gnumeric:
user $
equery --nocolor uses =gnumeric-1.12.31
[ Legend : U - final flag setting for installation] [ : I - package is installed with flag ] [ Colors : set, unset ] * Found these USE flags for app-office/gnumeric-1.12.31: U I + + introspection : Add support for GObject based introspection - - libgda : Enable database support through gnome-extra/libgda. - - perl : Enable perl plugin loader. + + python : Enable python plugin loader. + + python_targets_python2_7 : Build with Python 2.7
Удовлетворение условий REQUIRED_USE
Некоторые ebuild требуют или запрещают определенные комбинации USE-флагов, для того чтобы все работало должным образом. Это выражается через совокупность условий, которые помещены в выражении REQUIRED_USE. Такие условия гарантируют, что все функции и зависимости удовлетворены и, что компиляция будет выполняться корректно и как ожидалось. Если какое-либо из этих выражений не выполняется, emerge предупредит вас и попросит исправить эту проблему.
Некоторые примеры для выражений REQUIRED_USE предоставлены ниже:
Пример | Описание |
---|---|
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 может быть установлен.
|