Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Gentoo_x86_Handbook.doc
Скачиваний:
38
Добавлен:
19.09.2019
Размер:
924.16 Кб
Скачать

6. Расширенные возможности Portage

6.A. Введение

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

Конечно, из-за большой гибкости, может появиться огромный список потенциальных случаев. Невозможно рассмотреть здесь все. Вместо этого мы планируем сфокусироваться на некоторых общих случаях, которые вы можете использовать, чтобы справиться с вашими задачами. Если вам нужно более специфически подсказки, вы можете найти их в нашей вики (https://wiki.gentoo.org/)

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

Код 1.1: Читаем man-страницу Portage

$ man portage

$ man make.conf

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

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

Используем /etc/portage/env

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

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

Пример: Используем режим отладки для конкретных пакетов

Как пример, мы включим отладку для пакета media-video/mplayer:

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

Код 2.1: Содержимое /etc/portage/env/debug-cflags

CFLAGS="-O2 -ggdb -pipe"

FEATURES="${FEATURES} nostrip"

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

Код 2.2: Содержимое /etc/portage/package.env

media-video/mplayer debug-cflags

6.C. Вмешиваемся в процесс установки

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

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

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

Чтобы вмешаться в процесс, окружение bash может слушать переменные EBUILD_PHASE, CATEGORY, а также переменные, которые всегда существуют в процессе установки (такие как P, PF, …). На основании этих переменных вы можете выполнять дополнительные шаги.

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

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

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

Код 3.1: Пример /etc/portage/bashrc

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]