Библиотека сайта rus-linux.net
"Волшебный создатель пакетов" для Slackware
Оригинал: Slackware's "magic package maker"
Автор: Drew Ames
Дата: 30 ноября 2007
Перевод: Александр Тарасов aka oioki
Дата перевода: 25 декабря 2007
На сегодняшний день Slackware Linux предоставляет мощное и простое в использовании средство для управления программными пакетами, но создание самих пакетов не всегда было простым делом. Теперь же разработчики приложений могут с легкостью создавать Slackware-пакеты из архива с исходными кодами либо скомпилированных бинарных файлов. Утилита Src2pkg (текущая версия 1.8) очень близко подошла к определению, данному ей автором: "волшебный создатель пакетов".
Традиционный метод установки программ в Linux состоит в том, чтобы загрузить исходный код, распаковать архив и запустить ./configure && make && make install
. Результатом этого, как правило, является компиляция программы и копирование файлов в нужные места файловой системы. Проблема состоит в том, что нет простого способа узнать, какие файлы куда помещаются. В итоге удаление или обновление приложений становится чрезвычайно сложным делом.
Эту проблему решают менеджеры пакетов. Пакеты для системы Slackware представляют из себя tar-архивы, сжатые с помощью gzip, и имеют расширение .tgz
. Такой пакет содержит структуру файловой системы и скомпилированные файлы. Средство установки пакетов Slackware, pkgtool
- распаковывает файлы в правильные каталоги и ведет учет того, какие файлы куда скопированы.
Многие люди подразумевают под управлением пакетами еще и проверку зависимостей. На самом деле, проверка зависимостей является вторичной задачей и с точки зрения Slackware является несущественной частью управления пакетами. Полная установка Slackware уже включает в себя большое множество библиотек, являющимися зависимыми для множества программ. С другой стороны, когда приложению требуются какие-либо библиотеки, нормальный разработчик в явном виде указывает это на сайте своей программы. Пользователю остается скачать, скомпилировать и установить эти зависимости. За 1 год использования Slackware при установке разных приложений мне пришлось доустанавливать не более чем 10 дополнительных библиотек.
До недавних пор было лишь два хороших способа создания Slackware-пакетов - это программа CheckInstall и скрипты SlackBuild. Оба метода компилируют исходный код, создают структуру каталогов и пакуют все в один tgz-файл. Для использования CheckInstall нужно подменять стандартную команду make install
командой checkinstall
. CheckInstall хорошо работает с дистрибутивом Slackware 11 (выпущенным в октябре 2006), но
несовместимость с последним пакетом coreutils создает проблемы при использовании со Slackware 12 (выпущенным в июле 2007).
SlackBuild - скрипты командной оболочки bash, которые сопровождают конфигурирование, компиляцию и работу с архивами исходных кодов. Хорошо написанные SlackBuild-скрипты работают просто отлично. На сайте Slackbuilds.org можно найти много высококачественных SlackBuild-скриптов для широкого класса программного обеспечения. Однако не всегда можно найти SlackBuild для требуемого пакета, а самому его написать не позволяет недостаток квалификации.
Лучшая альтернатива - Src2pkg
Src2pkg - утилита командной строки, версия 1.0 которой была выпущена в феврале, представляет из себя отличную альтернативу CheckInstall. Автор Src2pkg, Гильберт Эшли (Gilbert Ashley), вложил в свою программу помимо предсказуемой возможности сборки пакетов из исходных кодов, также и создание пакетов из Debian и RPM бинарных пакетов и еще из обычных бинарных файлов, которые в руководстве src2pkg описаны как "бинарные данные, устанавливаемые скриптом install.sh, .run-файлом или любой другой установочной процедурой". Наконец, src2pkg создаст скрипты сборки, так что пользователь сможет немного изменить свой пакет. Предоставление набора опций для работы с исходным кодом необходимо, ведь исходный код распространяется во множестве различных форм.
Src2pkg 1.8 официально выпущена 16 декабря. Я загрузил Slackware-пакет с этой программой с авторской странички и установил его. Я установил четыре пакета для проверки возможностей src2pkg.
Самый простой способ использования src2pkg - зайти в систему как root и ввести
src2pkg имя_файла
На man-странице программы упомянуто множество ключей, что придает гибкость процессу сборки пакета. Пользовательские ключи пишутся с заглавной буквы после дефиса, а ключи сборки - строчные буквы после дефиса. Создавая свои пакеты, я отметил наиболее полезными следующие ключи:
-C | поместить выходной пакет в текущий каталог |
-N | создать начальный скрипт src2pkg и файл описания slack-desc, но не создавать пакет |
-S | использовать скрипт командной оболочки для проведения установки (по умолчанию его имя install.sh) |
-VV | "разговорчивый" вывод - выводить любую доступную информацию о ходе сборки |
-W | удалить временные файлы сборки |
-X | выполнить src2pkg или src2pkg.auto в текущем каталоге |
В дополнение к man-странице у src2pkg есть документация, которая находится в каталоге /usr/doc/src2pkg-1.6
. Дополнительная документация включает HTML-странички с описанием разных функций приложения, два README-файла и текстовый файл вопросов и ответов FAQ. Документация достаточно информативна и полезна. Информация плотна, но написана умело и содержит большое количество полезных советов по сборке пакетов.
Сборка Slackware-пакетов
В качестве моего первого пакета я выбрал Emacs 22.1. Это последняя версия Emacs за последний месяц, и пока не появилось официального Slackware-пакета и SlackBuild-скрипта, я решил собрать пакет для себя. Src2pkg умеет загружать файлы из интернета, и я с радостью воспользовался этой возможностью:
src2pkg http://ftp.gnu.org/pub/gnu/emacs/emacs-22.1.tar.gz
Src2pkg успешно загрузил исходный код, сконфигурировал, скомпилировал и собрал пакет. Процесс конфигурации автоматически нашел библиотеки GTK. После завершения своей работы src2pkg отобразил окно с размещением свежесобранного Slackware-пакета. Я установил его, и новый Emacs 22.1 без проблем запустился. На самом деле все пакеты, которые я собирал, работали после этого без проблем.
Однако я все же повстречался с одной проблемой, когда попытался собрать настольную издательскую систему Scribus 1.3.3.9. Моя первая попытка не увенчалась успехом:
Creating working directories:
PKG_DIR=/tmp/scribus-1.3.3.9-pkg-1
SRC_DIR=/tmp/scribus-1.3.3.9-src-1
Unpacking source archive - Done
Decompressing (unknown) archive: Scribus.app.tgz FAILED!
Unable to unpack Scribus.app.tgz. Exiting...
src2pkg FAILURE in UNPACK_RENAME
Кратко описав свою проблему Гильберту Эшли, я скоро получил ответ с решением этой проблемы. Проблема возникает в тех случаях, когда tar-архивы содержат внутри себя другие tar-архивы. Для исправления этой ошибки мне пришлось залезть в файл /usr/libexec/src2pkg/FUNCTIONS
и изменить строку 778 с
#OPEN_SOURCE=1
на
OPEN_SOURCE=1
Эта строка была в файле, но была закомментированна автор из соображений устойчивости программы.
После этого легкого изменения пакет для Scribus был успешно создан. Вот команда, которую я использовал для создания пакета, с разговорчивым выводом, при этом выходной пакет должен быть помещен в каталог с исходными кодами, а временные файлы удалены после сборки:
src2pkg -VV -C -W scribus-1.3.3.9.tar.bz2
Для проверки способности src2pkg по преобразованию RPM-файлов и созданию скриптов сборки я скачал игру под названием Orbit, пакет называется orbital-1.01-691.i586.rpm
и находится в
репозитории OpenSUSE 10.2. Команда
src2pkg orbital-1.01-691.i586.rpm -N
создала src2pkg-скрипт под названием orbital.src2pkg.auto
. Вторая команда
src2pkg -VV -C -W -X
создала пакет с использование свежесозданного src2pkg-скрипта.
Скрипт сборки, создаваемый src2pkg очень прост по структуре и состоит всего лишь из 44 строк. Вот строки, в которых продвинутый пользователь, возможно, захочет что-то изменить:
# Здесь идут любые дополнительные опции
# EXTRA_CONFIGS=''
# STD_FLAGS='-O2 -march=i486 -mtune=i686'
Скрипты сборки позволяют пользователям сохранять конкретные конфигурации, чтобы можно было впоследствии повторить сборку пакета. Также скрипты сборки могут реально сэкономить время при отладке процесса сборки пакета. Просто меняйте одну-две строки, собирайте пакет и повторяйте процесс, пока не достигнете нужного результата.
Последней пробой сил была Opera 9.24. Opera распространяется в обычном бинарном виде, а установка происходит посредством интерактивного скрипта командной оболочки install.sh
. Поэтому нужно запускать src2pkg с ключом -S.
Для сборки этого пакета я вводил команду
src2pkg -C -VV -W -S opera-9.24-20071015.6-shared-qt.i386-en.tar.gz
Скрипт интерактивной установки был успешно пройден внутри процесса src2pkg.
Рекомендации
Я открыто рекомендую src2pkg для пользователей Slackware Linux. Теперь с помощью этой программы я могу быстро создавать Slackware-пакеты, которые будут работать безошибочно. Но что более важно, src2pkg позволил мне облегчить эксперименты с моими сборками. На самом деле мне приходилось собирать пакет несколько раз - для проверить всех функций src2pkg. Гильберт Эшли активен на форуме сайта Linuxquestions.org и быстро дает ответы на вопросы по src2pkg. Поддержка своего программного проекта у Эшли великолепна.
Единственное место, где было бы неплохо увидеть улучшения - документация. Как и с другими консольными программами, здесь тоже прежде чем пользоваться, нужно поизучать руководство. Документация src2pkg лаконична, но слишком разбросана по многим файлам. Хотелось бы иметь единую man- или info-страницу. Еще было бы неплохо иметь список возможных ошибок при работе с программой и предложения по их исправлению.
В любом случае, лучший способ научиться работать с любой программой - чаще ей пользоваться и не бояться экспериментировать. Src2pkg - это не исключение.