Handbook:Parts/Working/Portage/ru

Добро пожаловать в Portage
Система Portage — вероятно, самое известное нововведение Gentoo в управлении программным обеспечением. Благодаря высокой гибкости и чрезвычайно богатым возможностям, она зачастую считается лучшим средством управления программным обеспечением из существующих в Linux.

Portage полностью написан на Python и Bash и, следовательно, полностью прозрачен для пользователей, поскольку это скриптовые языки.

Большинство пользователей взаимодействует с Portage с помощью команды. Эта глава не будет дублировать информацию, доступную в emerge man странице. Для полного обзора опций emerge, пожалуйста, обратитесь к странице man:

Ebuilds
When Gentoo's documentation talks about packages, it means software titles that are available to the Gentoo users through the Gentoo repository. This repository is a collection of ebuilds, files that contain all information Portage needs to maintain software (install, search, query, ...). These ebuilds reside in by default.

Всякий раз, когда кто-то просит Portage выполнить некоторые действия в отношении некоторого программного обеспечения, он будет использовать ebuild в качестве базы. Поэтому важно, регулярно обновлять ebuild в системе, позволяя Portage узнать о новых программах, обновлениях безопасности и т.д.

Updating the Gentoo repository
The Gentoo repository is usually updated with, a fast incremental file transfer utility. Updating is fairly simple as the command provides a front-end for :

Sometimes firewall restrictions apply that prevent from contacting the mirrors. In this case, update the Gentoo repository through Gentoo's daily generated snapshots. The tool automatically fetches and installs the latest snapshot on the system:

An additional advantage of using is that it allows the administrator to only pull in Gentoo repository snapshots that are signed by the Gentoo release engineering GPG key. More information on this can be found in the Portage features section on fetching validated Gentoo repository snapshots.

Поиск программного обеспечения
There are multiple ways to search through the Gentoo repository for software. One way is through itself. By default, returns the names of packages whose title matches (either fully or partially) the given search term.

Например, чтобы найти все пакеты, содержащие «pdf» в названии:

Для поиска пакетов еще и по тексту описания используйте опцию  (или  ):

Обратите внимание, что вывод команды возвращает много информации. Поля четко обозначены, поэтому мы не будем вдаваться в подробности их значения:

Установка программы
Когда программное обеспечение было найдено, его легко можно установить командой. Например, для установки gnumeric:

Поскольку многие приложения зависят друг от друга, любая попытка установить какой-либо пакет может привести к установке нескольких зависимостей. Не беспокойтесь об этом, Portage учтет и эти зависимости. Чтобы увидеть что Portage будет устанавливать, добавьте опцию. Например:

Во время установки пакета, Portage скачает необходимый исходный код из интернета (если необходимо) и по умолчанию сохранит его в. После этого он распакует, скомпилирует и установить пакет. Для того чтобы Portage только загрузил исходный код без его установки, добавьте опцию  к команде emerge:

Поиск документации для установленных пакетов
Many packages come with their own documentation. Sometimes, the  USE flag determines whether the package documentation should be installed or not. To see if the  USE flag is used by a package, use.

The best way of enabling the  USE flag is doing it on a per-package basis via, so that only the documentation for the wanted packages is installed. For more information, please read the USE flags chapter.

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

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

Когда удаляется пакет из системы, зависимости от этого пакета, которые установились при установки пакета, все еще остаются в системе. Для того чтобы Portage нашел все зависимости, которые теперь можно удалить, используйте опцию emerge  о которой мы расскажем позже.

Обновление системы
To keep the system in perfect shape (and not to mention install the latest security updates) it is necessary to update the system regularly. Since Portage only checks the ebuilds in the Gentoo repository, the first thing to do is to update this repository. When the Gentoo repository is updated, the system can be updated using. In the next example, the  option is also used which will tell Portage to display the list of packages it wants to upgrade and ask for confirmation:

