Учебник по системе Portage

Автор: Bruce A. Locke

Перевод: Иван Зенков

Редактор: Алексей Федорчук

Этот учебник, общий обзор Portage, детально описывающий процесс конфигурации, установки и поддержки системы.

0.9.6 Dec 24, 2002

Portage: Краткий обзор

Краткий обзор

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

Gentoo Linux - это дистрибутив, состоящий из Portage и 1,500 скриптов сборки программного обеспечения, называемых ebuild. Эти ebuild-скрипты сообщают Portage, как откомпилировать и установить программный пакет. С помощью profiles и программы emerge пользователи и разработчики могут использовать Portage для установки и обновления пакетов, составляющих как основу операционной системы, так и ее приложения.

Gentoo Linux - система "компилируемая на лету". Процесс установки в Gentoo Linux вовлекает компилятор и специальную среду компоновки, с помощью которой Portage загружает исходные файлы из Интернета и формирует остальную часть "ядра", с любыми желаемыми приложениями. Хотя Portage и поддерживает использование собранных бинарных пакетов, используются они, как правило, только разработчиками, которым нужно быстро восстановить какой-нибудь необходимый пакет, или пользователями, которые компилируют программы на более мощной машине для использования на слабой.

За счет этого Portage и становится высоко конфигурируемой системой, которая, оперируя компилятором, устанавливает пакеты. Очень немного установок Gentoo Linux проходят одинаково. В сущности, когда пользователь устанавливает Gentoo Linux, система Portage настраивает и компилируют его, исходя из опций, указанных в конфигурационном файле и внутри самого ebuild-скрипта.

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

Система Portage - это слияние языка Python с сценариями ebuild, базирующимися на Bash-скриптинге. Вместо простого использования сборочных файлов и команды make, Portage выигрывает за счет Python и легких в использовании shell-скриптов с некоторыми объектно-ориентированными характеристиками. Все это для того, чтобы сделать действительно мощную систему. Мы склонны считать Portage лучшей системой портов по сравнению с существующими аналогами.

Некоторые из дополнительных особенностей Portage - это возможность иметь в дереве множество версий и ревизий одного и того же пакета, условные зависимости и поддержка дополнительных возможностей, низкоуровневое управление пакетами, установка с диска, защита конфигурационных файлов и т.д. Многие из этих особенностей подробно рассмотрены в данном руководстве.

Условные зависимости и дополнительные возможности

Система Portage уникальна своей гибкостью, которую она предоставляет пользователям. Традиционные системы портов BSD могут поддерживать только одину версию пакета в (данном) дереве портов. Portage же не имеет никакого ограничения. Для установки могут быть доступны множество различных версий одного и того же пакета. Пакеты, которые требуются для компиляции и использования другого пакета, могут быть определены или просто по имени, или по имени с добавленным номером версии. Это позволяет безопасно хранить несколько версий в пределах одного дерева.

Система зависимости также поддерживает условные зависимости. Portage обладает эффективной особенностью, называемой системой настройки USE. Изменив одну переменную в конфигурационном файле Portage, вы можете отключать дополнительную поддержку (и таким образом потребность зависимости) специфических особенностей или библиотек для всех компилируемых пакетов. Это очень гибкая и мощная система, подробней о которой написано в следующей главе.

Кроме того, Portage поддерживает СЛОТЫ. В период развития Gentoo Linux его разработчикам часто требовались разные версии пакетов (библиотек) в установленном виде, чтобы удовлетворить запросы других пакетов. Традиционный подход к решению этой проблемы состоял в том, чтобы обработать различные версии того же самого пакета как различные пакеты с немного разными именами.

Вместо этого разработчики научили Portage, как обрабатывать и поддержать несколько версий того же самого пакета, используя СЛОТЫ (SLOTS). Мы рассмотрим пример с обычной библиотекой freetype. Версия 1.x несовместима с версией 2.x, но обе необходимы, чтобы удовлетворить зависимости различных пакетов. Большинство систем портов называют пакет "freetype" для freetype 1.x и "freetype2" для 2.x. Мы рассматриваем этот подход, как нарушение системы управления пакетами. Мы просто назначили СЛОТ номер 1 на первую версию и номер 2 - на вторую. С этой информацией Portage может прослеживать обе версии и модернизировать их, если произведены соответствующие обновления.

