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

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

From ArchWiki
Jump to navigation Jump to search

Ссылки по теме

- Стандарты создания пакетов для Arch
- Пользовательский репозиторий Arch
- Создание пакетов
- Сборка ядра через ABS
- makepkg (Русский)
- Официальные репозитории
- pacman (Русский)
- PKGBUILD (Русский)
- Patching in ABS

Состояние перевода: На этой странице представлен перевод статьи Arch Build System. Дата последней синхронизации: 1 мая 2020. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

## Обзор

Система сборки 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 официального репозитория, из которого исходный код будет загружен во время сборки пакета.

## Способы применения

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

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

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

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

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

    # pacman -S base-devel --needed

### Получение PKGBUILD

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

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

Установите пакет asp. asp — инструмент для скачивания исходных файлов пакетов Arch Linux через Git-интерфейс. Подробнее смотрите обсуждение на форуме.

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

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

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

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

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

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

#### Получение 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

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

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

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

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

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

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

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

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

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

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

Перед сборкой пакета из файла PKGBUILD настройте makepkg в соответствии с указаниями из раздела makepkg#Настройка.

Скопируйте каталог с файлом PKGBUILD в другое место, отредактируйте его, если необходимо, после чего соберите пакет и установите его в систему, как описано в разделе 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 во избежание частичных обновлений.

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

- pbget - получение PKGBUILDов для конкретных пакетов прямо из веб интерфейса. Также работает для AUR.

Categories:

- About Arch (Русский)
- Package development (Русский)
- Package management (Русский)