Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Установка новых программных пакетов

"Волшебный создатель пакетов" для 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 - это не исключение.



Средняя оценка 5 при 1 голосовавших