# makepkg (Русский)

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

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` используется для дополнительной настройки процесса сборки. Владельцы многоядерных или многопроцессорных систем могут определить количество одновременных потоков компиляции. Для того чтобы узнать количество доступных процессоров, выполните команду `nproc`. Например, если вывод команды `nproc` будет 4, то при компиляции используйте `-j4`. Некоторые 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 (Русский)
- Русский