Основы Portage


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


Например если вы хотите включить поддержку KDE и выключить поддержку GNOME вам нужно добавить к строке USE в файле /etc/make.conf флаги "kde -gnome". Для получения более подробной информации о USE-флагах смотрите Gentoo Handbook.


Для работы с Portage используется команда emerge. Например для установки пакета moo достаточно набрать команду: emerge moo. Portage проверит зависимости, скачает все необходимые архивы с исходниками, соберёт пакет и установит его. Вся необходимая информация сохранена в базе, состоящей из ebuild'ов, каждый из которых представляет собой специальный скрипт. Все ebuild'ы находятся в папке /usr/portage.


Управление настройками Portage


Первое правило Gentoo - нужно внимательно следить за флагами USE. Почему при установке Midnight Commander устанавливается X.Org - потому что у вас разрешён флаг X. Почему нет KPDF в KDE? - Потому что KDE был собран без флага pdf (не спрашивайте почему всё же собрался KGhostScript).


Всегда устанавливайте новые пакеты командной emerge --ask --verbose (или emerge -av) для просмотра USE-флагов перед началом компиляции. Установите пакет gentoolkit (emerge gentoolkit) - среди множества полезных вещей он содержит утилиту euse, которая существенно упрощает управление флагами USE*. Выполните euse -i flag для получения информации о флаге "flag". Так же просмотрите man-страницу euse (не волнуйтесь. она короткая :-)).


Если вы хотите изменить USE-флаги только для одного пакета не пытайтесь собирать его командой USE="some flags" emerge moo. Это конечно сработает, но при обновлении системы пакет будет пересобран со старыми флагами. Лучше прописывайте USE-флаги в /etc/portage/package.use, для этого выполните echo "category/moo some flags" >> /etc/portage/package.use перед установкой пакета.


Тоже относится и к ACCEPT_KEYWORDS - используйте /etc/portage/package.keywords. В Portage 2.1 вы можете использовать папки package.use и package.keywords вместо файлов для более простого управления.


Когда нужно использовать оверлеи?

Оверлей - набор ebuild'ов, которые вы хотите добавить к официальной базе данных (дереву) Portage


Иногда возникает необходимость установить пакет, отсутствующий в Portage. Например вы можете захотеть установить пакет, удалённый из дерева Portage. Тогда вам нужно взять его ebuild из архива Portage CVS. Или например вы захотите установить новый пакет, взяв ebuild в bugzilla. Возможна ситуация, когда вы просто захотите немного подправить официальный ebuild.


В любом случае вам нужно в такой ситуации поместить ваш ebuild в локальный оверлей. Оверлей - набор ebuild'ов, которые вы хотите добавить к официальной базе данных (дереву) Portage.



Не храните свои ebuild'ы внутри официального дерева (/usr/portage), поскольку при обновлении они будут удалены.


Создайте каталог для оверлея, и создайте в нём структуру подкаталогов, аналогичную /usr/portage. Поместите туда ваш ebuild. Добавьте PORTDIR_OVERLAY="/path/to/local/overlay" в ваш файл /etc/make.conf.


Обычное место для оверлеев - /usr/local/overlays. Таким образом местом для вашего ebuild'а будет /usr/local/overlays/local. Что же ещё может находиться в /usr/local/overlays.


Во многих случаях, когда вы ищите пакеты, не включённые в официальное дерево, вы находите не только ebuild'ы, но и оверлеи. Например один из самых популярных оверлеев xgl-coffee содержит всё, что нужно для работы XGL. Вы можете установить его в /usr/local/overlays/xgl-coffee что не смешивать с другими оверлеями и обновлять его через SVN.


Вы можете найти подробную информацию относительно использования оверлеев на Gentoo Wiki. Там же вы найдёте список неофициальных оверлеев и описание процесса синхронизации с ними.


Как часто нужно обновляться?


Вам нет смысла обновляться чаще чем раз в сутки. Можно даже реже. Вы можете следить за вашими любимыми пакетами периодически посещая сайты packages.gentoo.org или gentoo-portage.com (или подписавшись на RSS).


Сохраните мир чистым !


Каждый раз, когда вы выполняете emerge some-package, имя пакета записываете в файл /var/lib/portage/world. Когда вы обновляете систему командой emerge --update --deep world - используется список из этого файла. Поэтому этот файл должен быть по возможности короче. В нём должны быть только необходимые пакеты.


Если какой-то пакет является всего лишь зависимостью другого - не стоит держать его в файле world.


Например, если вы устанавливаете пакет, использующий библиотеку wxWidgets, то эта библиотека устанавливается как зависимость и не добавляется в файл world. Если вы деинсталлируете все пакеты использующие эту библиотеку - она перестанет обновляться при выполнении emerge --update (...) world, и будет удалены после вызова emerge --depclean. Единственный случай когда стоит добавить wxWidgets в world - если вы разрабатываете приложения на основе этой библиотеки.


Существует скрипт, помогающий очистить world от всего лишнего. Для установки пакета без занесения его в world используйте опцию --oneshot. Эта опция так же будет хорошем решением при временной установке какого-либо пакета.


Деинсталляция пакетов


Все ваши действия с emerge записываются в файл /var/log/emerge.log. Если вы хотите знать какой пакет собирается в настоящее время - выполните tail /var/log/emerge.log. Утилита genlop (emerge genlop) позволяет извлечь множество различной информации из этого файла. Например genlop -c покажет вам какой пакет собирается в данный момент и попытается предсказать сколько времени осталось до конца сборки.


Удаление временных файлов


Когда сборка пакета завершается с ошибкой - остаётся каталог с временными файлами в /var/tmp/portage. Если вы устраняете проблему и пакет нормально собирается - файлы удаляются. Если же нет - вы можете очистить каталог /var/tmp/portage вручную.


После обновления вы можете удалить устаревшие файлы из /usr/portage/distfiles. Для этого воспользуйтесь утилитой eclean из пакета gentoolkit. Она поможет удалить ненужные файлы. Эта утилита может работать как с исходниками, так и с бинарными пакетами. (просто вызовите её как eclean-dist или eclean-pkg соответственно). Прочитайте страницу man для получения полного списка опций.


Gentoo предоставляет вам огромные возможности по настройке вашей системы. Автор статьи надеется что после прочтения этих строк вы сможете воспользоваться этими возможностями и испытать чувство глубокого удовлетворение от возможности управления любыми аспектами системы. Вам понравиться это ощущение.

* Также имеется утилита: ufed (установка: emerge ufed) для более дружественного просмотра USE флагов