Система Portage — вероятно, самое известное нововведение Gentoo в управлении программным обеспечением. Благодаря высокой гибкости и чрезвычайно богатым возможностям, она зачастую считается лучшим средством управления программным обеспечением из существующих в Linux.
Portage полностью написана на
Большинство пользователей взаимодействует с Portage с помощью команды
$ man emerge
Говоря о пакетах, мы часто имеем в виду программы, доступные пользователям
Gentoo через дерево Portage. Дерево Portage — это набор
Когда Portage по вашему поручению выполняет любые действия над пакетами программ, эти действия опираются на сборочные файлы, имеющиеся в системе. Поэтому необходимо регулярно обновлять сборочные файлы, чтобы Portage знала о новых программах, обновлениях, связанных с безопасностью и т.д.
Дерево Portage обычно обновляется с помощью
# emerge --sync
Если rsync выполнить невозможно из-за ограничений межсетевого экрана, дерево
Portage все-таки можно обновить из ежедневных «снимков»,
создаваемых нами. Для автоматического извлечения и установки в системе
новейшего снимка служит утилита
# emerge-webrsync
Дополнительным преимуществом использования
Для поиска программ в дереве Portage по названию можно использовать встроенные
возможности команды
Например, чтобы найти все пакеты, содержащие «pdf» в названии:
$ emerge --search pdf
Для поиска пакетов еще и по тексту описания можно использовать параметр
$ emerge --searchdesc pdf
Посмотрев на сообщения команды, вы отметите, что вам дается множество информации. Поля четко обозначены, поэтому мы не будем вдаваться в подробности их значения:
* net-print/cups-pdf Latest version available: 1.5.2 Latest version installed: [ Not Installed ] Size of downloaded files: 15 kB Homepage: http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/ Description: Provides a virtual printer for CUPS to produce PDF files. License: GPL-2( * net-print/cups-pdf Последняя доступная версия: 1.5.2 Последняя установленная версия: [ не установлен ] Размер загружаемых файлов: 15 kB Веб-страница: http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/ Описание: Снабжает CUPS виртуальным принтером для печати PDF-файлов. Лицензия: GPL-2 )
После того, как вы нашли нужное программное обеспечение, его можно легко
установить с помощью команды
# emerge gnumeric
Так как множество приложений зависит друг от друга, любая попытка установить
какой-либо пакет программ может повлечь за собой также установку дополнительных
пакетов. Не беспокойтесь, Portage справится и с этим. Если вы захотите
выяснить, что именно Portage собирается установить вместе с нужным вам пакетом,
добавьте параметр
# emerge --pretend gnumeric
После команды на установку пакета, Portage загружает из интернета необходимый
исходный код (при необходимости), и по умолчанию сохраняет его в каталоге
# emerge --fetchonly gnumeric
Многие пакеты содержат собственную документацию. Иногда USE-флаг
(alsa-lib - это всего лишь пример) # emerge -vp alsa-lib [ebuild N ] media-libs/alsa-lib-1.0.14_rc1 -debug +doc 698 kB
Лучшим способом включения USE-флага
Документация от вновь установленного пакета обычно находится в подкаталоге
каталога
# ls -l /usr/share/doc/alsa-lib-1.0.14_rc1 total 28 -rw-r--r-- 1 root root 669 May 17 21:54 ChangeLog.gz -rw-r--r-- 1 root root 9373 May 17 21:54 COPYING.gz drwxr-xr-x 2 root root 8560 May 17 21:54 html -rw-r--r-- 1 root root 196 May 17 21:54 TODO.gz(или используйте для поиска интересных файлов команду equery :) # equery files alsa-lib | less media-libs/alsa-lib-1.0.14_rc1 * Contents of media-libs/alsa-lib-1.0.14_rc1: /usr /usr/bin /usr/bin/alsalisp(выдача обрезана)
Когда вы захотите удалить пакет из системы, используйте команду
# emerge --unmerge gnumeric
После удаления пакета из системы, пакеты, установленные автоматически, потому
что от них зависел удаленный пакет, остаются. Чтобы Portage выявила все
когда-то нужные пакеты, которые теперь можно удалить, используйте команду
Чтобы система сохранялась в отличной форме (не говоря уже об установке
свежайших обновлений, связанных с безопасностью), ее нужно регулярно обновлять.
Так как Portage просматривает сборочные файлы только в локальном дереве
Portage, сперва потребуется обновить его. Обновив дерево Portage, вы
сможете обновить систему командой
# emerge --update --ask world
Portage будет искать более новые версии установленных приложений. Однако
проверяются только версии приложений,
# emerge --update --deep world
Но это все еще не означает
# emerge --update --deep -with-bdeps=y world
Поскольку обновления, относящиеся к безопасности, случаются и в пакетах, явным образом не устанавливались (но были «подтянуты» из-за того, что он них зависят другие программы), рекомендуется изредка запускать эту команду.
Если вы меняли какие-либо из
# emerge --update --deep --with-bdeps=y --newuse world
У некоторых пакетов в дереве Portage нет содержимого как такового, и они
используются для установки набора других пакетов. Например, пакет
Если вы когда-либо захотите удалить из системы такой пакет, запуск
В Portage существует возможность удаления остаточных зависимосей, но так как
зависимости программ меняются со временем, доступность программного
обеспечения, прежде всего требуется полностью обновить всю систему, включая
реализацию изменений, произведенных путем модификации USE-флагов. После этого
можно запустить
Со всем этим управляются следующие три команды:
# emerge --update --deep --newuse world # emerge --depclean # revdep-rebuild
# emerge gentoolkit
Начиная с Portage версии 2.1.7, вы можете принять или отклонить приложения,
в зависимости от его лицензии. Все пакеты в дереве содержат запись
По умолчанию, Portage разрешает все лицензии, кроме Соглашения с Конечным Пользователем (EULA), потому что она требует прочтения и соглашения с ней.
Переменная, которая контролирует разрешенные лицензии, называется
ACCEPT_LICENSE="* -@EULA"
С данной конфигурацией пакеты, которые требуют взаимодействия в процессе
установки, чтобы согласиться с их EULA,
Вы можете установить
Например, если вы хотите позволить лицензию
app-crypt/truecrypt truecrypt-2.7
Это разрешит установку версий truecrypt, имеющих лицензию
Группы лицензий, определенные в
ACCEPT_LICENSE="@GPL-COMPATIBLE @OSI-APPROVED @EULA atheros-hal BitstreamVera"
Если вы хотите только свободное программное обеспечение и документацию на вашей системе, вы можете использовать следующую настройку:
ACCEPT_LICENSE="-* @FREE"
В данном случае "свободная" по определению
Как уже сказано, Portage — чрезвычайно мощная система, поддерживающая множество возможностей, не хватающих другим системам управления программами. Чтобы это стало понятно, разберем несколько аспектов Portage, не вникая в подробности.
С помощью Portage разные версии отдельного пакета могут сосуществовать в одной
системе. В то время, как другие системы управления стремятся называть
пакеты в соответствии с версией (например
Существуют также пакеты, выполняющие одни и те же функции, но отличающиеся
в реализации. Например
Программное обеспечение может располагаться в различных ветвях дерева Portage. По умолчанию в системе разрешено только использование стабильных пакетов. Большинство новых программ при поступлении включаются в тестовую ветвь, что указывает на необходимость дополнительного тестирования перед тем, как включить их в стабильные. Хотя в дереве Portage и видны сборочные файлы для таких программ, Portage не станет обновлять их до тех пор, пока они не будут помещены в стабильную ветвь.
Некоторые программы имеются не для всех архитектур. Либо они не работают в определенных архитектурах, либо требуют дополнительного тестирования, или у разработчика нет возможности проверить, работает ли пакет в различных архитектурах.
Каждая установка Gentoo придерживается определенного
[blocks B ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)
!!! Error: the mail-mta/postfix package conflicts with another package. !!! both can't be installed on the same system together. !!! Please use 'emerge --pretend' to determine blockers.( !!! Ошибка: пакет mail-mta/postfix конфликтует с другим пакетом. !!! оба не могут находиться в системе одновременно. Пожалуйста, !!! запустите 'emerge --pretend' для выявления блокирующих пакетов. )
В файлах ebuild есть специальные поля, сообщающие Portage о зависимостях.
Возможны два вида зависимости: зависимость сборки, объявленная в
Хотя новые версии Portage достаточно умны, чтобы обойти маленькие блокировки без вмешательства пользователя, может случиться, что вам нужно будет починить их самим, как объяснено ниже.
Для разблокировки можно отказаться от установки пакета или предварительно
удалить конфликтующего пакета. В данном примере можно отказаться от установки
Вы также можете увидеть блокирующие пакеты с определенной версией, например <media-video/mplayer-1.0_rc1-r2. В данном случае, обновление до более новой версии блокирующего пакета уберет блокировку.
Также возможно, что два пакета, подлежащие установке, блокируют друг друга. В этом
редчайшем случае следует определить, зачем вам устанавливать оба пакета.
В большинстве случаев можно обойтись одним. Если это окажется не так, то,
пожалуйста, заведите отчет об ошибке в
!!! all ebuilds that could satisfy "bootsplash" have been masked.(!!! все сборки, удовлетворяющие "bootsplash", замаскированы.)
!!! possible candidates are: - gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword) - lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword) - sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword) - dev-util/cvsd-1.0.2 (masked by: missing keyword) - games-fps/unreal-tournament-451 (masked by: package.mask) - sys-libs/glibc-2.3.2-r11 (masked by: profile) - net-im/skype-2.1.0.81 (masked by: skype-eula license(s))( !!! возможные кандидаты: - gnome-base/gnome-2.8.0_pre1 (маскировка: ключ ~x86) - lm-sensors/lm-sensors-2.8.7 (маскировка: ключ -sparc) - sys-libs/glibc-2.3.4.20040808 (маскировка: ключ -*) - dev-util/cvsd-1.0.2 (маскировка: ключ отсутствует) - games-fps/unreal-tournament-451 (masked by: package.mask) - sys-libs/glibc-2.3.2-r11 (маскировка: profile) - net-im/skype-2.1.0.81 (маскировка: skype-eula лицензия))
Когда вы собираетесь установить пакет, не предназначенный для вашей системы, выдается ошибка маскировки. Нужно попытаться установить другую программу, существующую для вашей системы, или дождаться, пока пакет станет доступным. Всегда есть причина, по которой пакет замаскирован:
The following USE changes are necessary to proceed: #required by app-text/happypackage-2.0, required by happypackage (argument) >=app-text/feelings-1.0.0 test
Ошибка может быть показана и так, если флаг
emerge: there are no ebuilds built with USE flags to satisfy "app-text/feelings[test]". !!! One of the following packages is required to complete your request: - app-text/feelings-1.0.0 (Change USE: +test) (dependency required by "app-text/happypackage-2.0" [ebuild]) (dependency required by "happypackage" [argument])
Такое предупреждение, либо ошибка возникает, когда вы хотите установить пакет,
который не только зависит от другого приложения, но и требует, чтобы это
приложение было установлено с некоторым USE-флагом (либо набором USE-флагов).
В данном примере, пакет
Чтобы решить данную проблему, либо добавьте данный USE-флаг в ваши глобальные
USE-флаги, в
emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4". !!! Problem with ebuild sys-devel/gcc-3.4.2-r2 !!! Possibly a DEPEND/*DEPEND problem.( emerge: нет сборок, удовлетворяющих ">=sys-devel/gcc-3.4.2-r4". !!! Проблема с ebuild sys-devel/gcc-3.4.2-r2 !!! Возможно, ошибка в DEPEND/*DEPEND. )
Приложение, которое вы пытаетесь установить, зависит от другого пакета,
недоступного вашей системе. Пожалуйста, проверьте, есть ли такой запрос в
[ Results for search key : listen ] [ Applications found : 2 ] * dev-tinyos/listen [ Masked ] Latest version available: 1.1.15 Latest version installed: [ Not Installed ] Size of files: 10,032 kB Homepage: http://www.tinyos.net/ Description: Raw listen for TinyOS License: BSD * media-sound/listen [ Masked ] Latest version available: 0.6.3 Latest version installed: [ Not Installed ] Size of files: 859 kB Homepage: http://www.listen-project.org Description: A Music player and management for GNOME License: GPL-2 !!! The short ebuild name "listen" is ambiguous. Please specify !!! one of the above fully-qualified ebuild names instead.( !!! Короткое название ebuild "listen" неоднозначно. Пожалуйста, !!! вместо него укажите одно вышеприведенных полных названий ebuild.)
Название приложения, которое вы собираетесь установить, соответствует более чем одному пакету. Требуется также указать название категории. Portage предложит вам возможные варианты.
!!! Error: circular dependencies: ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1 ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2( !!! Ошибка: циклические зависимости: ebuild / net-print/cups-1.1.15-r2 зависит от ebuild / app-text/ghostscript-7.05.3-r1 ebuild / app-text/ghostscript-7.05.3-r1 зависит от ebuild / net-print/cups-1.1.15-r2 )
Два или более пакета, которые вы хотите установить, взаимно зависимы, и в
результате их установка невозможна. Скорее всего, это ошибка в дереве Portage.
Пожалуйста, выждав время, обновите дерево Portage, и попытайтесь снова. Вы
можете также проверить, есть ли эта ошибка в
!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...(...) !!! Some fetch errors were encountered. Please see above for details.( !!! Ошибка при извлечении sys-libs/ncurses-5.4-r5, продолжение... (...) !!! При извлечении произошли ошибки. Подробности выше. )
Portage не смогла загрузить исходный код данного приложения и попытается продолжить установку других приложений (если запланирована). Эта ошибка может произойти из-за неправильно синхронизированного зеркала, или из-за того, что ebuild указывает на неверное место. Сервер, где находятся исходные коды, также может почему-либо не работать.
Повторите действие через час, чтобы посмотреть, повторится ли эта ошибка.
!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage' !!! This could be damaging to your system.( !!! Попытка удаления пакетов из системного профиля. 'sys-apps/portage' !!! Это может повредить вашей системе. )
Вы попросили удалить пакет, входящий в состав базовых пакетов вашей системы. Он отмечен в вашем профиле как обязательный, и его не следует удалять из системы.
Иногда, когда вы пытаетесь установить пакет, этого не происходит, и появляется ошибка:
>>> checking ebuild checksums !!! Digest verification failed:
Это является знаком, что с деревом Portage что-то не так — часто это потому, что разработчик допустил ошибку при коммите пакета в дерево.
Когда проверка дайджеста не проходит,
Вместо этого, подождите час или два, чтобы дерево обновилось. Скорее всего,
ошибку уже заметили, но может понадобиться некоторое время, чтобы починить
дерево Portage. Пока вы ждете, проверьте
Как только вы увидите, что баг починили, вы можете ресинхронизировать дерево, чтобы у вас появился починенный дайждест.