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

Обновлено 7 ноября 2026

Страница актуальна для Portage 3.0.82 и Calculate Utilities 3.8.

Назначение

В man-странице утилита определена одной фразой: «ebuild - низкоуровневый интерфейс системы Portage». Полное описание из той же страницы:

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

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

Повседневные задачи — поиск, установку, обновление и удаление пакетов — выполняют через emerge: он рассчитывает зависимости (см. Введение в Portage). ebuild обращается к одному-единственному файлу и не подменяет emerge в штатной работе с пакетами.

Низкоуровневая утилита нужна, когда с файлом работают вручную:

  • проверить собственный ebuild в своём репозитории — собрать его по шагам и посмотреть, на каком этапе сборка завершается ошибкой;
  • обновить Manifest-файл пакета, который вы написали сами;
  • загрузить и проверить исходники, не запуская установку;
  • отладить сценарий ebuild, глядя, что получается после каждой функции.

Полный справочный текст утилиты выводит man-страница:

man ebuild

Синтаксис

ebuild файл команда [команда]...

Первым аргументом идёт путь к файлу, затем — одна или несколько команд: все указанные команды выполняются в одном вызове. К файлу man-страница предъявляет одно требование:

Должен быть рабочим ebuild-сценарием.

Синтаксис самого ebuild-сценария описан в справочной странице ebuild(5):

man 5 ebuild

Команды

Полные формулировки выводит man ebuild.

Порядок выполнения

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

Например, если вы дадите команду compile, то вызовете тем самым и предшествующие ей функции (такие как setup и unpack), если они не были запущены в предыдущем запуске ebuild. Если вы хотите быть уверенным, что все они были выполнены, вам нужно сначала использовать команду clean.

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

Возможности Portage задаются переменной FEATURES; в Calculate Linux её меняют в пользовательском файле /etc/portage/make.conf/custom (об этом — Возможности Portage и Настройка с помощью переменных).

Команды сборки

Команда Действие
help Выводит справочную информацию о программе в сжатом изложении, а также целый ряд сведений о пакете.
setup Запускает все действия по настройке данного пакета, в том числе специфические системные тесты.
fetch Проверяет, все ли источники данных, фигурирующие в SRC_URI, доступны в каталоге DISTDIR (подробнее см. в make.conf(5)) и имеют верную контрольную сумму. Если исходные коды недоступны, будет предпринята попытка загрузить их с серверов, адреса которых указаны в SRC_URI.
unpack Извлекает исходные коды в подкаталог каталога сборки (BUILD_PREFIX), вызывая функцию src_unpack() внутри файла ebuild.
prepare Подготавливает извлеченные из архива исходные коды, вызывая функцию src_prepare(), определенную в ebuild-файле. При запуске src_prepare() текущим рабочим каталогом становится ${S}. Данная функция поддерживается, начиная с EAPI 2.
configure Производит конфигурирование распакованных исходных кодов, вызывая функцию src_configure(), определенную в ebuild-файле. При запуске src_configure() текущим рабочим каталогом становится ${S}. Данная функция поддерживается начиная с EAPI 2.
compile Компилирует распакованные исходные коды, вызывая функцию src_compile(), определенную в ebuild-файле. При запуске src_compile() текущим рабочим каталогом становится ${S}. По завершении работы src_compile() исходные коды должны быть полностью скомпилированы.
test Выполняет специальные тесты для отдельных пакетов, проверяя сборку.
install Устанавливает пакет во временный каталог установки, вызывая функцию src_install().
clean Очищает временный каталог сборки, созданный Portage специально для этого файла ebuild.
digest В настоящее время - эквивалент команды manifest.
manifest Обновляет Manifest-файл пакета. В результате создаются контрольные суммы для всех файлов, обнаруженных в одном каталоге с обрабатываемым файлом ebuild, а также содержимое вложенных каталогов подкаталога files.

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

Если по какой-либо причине контрольная сумма текущих или только что загруженных исходных кодов не совпадает с контрольной суммой, записанной в файле files/digest-[пакет]-[версия-ревизия], выводится предупреждение, и программа ebuild завершает работу с кодом ошибки 1.

Каталог распаковки

