# Makepkg (Русский)

makepkg - это базовая утилита для сборки собственных пакетов, которые могут быть использованы менеджером pacman. Основанный на скриптовой системе сборки пакетов, makepkg способен загрузить из интернета и проверить на целостность исходники (например архивы tar.gz и bz2), установить параметры сборки пакета (т.к флаги CFLAGS и другие параметры компилятора), собрать пакет во временную папку и создать готовый архив соответствующий стандарту Arch, удалив все ненужное.

## Установка и настройка

### ABS - Система автоматической сборки пакетов Arch

Для начала, убедитесь что у вас установлены утилиты для сборки собственных пакетов, в их список входят: компилятор, линкер, некоторые базовые библиотеки и вспомогательные приложения типа automake и autoconf. Чтобы загрузить и установить их последние версии, наберите в командной строке эти команды с привилегиями root-пользователя:

    # pacman -S base-devel
    # pacman -S abs

Впишите Y для всех вопросов и pacman закачает и установит (или обновит) средства необходимые для создания собственных пакетов. Затем, опять-же с привилегиями root-пользователя, выполните:

    # abs

Этот скрипт подсоединится к ближайшему серверу, закачает и установит дерево ABS в каталог /var/abs. По умолчанию, некоторые репозитории отключены, вы можете установить свои настройки редактируя файл /etc/abs.conf

Теперь необходимо создать папку в которой будут содержаться исходники, скрипты, патчи или прочие файлы для будущего пакета. Папку можно создать, например, в корне вашего домашнего каталога:

    $ mkdir ~/abs

## Makepkg

Если вы хотите иметь возможность устанавливать недостающие для сборки пакета зависимости, установите утилиту sudo и добавьте вашего пользователя в файл настройки утилиты: /etc/sudoers.

ЗАМЕТКА: в состав пакета sudo входит утилита visudo которая запускает редактор vi в особом режиме, позволяющем сразу-же отредактировать файл без изменения прав доступа.

    USER_NAME    ALL=(ALL)    NOPASSWD: /usr/bin/pacman

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

Следующий шаг - это определения папки в которой будут перемещены "свежесобранные" пакеты, например вы можете назначить здесь папку в вашем домашнем каталоге. Если этот параметр не был установлен, то пакеты будут расположены в той-же папке откуда был запущен makepkg.

Например, создайте такую папку:

    $ mkdir /home/$USER/packages

и установите переменную PKGDEST в файле /etc/makepkg.conf соотвествующим образом.

Пока вы редактируете его, можете посмотреть на другие переменные влияющие на сборку ваших пакетов. Например вы можете установить переменную PACKAGER, при этом ваше имя будет добавлено к собранным пакетам, либо убрать ! перед параметром docs в массиве OPTIONS, в случае если вы не хотите чтобы makepkg удалял папку с документацией к вашему пакету. Просмотрите статью Makepkg.conf для подробной информации по возможным параметрам.

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

Для сборки пакета вы можете создать собственный "с нуля" следуя указаниям Руководства по сборке пакетов Arch, либо, если кто-то уже сделал это за вас, поискать на странице AUR или в дереве ABS.

Например, вы нашли какой-то очень интересующий вас пакет в AUR и хотите собрать его и установить (в этом примере будет приведен rufus, клиент bittorrent основанный на Python). Вы можете достать PKGBUILD и все необходимые для сборки файлы (в некоторых случаях это патчи или дополнительные скрипты) нажав на ссылку "Tarball" или "Архив", для пользователей просматривающих страницу на русском языке.

    $ cd /path/to/tarball
    $ tar -zxf rufus.tar.gz
    $ cd rufus

Обратите внимание на то, что в папке rufus появились несколько файлов, один из них называется PKGBUILD, именно он и содержит инструкции для сборки пакета. Для сборки пакета введите (под управлением вашего пользователя) команду:

    $ makepkg