Конфигурационные профили

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

Усилия, потраченные на создание дистрибутива Gentoo Linux, привели к целой коллекции ebuild-файлов и множеству переменных в профиле. Конфигурационный профиль определяет, какие пакеты жизненно важны для "ядра" системы. Он позволяет разработчикам блокировать и разблокировать определенные пакеты и/или версии, чтобы временно отключить из них сломанные и т.д. Ebuild-файлы просто сообщают Portage как собирать и устанавливать пакеты с параметрами профиля.

Настройка Portage

Введение

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

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

Конфигурационные файлы Portage

Почти все рассмотренные нами конфигурационные опции могут быть найдены в /etc/make.conf, /etc/make.profile/make.defaults и /etc/make.global. Файл /etc/make.conf содержит различный набор переменных. Portage сначала проверит все действующие переменных среды вообще, если они не найдены - он также проверит /etc/make.conf. Если ничего не найдено в /etc/make.conf, он проверит /etc/make.profile/make.defaults. Если и там тоже ничего не найдено, он возьмет настройки по умолчанию из /etc/make.globals. Пожалуйста, обратите внимание, что все пользовательские настройки должны быть указаны либо в среде оболочки, либо в файле /etc/make.conf, который специально для них предназначен. Важно обратить внимание, что любая опция, определенная в /etc/make.conf будет почти всегда отменять установку, сделанную в /etc/make.global. Все содержимое /etc/make.conf и /etc/make.global может рассматриваться в качестве общесистемной глобальной переменной для использования в Portage.

Для проверки выставленных опций рекомендуется сначала заглянуть в /etc/make.conf, а уж затем в /etc/make.globals. Опция, указанная в /etc/make.conf отменит опцию указанную в /etc/make.globals.

Настройки USE

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

Эффект параметров настройки USE на пакетах зависит от того, поддерживается ли программное обеспечение непосредственно и имеет ли ebuild-скрипт установку USE, как дополнительную особенность. Если программное обеспечение не имеет такой поддержки, тогда соответствующая установка USE не будет иметь никакого эффекта. Также многие пакетные зависимости не рассматривают опции USE и их изменение не будет иметь никакого эффекта, поскольку пакет обладает принудительными зависимостями. Список ключевых слов USE, используемых пакетами, может быть найден в строках DEPEND и RDEPEND в любом ebuild-файле.

Список всех настроек USE, используемых в Gentoo Linux, может быть найден в /usr/portage/profiles/use.desc/. Каждая опция USE перечислена в одной строке с кратким описанием ее предназначения.

Portage определяет, включена USE или нет, проверяя до четырех различных локаций. Эти локации изменяют параметры настройки USE в пути к "стекам". Portage проходит через каждую локацию и запоминает, если в предыдущей локации допускалась или нет данная опция USE. Настройка USE изменяется в течение прохода Portage через каждую локацию.

Порядок проверки локаций настроек USE устанавливается в USE_ORDER файла /etc/make.globals. Чтобы отключать локации, просто удалите их из USE_ORDER.

Следующее описание каждой локации перечислено в порядке, определенном в настройках Portage по умолчанию для USE_ORDER.

Defaults

Portage определяет набор заданных по умолчанию ключей USE. Это указано в /make.defaults и определено в make.defaults файле для любой конфигурации Portage. Поскольку /etc/make.profile является ссылкой, а действительный набор ключей хранится в конфигурационном файле etc/make.profile/make.defaults. Не рекомендуется его редактировать поскольку смена профиля сменит и настройки.

Auto

Эти опции определены в профиле Portage use.defaults (/etc/make.profile/use.defaults). Каждая стока в файле состоит из USE и соответствующего пакета. Если пакет, перечисленный напротив ключевого слова USE, в настоящее время установлен, тогда опция USE рассматривается допустимой. Таким образом, например, если Вы установили /x11-base/xfree/ и не отключали опцию USE, тогда опция X допускается глобально при том, что пакет установлен. Не рекомендуется редактировать этот файл, поскольку смена профиля сменит и настройки.

Conf

Если конфигурационная опция USE определена в /etc/make.conf, то в таком случае она включена. Если ее там нет, то будет проверен /etc/make.globals. Открыв этот файл можно увидеть что-то вроде:

