This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.

Please visit our production wiki at https://wiki.gentoo.org

Gentoo Linux alpha Handbook: Работа с Portage

From Gentoo Wiki (test)
Jump to:navigation Jump to:search
This page is a translated version of the page Handbook:Alpha/Full/Portage and the translation is 100% complete.
Alpha Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка stage3
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система init-скриптов
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление


Файлы Portage

Конфигурационные директивы

Portage поставляется с настройками по умолчанию, которые хранятся в /usr/share/portage/config/make.globals. Все настройки Portage обрабатываются с помощью переменных. Какие переменные использует Portage и для чего они нужны, будет описано позже.

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

Если требуется изменить конфигурационные переменные, не меняйте /usr/share/portage/config/make.globals или make.defaults. Вместо этого используйте файл /etc/portage/make.conf, у которого больший приоритет над предыдущими файлами. Для получения дополнительной информации прочитайте /usr/share/portage/config/make.conf.example. Как следует из названия, это просто пример — Portage не использует этот файл.

Также можно определить конфигурационные переменные Portage в переменном окружении, но мы не рекомендуем этого делать.

Информация из определенного профиля

Мы уже ознакомились с каталогом /etc/portage/make.profile. На самом деле это не каталог, а символьная ссылка на один из профилей, по умолчанию это /usr/portage/profiles/, однако можно создать свои собственные профили где угодно и ссылаться на них. Профиль, на который указывает символьная ссылка, и есть системный профиль.

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

Пользовательская конфигурация

Если нужно изменить поведение Portage относительно того, как устанавливается программное обеспечение, то будет правильно настроить файлы в /etc/portage/. Настоятельно рекомендуется использовать файлы в /etc/portage/ и очень не рекомендуется переопределять поведение Portage в переменном окружении!

Пользователи могут создать в /etc/portage/ следующие файлы:

  • package.mask список пакетов, которые Portage никогда не будет устанавливать
  • package.unmask список пакетов, которые Portage будет устанавливать, даже если разработчик Gentoo отговаривает пользователей от их установки
  • package.accept_keywords список пакетов, которые Portage будет устанавливать, даже если они не подходят для используемой системы или архитектуры (пока)
  • package.use список пакетов, для которых необходимо использовать специфичные USE-флаги, а не брать системные USE-флаги

Не обязательно они должны быть файлами; это могут быть каталоги, содержащие по одному файлу для пакета. Больше информации о каталоге /etc/portage/ и весь список возможных файлов, которые можно создать там, можно найти в man-странице Portage:

user $man portage

Изменение файлов Portage и расположение каталогов

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

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

Данная статья не предназначена для использования в качестве полноценного справочника. С полной информацией можно ознакомиться в man-страницах portage и make.conf:

user $man portage
user $man make.conf

Хранение файлов

Gentoo репозиторий ebuild-файлов

Gentoo репозиторий ebuild-файлов по умолчанию находится в /usr/portage. Месторасположение определяется файлом repos.conf, пример которого можно найти в /usr/share/portage/config/repos.conf. Чтобы изменить значения по умолчанию, скопируйте этот файл в /etc/portage/repos.conf/gentoo.conf и измените location. Не забудьте сменить символьную ссылку на /etc/portage/make.profile, если хотите хранить (меняя переменную) Gentoo репозиторий ebuild-файлов в другом месте.

После изменения настройки location в /etc/portage/repos.conf/gentoo.conf рекомендуется изменить следующие переменные /etc/portage/make.conf, так как они не заметят изменений в location. Portage так работает с переменными: PKGDIR, DISTDIR, RPMDIR.

Двоичные пакеты

Хотя по умолчанию Portage не использует двоичные пакеты, в нем есть широкая поддержка их. Когда Portage просят установить бинарный пакет, он будет искать их в каталоге /usr/portage/packages. Этот каталог определяется переменной PKGDIR.

Исходный код

По умолчанию исходный код для приложений хранится в каталоге /usr/portage/distfiles. Этот каталог определяется переменной DISTDIR.

База Portage

