2. USE-флаги

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

Смысл USE-флагов

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

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

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

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

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

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

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

Какие USE-флаги существуют?

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

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

Список доступных глобальных USE-флагов можно найти здесь или локально в /usr/portage/profiles/use.desc.

Список локальных USE-флагов находится в вашей системе в /usr/portage/profiles/use.local.desc.

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

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

Как сказано ранее, все USE-флаги объявляются в переменной USE. Каждый дистрибутив Calculate Linux имеет свой набор USE-флагов, оптимизированный под конкретные задачи.

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

В качестве примера можно посмотреть значение USE флагов профиля Calculate Directory Server:

...
USE="acl amd64 bash-completion berkdb bittorrent bzip2 cli cracklib crypt cups cxx dri exif foomaticdb fortran ftp gdbm gif gpm iconv imap ipv6 jpeg jpeg2k ldap logrotate maildir mmx modules mudflap multilib ncurses nfs nls nptl nptlonly openmp pam pcre perl png pppd python radius readline samba session sse sse2 ssl sysfs tcpd tiff truetype unicode userlocales xorg zlib" ...

Как видите, эта переменная уже содержит достаточно много ключевых слов.

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

Например, чтобы убрать поддержку KDE и QT, но добавить поддержку ldap, можно определить в /etc/make.conf переменную USE следующего вида:

USE="-kde -qt ldap"

Дистрибутивы Calculate Linux по умолчанию используют бинарный профиль, игнорирующий Ваши изменения USE флагов. Чтобы использовать изменения, во время установки или обновления пакетов используйте флаг -N (или --newuse)". Пример:

emerge -uN world

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

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

Например, вам не нужна глобальная поддержка berkdb, но она необходима в mysql. Пример файла /etc/portage/package.use/mysql:

dev-db/mysql berkdb

Естественно, можно в явном виде отключить USE-флаги для определенного пакета. Например, если вам не нужна поддержка java в PHP. Пример файла /etc/portage/package.use/nojava:

dev-php/php -java

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

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

Например, уберем java из значения USE на время установки firefox:

USE="-java" emerge firefox

Наследование

Конечно же, существует определенная последовательность формирования значения USE. Вы же не хотите объявить USE="-java" только для того, чтобы узнать, что java все еще включена из-за значения с более высоким приоритетом. Последовательность установки значения USE в порядке приоритета (от меньшего к большему) такова:

  • значение USE по умолчанию, объявленное в файлах make.defaults в составе вашего профиля
  • значение, определенное пользователем в /etc/make.conf
  • значение, указанное пользователем в файлах /etc/portage/package.use/
  • значение, определенное пользователям в переменной среды

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

emerge --info

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

Если вы изменили свои USE-флаги и хотите обновить всю систему в соответствии с новым значением USE, запустите emerge с параметром --newuse:

Пример пересборки всей системы:

emerge -uDN world

Теперь запустите функцию Portage depclean, чтобы удалить условные зависимости, присутствующие в "старой" системе, но больше не нужные при новом составе USE-флагов.

Предупреждение: Запуск emerge -c (или --depclean) является опасной операцией, которую следует использовать с осторожностью. Дважды проверьте список «ненужных» пакетов и убедитесь, что не удалятся нужные пакеты. В следующем примере мы добавляем ключ -a, чтобы depclean потребовал подтверждения перед удалением.

Удаление ненужных пакетов:

emerge -ac

Когда depclean закончит свою работу, запустите revdep-rebuild, чтобы пересобрать программы, динамически связанные с библиотеками, входящими в потенциально удаленные пакеты:

revdep-rebuild

После выполнения всех этих действий, ваша система будет полностью использовать новые значения USE-флагов.

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

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

Возьмем, к примеру, firefox - какие USE-флаги он может использовать? Чтобы это выяснить, запустим emerge с параметрами -p (или --pretend) и -v (или --verbose). Пример:

# emerge -pv firefox
These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] www-client/firefox-3.6.13  USE="alsa bindist custom-optimization dbus ipc libnotify -gnome -java -startup-notification -system-sqlite -wifi" LINGUAS="bg de en es fr it pl pt_BR ru uk -af -ar -as -be -bn -bn_BD -bn_IN -ca -cs -cy -da -el -en_GB -en_US -eo -es_AR -es_CL -es_ES -es_MX -et -eu -fa -fi -fy -fy_NL -ga -ga_IE -gl -gu -gu_IN -he -hi -hi_IN -hr -hu -id -is -ja -ka -kk -kn -ko -ku -lt -lv -mk -ml -mr -nb -nb_NO -nl -nn -nn_NO -oc -or -pa -pa_IN -pt -pt_PT -rm -ro -si -sk -sl -sq -sr -sv -sv_SE -ta -ta_LK -te -th -tr -vi -zh_CN -zh_TW" 0 kB

emerge - не единственное средство для решения этой задачи. Существует программа equery, специально предназначенная для вывода информация о пакетах. Для просмотра USE-флагов какого-нибудь пакета запустим equery с аргументом uses. Пусть это будет пакет gnumeric:

# equery uses app-office/gnumeric-1.10.13 -a
[ Searching for packages matching app-office/gnumeric-1.10.13... ]
[ 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.10.13 ]
 U I
 - - gnome  : Adds GNOME support
 + + perl   : Adds support/bindings for the Perl language
 + + python : Adds support/bindings for the Python language
Спасибо!