USE="slang readline gpm berkdb gdbm tcpd pam libwww ssl gb tk
     lm_sensors lvm ldap tex bonobo sdl gtk xfs evo pda ldap
     mmx mitshm perl python guile ruby postgres dvd 3dnow tcl
     lcms gif sdl vorbis ogg oss libg++ directfb decss snmp
     gnome X opengl mozilla pdflib gpg -nls gd xface jpilot
     -kde -qt -esd -motif -alsa oggvorbis"

Параметры настройки USE включены, если просто напечатано название опции. Параметры настройки USE будут выключены, если поместить символ - перед названием опции. Например, gnome включает поддержку GNOME, а -motif выключает поддержку motif.

Файл /etc/make.conf - самое рекомендуемое место для включения и отключения USE опций, если вы их не определили в предыдущих локациях. Portage автоматически не перезаписывает этот файл.

Env

Значение USE может быть задано вручную, используя среду оболочки.

export USE="-gnome"
emerge net-im/gaim

Это позволяет использовать некий набор опций USE для установки одного или более пакетов. В таком случае USE будет активна до тех пор, пока emerge запускается в той же самой оболочке.

Подобная запись USE опции в Portage во время установки пакета не долговечна. Если пакет будет повторно установлен или обновлен в будущем, то опции USE, указанные подобным образом при первой сборки, не будут использованы.

Опции компилятора

Опции компилятора, используемые Portage при сборке пакета, могут быть указаны в /etc/make.conf путем редактирования CHOST, CFLAGS и CXXFLAGS. Строка CHOST указывает платформу, а настройки CFLAGS и CXXFLAGS используются для указания флагов C и C++ соответственно.

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

Пользователи с многопроцессорными системами выиграют от использования опции MAKEOPTS в /etc/make.globals, которая, передаваясь make во время компиляции, включает несколько копий gcc.

Директории

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

  • PORTDIR - Местоположение дерева Portage;
  • DISTDIR - Локальный архив загруженных файлов;
  • PKGDIR - Локальных архив для самостоятельно созданных tbz2 пакетов;
  • RPMDIR - Локальный архив для самостоятельно созданных RPM пакетов
  • CURRENTFILE - ???;
  • PORTAGE_TMPDIR - Временная директория используемая при компиляции пакета.;
  • BUILD_PREFIX - Родственно PORTAGE_TMPDIR;
  • PKG_TMPDIR - Родственно PKGDIR.

Защита конфигурационных файлов

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

Защищенные директории могут быть указаны в строке CONFIG_PROTECT файлов /etc/make.conf или /etc/make.globals. Не защищенные файл в поддиректории защищенной директории можно определить в строке CONFIG_PROTECT_MASK.

Следующее просто пример, его не надо копировать.

CONFIG_PROTECT="/etc /usr/share/config /usr/kde/2/share/config"
CONFIG_PROTECT_MASK="/etc/gconf /etc/init.d /etc/pam.d"

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

emerge --help config

Дополнительные особенности

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

Список подобных ОСОБЕННОСТЕЙ можно прописать в /etc/make.conf или /etc/make.globals. Вот их список:

  • digest: Автоматически создает каталог для новых ebuild скриптов.
  • cvs: Автоматический передавать новые каталоги по cvs.
  • sandbox: Включение "sandbox" для защиты префикса пути.
  • noclean: Portage никогда не чистится автоматически.
  • noauto: Автоматически не выполнять предшествующие шаги ebuild.

SYNC настройки в Portage

Portage позволяет обновлять свое дерево портов через rsync. Если вы предпочитаете другой путь обновления дерева Portage, тогда пропишите его в строке SYNC файла /etc/make.conf.

RSYNC

Один из самых распространенных способов обновления дерева портов - это использование rsync. Вот так он прописывается в файл /etc/make.conf:

SYNC="rsync://cvs.gentoo.org/gentoo-x86-portage"

Метод rsync при обновлении дерева все время удаляет изменения, сделанные вами в локальном дере Portage. Для того, чтобы этого избежать, используйте PORTDIR_OVERLAY="/директория/где/лежат/ваши/ebuild-скрипты".

Ветка CVS для разработчиков

Разработчики, имеющие полный подступ к CVS репозитарию, помимо получения локального дерева, путем emerge sync, могут обращаться к CVS через RSH или SSH.