Portage хранит состояние системы (какие пакеты установлены, какие файлы какому пакету принадлежат, ...) в каталоге /var/db/pkg.

Предупреждение
Не изменяйте эти файлы вручную! Это может заставить Portage видеть систему по другому.

Кеш Portage

Кэш Portage (с временем изменений, виртуальными пакетами, информации о зависимостях в дереве, ...) хранится в /var/cache/edb. Там располагается просто кэш: пользователи спокойно могут отчистить это каталог, если на данный момент не запущено никаких приложений Portage.

Сборка программного обеспечения

Временные файлы Portage

Временные файлы Portage по умолчанию хранятся в /var/tmp/. Этот каталог определяется с помощью переменной PORTAGE_TMPDIR.

Каталог компиляции

Portage создает специальные каталоги в /var/tmp/portage/ для всех компилируемых пакетов. Этот каталог определяется переменной PORTAGE_TMPDIR и добавлено portage/.

Расположение реальной системы

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

Возможности журналирования

Журналироване для ebuild

Portage может создавать фалы журналов для каждого ebuild, но только в том случае, когда переменная PORT_LOGDIR указывает на каталог, который доступен для записи Portage (пользователю portage). По умолчанию эта переменная не задана. Если переменная PORT_LOGDIR не задана то, в текущей системе журналирования не будет журналов, хотя пользователи могут получить некоторый журналы с помощью новой поддержки elog.

Если переменная PORT_LOGDIR не определена и используется elog, тогда можно получить журналы сборки и любые другие журналы, которые сохраняются программой elog, как показано ниже.

Portage предлагает гибкую систему контроля над журналированием с помощью программы elog:

  • PORTAGE_ELOG_CLASSES: определяет какие виды сообщений будут записываться в журнал. Разделяя пробелами можно указать любую комбинацию из: info, warn, error, log и qa.
    • info: журналирует "einfo" сообщения от ebuild
    • warn: журналирует "ewarn" сообщения от ebuild
    • error: журналирует "eerror" сообщения от ebuild
    • log: журналирует the "elog" сообщения, которые есть в некоторых ebuild
    • qa: журналирует "QA Notice" сообщения от ebuild
  • PORTAGE_ELOG_SYSTEM: выбирает модуль(и), которые будут обрабатывать сообщения журналов. Если оставить пустым, то журналирование будет отключено. Разделяя пробелами можно использовать любую комбинацию из: save, custom, syslog, mail, save_summary и mail_summary. По крайней мере хотя бы один модуль должен быть задействован, чтобы использовать elog.
    • save: сохраняет один журнал для каждого пакета в $PORT_LOGDIR/elog, или /var/log/portage/elog, если $PORT_LOGDIR не определен.
    • custom: передает все сообщения пользовательской команде, которая определена в $PORTAGE_ELOG_COMMAND; об этом будет рассказано позже.
    • syslog: передает все сообщения установленной программе журналирования.
    • mail: передает все сообщения на определенный пользователем в $PORTAGE_ELOG_MAILURI почтовый сервер; об этом будет рассказано позже. Для работы этой возможности elog необходим >=portage-2.1.1.
    • save_summary: похоже на save, но еще сохраняет все сообщения в $PORT_LOGDIR/elog/summary.log или /var/log/portage/elog/summary.log, если $PORT_LOGDIR не определена.
    • mail_summary: похоже на mail, но еще отправляет все сообщения в одном письме, когда emerge завершает работу.
  • PORTAGE_ELOG_COMMAND: эта переменная используется только в случае когда используется модуль custom. Пользователи могут определить команду для обработки сообщений журнала. Обратите внимание, что команда может использовать две переменные: ${PACKAGE} — это имя и версия пакет, а ${LOGFILE} — это полный путь до файла журнала. Например:
Код Пример определения PORTAGE_ELOG_COMMAND
PORTAGE_ELOG_COMMAND="/path/to/logger -p '\${PACKAGE}' -f '\${LOGFILE}'"
  • PORTAGE_ELOG_MAILURI: эта переменная содержит настройки для модуля mail, такие как адрес, логин, пароль, почтовый сервер и номер порта. По умолчанию это "root@localhost localhost". Следующий пример для сервера SMTP, который требует аутентификацию на основе логина и пароля на определённом порту (по умолчанию 25):
Код Пример определения PORTAGE_ELOG_MAILURI
PORTAGE_ELOG_MAILURI="user@some.domain username:password@smtp.some.domain:995"
  • PORTAGE_ELOG_MAILFROM: позволяет пользователю настроить адрес "from" для отправленных по почте журналов; если ничего не задано, то по умолчанию "Portage".
  • PORTAGE_ELOG_MAILSUBJECT: позволяет пользователям создать тему для писем с журналами. Обратите внимание, что можно использовать две переменные: ${PACKAGE} отобразит имя и версию пакета, а ${HOST} отобразит полностью определенное доменное имя (FQDN) хоста на котором запущен Portage. Например:
Код Пример определения PORTAGE_ELOG_MAILSUBJECT
PORTAGE_ELOG_MAILSUBJECT="package \${PACKAGE} was merged on \${HOST} with some messages"
Важно
Пользователи, которые использовали Portage-2.0.* с enotice, должны удалить enotice, так как он не совместим с elog.




Alpha Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка stage3
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система init-скриптов
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление


Настройка Portage

Как говорилось ранее, Portage настраивается с помощью множества переменных, которые могут быть определены в /etc/portage/make.conf или в некоторых подкаталогах /etc/portage/. Пожалуйста, ознакомьтесь с man-страницами make.conf и portage для получения дополнительной информации.

user $man make.conf
user $man portage

Параметры работающие во время сборки

Параметры для configure и компилятора

Когда Portage компилирует приложения, он передает компилятору и скрипту configure содержимое следующих переменных:

CFLAGS и CXXFLAGS
определяет желаемые флаги компилятора для компиляции кода на C и C++
CHOST
определяет информацию о хосте, на котором производиться компиляция (build host), которая передается скрипту configure в приложении
MAKEOPTS
передается команде make и в основном используется для определения степени распараллеливания во время компиляции. Больше информации о всех параметрах команды make можно найти в man-странице make.

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

Параметры установки

Когда Portage устанавливает (merged) более новую версию программного обеспечения, он удалит устаревшие файлы старой версии ПО из системы. Portage дает пользователю задержку в 5 секунд перед удалением старых версий. Эти 5 секунд определены в переменной CLEAN_DELAY.

Можно сказать emerge использовать определенные параметры при каждом запуске, настроив их в переменой EMERGE_DEFAULT_OPTS. Некоторые полезные параметры --ask, --verbose, --tree и так далее.

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

Каталоги, защищаемые Portage

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

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

Чтобы узнать текущие настройки CONFIG_PROTECT, проверьте вывод команды emerge --info:

user $emerge --info | grep 'CONFIG_PROTECT='

Больше информации о том, как работает защита конфигурационных файлов в Portage можно найти в разделе CONFIGURATION FILES man-страницы emerge:

user $man emerge

Исключение каталогов

Чтобы убрать 'защиту' с определенных субкаталогах в защищенных каталогах, можно воспользоваться переменной CONFIG_PROTECT_MASK.

Параметры загрузки

Расположение серверов

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

GENTOO_MIRRORS
определяет список серверов, которые содержат исходный код (distfiles).
PORTAGE_BINHOST
определяет расположение конкретного сервера, который содержит бинарные пакеты.

Третий параметр содержит расположение сервера rsync, который используется при обновлении локального Gentoo репозитория. Он определяется в файле /etc/portage/repos.conf (либо в файле внутри данного каталога, если это каталог):

sync-type
определяет тип сервера, по умолчанию rsync.
sync-uri
определяет конкретный сервер, который Portage использует чтобы загрузить Gentoo репозиторий.

Переменные GENTOO_MIRRORS, sync-type и sync-uri могут быть установлены автоматически с помощью приложения mirrorselect. Конечно, прежде чем им воспользоваться, необходимо сперва установить пакет app-portage/mirrorselect. Больше информации можно посмотреть в mirrorselect help:

root #mirrorselect --help

Если требуется использовать прокси-сервер, то можно настроить переменные http_proxy, ftp_proxy и RSYNC_PROXY.

Команды загрузки

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

Portage может продолжить загрузку частично загруженного исходного кода. Для этого по умолчанию используется wget, но это можно изменить с помощью переменной RESUMECOMMAND.

Убедитесь, что переменные FETCHCOMMAND и RESUMECOMMAND сохраняют исходный код в правильный каталог. Внутри этих переменных можно воспользоваться переменными \${URI} и \${DISTDIR}, чтобы указать ссылку на исходный код и место для его сохранения соответственно.

Можно определить обработчики для каждого протокола с помощью переменных FETCHCOMMAND_HTTP, FETCHCOMMAND_FTP, RESUMECOMMAND_HTTP, RESUMECOMMAND_FTP и так далее.

Настройка rsync

Нельзя изменить команду rsync, которую использует Portage для обновления Gentoo репозитория, но можно установить некоторые переменные для команды rsync:

PORTAGE_RSYNC_OPTS
Определяет ряд значений по умолчанию, которые используются в процессе синхронизации (sync), каждая из которых разделена пробелом. Не стоит менять эту переменную, пока вы точно не будете знать что делаете. Обратите внимание, что некоторые необходимые параметры всегда будут использоваться, даже если переменная PORTAGE_RSYNC_OPTS будет пуста.
PORTAGE_RSYNC_EXTRA_OPTS
используется для определения дополнительных параметров во время синхронизации. Каждый параметр должен быть разделен пробелом:
--timeout=<number>
определяет сколько секунд rsync будет ожидать подключения, прежде чем подключение будет считаться истекшим по временем ожидания. По умолчанию эта переменная установлена в 180, но пользователи с диалап (dialup) или медленным компьютером могут попробовать установить 300 или выше.
--exclude-from=/etc/portage/rsync_excludes
указывает файл, содержащий список пакетов и/или категорий, который rsync должен игнорировать в процессе синхронизации. В этом случае он указывает на /etc/portage/rsync_excludes.
--quiet
уменьшит вывод на экран.
--verbose
выводит полный список файлов.
--progress
отображает процесс загрузки для каждого файла.
PORTAGE_RSYNC_RETRIES
определяет, сколько раз rsync должен пытаться соединиться с зеркалом, на который указывает переменная SYNC, прежде чем сообщить об ошибке. По умолчанию, значение этой переменной 3.

Более подробную информацию о этих и других опциях читайте в rsync man-странице.

Конфигурация Gentoo

Выбор ветвь

Можно изменить используемую по умолчанию ветвь с помощью переменной ACCEPT_KEYWORDS. По умолчанию используется стабильная ветвь архитектуры. Больше информации о ветвях Gentoo можно найти в следующей главе.

Возможности Portage

Можно активировать определенные возможности Portage с помощью переменной FEATURES. Возможности Portage уже были рассмотрены в предыдущих главах.

Поведение Portage

Управление ресурсами

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

Более подробную информацию о значениях nice смотрите в man-странице nice:

user $man nice

Управление выводом

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




Alpha Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка stage3
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система init-скриптов
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление


Использование одной ветви

Стабильная ветвь

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

Мы рекомендуем использовать только стабильную ветвь. Однако, если для вас стабильность не критична и вы хотите помочь Gentoo, отсылая отчеты об ошибках на https://bugs.gentoo.org, то можно использовать тестовую ветвь.

Тестовая ветвь

Если вы желаете использовать наиболее свежее ПО, подумайте над использованием тестовой ветви. Чтобы Portage начал использовать тестовую ветвь, добавьте ~ перед названием вашей архитектуры.

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