Утилита загрузит все необходимые для сборки исходники и попытается собрать пакет. Если не хватает каких-то зависимостей, makepkg сообщит об этом прежде чем завершить работу с ошибкой. Если вы хотите собрать пакет и дать возможность makepkg самому загрузить и установить необходимые зависимости, то введите эту команду:

    $ makepkg -s

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

    $ sudo pacman -S dep1 dep2 depN

После того как все необходимые зависимости были установлены и ваш пакет был собран удачно, у вас появится файл rufus-0.7.0-1.pkg.tar.gz. Вы можете установить его командой

    $ sudo pacman -U rufus-0.7.0-1.pkg.tar.gz

### Настройка: архитектура и флаги компиляции

Основные настройки makepkg находятся в файле `/etc/makepkg.conf`.

Опции `MAKEFLAGS`, `CFLAGS` и `CXXFLAGS` используются программами make, gcc и `g++` во время компиляции программ через makepkg. По умолчанию, эти опции направлена на генерацию «обычных» (generic) пакетов, которые могут устанавливаться и работать на различных аппаратных конфигурациях. Тонкой настройкой опций компиляции может быть достигнут прирост производительности на конкретной машине. Но пакет, скомпилированный под конкретный процессор, может не работать на других машинах.

Обратите внимание: Не все пакеты и/или системы сборки пакетов будут использовать эти опции компиляции. Иногда опции задаются жёстко в настройках оригинальных Makefiles или в PKGBUILD.

    /etc/makepkg.conf

    ...

    #########################################################################
    # ARCHITECTURE, COMPILE FLAGS
    #########################################################################
    #
    CARCH="x86_64"
    CHOST="x86_64-unknown-linux-gnu"

    #-- Exclusive: will only run on x86_64
    # -march (or -mcpu) builds exclusively for an architecture
    # -mtune optimizes for an architecture, but builds for whole processor family
    CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
    CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
    LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro"
    #-- Make Flags: change this for DistCC/SMP systems
    #MAKEFLAGS="-j2"

    ...

Изначальные опции `CFLAGS` and `CXXFLAGS` файла makepkg.conf совместимы с любой машиной соответствующей архитектуры.

Начиная с версии 4.3.0, GCC содержит настройку `-march=native`, которая включает автонастройку под конкретный процессор и автоматически включает соответствующие оптимизации при сборке. Чтобы использовать эту настройку, измените начальные опции `CFLAGS` и `CXXFLAGS` следующим образом:

    # -march=native also sets the correct -mtune=
    CFLAGS="-march=native -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2"
    CXXFLAGS="${CFLAGS}"

Посмотрите `man gcc` для полного списка доступных опций. Дополнительную информацию можно найти в вики проекта Gentoo: Compilation Optimization Guide и Safe Cflags.

#### Опция MAKEFLAGS

Опция `MAKEFLAGS` используется для дополнительной настройки процесса сборки. Владельцы многоядерных или многопроцессорных систем могут определить количество одновременных потоков компиляции. Обычно нормальная настройка — `-j2`, плюс 1 на каждое дополнительное ядро или процессор. Некоторые PKGBUILD'ы специально обходят эту настройку своей опцией `-j1` из-за ограничений конкретной программы, или просто потому, что изначально эта опция не поддерживалась, а впоследствии её забыли убрать. Иногда из-за этого сборка может кончиться неудачей, пожалуйста, сообщайте о таких случаях на баг-трекер, но сначала убедитесь, что дело именно в использовании ваших MAKEFLAGS.

Смотрите `man make` для полного списка доступных опций.

## Установка через скрипты сборки

Иногда со сторонних репозитариев вы можете обнаружить только файлы типа *.pkgbuild. В этом случае добавьте параметр -p к makepkg указав имя нужного вам сборочного скрипта:

    $ makepkg -p <buildscript>

Поздравляем! Теперь вы успешно собрали и установили ваш собственный пакет!

## Полезные ссылки

- Полезное руководство по makepkg/ABS
- Руководство по созданию пакетов Arch
- AUR
- Страница man для makepkg
- Напутствия по созданию PKGBUILD-скриптов в Arch CVS & SVN
- Makepkg.conf

Categories:

- Package management (Русский)
- Русский