Portage будет искать более новые версии для установленных приложений. Однако, будут проверятся только явно установленные (приложения, перечисленные в ), но не будут тщательно проверятся их зависимости. Чтобы обновить зависимости этих пакетов тоже, добавьте опцию :

Но все еще это не означает все пакеты: некоторые пакеты в системе необходимы для компиляции и во время создания пакетов, но как только пакет установлен, эти зависимости больше не требуется. Portage называет это "build зависимостями". Чтобы обновить и эти пакеты тоже добавьте опцию :

Поскольку обновления по безопасности бывают и в пакетах, которые явно не установлены в системе (но которые "тянутся" в качестве зависимостей для других программ), рекомендуется изредка запускать эту команду.

Когда настройки USE в системе были изменены, то рекомендуется также добавить. В этом случаи Portage проверит требуется ли после этих изменений установить новые пакеты или перекомпилировать существующие:

Метапакеты
Some packages in the Gentoo repository don't have any real content but are used to install a collection of packages. For instance, the package will install a complete KDE environment on the system by pulling in various KDE-related packages as dependencies.

Удаление такого пакета из системы, запуская пакет, не принесет должного эффекта, так как его зависимости останутся в системе.

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

Все это можно сделать следующими тремя командами:

входит в пакет ; не забудьте установить его:

Лицензии
Начиная с версии Portage 2.1.7 можно принять или отклонить установку программного обеспечения основываясь на лицензии. Все пакеты в дереве содержат запись LICENSE в ebuild. Запуск покажет лицензию пакета.

По умолчанию, Portage позволяет все лицензии, за исключением лицензионного соглашения с конечным пользователем (EULA), которое требуют прочтения и подписание соглашения о принятии.

Переменная, которая контролирует допустимые лицензии называется ACCEPT_LICENSE. Ее можно настроить в файле. В следующем примере показано значение по умолчанию:

При такой конфигурации пакеты требующие подтверждения EULA при инсталляции не будут установлены. Пакеты без EULA можно будет установить.

Можно настроить ACCEPT_LICENSE глобально в файле или специально для отдельного пакета в файле.

For example, to allow the license for the  package, add the following to :

This permits installation of google-chrome versions for versions greater than or equal to 55.0.2883.87, but not versions less than 55.0.2883.87.

License groups defined in the ACCEPT_LICENSE variable are prefixed with an  sign. A commonly requested setting is to only allow the installation of free software and documentation. To accomplish this, remove all currently accepted licenses (using ) and then only allow the licenses in the FREE group as follows:

В этом случае "free", в основном, определяется FSF и OSI. Любой пакет, лицензия которого не соответствует этим требованиям, не будет установлен на системе.

Терминология
Как отмечалось ранее, Portage поддерживает многие возможности и является чрезвычайно мощным инструментом, как и другие инструменты управления программами. Чтобы понять это, разберем несколько аспектов Portage, не вдаваясь в детали.

С помощью Portage разные версии отдельного пакета могут сосуществовать в одной системе. В то время как другие системы управления стремятся называть пакеты в соответствии с версией (например freetype и freetype2), Portage использует технологию под названием SLOT. Ebuild присваивает определенный SLOT для одной версии пакета. Ebuild с разными SLOT способны сосуществовать в одной системе. Например, пакет freetype имеет разные ebuild для SLOT="1" и SLOT="2".

There are also packages that provide the same functionality but are implemented differently. For instance, metalogd, sysklogd, and syslog-ng are all system loggers. Applications that rely on the availability of "a system logger" cannot depend on, for instance, metalogd, as the other system loggers are as good a choice as any. Portage allows for virtuals: each system logger is listed as an "exclusive" dependency of the logging service in the logger virtual package of the virtual category, so that applications can depend on the package. When installed, the package will pull in the first logging package mentioned in the package, unless a logging package was already installed (in which case the virtual is satisfied).

Software in the Gentoo repository can reside in different branches. By default the system only accepts packages that Gentoo deems stable. Most new software titles, when committed, are added to the testing branch, meaning more testing needs to be done before it is marked as stable. Although the ebuilds for those software are in the Gentoo repository, Portage will not update them before they are placed in the stable branch.