Однако будьте готовы к тому, что могут возникнуть проблемы со стабильностью, неудовлетворительной поддержкой пакетов (например неправильные/отсутствующие зависимости), слишком частыми обновлениями (а в результате частыми сборками) или невозможностью собрать пакет. Если вы не знаете, как работает Gentoo и как разрешать возникающие проблемы, мы рекомендуем не отходить от стабильной и оттестированной ветви.

К примеру, для выбора тестовой ветви на архитектуре alpha, отредактируйте /etc/portage/make.conf и укажите:

Файл /etc/portage/make.confИспользование тестовой ветви
ACCEPT_KEYWORDS="~alpha"

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

Одновременное использование стабильной и тестовой ветвей

package.accept_keywords

Можно указать, чтобы Portage использовал тестовую ветвь только для определенных пакетов, а для остальной системы- стабильную ветвь. Для этого добавьте категорию и имя пакета, для которого вы желаете использовать тестовую ветвь, в файл /etc/portage/package.accept_keywords. Вместо этого можно создать каталог (с таким же именем) и указывать пакеты в файлах, находящихся внутри этого каталога.

Например, для использования тестовой ветви для gnumeric:

Файл /etc/portage/package.accept_keywordsИспользуем тестовую ветвь только для приложения gnumeric
app-office/gnumeric

Тестирование определенных версий

Чтобы использовать конкретную версию ПО из тестовой ветви, но не хотите, чтобы Portage использовал тестовую ветвь для последующих версий этого ПО, можно указать в местоположении package.accept_keywords номер необходимой версии. В этом случае используйте оператор =. Также можно указать диапазон версий, используя операторы <=, <, > или >=.

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

В следующем примере мы просим Portage разрешить установку gnumeric-1.2.13, даже если он находится в тестовой ветви:

Файл /etc/portage/package.accept_keywordsРазрешить выбор конкретной версии
=app-office/gnumeric-1.2.13

Замаскированные пакеты

package.unmask

Важно
Разработчики Gentoo не поддерживают использование размаскированных пакетов. Пожалуйста, используйте их на свой страх и риск. Просьбы о помощи, связанные с использованием package.unmask и/или package.mask могут остаться без ответа.

Если пакет был замаскирован разработчиками Gentoo, но вы желаете его использовать несмотря на причины блокировки, указанные в файле package.mask (по умолчанию он находится в /usr/portage/profiles/), добавьте желаемую версию (обычно вы получите точно такую же строку, как в файле package.mask в профиле) в файл /etc/portage/package.unmask (или в файл в этом каталоге, если это каталог).

Например, если =net-mail/hotwayd-0.8 замаскирован, то размаскировать его можно, прописав в package.unmask точно такую же строчку:

Файл /etc/portage/package.unmaskРазмаскируем конкретный пакет/версию
=net-mail/hotwayd-0.8
Заметка
Если запись в /usr/portage/profiles/package.mask содержит диапазон версий пакета, вам следует разблокировать только те версии, которые вам на самом деле необходимы. Прочитайте предыдущий раздел, чтобы узнать, как определять версии.

package.mask

Возможно указать Portage, чтобы он не использовал какое-то конкретное ПО или конкретные версии ПО. Чтобы это сделать, замаскируйте пакет, добавив соответствующую запись в /etc/portage/package.mask (либо в такой файл, либо в файл внутри такого каталога).

Если, к примеру, чтобы Portage не устанавливал исходные коды ядра новее, чем gentoo-sources4.9.16, добавьте такую строку в package.mask:

Файл /etc/portage/package.maskМаскируем gentoo-sources версии более чем 4.9.16
>sys-kernel/gentoo-sources-4.9.16




Alpha Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка stage3
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система init-скриптов
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление



dispatch-conf

dispatch-conf — это программа, которая помогает объединять файлы вида ._cfg0000_<имя>. Такие файлы генерируются Portage, когда он хочет перезаписать файл в каталоге, который защищен переменной CONFIG_PROTECT.

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

При использовании dispatch-conf, вы можете попросить оставить конфигурационный файл как есть, использовать новый конфигурационный файл, отредактировать текущий, или заменить изменения между ними интерактивно. dispatch-conf также имеет некоторые дополнительные возможности:

  • Автоматическое обновление файлов, в которых обновились только комментарии.
  • Автоматическое обновление файлов, которые отличаются только количеством пробелов.

