Arch build system (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Arch build system
. Дата последней синхронизации: 21 мая 2023. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Стандарты создания пакетов для Arch
Пользовательский репозиторий Arch
Создание пакетов
Ядро/Система сборки Arch
makepkg (Русский)
Официальные репозитории
pacman (Русский)
PKGBUILD (Русский)
Patching packages
Система сборки Arch (Arch build system, ABS) — схожая с
портами
система сборки программных пакетов из исходного кода. В отличие от
pacman
, который является инструментом управления двоичными пакетами, система сборки Arch — набор утилит для компилирования исходников в устанавливаемые
.pkg.tar.zst
пакеты.
Порты
используются в ОС семейства BSD для автоматизации процесса сборки программ из файлов с исходным кодом.
Порты
помогают загружать, распаковывать, патчить, компилировать и устанавливать программы. Сам по себе
порт
является небольшим каталогом на компьютере пользователя, название которого совпадает с названием устанавливаемой программы. Этот каталог содержит файлы с инструкциями по установке и сборке программ. Благодаря этому установка сильно упрощается: как правило, необходимо лишь выполнить команду
make
или
make install clean
в каталоге порта.
Концепция системы сборки Arch во многом похожа. Она включает в себя коллекцию git-репозиториев для каждого пакета, доступного в Arch Linux. Каждый репозиторий содержит файл
PKGBUILD
(и иногда некоторые другие файлы), но в них нет ни исходников, ни двоичных файлов программ. При выполнении команды
makepkg
внутри каталога исходники программы загружаются и компилируются в двоичные файлы, которые затем упаковываются в пакет. После этого можно воспользоваться
pacman
, чтобы установить данный пакет в систему.
Инструменты
Система сборки Arch опирается на несколько компонентов и инструментов, которые используются в процессе создания пакетов:
Репозиторий
Набор каталогов, в которых хранятся необходимые для сборки всех официальных пакетов файлы — но не сами пакеты и не файлы с исходным кодом программ. Он доступен в виде
git
-репозиториев на
Gitlab
. Подробнее в разделе
#Структура репозитория
.
PKGBUILD
Bash
-скрипт, в котором находится URL для скачивания файлов с исходным кодом, а также инструкции по их компиляции в двоичный код и упаковке.
makepkg
Утилита командной строки, которая читает
PKGBUILD
, автоматически скачивает файлы с исходным кодом, компилирует их и создаёт пакет
.pkg.tar*
(какой конкретно суффикс будет у пакета, определяется параметром
PKGEXT
в файле
makepkg.conf
).
makepkg
также можно использовать для создания пакетов из
AUR
или сторонних источников, подробнее см.
Создание пакетов
.
pacman
pacman является полностью отдельным проектом, но он вызывается (утилитой makepkg или вручную) каждый раз при установке или удалении собранных пакетов, а также для установки зависимостей.
AUR
Пользовательский репозиторий Arch (Arch User Repository, AUR) — отдельное от официальных репозиториев хранилище файлов PKGBUILD, но пакеты из AUR можно собирать теми же инструментами. В AUR находятся тысячи поддерживаемых пользователями файлов PKGBUILD для программ, которые не имеют официального пакета Arch. Если вам нужен пакет, которого нет в официальных репозиториях, стоит поискать его в AUR.
Важно
Официальные файлы PKGBUILD разрабатываются исходя из предположения, что пакеты будут собираться в
чистом chroot-окружении
.
Грязная
cборка может привести к непредсказуемому поведению программы во время исполнения. Это связано с тем, что при сборке зависимости определяются динамически, и итоговый список зависит от того, какие пакеты были доступны на машине в момент сборки.
Структура репозитория
Файлы PKGBUILD для пакетов из
официальных репозиториев
core
,
extra
,
core-testing
и
extra-testing
хранятся на
Arch Linux Gitlab
.
Каждый пакет находится в отдельном git-репозитории в пространстве имён
archlinux/packaging/packages
. В каждом репозитории есть файл PKGBUILD и файлы, используемые в официальных сборках. Также там можно найти некоторые файлы, которые используются разработчиками для процесса сборки.
Например, дерево каталогов для
acl
выглядит следующим образом:
acl
├── keys
│   └── pgp
│       ├── 259B3792B3D6D319212CC4DCD5BF9FEB0313653A.asc
│       ├── 600CD204FBCEA418BD2CA74F154343260542DF34.asc
│       └── B902B5271325F892AC251AD441633B9FE837F581.asc
└── PKGBUILD
Исходного кода пакета здесь нет. Вместо этого файл
PKGBUILD
содержит URL, из которого исходный код будет загружен во время сборки.
Способы применения
Система сборки Arch позволяет автоматизировать некоторые задачи, связанные с компиляцией из исходников. Например:
Компиляция или перекомпиляция пакета;
Сборка из исходных кодов и установка программ, для которых ещё нет официального пакета (см.
Создание пакетов
);
Изменение существующих пакетов под свои нужды (включение или отключение опций, внесение исправлений);
Перестройка всей системы с использованием новых флагов компиляции "à la FreeBSD";
Чистая сборка и установка собственного ядра (см.
Ядро#Компиляция
);
Создание модулей для вашего собственного ядра;
Компиляция и установка новой/старой/beta/devel версии Arch-пакета с помощью редактирования номера версии в PKGBUILD.
Использование
Получение PKGBUILD
Для получения файла
PKGBUILD
можно использовать инструмент
pkgctl
или напрямую
Git
.
С помощью pkgctl
Установите
пакет
devtools
, который предоставляет команду
pkgctl
— инструмент для работы с исходными файлами пакетов Arch Linux с использованием Git.
Чтобы склонировать git-репозиторий с актуальными исходными файлами пакета с помощью
pkgctl
, выполните:
$ pkgctl repo clone
название-пакета
Фраза «исходные файлы пакета» означает файл
PKGBUILD
и, возможно, некоторые другие необходимые для сборки файлы, такие как ключи. То есть это основные файлы, которые требуются для системы сборки Arch. Исходники оригинальной программы, например файлы C или Python, сюда не относятся.
Можно получить не только актуальные исходные файлы пакета, но и их предыдущие версии. Кроме того, вы можете использовать любые команды git для получения более старой версии пакета или для отслеживания пользовательских изменений.
Для получения определённой версии пакета можно использовать примерно такую команду:
$ pkgctl repo clone --switch="2:1.19.5-1" go
Смотрите
pkgctl-repo-clone(1)
для более подробной информации.
С помощью git напрямую
Используйте такую команду:
$ git clone https://gitlab.archlinux.org/archlinux/packaging/packages/
название-пакета
.git
Например, для получения исходных файлов пакета
apache
:
$ git clone https://gitlab.archlinux.org/archlinux/packaging/packages/apache.git
Сборка пакета
Перед сборкой пакета из файла
PKGBUILD
настройте
makepkg
в соответствии с указаниями из раздела
makepkg#Настройка
.
Скопируйте каталог с файлом PKGBUILD в другое место, отредактируйте его, если необходимо, после чего соберите пакет и установите его в систему, как описано в разделе
makepkg#Использование
.
Советы и рекомендации
Сохранение изменённых пакетов
При первом же обновлении системы
pacman
заменит модифицированный вами пакет на стандартный пакет с таким же названием из официальных репозиториев. Ниже описано, как этого не допустить.
Добавьте параметр
groups
в PKGBUILD пакета и укажите в нём группу
modified
.
PKGBUILD
groups=('modified')
Добавьте эту группу в раздел
IgnoreGroup
файла
/etc/pacman.conf
.
/etc/pacman.conf
IgnoreGroup = modified
Если в официальных репозиториях появится новая версия этого пакета, то во время обновления системы pacman напечатает замечание, что он пропускает пакет, поскольку тот находится в разделе
IgnoreGroup
. После этого необходимо вручную обновить и пересобрать модифицированную версию пакета, чтобы ваша система не оказалась "частично обновлённой".
Другие инструменты
pbget
— получение файлов PKGBUILD для конкретных пакетов прямо из веб-интерфейса. Также работает для AUR.