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

From ArchWiki
Jump to: navigation, search
Состояние перевода: На этой странице представлен перевод статьи Arch Build System. Дата последней синхронизации: 6 сентября 2015. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

В этой статье представлен обзор системы сборки Arch (сокращенно ABS) и пошаговое руководство для начинающих. Это не исчерпывающее руководство. Если вам нужна дополнительная информация, обратитесь к man страницам.

Примечание: Дерево ABS синхронизируется один раз в день, поэтому оно может не содержать то, что уже доступно в репозиториях.

Что такое Arch Build System?

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

Что такое система наподобие портов?

Порты — это система используемая в *BSD для автоматизации процесса сборки программ из исходного кода. Система использует порт для загрузки, распаковки, исправления, компиляции и установки нужной программы. Порт — это всего лишь небольшой каталог на компьютере пользователя, название которого соответствует устанавливаемой программе. Этот каталог содержит несколько файлов, которые содержат инструкции по сборке и установке программ из исходных кодов. Таким образом для установки программы всего лишь нужно выполнить make или make install clean находясь в каталоге порта.

ABS имеет такую же концепцию

ABS состоит из дерева каталогов (дерева ABS), которое находится в /var/abs. Это дерево содержит множество подкаталогов, распределённых по названиям репозиториев и названых в соответствии с названием пакета. Это дерево представляет собой (но не содержит) все официальные программы Arch, получаемые через систему SVN. Вы можете воспринимать каждый такой подкаталог как 'ABS', хотя большинство называют их 'портами'. Эти ABS (или подкаталоги) не содержат ни пакета с программой, ни исходных кодов, а только файл PKGBUILD (и иногда другие файлы). PKGBUILD — это просто Bash скрипт для сборки — текстовый файл, содержащий инструкции по компиляции и упаковке пакета, а также URL соответствующего tarball архива с исходниками, который нужно скачать. (Самым главным компонентом ABS являются PKGBUILDы.) Выполнив команду makepkg в ABS каталоге, программа сначала компилируется, а затем упаковывается внутри каталога сборки. Теперь вы можете воспользоваться pacman (пакетным менеджером Arch Linux), для установки, обновления или удаления вашего нового пакета.

Обзор ABS

'ABS' можно использовать в качестве обобщающего термина, поскольку она неразрывно связана с некоторыми другими компонентами. Несмотря на то, что это технически неверно, под 'ABS' может подразумеваться набор следующих компонентов:

Дерево ABS
Структура каталогов ABS. Каталоги синхронизируется с SVN и расположены в /var/abs/ на вашем (локальном) компьютере. Дерево содержит много подкаталогов, названных в соответствии со всеми доступными официальными программами Arch Linux из репозиториев, которые прописаны в /etc/abs.conf, но не сами пакеты. Дерево создаётся после установки пакета abs с помощью pacman и последующего выполнения скрипта abs.
Примечание: Сами пакеты находятся в svn и git репозиториях, а скрипт abs скачивает их с помощью rsync.
PKGBUILD
Bash скрипт, который содержит URL исходного кода и инструкции по компиляции и упаковыванию пакета.
makepkg
Шелл команда, которая читает PKGBUILDы, автоматически скачивает и компилирует исходники и создаёт .pkg.tar* в зависимости от массива PKGEXT в makepkg.conf. Вы также можете использовать makepkg, чтобы собирать ваши собственные пакеты из AUR или других источников. Для дополнительной информации смотрите Создание пакетов.
pacman
pacman — это совершенно независимая программа. Он всегда используется либо программой makepkg либо вручную для установки и удаления собранных пакетов и для просмотра зависимостей.
AUR
Пользовательский репозиторий Arch — это не имеющие отношение к ABS PKGBUILDы (неподдерживаемые), которые используются программой makepkg для компиляции и упаковки программ. В отличие от дерева ABS, которое расположено на вашем локальном компьютере, AUR представлен в виде веб сайта. AUR содержит тысячи PKGBUILDов, созданных пользователями для программ, которые недоступны в качестве официальных пакетов Arch. Если вам нужно собрать пакет, которого нет в официальном дереве Arch, то вероятнее всего вы найдёте его в AUR.

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