Сначала отредактируйте файл /etc/dispatch-conf.conf и создайте каталог, прописанный в переменной archive-dir. Затем запустите dispatch-conf:

root #dispatch-conf

При запуске dispatch-conf, каждый измененный файл конфигурации будет показан, по одному. Нажмите u для обновления (замены) текущего конфигурационного файла новым и показа следующего файла. Нажмите z, чтобы удалить новый конфигурационный файл и показать следующий файл. Клавиша n сообщит dispatch-conf о том, что нужно пропустить следующий файл. Как только все конфигурационные файлы будут просмотрены, dispatch-conf закончит работу. Вы также можете нажать q, чтобы выйти в любое время.

Для более детальной информации проверьте man-страницу dispatch-conf. Она расскажет вам, как интерактивно слить текущий и новый конфигурационный файл, отредактировать новые конфигурационные файлы, просмотреть разницу между файлами, и многое другое.

user $man dispatch-conf

etc-update

Другая утилита предназначенная для миграции файлов конфигурации это etc-update. Она не так проста в использовании, как dispatch-conf, и не имеет много возможностей, но она тоже дает возможность интерактивной работы, и тоже может автоматически обрабатывать тривиальные изменения.

Однако, в отличие от dispatch-conf, etc-update не сохраняет старые версии ваших конфигурационных файлов. Как только вы обновили файл, старая версия навсегда утеряна. Будьте очень осторожны, так как использование etc-update гораздо менее безопасно, чем использование dispatch-conf, когда необходимо сохранить старые файлы.

root #etc-update

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

Код Варианты, предоставляемые etc-update
Please select a file to edit by entering the corresponding number.
              (-1 to exit) (-3 to auto merge all remaining files)
                           (-5 to auto-merge AND not use 'mv -i'):

При вводе -1, etc-update выходит, прекращая последующие изменения. Если ввели -3 или -5, все перечисленные файлы конфигурации заменяются более новыми версиями. Следовательно, очень важно сначала отобрать файлы, которые не следует автоматически обновлять. Для этого надо только вводить номер, указанный слева от файлов.

Например, выбираем файл конфигурации /etc/pear.conf:

Код Обновление конкретного конфигурационного файла
Beginning of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
[...]
End of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
1) Replace original with update
2) Delete update, keeping original as is
3) Interactively merge original with update
4) Show differences again

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

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

Код Команды, существующие при интерактивном слиянии
ed:     Редактировать и использовать оба варианта, каждый пометить заголовком.
eb:     Редактировать и использовать оба варианта.
el:     Редактировать и использовать левый вариант.
er:     Редактировать и использовать правый вариант.
e:      Редактировать новую версию.
l:      Использовать левую версию.
r:      Использовать правую версию.
s:      Молча включить общие строки.
v:      Включить общие строки, сообщив подробности.
q:      Выход.

Завершив обновление важных файлов конфигурации, вы можете автоматически обновить оставшиеся файлы конфигурации. etc-update выйдет, если не найдет других файлов, подлежащих обновлению.

quickpkg

С помощью quickpkg пользователи могут создавать архивы пакетов, уже установленных в системе. Эти архивы можно использовать в качестве двоичных пакетов. Запуск quickpkg прост: только укажите имена пакетов, которые нужно архивировать.

Например, чтобы поместить в архив curl, orage и procps:

root #quickpkg curl orage procps

Двоичные пакеты будут сохранены в $PKGDIR (по умолчанию, в /usr/portage/packages/). Эти пакеты помещаются в $PKGDIR/КАТЕГОРИЯ.




Alpha Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка stage3
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система init-скриптов
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление


Использование подмножества Gentoo репозитория

Исключение пакетов и категорий

Можно выборочно обновлять определенные категории/пакеты, игнорируя обновление других категорий/пакетов. Это достигается путем исключения таких категорий/пакетов программой rsync на этапе выполнения emerge --sync.

