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

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Ebuild repository and the translation is 100% complete.


Resources

Репозиторий ebuild–файлов — это файловая структура, которая может предоставить пакеты для установки в системе Gentoo. Эти репозитории содержат ebuild-файлы, eclass-ы и другие подобные описательные файлы, которые снабжают Portage пакетами, новостями, профилями и т.д.

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

По умолчанию, Portage будет устанавливать последнюю доступную версию пакета из любого настроенного репозитория ebuild-файлов. Если такая версия предоставляется сразу несколькими репозиториями, они будут выбраны по порядку приоритета — отсюда и второе название оверлей (overlay).

Администраторы систем Gentoo могут настроить дополнительные репозитории ebuild-файлов с помощью Portage, используя утилиты и методы, описанные ниже.

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

Gentoo репозиторий ebuild-файлов является основным репозиторием ebuild-файлов для системы Gentoo Linux, и именно оттуда по умолчанию берутся все пакеты. Он поддерживается на сервере gitweb.gentoo.org и синхронизируется на локальных машинах (в /var/db/repos/gentoo), чтобы быть доступным для Portage.

Gentoo репозиторий ebuild-файлов содержит ebuild-файлы (!), которые говорят Portage, как собирать и устанавливать каждый пакет. Ebuild-файлы содержат метаданные, информацию о зависимостях и всё остальное необходимое для работы пакета.

Метаданные содержат название пакета, версию, источник исходных кодов, доступные USE-флаги, лицензию, веб-сайт и т.д. Информация о зависимостях в ebuild-файлах позволяет Portage подтягивать любые другие пакеты, необходимые для сборки и запуска устанавливаемого пакета — ни больше, ни меньше. Зависимости в Gentoo очень детализированы, они могут меняться в зависимости от того, какие USE-флаги выбраны, обеспечивая высокую избирательность. Пожалуй, самым важным является то, что ebuild-файлы содержат информацию, необходимую для конфигурации, сборки (компиляции), установки и тестирования каждого пакета — обычно из исходного кода самого проекта.

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

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

Gentoo репозиторий ebuild-файлов и сами ebuild-файлы сопровождаются разработчиками Gentoo и другими участниками сообщества.

Заметка
Иногда название Gentoo репозиторий ebuild-файлов сокращают или заменяют на такие слова, как Gentoo репозиторий (Gentoo repository/repo), ::gentoo, gentoo.git, или иногда просто «репозиторий» (repo). Его также традиционно и часто называют в сообществе Gentoo как дерево Portage (Portage tree), rsync дерево (rsync tree), или иногда просто «дерево» (the tree).
Совет
GURU — это официальный репозиторий ebuild-файлов, сопровождаемый совместно пользователями Gentoo, с небольшой помощью от некоторых разработчиков Gentoo. Он хорошо дополняет Gentoo репозиторий, и сопровождающие стремятся поддерживать хорошее качество для предоставляемых пакетов. Существует также список публичных репозиториев на repos.gentoo.org.

Откуда берутся репозитории ebuild-файлов?

Так как репозиторий ebuild-файлов является обычной структурой из файлов и папок, новый репозиторий можно сделать доступным для Portage, просто копируя эти файлы и папки в известный для Portage путь. Репозитории и их файлы обычно находятся в /var/db/repos/, но пути к ним конфигурируются в /etc/portage/repos.conf. Тем не менее, репозитории ebuild-файлов могут быть сконфигурированы на любой доступной файловой системе, даже на nfs или SSHFS, что позволяет хранить их в сети или интернет-сервере.

Как говорилось ранее, Gentoo репозиторий ebuild-файлов размещен на сервере gitweb.gentoo.org. На этом сервере также размещены другие репозитории ebuild-файлов.

В действительности, любые дополнительные репозитории ebuild-файлов обычно не копируются вручную, а настраиваются для Portage (то есть добавляются в /etc/portage/repos.conf). Обычно новые репозитории становятся доступны благодаря третьим сторонам, и, после начальной конфигурации для Portage, синхронизируются Portage. Синхронизация зеркалирует все файлы из удалённого местоположения в локально доступную файловую систему, согласно конфигурации.

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

Управление репозиторием

Инструмент eselect repository позволяет легко добавлять, отключать, или удалять репозитории ebuild-файлов, сконфигурированные с Portage. Этот инструмент также предоставляет удобный способ перечислять и добавлять доступные репозитории, зарегистрированные на repos.gentoo.org.