Как правило, исходники распаковываются в каталог ${BUILD_PREFIX}/[пакет]-[версия-ревизия]/work. Обращаться к нему можно с помощью переменной ${WORKDIR}.

Создавая файл ebuild самостоятельно, убедитесь, что переменная S (каталог исходных файлов), определенная в начале ebuild-сценария, указывает на каталог, в котором действительно содержатся распакованные исходные коды. По умолчанию он определяется как ${WORKDIR}/${P}, поэтому, как правило, ничего не требуется исправлять.

Патчи накладываются также на этапе распаковки: «Функция src_unpack() также отвечает за наложение патчей перед компиляцией пакетов.»

Команды установки и удаления

Команда Действие
qmerge Эта функция устанавливает все файлы в каталоге установки на текущую файловую систему. Это производится следующим образом: сначала запускается функция pkg_preinst() (если она существует). Затем все файлы устанавливаются в файловую систему, а их контрольные суммы записываются в /var/db/pkg/${CATEGORY}/${PN}-${PVR}/CONTENTS. Наконец, по завершении установки всех файлов выполняется функция pkg_postinst() (если она существует).
merge Обычно для установки файла ebuild, необходимо последовательно выполнить следующие действия: fetch, unpack, compile, install и qmerge. Если вам нужно только установить файл ebuild, вы можете использовать данную команду: она сама выполнит все перечисленные операции и остановится в процессе выполнения только в том случае, если какая-либо функция отрабатывает с ошибкой.
unmerge Эта команда сначала вызывает функцию pkg_prerm() (если она существует). Затем она удаляет все файлы из текущих файловых систем, файл содержимого пакета для которых имеет верную контрольную сумму и время изменения. Все пустые каталоги удаляются вместе с вложенными.
package Эта команда очень напоминает merge, за исключением того, что после загрузки, распаковки, компиляции и установки создается .tbz2-архив бинарного пакета, который затем сохраняется в каталоге PKGDIR (см. make.conf(5)).
rpm Собирает RPM-пакет RedHat из файлов во временном каталоге установки. На данный момент сведения о зависимостях файла ebuild не включаются в RPM.
config Запускает для определенного пакета действия, которые необходимо выполнить до начала установки. Как правило, это настройка конфигурационных файлов или другие настроечные действия, которые пользователь может захотеть выполнить.
preinst Выполняет специальные действия для отдельных пакетов, которые требуется произвести до установки пакета в текущую файловую систему.
postinst Выполняет специальные действия для отдельных пакетов, которые требуется произвести после установки пакета в текущую файловую систему. Как правило, при этом выводятся полезные сообщения.
prerm Запускает для определенного пакета действия, которые необходимо выполнить до удаления пакета из файловой системы.
postrm Запускает для определенного пакета действия, которые необходимо выполнить после удаления пакета из файловой системы.

В Calculate Linux каталог бинарных пакетов PKGDIR — /var/calculate/packages/x86_64, где лежат файлы вида vim-9.2.1202.tbz2 (карта путей — на странице Файлы и каталоги).

При удалении пакетов man-страница добавляет: «Можно сначала установить новую версию пакета, а затем удалить прежнюю - собственно, именно в этом заключается рекомендуемый метод обновления.»

Параметры

Параметр Действие
--force При использовании в связке с командой digest или manifest данная опция принудительно генерирует новые дайджесты для всех файлов исходного кода, относящихся к данному файлу ebuild. Если в каталоге ${DISTDIR} требуемых исходников нет, они будут автоматически загружены.
--skip-manifest Пропустить проверку Manifest-файлов.
--debug Запустить bash с опцией -x, в результате чего стандартный вывод будет включать подробную отладочную информацию.
--ignore-default-opts Не использовать переменную окружения EBUILD_DEFAULT_OPTS.

Полный список параметров выводит man ebuild.

Временный каталог сборки

clean работает с каталогом, который Portage создаёт под каждый ebuild-файл:

Расположение каталога сборки определяется значением переменной PORTAGE_TMPDIR. Чтобы узнать ее текущее значение, выполните emerge --info.

Важно учитывать, что Portage делает с остатками сборки:

Примечание: Portage удаляет практически все данные, оставшиеся после успешной установки пакета, за исключением тех случаев, когда в переменной FEATURES явно указано ’noclean’.

