Arch Build System (Русский)

From ArchWiki
Jump to navigation Jump to search

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Arch Build System. Дата последней синхронизации: 8 октября 2019. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Система сборки Arch (Arch Build System, ABS) предназначена для сборки пакетов в Arch Linux. Она представляет собой набор инструметов, целью которого является преобразование исходного кода программы в устанавливаемый двоичный .pkg.tar.xz пакет. С помощью инструментов ABS можно собирать пакеты из официальных репозиториев, AUR, а также модифицированные пакеты, создаваемые пользователями под собственные нужды.

Обзор ABS

Система сборки Arch устроена таким образом, чтобы максимально упростить сборку пакетов, сведя данный процесс к выполнению нескольких команд в командной строке. К основным элементам ABS относятся:

Репозиторий SVN
Хранилище под управлением системы контроля версий SVN, в котором содержатся файлы PKGBUILD, необходимые для установки пакетов из официальных репозиториев Arch. Ни файлов с исходными кодами программ, ни самих пакетов в этом хранилище нет. Доступ к SVN можно получить только посредством специальной утилиты командной строки, но репозиторий SVN имеет также клонированную git-версию, для которой предусмотрен веб-интерфейс. Подробнее об устройстве репозитория SVN в разделе #Репозиторий SVN.
PKGBUILD
Текстовый файл, содержащий Bash-скрипт, в котором находится URL для скачивания файлов с исходным кодом, а также инструкции по их компиляции в двоичный код и упаковке.
makepkg
Утилита, которая читает PKGBUILD, автоматически скачивает файлы с исходным кодом, компилирует их и создает пакет с расширением .pkg.tar.xz, который позже можно будет установить посредством pacman.

Также некоторое отношение к системе сборки Arch имеют следующие инструменты:

pacman
Штатный пакетный менеджер Arch, который проверяет зависимости и производит установку/обновление пакетов, собранных посредством makepkg. Вызывается либо во время работы makepkg путем предварительной установки соответствующих опций (например, -s или -i), либо вручную.
AUR
Пользовательский репозиторий Arch (Arch User Repository, AUR) - отдельное от ABS хранилище файлов PKGBUILD для программ, не вошедших в официальные репозитории. В нём находятся тысячи предложенных пользователями файлов PKGBUILD, которые тоже можно использовать посредством makepkg для компиляции и упаковки программного обеспечения. Если вам нужен пакет, которого нет в официальных репозиториях, стоит поискать его в AUR.

Репозиторий SVN

Пять официальных репозиториев содержат пакеты поддерживаемых разработчиками Arch Linux программ. Файлы PKGBUILD для этих пакетов хранятся в репозитории SVN, который фактически состоит из двух репозиториев. В SVN-репозитории packages хранятся файлы PKGBUILD пакетов из официальных репозиториев core, extra и testing, а в SVN-репозитории community - файлы из community и multilib.

В SVN-репозитории для каждого пакета выделен отдельный каталог, в котором находятся подкаталоги repos и trunk. В repos в свою очередь есть еще один каталог, имя которого состоит из названия официального репозитория пакета (например, core) и архитектуры. Файлы PKGBUILD, которые находятся в repos, используются в качестве официальной сборки. Файлы в trunk используются разработчиками до перемещения в repos.

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

acl
acl/repos
acl/repos/core-x86_64
acl/repos/core-x86_64/PKGBUILD
acl/trunk
acl/trunk/PKGBUILD

Исходного кода пакета в SVN-репозитории нет. Вместо этого файл PKGBUILD содержит URL официального репозитория, из которого исходный код будет загружен во время сборки пакета.

Зачем использовать ABS?

Если возникает необходимость установить актуальный пакет программы из официального репозитория со всеми необходимыми зависимостями, то это производится посредством команды pacman -S имя-пакета. Детали скачивания, комплиляции, сборки и установки при этом остаются за кадром. Однако иногда перед пользователем встает задача создания своего уникального пакета, который отсутствует в официальных репозиториях. Для этих целей используется ABS. Например:

  • Компиляция или перекомпиляция пакета по какой-либо причине
  • Сборка и установка новых пакетов из исходных кодов программ, для которых ещё нет пакетов (смотрите Создание пакетов)
  • Изменение существующих пакетов под свои нужды (включение или отключение опций, внесение исправлений)
  • Перестройка всей системы с использованием новых флагов компиляции "à la FreeBSD"
  • Чистая сборка и установка собственного ядра (смотрите Компиляция ядра)
  • Получение работающих модулей ядра для вашего собственного ядра
  • Легкая компиляции и установка новой/старой/бета или девел версии Arch пакета, с помощью редактирования номера версии в PKGBUILD

ABS не является необходимой для использования в Arch Linux, но она удобна для автоматизации некоторых задач при компиляции из исходников.

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

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

# pacman -S base-devel --needed

Получение PKGBUILD

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

Получение PKGBUILD посредством SVN

Предварительно установите пакет subversion.