Система сборки Arch используется для:

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

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

Как использовать ABS

Сборка пакетов с помощью abs состоит из следующих шагов:

  1. Установка пакета abs с помощью pacman.
  2. Запуск команды abs с правами root для создания дерева ABS, синхронизированного с сервером Arch Linux.
  3. Копирование файлов для сборки (обычно расположенных в /var/abs/<репозиторий>/<название_пакета>) в каталог сборки.
  4. Переход в этот каталог, редактирование PKGBUILD (если это необходимо) и выполнение команды makepkg.
  5. В соответствии с инструкциями в PKGBUILD, makepkg скачает нужный tarball архив с исходным кодом, распакует его, наложит патч (если необходимо), скомпилирует в соответствии с флагами CFLAGS, заданными в makepkg.conf и наконец сожмёт собранные файлы в пакет с расширением .pkg.tar.gz или .pkg.tar.xz.
  6. Установка, заключающаяся в выполнении команды pacman -U <файл .pkg.tar.xz>. Удаление пакета также осуществляется с помощью pacman.

Установка инструментов

Чтобы использовать ABS, вы должны установить пакет abs.

Этот пакет включает в себя скрипты синхронизации abs, некоторые скрипты сборки и rsync (в качестве зависимости, если он у вас ещё не установлен).

Однако, перед тем как вы сможете что-то собрать, вам также понадобятся основные инструменты сборки. Они уже подготовлены для вас в группе пакетов base-devel. Эту группу можно установить с помощью pacman.

/etc/abs.conf

Отредактируйте файл /etc/abs.conf, чтобы он включал в себя нужные вам репозитории.

Уберите ! перед соответствующими репозиториями. Например:

REPOS=(core extra community !testing)

Дерево ABS

Дерево ABS — это иерархия каталогов, синхронизируемая с SVN, расположенная в /var/abs и выглядит оно примерно так:

| -- core/
|     || -- acl/
|     ||     || -- PKGBUILD
|     || -- attr/
|     ||     || -- PKGBUILD
|     || -- abs/
|     ||     || -- PKGBUILD
|     || -- autoconf/
|     ||     || -- PKGBUILD
|     || -- ...
| -- extra/
|     || -- acpid/
|     ||     || -- PKGBUILD
|     || -- apache/
|     ||     || -- PKGBUILD
|     || -- ...
| -- community/
|     || -- ...

Дерево ABS имеет в точности такую же структуру, как и база данных пакетов:

  • Первый уровень вложенности: Название репозитория
  • Второй уровень вложенности: Каталоги, названные именами пакетов
  • Третий уровень вложенности: PKGBUILD (содержит информацию, необходимую для сборки пакета) и другие необходимые файлы (патчи и иные файлы, необходимые для сборки пакета)

Исходные код для пакетов не представлен в ABS каталоге. Вместо этого PKGBUILD содержит URL, с которого будет произведена загрузка исходных кодов когда пакет будет собираться. Поэтому размер дерева abs довольно мал.

Загрузка дерева ABS

Выполните:

# abs

Теперь ваше дерево ABS находится в каталоге /var/abs. Обратите внимание, что ветви дерева ABS были созданы в соответствии с заданными вами репозиториями в /etc/abs.conf.

Команду abs нужно выполнять периодически, чтобы ваше дерево было синхронизировано с официальными репозиториями. Файлы конкретного ABS пакета можно также закачать командой:

# abs <репозиторий>/<пакет>

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

/etc/makepkg.conf

Tango-Merge-arrows-3.pngЭта статья или раздел является кандидатом на объединение с makepkg (Русский).Tango-Merge-arrows-3.png