Если вы добавите noclean в значение FEATURES, очень скоро большой объем дискового пространства будет занят ненужными файлами. Не рекомендуется пользоваться этим режимом постоянно, а лишь в том случае, если исходники пакетов потребуются вам после установки.

Для ручной очистки man-страница предлагает: «возможно и ручное удаление этих файлов: для этого следует выполнить rm -rf /var/tmp/portage». В Calculate Linux каталог сборки задаётся переменной PORTAGE_TMPDIR и равен /var/calculate/tmp (карта путей — на странице Файлы и каталоги). Перед удалением проверьте, какое значение у переменной PORTAGE_TMPDIR на вашей системе:

emerge --info | grep PORTAGE_TMPDIR

Пример: проверка локального ebuild

Ниже показано, как проверить собственный файл ebuild — тот, что вы написали или исправили сами. В Calculate Linux такие файлы хранят в пользовательском репозитории custom в /var/calculate/repos/custom с мастерами calculate и gentoo: структура каталогов в нём повторяет официальное дерево, но каталоги категории и пакета создаёте вы сами, перенося ebuild-файл из официального дерева (подробности — на странице Отступление от официального дерева). Файл занимает путь вида /var/calculate/repos/custom/категория/пакет/пакет-версия.ebuild.

Везде ниже <файл> — полный путь к вашему файлу ebuild, <категория>/<пакет> — категория и имя вашего пакета.

Шаг 1. Проверить исходники и контрольные суммы. Команда ничего не устанавливает — она только сверяет и при необходимости докачивает архивы:

ebuild <файл> fetch

Шаг 2. Обновить Manifest. Для собственного файла суммы пересчитываются по всем файлам рядом с ebuild, по подкаталогу files и по всему, что перечислено в SRC_URI:

ebuild <файл> manifest

Команда manifest не меняет систему и выполняется от имени обычного пользователя; права root нужны только командам, которые меняют систему: install, qmerge, unmerge.

Если требуемых исходников нет в DISTDIR и их нужно докачать при пересчёте сумм, к той же команде добавляют --force:

ebuild <файл> manifest --force

Шаг 3. Собрать по шагам. Сначала очистите каталог сборки — выполненные ранее функции не запускаются повторно, и результат может опираться на устаревшие данные:

ebuild <файл> clean

Затем проходите цепочку по одному шагу, проверяя результат после каждого:

ebuild <файл> unpack

ebuild <файл> prepare

Далее — конфигурирование и компиляция:

ebuild <файл> configure

ebuild <файл> compile

Несколько команд можно указать в одном вызове:

ebuild <файл> unpack prepare compile

Если каждая команда должна запускаться изолированно, без предшествующих функций, добавьте noauto в FEATURES.

Шаг 4. Посмотреть установочный образ. По завершении install каталог установки содержит все файлы, которые должны быть установлены в файловую систему или включены в бинарный пакет:

ebuild <файл> install

Шаг 5. Установить пакет. Когда файл работает, установку выполняют через emerge: он рассчитает зависимости и выполнит нужные этапы:

emerge -a <категория>/<пакет>

Меры предосторожности

  • Зависимости рассчитывает emerge, а не ebuild: утилита выполняет команды указанного файла и не проверяет, какие пакеты нужно собрать раньше.
  • qmerge переносит файлы из каталога установки «на текущую файловую систему», а unmerge убирает только те из них, для которых файл содержимого пакета имеет верную контрольную сумму и время изменения. Запустив эти команды без необходимости, вы получите файлы в живой системе, которые придётся удалять вручную.
  • Выполнить clean перед полной цепочкой обязательно: выполненные ранее функции повторно не запускаются, и результат сборки может опираться на устаревшие данные.
  • --skip-manifest отключает проверку Manifest-файлов, а --force пересоздаёт дайджесты по тем исходникам, которые нашлись в DISTDIR. Применяйте их осознанно: после --force расхождение сумм перестанет быть видно.
  • Команда manifest рассчитана на работу с вашим собственным файлом. Не пересоздавайте манифесты пакетов официального дерева, чтобы устранить сообщение о несовпадении контрольных сумм: с таким признаком сначала обновляют дерево и разбираются в его состоянии (об этом — Введение в Portage).

См. также