Some softwares are only available for a few architectures. Or the software doesn't work on the other architectures, or it needs more testing, or the developer that committed the software to the Gentoo repository is unable to verify if the package works on different architectures.

Каждая инсталляция Gentoo, также придерживается определенного профиля, который содержит помимо прочей информации еще и список пакетов, необходимых для работоспособности системы.

Заблокированные пакеты
В файлах ebuild есть специальные поля, сообщающие Portage о зависимостях. Есть две возможные зависимости: сборочные зависимости, объявленные в переменной DEPEND и зависимости выполнения, аналогично объявленные в RDEPEND. Когда одна из этих зависимостей явно указывает на пакет или виртуальный пакет, которые не совместимы, это вызывает блокировку.

Хотя последние версии Portage достаточно умны, чтобы обойти незначительные блокировки без вмешательства пользователя, иногда такие блокировки необходимо разрешить вручную.

Чтобы исправить блокировку, пользователи могут, либо не устанавливать пакет, либо удалить конфликтующий пакет. В данном примере, можно отказаться от установки Postfix или сперва удалить SSMTP.

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

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

Замаскированные пакеты
Если попытаться установить пакет, который не доступен для системы, то произойдет ошибка маскировки. Пользователи должны попытаться установить другую программу, которая доступна для системы, или дождаться когда пакет будет помечен как доступный. Всегда существует всегда причина, по которой пакет был замаскирован:

Необходимо изменить USE-флаг
Сообщение об ошибке может отображаться и так, если  не установлен:

Такое предупреждение или ошибка происходит когда пакет, который требуется установить, зависит не только от другого пакета, но также требует, чтобы этот пакет был скомпилирован с особым USE-флагом (или набором USE-флагов). В данном примере, пакет app-text/feelings должен быть скомпилирован с USE="test", но этот USE-флаг не задан в системе.

Чтобы исправить это добавьте нужный USE-флаг к глобальным USE-флагам в файле или добавьте его для отдельного пакета в файле.

Отсутствующие зависимости
Приложение, которое требуется установить, зависит от другого пакета, который не доступен системе. Пожалуйста, проверьте Bugzilla, возможно проблема известна, и если нет, пожалуйста, сообщите об этом. Если система не настроена для смешивания ветвей, то этого не должно происходить, и это баг.

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

Циклические зависимости
Two (or more) packages to install depend on each other and can therefore not be installed. This is most likely a bug in one of the packages in the Gentoo repository. Please re-sync after a while and try again. It might also be beneficial to check Bugzilla to see if the issue is known and if not, report it.

Ошибка загрузки
Portage не смог загрузить исходный код для данного приложения и попытается продолжить установку других приложений (если это возможно). Эта ошибка может быть из-за неправильно синхронизированного зеркала или, возможно, ebuild указывает на неверное место. Также сервер, где находятся исходные коды, может временно недоступен.

Повторите действие через час, чтобы проверить, повторяется ли еще ошибка.

Защита системного профиля
Пользователь попросил удалить пакет, входящий в состав базовых пакетов системы. Он записан в профиле, как необходимый, и поэтому его не надо удалять из системы.

Ошибка проверки подписи
This is a sign that something is wrong with the Gentoo repository - often, it is because a developer may have made a mistake when committing a package to the tree.

Когда проверка дайджеста завершается ошибкой, не пытайтесь обновить дайджест пакета лично. Запуск не решит проблему; а почти наверняка сделает его хуже!

Instead, wait an hour or two for the tree to settle down. It's likely that the error was noticed right away, but it can take a little time for the fix to trickle down the Gentoo repository. Check Bugzilla and see if anyone has reported the problem yet or ask around on (IRC). If not, go ahead and file a bug for the broken package.

Once the bug has been fixed, re-sync the Gentoo repository to pick up the fixed digest.