Использование 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).