Просто проверьте CVS репозитарий, используя вашу учетную запись, затем перейдите в /usr/portage и выполните опцию SYNC:

SYNC="cvs://[email protected]:/home/cvsroot"

Зеркала

Gentoo создает локальное зеркало всех архивных файлов, загруженных при помощи ebuild скриптов, в дереве Portage. Иногда исходники в архивах и т.д. хранятся на медленных серверах, которые часто бывают перегружены. Также, разработчики удаляют старые версии программного обеспечения с ftp, если появляется более новые версии. Для облегчения жизни пользователям дистрибутива Gentoo (и уменьшения нагрузки) мы создаем зеркала нашего репозитария. Гораздо быстрей и надежней загружать архивы с исходниками с разных зеркал, которые при этом могут быть гораздо ближе географически.

Каждый раз, когда вы пытаетесь установить пакет, Portage сначала проверит наше зеркало на наличие необходимого архива. Если зеркало не имеет необходимых файлов, тогда Portage пробует загружать их с HTTP ИЛИ FTP сервера, указанного в ebuild файле.

Зеркало Portage может быть определено в строке GENTOO_MIRRORS файла /etc/make.conf. Значение по умолчанию:

GENTOO_MIRRORS="http://www.ibiblio.org/gentoo"

Для поиска наилучшего зеркала посетите сайт Gentoo или спросите на дружественном листе рассылки.

Загрузчик файлов

Программа, используемая Portage для загрузки файлов, может быть указана в настройках FETCHCOMMAND и RESUMECOMMAND. Несколько примеров этих строк можно найти в /etc/make.conf и /etc/make.globals. По умолчанию Portage использует wget как самый подходящий загрузчик для большинства пользователей.

Загрузчик в Portage получает информацию о HTTP и FTP прокси используя переменные среды оболочки, HTTP_PROXY и FTP_PROXY.

Proxies

Portage может быть настроена на загрузку фалов через HTTP и FTP прокси. Данные о прокси могут быть указаны в строках HTTP_PROXY и FTP_PROXY файлов /etc/make.conf или /etc/make.globals. Если HTTP и FTP обслуживаются одним и тем же прокси, используйте опцию PROXY.

Вот пример:

HTTP_PROXY="http://192.168.1.1:8080"
FTP_PROXY="http://192.168.1.1:8080"

или

PROXY="http://192.168.1.1:8080"

Также в Portage на HTTP прокси может быть настроен RSYNC. Для этого нужно отредактировать строку RSYNC_PROXY файла /etc/make.conf или просто задать соответствующую переменную среды оболочки.

Например:

RSYNC_PROXY="192.168.1.1:8080"

Если от внешнего мира вас отделяет надежная система сетевой защиты и вы не можете использовать HTTP прокси, Вы сможете обновить версию свего дерева Portage системы, используя архив репозитария. Сам архив доступен здесь http://www.ibiblio.org/gentoo/snapshots.

Различные опции

Следующий список опций, которые тоже могут быть использованы пользователями:

  • NOCOLOR: Отключает цветной вывод программы утилиты emerge;
  • CLEAN_DELAY: Промежуток времени, в секундах, за который пользователь может безопасно остановить процесс удаления пакета.

Пакетный менеджер

Обновление дерева Portage

Дерево Portage размещается в /usr/portage и содержит огромную библиотеку инструкций для установки (так называемых ebuild-скриптов) различных пакетов. Оно также содержит profile и package.mask - информацию, жизненно необходимую для обновления вашей системы. Очень важно поддерживать дерево в должном виде, постоянно обновляя его. Для обновления дерева Portage используйте следующую команду:

emerge rsync

Этот способ использования emerge для обновления пакетов изменяет локальное дерево системы Portage. Для большей информации смотрите раздел SYNC настройки в Portage в главе Настройка Portage.

Установка пакетов

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

Команда emerge - это внешний интерфейс системы Portage. Именно через эту команду осуществятся установка и удаление пакетов путем ее запуска с различными ключами.

Для установки свежей незамаскированной версии какого-нибудь пакета просто укажите его название, например так:

emerge galeon

Команда скомпилирует и установит любые необходимые зависимости (принимая во внимание параметры настроек USE), а так же скомпилирует и установит новую, незамаскированную версию galeon. Galeon также может быть упомянут полным именем с использованием названия категории: /net-www/galeon/.

