UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

177 lines (111 loc) 16.1 kB
**makepkg** - это базовая утилита для сборки собственных пакетов, которые могут быть использованы менеджером **pacman**. Основанный на скриптовой системе сборки пакетов, makepkg способен загрузить из интернета и проверить на целостность исходники (например архивы tar.gz и bz2), установить параметры сборки пакета (т.к флаги CFLAGS и другие параметры компилятора), собрать пакет во временную папку и создать готовый архив соответствующий стандарту Arch, удалив все ненужное. ## Contents * [1 Установка и настройка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_.D0.B8_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0) * [1.1 ABS - Система автоматической сборки пакетов Arch](#ABS_-_.D0.A1.D0.B8.D1.81.D1.82.D0.B5.D0.BC.D0.B0_.D0.B0.D0.B2.D1.82.D0.BE.D0.BC.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.BE.D0.B9_.D1.81.D0.B1.D0.BE.D1.80.D0.BA.D0.B8_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.BE.D0.B2_Arch) * [2 Makepkg](#Makepkg) * [3 Сборка пакета](#.D0.A1.D0.B1.D0.BE.D1.80.D0.BA.D0.B0_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.B0) * [3.1 Настройка: архитектура и флаги компиляции](#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0:_.D0.B0.D1.80.D1.85.D0.B8.D1.82.D0.B5.D0.BA.D1.82.D1.83.D1.80.D0.B0_.D0.B8_.D1.84.D0.BB.D0.B0.D0.B3.D0.B8_.D0.BA.D0.BE.D0.BC.D0.BF.D0.B8.D0.BB.D1.8F.D1.86.D0.B8.D0.B8) * [3.1.1 Опция MAKEFLAGS](#.D0.9E.D0.BF.D1.86.D0.B8.D1.8F_MAKEFLAGS) * [4 Установка через скрипты сборки](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_.D1.87.D0.B5.D1.80.D0.B5.D0.B7_.D1.81.D0.BA.D1.80.D0.B8.D0.BF.D1.82.D1.8B_.D1.81.D0.B1.D0.BE.D1.80.D0.BA.D0.B8) * [5 Полезные ссылки](#.D0.9F.D0.BE.D0.BB.D0.B5.D0.B7.D0.BD.D1.8B.D0.B5_.D1.81.D1.81.D1.8B.D0.BB.D0.BA.D0.B8) ## Установка и настройка ### 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](/index.php/Makepkg.conf "Makepkg.conf") для подробной информации по возможным параметрам. ## Сборка пакета Для сборки пакета вы можете создать собственный "с нуля" следуя указаниям [Руководства по сборке пакетов Arch](/index.php/Creating_packages_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Creating packages (Русский)"), либо, если кто-то уже сделал это за вас, поискать на странице [AUR](https://aur.archlinux.org/) или в дереве [ABS](/index.php/ABS "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](https://www.archlinux.org/packages/?name=make), [gcc](https://www.archlinux.org/packages/?name=gcc) и `g++` во время компиляции программ через makepkg. По умолчанию, эти опции направлена на генерацию «обычных» (generic) пакетов, которые могут устанавливаться и работать на различных аппаратных конфигурациях. Тонкой настройкой опций компиляции может быть достигнут прирост производительности на конкретной машине. Но пакет, скомпилированный под конкретный процессор, может не работать на других машинах. **Примечание:** Не все пакеты и/или системы сборки пакетов будут использовать эти опции компиляции. Иногда опции задаются жёстко в настройках оригинальных Makefiles или в [PKGBUILD](/index.php/PKGBUILD_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "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}" ``` Посмотрите [gcc(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/gcc.1) для полного списка доступных опций. Дополнительную информацию можно найти в вики проекта Gentoo: [Compilation Optimization Guide](http://www.gentoo.org/doc/en/gcc-optimization.xml) и [Safe Cflags](http://wiki.gentoo.org/wiki/Safe_CFLAGS). #### Опция MAKEFLAGS Опция `MAKEFLAGS` используется для дополнительной настройки процесса сборки. Владельцы многоядерных или многопроцессорных систем могут определить количество одновременных потоков компиляции. Для того чтобы узнать количество доступных процессоров, выполните команду `nproc`. Например, если вывод команды `nproc` будет 4, то при компиляции используйте `-j4`. Некоторые [PKGBUILD](/index.php/PKGBUILD_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "PKGBUILD (Русский)")'ы специально обходят эту настройку своей опцией `-j1` из-за ограничений конкретной программы, или просто потому, что изначально эта опция не поддерживалась, а впоследствии её забыли убрать. Иногда из-за этого сборка может кончиться неудачей, пожалуйста, [сообщайте](/index.php/Reporting_bug_guidelines_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Reporting bug guidelines (Русский)") о таких случаях на баг-трекер, но сначала убедитесь, что дело именно в использовании ваших MAKEFLAGS. Смотрите [make(1)](https://jlk.fjfi.cvut.cz/arch/manpages/man/make.1) для полного списка доступных опций. ## Установка через скрипты сборки Иногда со сторонних репозитариев вы можете обнаружить только файлы типа *.pkgbuild. В этом случае добавьте параметр **-p** к makepkg указав имя нужного вам сборочного скрипта: ``` $ makepkg -p <buildscript> ``` Поздравляем! Теперь вы успешно собрали и установили ваш собственный пакет! ## Полезные ссылки * [Полезное руководство по makepkg/ABS](https://bbs.archlinux.org/viewtopic.php?t=1590) * [Руководство по созданию пакетов Arch](/index.php/Creating_packages_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Creating packages (Русский)") * [AUR](https://aur.archlinux.org) * [Страница man для makepkg](https://www.archlinux.org/pacman/makepkg.8.html) * [Напутствия по созданию PKGBUILD-скриптов в Arch CVS & SVN](/index.php/Arch_CVS_%26_SVN_PKGBUILD_guidelines "Arch CVS & SVN PKGBUILD guidelines") * [Makepkg.conf](/index.php/Makepkg.conf "Makepkg.conf")