Handbook:Parts/Portage/Advanced/ru

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

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

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

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

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

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

Пример: включение отладки для конкретных пакетов
В качестве пример, мы включим отладку (debugging) для пакет.

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

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

Использование /etc/portage/bashrc и связанных файлов
Когда Portage работает с разными ebuild, он использует окружение bash в котором он вызывает различные функции сборки (такие как,  ,   и так далее). Но Portage также позволяет пользователям определять некоторые части окружения bash.

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

To hook in the process, the bash environment can listen to the variables EBUILD_PHASE, CATEGORY as well as the variables that are always available during ebuild development (such as P , PF , ...). Based on the values of these variables, additional steps/functions can then be executed.

Example: Updating the file database
In this example, we'll use to call some file database applications to ensure their databases are up to date with the system. The applications used in the example are (an intrusion detection tool) and  (to use with ), but these are meant as examples. Do not consider this as a guide for AIDE ;-)

To use for this case, we need to "hook" in the   (after removal of files) and   (after installation of files) functions, because that is when the files on the file system have been changed.

Использование /etc/portage/postsync.d
Until now we've talked about hooking into the ebuild processes. However, Portage also has another important function: updating the Portage tree. In order to run tasks after updating the Portage tree, put a script inside and make sure it is marked as executable.

Пример: запуск eix-update
Если не используется для обновления дерева, то все еще можно обновить его базу данных после выполнения  (или ) добавив в каталоге  символьную ссылку на, назвав ее.

Использование /etc/portage/profile
By default, Gentoo uses the settings contained in the profile pointed to by (a symbolic link to the right profile directory). These profiles define both specific settings as well as inherit settings from other profiles (through their parent file).

By using, users can override profile settings such as packages (what packages are considered to be part of the system set), forced use flags and more.

Пример: Добавление nfs-utils в набор system
When using an NFS-based file systems for rather critical file systems, it might be necessary to mark as a system package, causing Portage to heavily warn administrators if they would attempt to unmerge it.

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

Использование epatch_user
To manage several ebuilds in a similar manner, ebuild developers use eclasses (sort-of shell libraries) that define commonly used functions. One of these eclasses is which offers an interesting function called.

The  function applies source code patches that are found in, whatever directory is found first. Sadly, not all ebuilds automatically call this function so just putting a patch in this location might not always work.

Luckily, with the information provided earlier in this chapter, users can call this function by hooking into, for instance, the prepare phase. The function can be called as many times as necessary - it will only apply the patches once.

Пример: применение патчей к Firefox
The package is one of the many that already call   from within the ebuild, so there is no need to override anything specific.

If for some reason (for instance because a developer provided a patch and asked to check if it fixes the bug reported) patching Firefox is wanted, all that is needed is to put the patch in (probably best to use the full name and version so that the patch does not interfere with later versions) and rebuild Firefox.