Handbook:AMD64/Working/USE

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Handbook:AMD64/Working/USE and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎日本語 • ‎한국어 • ‎polski • ‎русский • ‎українська • ‎中文(中国大陆)‎
AMD64 Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка stage3
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система init-скриптов
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление


Что такое 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:

Файл /etc/portage/make.confИзменение USE-флагов в make.conf
USE="-kde -qt4 -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
Совет
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):

Файл /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-флагами.

Предупреждение
Запуск команды 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 может быть установлен.