Команда emerge также принимает ссылки на сами ebuild файлы. Это позволяет пользователям устанавливать более старые пакеты или пакеты третьих лиц. Простой пример:

emerge /usr/portage/net-www/galeon/galeon-1.2.0-r3.ebuild

В дополнение к названию пакета или ebuild файла, который будет установлен, emerge поддерживает несколько очень полезных параметров командной строки. Из всех этих параметров --pretend, наверное, наиболее полезен. При использовании этого параметра установка выполняться не будет. Вместо чего Portage просто отобразит список пакетов, которые должны быть установлены или обновлены для выполнения действия, например, все той же установки. В следующем примере показано, что должно быть установлено или обновлено на примере инсталляции последней версии пакета kdevelop:

root@kodiak blocke # emerge --pretend kdevelop

These are the packages that I would merge, in order.

Calculating dependencies ...done!
[ebuild  N   ] kde-base/kdelibs-2.2.2-r4 to /
[ebuild  N   ] dev-util/kdbg-1.2.2 to /
[ebuild   U  ] app-text/psutils-1.17 to /
[ebuild   U  ] app-text/a2ps-4.13b-r3 to /
[ebuild   U  ] app-text/jadetex-2.20 to /
[ebuild  N   ] app-text/sgmltools-lite-3.0.3-r2 to /
[ebuild  N   ] kde-base/kdoc-2.2.2-r1 to /
[ebuild  N   ] net-www/htdig-3.1.5-r2 to /
[ebuild  N   ] app-text/enscript-1.6.3-r1 to /
[ebuild  N   ] kde-base/kdebase-2.2.2-r2 to /
[ebuild  N   ] app-doc/qt-docs-2.3.1 to /
[ebuild  N   ] dev-util/kdevelop-2.0.2 to /

В вышеупомянутой распечатке пакеты, отмеченные N - это те, что еще не были установлены и будут установлены в течении данного "действия". Буква U же свидетельствует о том, что более старая версия этого пакеты была установлена и будет обновлена до новой.

Другие аргументы командной строки:

  • --fetchonly: Просто загрузит пакет и все необходимые зависимости для компиляции и установки;
  • --emptytree: Данная опция заставит Portage притворится, что ни одна из зависимостей пакета или пакетов не установлена. Это полезно использовать с --pretend, которая отображает законченное дерево зависимостей для любого выбранного пакета. Все зависимости, за исключением glibc, будут отображены;
  • --nodeps: Portage установит только указанные пакеты, игнорируя их зависимости. Если у вас не установлены соответствующие зависимости, компиляция может потерпеть крах;
  • --onlydeps: Установит только зависимости для указанного пакета. Сам пакет _не_ будет установлен;
  • --noreplace: Пропустит установку указанных пакетов, если они уже установлены;
  • --usepkg: Вместо компиляции указанных пакетов Portage попытается использовать бинарные tbz2 пакеты из указанного местоположения. Местоположение можно указать переменной среды оболочки PKGDIR;
  • --debug: Ebuild - отлично инструктированная среда, что полезно для разработчиков пытающихся проследить ошибки в bash-синтаксических ebuild- файлах;
  • --autoclean: Заставляет emerge удалять определенные пакетные временные каталоги перед компиляцией новой программы. Portage делает это по умолчанию, так что опция полезна только для разработчиков которые изменили настройки по умолчанию;
  • --verbose: Позволяет запустить emerge в информационном режиме. В настоящие время отображаются только ошибки GNU info, которые могут безопасно игнорироваться пользователями.

Удаление пакетов

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

Название удаляемого пакета следует после аргумента unmerge команды emerge. Следующий пример удалит все установленные версии пакета ltrace:

emerge unmerge ltrace

или

emerge unmerge dev-util/ltrace

Portage также позволяет указать определенные версии пакетов для удаления. Список определений следующий: = (последняя либо текущая версия), < (более старшая версия), > (более новая версия), <= (более старшая, либо текущая), и >= (более новая, либо текущая). Следующий пример удалит программу ltrace, версии 0.3.15 и старше:

emerge unmerge <=dev-utils/ltrace-0.3.15