Репозитории ebuild-файлов всегда могут быть сконфигурированы вручную, путём изменения /etc/portage/repos.conf.

Предупреждение
Хотя Gentoo репозиторий ebuild-файлов и заполняется или проверяется разработчиками Gentoo, а GURU репозиторий находится под их надзором, это не всегда так для других репозиториев ebuild-файлов. Есть вероятность, что некоторые репозитории могут содержать уязвимые, плохо работающие или, теоретически, даже вредоносные программы.

Новые репозитории ebuild-файлов для использования с Portage также могут созданы пользователем.

Список активированных репозиториев ebuild-файлов можно получить из вывода одной из следующих команд:

user $emerge --info
user $portageq repos_config /

Установка пакетов из других репозиториев

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

К примеру, после того, как был добавлен GURU репозиторий, можно установить пакет x11-misc/xbanish из этого репозитория:

root #emerge --ask x11-misc/xbanish
These are the packages that would be merged, in order:
 
Calculating dependencies... done!
Dependency resolution took 2.96 s.
 
[ebuild   R   #] x11-misc/xbanish-1.7::guru  0 KiB
 
Total: 1 package (1 reinstall), Size of downloads: 0 KiB

Заметьте, что репозиторий не указан в команде. Суффикс «::guru», добавленный к атому пакета (package atom) в выводе обозначает, из какого репозитория будет установлен этот пакет. В этом случае, пакет x11-misc/xbanish присутствует в GURU репозитории, но не в Gentoo репозитории.

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

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

Смотрите раздел Маскировка активированных репозиториев ebuild-файлов, чтобы избежать всеобъемлющего обновления пакетов из репозитория. Обратите внимание, что GURU репозиторий ebuild-файлов намеренно избегает предоставления версий, которые могли бы заменить пакеты из Gentoo репозитория.

Если последняя версия пакета доступна в нескольких репозиториев ebuild-файлов, будет использоваться репозиторий с наивысшим приоритетом. Приоритет для ebuild-репозитория можно установить в в /etc/portage/repos.conf. Для Gentoo репозитория ebuild-файлов приоритет по умолчанию равен -1000, а если приоритет для репозитория не установлен, то по умолчанию он равен 0. Если несколько репозиториев имеют одинаковый приоритет (например, два или более не имеют приоритета, поэтому имеют приоритет 0), то порядок не определён — пакет для установки будет выбран произвольно.

Можно предложить Portage установить пакет из конкретного репозитория ebuild-файлов, указав в спецификаторе версии :: (его можно использовать и в других операциях, например, при удалении пакета посредством --depclean):

root #emerge --ask категория/пакет::название-репозитория

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

Синхронизация репозитория

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

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

Синхронизация репозитория производится командой emaint sync и конфигурируется в файлах в /etc/portage/repos.conf:

user $emaint --help
usage: usage: emaint [options] COMMAND
<nowiki/>
The emaint program provides an interface to system health checks
and maintenance. See the emaint(1) man page for additional
information about the following commands:
<nowiki/>
Commands:
  all            Perform all supported commands
  binhost        Scan and generate metadata indexes for binary packages.
  cleanconfmem   Check and clean the config tracker list for uninstalled packages.
  cleanresume    Discard emerge --resume merge lists
  logs           Check and clean old logs in the PORTAGE_LOGDIR.
  merges         Scan for failed merges and fix them.
  movebin        Perform package move updates for binary packages
  moveinst       Perform package move updates for installed and binary packages.
  sync           Check repos.conf settings and sync repositories.
  world          Check and fix problems in the world file.
<nowiki/>
optional arguments:
  -h, --help            show this help message and exit
  -c, --check           Check for problems (a default option for most modules)
  -f, --fix             Attempt to fix problems (a default option for most modules)
  --version             show program's version number and exit
  -C, --clean           Cleans out logs more than 7 days old (cleanlogs only) module-options: -t, -p
  -t NUM, --time NUM    (cleanlogs only): -t, --time Delete logs older than NUM of days
  -p, --pretend         (cleanlogs only): -p, --pretend Output logs that would be deleted
  -P, --purge           Removes the list of previously failed merges. WARNING: Only use this option if you plan on manually fixing them or do not want them re-installed.
  -y, --yes             (merges submodule only): Do not prompt for emerge invocations
  -r REPO, --repo REPO  (sync module only): -r, --repo Sync the specified repo
  -A, --allrepos        (sync module only): -A, --allrepos Sync all repos that have a sync-url defined
  -a, --auto            (sync module only): -a, --auto Sync auto-sync enabled repos only
  --sync-submodule {glsa,news,profiles}
                        (sync module only): Restrict sync to the specified submodule(s)

Чтобы синхронизировать все репозитории, для которых выставлен атрибут auto-sync=true, запустите emaint sync с параметром --auto (сокращенно -a). Обычно это и является командой, которая должна выполняться регулярно, перед обновлениями системы и установкой пакетов (и эквивалетна использованию старой команды emerge --sync):

root #emaint sync --auto

Чтобы синхронизировать foo репозиторий (игнорируя атрибут auto-sync для foo):

root #emaint sync --repo foo

Чтобы синхронизировать все репозитории с действительными значениями sync-type и sync-url (игнорируя значение auto-sync):

root #emaint sync --allrepos
Предупреждение
Для всех репозиториев, которые не должны синхронизироваться командой emaint sync --auto, нужно выставить атрибут auto-sync = no в подходящем файле в /etc/portage/repos.conf, так как значение по умолчанию равно auto-sync = true.
Заметка
Команда emerge --sync оставлена только для целей совместимости. Основной контроль над всеми операциями синхронизации был перемещён из emerge в emaint, и теперь emerge --sync просто вызывает модуль emaint sync с параметром --auto. Это вызывает синхронизацию только тех репозиториев, у которых атрибут auto-sync выставлен как yes или true. Если это значение равно not или отсутствует для сконфигурированных репозиториев, emerge --sync пропустит их синхронизацию.
Совет
Инструмент emerge-webrsync может быть использован для загрузки и установки ежедневного rsync-среза для Gentoo репозитория, например, чтобы помочь с ограничениями межсетевого экрана или ускорить начальную синхронизацию.

Смотрите man emaint для информации об использовании команд синхронизации Portage. Смотрите статью проекта Portage о синхронизации для информации о миграции на новую модульную систему синхронизации с версии Portage 2.2.16, она содержит важную информацию, особенно для пользователей eix-sync, esync -l и emerge --sync .

Лучшие практики

Создание кэша

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

Сгенерируйте локальный кэш метаданных, запустив команду emerge --regen после синхронизации репозиториев ebuild-файлов:

root #emaint sync --allrepos
root #( ulimit -n 4096 && emerge --regen )

Будьте осторожны, поскольку выполнение команды emerge --regen занимает много времени, и ее не рекомендуется использовать пользователям rsync, поскольку rsync обновляет кэш с помощью кэша на сервере (большинство пользователей portage являются пользователями rsync). Пользователям rsync следует просто использовать emaint (или eix-sync), чтобы повторно сгенерировать кэш. Скорее всего, использовать emerge --regen следует только пользователям очень больших репозиториев ebuild-файлов.

Маскировка активированных репозиториев ebuild-файлов

При использовании больших репозиториев ebuild-файлов, а также репозиториев неизвестного или низкого качества, лучше всего жёстко замаскировать репозиторий ebuild-файлов и разрешать только конкретные ebuild-файлы. Например, для репозитория «repository-foobar»:

ФАЙЛ /etc/portage/package.maskМаскировка всех пакетов в репозитории ebuild-файлов
*/*::repository-foobar

Затем добавьте отдельный пакет (отдельные пакеты) из репозитория repository-foobar, чтобы они стали видимыми для установки Portage:

ФАЙЛ /etc/portage/package.unmaskРазмаскировка конкретного пакета из репозитория ebuild-файлов
foo-category/bar::repository-foobar

После такой размаскировки пакет «foo-category/bar» должен стать доступным, в то время, как остальные пакеты из репозитория repository-foobar должны остаться недоступными.

См. также

Внешние ресурсы

  • https://repos.gentoo.org — расположение официального Gentoo репозитория ebuild-файлов.
  • https://github.com/gentoo/ — зеркало вышеуказанного репозитория на GitHub.
  • https://gpo.zugaina.org/Overlays — Неофициальный, но очень полезный сайт для поиска репозиториев/оверлеев.