Важно: Загружать репозиторий целиком запрещено; для нерекурсивной загрузки обязательно необходимо указать опцию --depth=empty в командах, представленных ниже. Репозиторий SVN довольно велик, при полной загрузке он не только займет много места на локальном компьютере, но и серьезно нагрузит сервер archlinux.org. При злоупотреблении этим сервисом ваш адрес могут заблокировать. Никогда не используйте публичный SVN для скриптов любого типа.

Для синхронизации официальных репозиториев core, extra и testing:

$ svn checkout --depth=empty svn://svn.archlinux.org/packages

Для репозиториев community или multilib:

$ svn checkout --depth=empty svn://svn.archlinux.org/community

В обоих случаях результатом будет создание пустого каталога, но синхронизация при этом произойдет.

Перейдя в созданный каталог, packages или community, выполните:

$ svn update имя-пакета

Эта команда синхронизирует запрошенный пакет. С этого момента, каждый раз при выполнении svn update будет происходить синхронизация этого пакета.

Если запрошенный пакет не существует, svn не выдаст предупреждение. В терминале появится только что-то вроде "At revision 358704" без создания каких-либо файлов. Если это произошло:

  • проверьте правильность имени пакета
  • проверьте не был ли пакет перемещен в другой репозиторий (например, из community в packages)
  • проверьте https://www.archlinux.org/packages чтобы убедиться, что ваш пакет не собирается на основе другого пакета (например, python-tensorflow собирается по PKGBUILD пакета tensorflow)
Совет: Для синхронизации старой версии пакета ознакомьтесь с #Синхронизация устаревшей версии пакета.

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

$ svn update

Получение PKGBUILD посредством Git

Предварительно установите пакет asp.

Чтобы клонировать пакет из репозитория выполните

$ asp checkout имя-пакета

Пакет будет клонирован в каталог, имя которого совпадает с названием пакета. Для обновления клонированного git-репозитория необходимо выполнить asp update и git pull в каталоге репозитория.

Кроме того, другие команды git могут использоваться для синхронизации более старых версий пакета и отслеживания изменений. Информация об использовании git находится на соответствующей странице.

Если необходимо просто получить копию снимка (snapshot) текущего PKGBUILD для конкретного пакета, выполните

$ asp export имя-пакета

Сборка пакета

Для сборки пакет необходимо переместиться в каталог с PKGBUILD и выполнить

$ makepkg

Могут оказаться полезными флаги --nodeps (не проверять зависимости) и --skippgpcheck (не проверять PGP-сигнатуры пакета).

Совет: Для получения информации о других возможных настройках makepkg обратитесь к разделам makepkg (Русский)#Применение[broken link: invalid section] и makepkg (Русский)#Настройка.

Установка пакета

Примечание: Строго говоря, установка пакета находится за пределами Системы сборки Arch. Однако поскольку она часто является завершающим этапом, имеет смысл кратко описать её здесь.

Установка пакета может производиться двумя способами.

Если сборка пакета еще не была произведена (см. #Сборка пакета), то нужно переместиться в каталог с PKGBUILD и выполнить

$ makepkg -si

Эта команда произведет сборку пакета, а затем автоматически вызовет pacman чтобы произвести проверку и установку зависимостей (опция -s) и установку самого пакета (опция -i).

Если же сборка пакета уже произошла и завершилась успешно, то нужно найти в каталоге с PKGBUILD файл .pkg.tar.xz-архива, название которого состоит из имени пакета, версии и архитектуры, и выполнить:

# pacman -U название-пакета.pkg.tar.xz

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

Советы и рекомендации

Оставлять модифицированные пакеты

При обновлении системы pacman затрёт изменённый вами пакет из ABS на пакет, который имеет такое же имя в официальных репозиториях. Следуйте инструкции ниже для того, чтобы этого избежать.

Впишите массив групп в PKGBUILD и добавьте пакет в группу под названием modified.

PKGBUILD
groups=('modified')

Добавьте эту группу в секцию IgnoreGroup в /etc/pacman.conf.

/etc/pacman.conf
IgnoreGroup = modified

Если в официальных репозиториях появится новая версия, то во время обновления системы pacman напечатает замечание, что он пропускает обновление этого пакета, поскольку он находится в секции IgnoreGroup. С этого момента изменённый пакет должен быть пересобран из ABS во избежание частичных обновлений.

Синхронизация устаревшей версии пакета

Находясь в синхронизированном svn-репозитории (т.е. packages или community, как описано в #Получение PKGBUILD посредством SVN), сначала изучите лог:

$ svn log имя-пакета

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

$ svn update -r1729 имя-пакета

Выбранный пакет обновится до нужной версии.

Вместо номера ревизии можно указать дату. Если на эту дату нет ревизии, то svn найдет ближайшую ревизию перед ней. Пример:

$ svn update -r'{20090303}' имя-пакета

Это дает возможность синхронизации пакетов к последним версиям до перемещения в другой репозиторий. Необходимо лишь найти в логах дату перемещения или же последний номер ревизии.

Другие инструменты

  • pbget - получение PKGBUILDов для конкретных пакетов прямо из веб интерфейса. Также работает для AUR.
  • asp - инструмент для управления сборкой из исходных кодов, использующийся для создания Arch Linux пакетов. Использует git интерфейс, что предоставляет более свежие исходные коды.