При указании пакета важно заэкранировать символы > и < так, чтобы ваша оболочка их не интерпретировала. Также нужно указать категорию пакета, как это показано в примере. За другими примерами обращайтесь к emerge --help.

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

Если удаляемый пакет установлен, emerge покажет, какая именно его версия подлежит удалению и сколько времени до этого осталось. В течении данного периода пользователь может отменить удаление, нажав комбинацию клавиш Control-C.

Как только начнется процесс удаления, вы увидите длинный список имен файлов, принадлежащих удаленному пакету. У некоторых их этих строк слева от имени файла добавлен флажок. Флажки !mtime, !empty и cfgpro определяют причины, по которым данные файлы не были физически удалены при удалении пакета. Файлы из списка, не имеющие флажков, успешно удалены из файловой системы.

Флажок !mtime означает, что файл был изменен после установки указанного пакета. То есть - кто-то редактировал этот файл после того, как пакет был установлен, или какой-нибудь другой пакет позже переписал этот файл. Это позволяет обновлять пакеты до более новых версии, не боясь, что удаление старых уничтожит жизненно важные файлы.

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

Файлы принадлежат последнему установленному пакету. Все зависит от порядка инсталляции и не зависит от номера версии или номера ревизии установленных пакетов. Удаление самого нового пакета, содержащего некий файл, удалит и сам файл, даже если установлены пакеты более старших версии того же самого программного обеспечения (полагая, что пользователь вручную не изменял файл).

Системное обновление

Portage позволяет обновлять установленные пакеты всего одной командой. Важная особенность для успешного функционирования системы - это процесс обновления "основных" системных пакетов до версии, рекомендуемой разработчиками дистрибутива Gentoo. Системное обновление не затрагивает различные пакеты (устанавливаемые пользователем), оно работает только с теми пакетами, которые определены в конфигурационном файле Portage как необходимые для функционирования и поддержания системы в рабочем виде.

Для запуска системного обновления укажите:

emerge --update system

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

Вы, должно быть, обратили внимание, что один из первых шагов это запуск emerge system для установки базовых (или "основных") пакетов. emerge --update system же обновит основные пакеты до рекомендуемых версий.

Глобальное обновление

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

При глобальном обновлении Portage проверяет package.mask на наличие блокированных пакетов, зависимостей (включая диапазон версий) а также глобальный профиль на пакеты нуждающиеся в обновлении. Пакет обновится только при наличии новой версии, записи в глобальном профиле или о записи зависимости все в том глобальном профиле. К тому же пакет или его определенная версия не должны быть блокированы в конфигурационном файле package.mask.

При рассмотрении пакетов для обновления Portage пытается обновить до самой последней доступной версии все пакеты указанные в глобальном конфигурационном файле. Portage также рассмотрит зависимости каждого пакета отмеченного в глобальной конфигурации и попробует обновить их до новых версии, если, конечно, эти версии доступны и не блокированы в package.mask. И конечно будут рассмотрены СЛОТЫ, речь о которых шла в предыдущей главе.

Пользователи, знакомые с другими дистрибутивами и пакетными менеджерами кроме Portage, могут быть удивлены тем, почему Portage просто не обновляет пакеты, основываясь исключительно на номерах версий (как это было прежде в Gentoo 1.0). Многие из пакетов, включенных в репозитарий Gentoo имеют много доступных версий. Старая или более новая версия пакета может быть несовместима с программным обеспечением с ней работающие. Вслепую обновление библиотек и инструментальных средств без учета потребностей других пакетов может быстро привести к серьезным проблемам. Portage пытается избежать этого и рассматривает зависимости всех пакетов основываясь на индивидуальных ebuild скриптах.

Основа глобального обновления Portage - это конфигурационный файл world. В отличии от системного конфигурационного файла который редактируется только разработчиками и как правило никогда не затрагивается обычными пользователями, глобальный конфигурационный файл генерируется через какое-то время, благодаря установкам программного обеспечения производимым пользователем. Глобальный конфигурационный файл очень похож на "список избранного". Все пакеты установленные пользователем вручную посредством использования программы emerge записываются в файл world, расположенном /var/cache/edb/world. Portage предполагает, что раз вы установили какой-либо пакет, то вам так же необходимо его обновлять.

Глобальный файл world состоящий из категории и имени файла в одну строку, представляет из себя следующие:

net-im/gaim
net-www/skipstone
net-www/galeon
app-editors/vim
app-text/ispell
net-mail/evolution
dev-util/ltrace
sys-apps/xfsprogs
=net-www/mozilla-0.9.8-r3
sys-apps/attr
sys-apps/dmapi
sys-kernel/linux-sources
sys-apps/acl
app-office/gnucash
app-cdr/xcdroast

Почти все строки в примере были добавлены автоматически при установке пакетов пользователем. Строки эти будут обновлены при наличии более новых версий.

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

Вы должно быть обратили внимание на строку пакета mozilla (=net-www/mozilla-0.9.8-r3). К названию файла был добавлен вручную знак "=", определяющий точную версию. Списки определений (которые уже были рассмотрены в главе Удаление пакетов данного руководства) могут использоваться, чтобы заставить Portage рассматривать только заданные диапазоны версий при обновлении пакетов. В данной строке знак "=" поставлен для того, чтобы Portage рассматривал mozilla-0.9.8-r3 единственной доступной версией и никогда не затрагивал ее при глобальном обновлении пакетов.

Глобальное обновление производится командой:

emerge --update world

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

Portage не будет переписывать файлы в директориях помеченных защитой конфигурационных файлов. Вы должны будете вручную исправить различия между вашими текущими файлами конфигурации и новыми версиями специально сохраненными для вас Portage. Если вы не исправите ваши текущие конфигурации, то не исключено, что некоторое установленное программное обеспечение может перестать функционировать. Для большей информации смотрите Защита конфигурационных файлов в главе Настройка Portage или воспользуйтесь командой emerge --help config.

Для того, чтобы увидеть список всего, что было бы обновлено или установлено в течении глобального обновления, используйте аргумент --pretend, как было упомянуто в предыдущих разделах этой главы.

Глобальное обновление также автоматически выполняет и системное обновление. При этом основные пакеты не могут быть закреплены, используя метод файла глобального обновления world, поскольку текущая конфигурация Portage этого не позволяет.

Любопытный побочный эффект глобального обновления может быть использован пользователями для перекомпиляции всего программного обеспечения установленного в системе. Так как глобальное обновление затрагивает все пакеты и их зависимости, упомянутые в файле /world/, использование аргумента --emptytree позволит принудительно перекомпилировать пакеты и их зависимостей исключая glibc. Это может быть полезно для пользователей, желающих изменить опции компилятора или настройки USE на все программное обеспечение которое они используют без перекомпиляции каждого пакета вручную. Просто запишите в файл world все обычно используемое вами программное обеспечение и запустите: //
emerge --update world --emptytree

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

Чистка системы

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

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

Дабы бороться с этим, Portage поддерживает способ удаления всех старых версий из пользовательской системы. Эта возможно благодаря опции clean и используется следущим образом:

emerge clean

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

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

Перед удалением определенной версий пакета, Portage тщательно проверяет различные конфигурационные файлы, зависимости установленных пакетов, и СЛОТЫ. Получив нужные данные Portage безопасно удалит старую версию пакета не не нарушив систему и сохранив ее функциональность.

Уничтожение пакетов

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

Опция prune схожа с предыдущей опцией и используется почти также:

emerge prune

Поиск по дереву Portage

Такие деревья, как Portage, формирующий основу Gentoo Linux, зачастую могут быть очень большими. Специально для этого в emerge есть функция поиска в виде строки на вводе, принимающей регулярное выражение в кавычках. Регулярные выражения вещь достаточно сложная, потому если вы заинтересовались этой темой рекомендую найти лучше хорошую книгу по ней.

Наиболее простые примеры не требуют знания составления регулярных выражений. Следующая команда произведет поиск пакета содержащего "gcc", как часть своего имени:

emerge search gcc

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

Получение справки

Для большей информации относительно опции и функций emerge выполните команду:

emerge --help

Для облегчения жизни пользователям Gentoo, было создано несколько утилит, которые находятся в /app-admin/gentoolkit/ дерева Portage.

  • etc-update: сценарий оболочки для объединения /etc файлов (может повредить при неправильном использовании)
  • qpkg: утилита для запросов к базе данных пакетов
  • epm: друга утилита для запросов к базе данных пакетов, с синтаксисом RPM.