Причина: пожалуйста, используйте второй аргумент шаблона для указания причины. (обсуждение: Talk:Arch Build System (Русский)#)

Файл /etc/makepkg.conf программы makepkg определяет глобальные переменные окружения и флаги компиляции, которые вы можете захотеть отредактировать если вы используете SMP систему или задать другие необходимые оптимизации. Настройки по умолчанию оптимизированы для i686 и x86_64, которые будут работать нормально для этих архитектур на однопроцессорных системах. (Умолчания будут работать на SMP компьютерах, но будут использовать только одно ядро/CPU при компиляции. Смотрите makepkg для дополнительной информации.)

Задание переменной PACKAGER в /etc/makepkg.conf

Настройка переменной PACKAGER в файле /etc/makepkg.conf является необязательным, но настоятельно рекомендуемым шагом. Это позволяет сделать "пометку", чтобы быстро определить, какие пакеты были собраны и/или установлены ВАМИ, а не официальным сопроводителем! Это можно легко сделать с помощью expac:

Отобразить все пакеты (включая пакеты из AUR)
$ grep myname /etc/makepkg.conf
PACKAGER="myname <myemail@myserver.com>"
$ expac "%n %p" | grep "myname" | column -t
archey3 myname
binutils myname
gcc myname
gcc-libs myname
glibc myname
tar myname
Отобразить только пакеты из репозиториев

В этом примере отобразятся только те пакеты, которые находятся в репозиториях, заданных в /etc/pacman.conf:

$ . /etc/makepkg.conf; grep -xvFf <(pacman -Qqm) <(expac "%n\t%p" | grep "$PACKAGER$" | cut -f1)
binutils
gcc
gcc-libs
glibc
tar

Создание каталога для сборки

Рекомендуется создать каталог, в котором непосредственно будет производиться компиляция; вы никогда не должны изменять дерево ABS, производя сборку в его каталогах, поскольку данные будут потеряны (перезаписаны) при каждом обновлении ABS. Хорошей практикой является использование вашего домашнего каталога, хотя некоторые пользователи Arch предпочитают создавать каталог 'local' в /var/abs/, которым владеет обычный пользователь.

Создайте ваш каталог для сборки, например:

$ mkdir -p $HOME/abs

Скопируйте ABS из дерева (/var/abs/<репозиторий>/<имя_пакета>) в ваш каталог сборки.

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

В данном примере мы будем собирать пакет slim.

Скопируйте slim ABS из дерева ABS в каталог сборки:

$ cp -r /var/abs/extra/slim/ ~/abs

Перейдите в каталог сборки:

$ cd ~/abs/slim

Измените PKGBUILD под ваши нужды, затем выполните makepkg (с флагом -s для того, чтобы автоматически обрабатывать зависимости, необходимые на время сборки):

$ makepkg -s
Примечание: Прежде чем жаловаться на недостающие зависимости (во время make), не забудьте проверить, что группа base-devel установлена, поскольку это подразумевается при сборке пакетов с помощью makepkg. Смотрите #Установка инструментов.

Установите с правами супер пользователя:

# pacman -U slim-1.3.0-2-i686.pkg.tar.xz

Вот и всё. Вы только что собрали slim из исходных кодов и правильно установили его в вашу систему с помощью pacman. Удаление пакета также осуществляется с помощью pacman командой pacman -R slim.

Метод установки программ с использованием ABS предоставляет удобство, сохраняя при этом полную прозрачность и контроль над build и install функциями, включёнными в PKGBUILD.

fakeroot

По сути, такие же самые шаги предпринимаются при традиционном способе установки (обычно включающем шаги ./configure, make, make install), но программа устанавливается в fake root окружение. (fake root — это просто подкаталог внутри каталога сборки, который функционирует и ведёт себя как корневой каталог системы. С помощью программы fakeroot, makepkg создаёт ненастоящий корневой каталог и устанавливает скомпилированные бинарники и необходимые файлы в него, в качестве владельца выставляя root.) Затем fake root, т.е. дерево подкаталогов, содержащее скомпилированную программу, сжимается в архив с расширением .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.
  • asp - инструмент для управления сборкой из исходных кодов, использующийся для создания Arch Linux пакетов. Использует git интерфейс, что предоставляет более свежие исходные коды.