Определите имя файла, содержащего шаблоны исключаемых пакетов, в переменной PORTAGE_RSYNC_EXTRA_OPTS в файле /etc/portage/make.conf:

Файл /etc/portage/make.confОпределение файла с исключенными пакетами
PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes"
Файл /etc/portage/rsync_excludesИсключение всех игр
games-*/*

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

Добавление неофициальных файлов ebuild

Определение пользовательского репозитория

Можно настроить Portage так, чтобы он использовал сборочные файлы ebuild, не входящие в официальный Gentoo репозиторий. Создайте новый каталог (к примеру, /usr/local/portage), в котором будут находиться файлы ebuild сторонних разработчиков. Используйте в точности такую же структуру каталогов, как и в официальном Gentoo репозитории!

root #mkdir -p /usr/local/portage/{metadata,profiles}
root #chown -R portage:portage /usr/local/portage

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

root #echo 'localrepo' > /usr/local/portage/profiles/repo_name

Сообщим Portage, что главный (master) репозиторий это основной Gentoo репозиторий, и что репозиторий не должен автоматически синхронизироваться (так как это не поддерживается сервером rsync, зеркалом git или другими хранилищами исходного кода):

Файл /usr/local/portage/metadata/layout.conf
masters = gentoo
auto-sync = false

Наконец, включите репозиторий в локальную систему, создав файл конфигурации для репозитория в /etc/portage/repos.conf, что сообщит Portage, где можно найти локальный репозиторий:

Файл /etc/portage/repos.conf/localrepo.conf
[localrepo]
location = /usr/local/portage

Работа с несколькими оверлеями

Для продвинутых пользователей, ведущих разработку в нескольких оверлейных каталогах, тестирующих пакеты перед включением в основной Gentoo репозиторий или просто желающих использовать неофициальные сборочные файлы ebuild из разных источников, в пакете app-portage/layman есть утилита layman, которая поможет поддерживать ваши оверлейные репозитории в актуальном состоянии.

Иначе установите app-eselect/eselect-repository для использования встроенной синхронизации в in Portage. Смотрите также Eselect/Repository

eselect-repository

Добавление дополнительных репозиториев становится простым занятием с этой утилитой.

Например, чтобы включить оверлей hardened-development:

root #eselect repository enable hardened-development

Обновление оверлеев, добавленных таким способом, происходит обычным способом с помощью:

root #emerge --sync

Layman

Сначала установите и сконфигурируйте layman, как показано в Overlays User Guide, и добавьте необходимые репозитории с помощью команды layman -a.

Например, чтобы включить оверлей hardened-development:

root #layman -a hardened-development

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

root #layman -S

Для более детальной информации по работе с оверлеями, прочитайте man layman и ранее упомянутое руководство пользователя по оверлеям.

Программы, поддерживаемые не через Portage

Использование Portage с пакетами самостоятельной сборки

Иногда пользователям может потребоваться настраивать, устанавливать и поддерживать программное обеспечение самостоятельно, без автоматизации со стороны Portage, несмотря на то, что оно поддерживается Portage. Наиболее известные случаи - это исходный код ядра и драйверы от Nvidia. Можно настроить Portage так, чтобы системе стало известно, что определенные пакеты установлены вручную (тогда Portage будет принимать данную информацию во внимание при расчете зависимостей). Данный процесс называется внедрение, и поддерживается Portage посредством файла /etc/portage/profile/package.provided.

Например, чтобы сообщить Portage о том, что пакет gentoo-sources-4.9.16 был установлен вручную, нужно добавить следующую строку в /etc/portage/profile/package.provided:

Файл /etc/portage/profile/package.providedПомечаем gentoo-sources-4.9.16 как установленный вручную
sys-kernel/gentoo-sources-4.9.16
Заметка
Это файл, который использует версии без = оператора.




Alpha Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка stage3
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система init-скриптов
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление


Введение

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

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

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

user $man portage
user $man make.conf

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

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

Использование /etc/portage/env

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

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

Пример: включение отладки для конкретных пакетов

В качестве пример, мы включим отладку (debugging) для пакета media-video/mplayer.

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

Файл /etc/portage/env/debug-cflagsПеременные для отладки
CFLAGS="-O2 -ggdb -pipe"
FEATURES="${FEATURES} nostrip"

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

Файл /etc/portage/package.envИспользование debug-cflags для пакета mplayer
media-video/mplayer debug-cflags

Вмешиваемся в процесс emerge

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

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

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

Чтобы вмешаться в процесс, окружение bash может слушать переменные EBUILD_PHASE, CATEGORY, а так же как переменные, которые всегда доступны в процессе работы ebuild (такие как P, PF, ...). Основываясь на значениях этих переменных могут быть выполнены дополнительные шаги/функции.

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

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

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

Файл /etc/portage/bashrcВмешиваемся в функции postinst и postrm
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

Выполнения задач после операции --sync

Использование /etc/portage/postsync.d

До этого момента мы говорили только о вмешательстве в процессы ebuild. Однако у Portage также есть и другие важные функции: обновление Gentoo репозитория. Чтобы запустить задачу после обновления Gentoo репозитория, поместите скрипт в каталог /etc/portage/postsync.d и убедитесь, что он отмечен как исполняемый.

Пример: запуск eix-update

Если eix-sync не используется для обновления дерева, то все еще можно обновить его базу данных после выполнения emerge --sync (или emerge-webrsync) добавив в каталоге /etc/portage/postsync.d символьную ссылку на /usr/bin/eix, назвав ее eix-update.

root #ln -s /usr/bin/eix /etc/portage/postsync.d/eix-update
Заметка
Если необходимо использовать другое имя, то необходим скрипт, который вызовет /usr/bin/eix-update. Бинарный файл eix смотрит под каким именем его вызвали, чтобы узнать, какую функцию он должен выполнить. Если символьная ссылка указывает на eix, но ссылка называется не eix-update, то это будет работать не корректно.

Переопределение настроек профиля

Использование /etc/portage/profile

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

Используя /etc/portage/profile, пользователи могут переопределить настройки профиля, такие как пакеты (какие пакеты считаются частью системного набора (@system)), обязательные USE-флаги и другое.

Пример: добавление nfs-utils в набор system

В случаи использования важной файловой системы на основе NFS, может быть необходимость отметить пакет net-fs/nfs-utils как системный. В этом случае Portage предупредит администраторов, если ему потребуется удалить этот пакет.

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

Файл /etc/portage/profile/packagesПомечаем nfs-utils как системный пакет
*net-fs/nfs-utils

Применение нестандартных патчей

Использование epatch_user

Заметка
Функция epatch_user применима к EAPI 5 или меньше. Смотрите функцию eapply_user для EAPI 6 или выше.

Чтобы управлять несколькими ebuild похожим образом, разработчики ebuild используют eclass (вроде библиотек оболочки), в которых определены часто используемые функции. Один такой eclass это epatch.eclass, который предлагает полезную функцию под названием epatch_user.

Функция epatch_user применяет патчи исходного кода, которые найдены в /etc/portage/patches/<category>/<package>[-<version>[-<revision>]], независимо от того, какой каталог был найден первым. К сожалению, не все ebuild автоматически вызывают эту функцию. Поэтому просто положенные патчи в этом каталоге не всегда сработают.

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

Пример: применение патчей к Firefox

Пакет www-client/firefox один из множества пакетов, который вызывает функцию epatch_user из ebuild, так что нет необходимости что-либо менять.

В некоторых случаях (например, разработчик предоставил патч и попросил проверить исправляет ли он ошибку), когда необходимо пропатчить Firefox, просто нужно поместить патч в /etc/portage/patches/www-client/firefox (вероятно лучше использовать полное имя и версию, так чтобы патч не мешал более ранним версиям) и пересобрать Firefox.



Warning: Display title "Gentoo Linux alpha Handbook: Работа с Portage" overrides earlier display title "Handbook:Alpha/Full/Portage".