Handbook:PPC/Portage/Advanced

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

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


Введение

Для большинства пользователей полученной до сих пор информации достаточно для их повседневных задач в Linux. Но Portage способен на много другое; множество его возможностей предназначены для продвинутых пользователей или применимы только в особых случаях. Однако, это не означает, что их не нужно документировать.

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

Большинство, если не все эти дополнительные возможности можно легко найти, почитав man-страницы, которые идут вместе с Portage:

user $man portage
user $man make.conf

И, наконец, знайте, что эти дополнительные возможности, в случае, если что-то работает не корректно, могут сделать отладку и поиск проблем очень затруднительными. Убедитесь, что сообщили об использовании таких возможностей, когда будете создавать отчет об ошибке.

Переменные окружения для конкретного пакета

Использование /etc/portage/env

По умолчанию, при сборки пакета, будут использоваться переменные окружения, которые определены в /etc/portage/make.conf, такие как CFLAGS, MAKEOPTS и другие. В некоторых случаях, было бы полезно определить другие переменные для некоторых пакетов. Для таких случаев Portage поддерживает использование файлов /etc/portage/env и /etc/portage/package.env.

Файл /etc/portage/package.env содержит список пакетов для которых необходимы отклонения в переменном окружении, а также определенный идентификатор, который сообщит Portage, какие изменения необходимо сделать. Имя идентификатора определяется в свободном формате, Portage будет искать переменные в файле /etc/portage/env/<идентификатор>.

Пример: включение отладки для конкретных пакетов

В качестве пример, мы включим отладку (debugging) для пакета media-video/mplayer.

Сперва установим переменные для отладки в файле, который называется /etc/portage/env/debug-cflags. Имя выбирается произвольно, но, конечно, видна причина такого именования; чтобы сделать более очевидным позже, почему такое именование было сделано.

Файл /etc/portage/env/debug-cflagsПеременные для отладки
CFLAGS="-O2 -ggdb -pipe"
FEATURES="${FEATURES} nostrip"

Далее, отметим пакет media-video/mplayer, чтобы он использовал содержимое этого файла:

Файл /etc/portage/package.envИспользование debug-cflags для пакета mplayer
media-video/mplayer debug-cflags

Вмешиваемся в процесс emerge

Использование /etc/portage/bashrc и связанных файлов

Когда Portage работает с разными ebuild, он использует окружение bash в котором он вызывает различные функции сборки (такие как src_prepare, src_configure, pkg_postinst и так далее). Но Portage также позволяет пользователям определять некоторые части окружения bash.

Преимущество использования заранее определенных частей окружения bash в том, что это позволяет пользователям вмешиваться в процесс emerge на каждом шаге его выполнения. Этого можно добиться для всех команд emerge (через /etc/portage/bashrc) или используя окружение для конкретного пакета (через /etc/portage/env, как это было описано ранее).

Чтобы вмешаться в процесс, окружение bash может слушать переменные EBUILD_PHASE, CATEGORY, а так же как переменные, которые всегда доступны в процессе работы ebuild (такие как P, PF, ...). Основываясь на значениях этих переменных могут быть выполнены дополнительные шаги/функции.

Пример: обновление базы данных файлов

В этом примере мы воспользуемся /etc/portage/bashrc для вызова некоторых приложений с базами данных файлов, чтобы синхронизировать состояние их баз данных с системой. Приложения, используемые в этом примере, aide (утилита обнаружения вторжений) и updatedb (для использования с mlocate) это просто примеры. Не воспринимайте это как руководство для программы AIDE ;-)

Чтобы данном случае воспользоваться /etc/portage/bashrc, мы должны вмешаться в функции postrm (после удаления файлов) и postinst (после установки файлов), потому что именно в этих случаях изменяются файлы в системе.

Файл /etc/portage/bashrcВмешиваемся в функции postinst и postrm
if [ "${EBUILD_PHASE}" == "postinst" ] || [ "${EBUILD_PHASE}" == "postrm" ];
then
  echo ":: Calling aide --update to update its database"
  aide --update
  echo ":: Calling updatedb to update its database"
  updatedb
fi

Выполнения задач после операции --sync

Использование /etc/portage/postsync.d

До этого момента мы говорили только о вмешательстве в процессы ebuild. Однако у Portage также есть и другие важные функции: обновление Gentoo репозитория. Чтобы запустить задачу после обновления Gentoo репозитория, поместите скрипт в каталог /etc/portage/postsync.d и убедитесь, что он отмечен как исполняемый.

Пример: запуск eix-update

Если eix-sync не используется для обновления дерева, то все еще можно обновить его базу данных после выполнения emerge --sync (или emerge-webrsync) добавив в каталоге /etc/portage/postsync.d символьную ссылку на /usr/bin/eix, назвав ее eix-update.

root #ln -s /usr/bin/eix /etc/portage/postsync.d/eix-update
Заметка
Если необходимо использовать другое имя, то необходим скрипт, который вызовет /usr/bin/eix-update. Бинарный файл eix смотрит под каким именем его вызвали, чтобы узнать, какую функцию он должен выполнить. Если символьная ссылка указывает на eix, но ссылка называется не eix-update, то это будет работать не корректно.

Переопределение настроек профиля

Использование /etc/portage/profile

По умолчанию Gentoo использует настройки содержащиеся в профиле на который указывает /etc/portage/make.profile (символьная ссылка на подходящий каталог профиля). Эти профили определяют как специфичные для профиля настройки, так и наследуют настройки из других профилей (через их родительский (parent) файл).

Используя /etc/portage/profile, пользователи могут переопределить настройки профиля, такие как пакеты (какие пакеты считаются частью системного набора (@system)), обязательные USE-флаги и другое.

Пример: добавление nfs-utils в набор system

В случаи использования важной файловой системы на основе NFS, может быть необходимость отметить пакет net-fs/nfs-utils как системный. В этом случае Portage предупредит администраторов, если ему потребуется удалить этот пакет.

Чтобы достичь этой цели, мы добавим пакет в /etc/portage/profile/packages с * перед его именем:

Файл /etc/portage/profile/packagesПомечаем nfs-utils как системный пакет
*net-fs/nfs-utils

Применение нестандартных патчей

Использование epatch_user

Заметка
Функция epatch_user применима к EAPI 5 или меньше. Смотрите функцию eapply_user для EAPI 6 или выше.

Чтобы управлять несколькими ebuild похожим образом, разработчики ebuild используют eclass (вроде библиотек оболочки), в которых определены часто используемые функции. Один такой eclass это epatch.eclass, который предлагает полезную функцию под названием epatch_user.

Функция epatch_user применяет патчи исходного кода, которые найдены в /etc/portage/patches/<category>/<package>[-<version>[-<revision>]], независимо от того, какой каталог был найден первым. К сожалению, не все ebuild автоматически вызывают эту функцию. Поэтому просто положенные патчи в этом каталоге не всегда сработают.

К счастью, информация, предоставленная ранее в этой главе, позволяет пользователям вызвать эту функцию "подцепив" ее, например, в фазе подготовки (prepare). Функция может быть вызвана множество раз, но патч применится только один раз.

Пример: применение патчей к Firefox

Пакет www-client/firefox один из множества пакетов, который вызывает функцию epatch_user из ebuild, так что нет необходимости что-либо менять.

В некоторых случаях (например, разработчик предоставил патч и попросил проверить исправляет ли он ошибку), когда необходимо пропатчить Firefox, просто нужно поместить патч в /etc/portage/patches/www-client/firefox (вероятно лучше использовать полное имя и версию, так чтобы патч не мешал более ранним версиям) и пересобрать Firefox.