2008-06-25
Ручная сборка пакетов хороша своей универсальностью и гибкостью: в какой бы POSIX-системе мы ни находились, и какой бы пакет, для таковых предназначенный, нам не требовалось бы собрать, почти всегда мы можем сделать это посредством трех приведенных выше магических заклинаний. Причём можем сделать это, применив только нужные нам опции и задействовав необходимые функции (что далеко не всегда совпадает с умолчаниями разработчика).
Недостатки ручной сборки тоже известны наперечёт: в первую очередь это отсутствие учёта и контроля зависимостей пакетов, из чего вытекает сложность их удаления и обновления.
И тут впору вспомнить, что мы работаем не в абстрактной POSIX-совместимой системе, а в некоей вполне конкретной — в данном случае в роли её выступает Zenwalk Linux. И обратиться к её штатным средствам построения пакетов. Что позволяет, пожертвовав толикой универсальности, сохранить всю гибкость ручной сборки, приобретя к тому же ту самую систему учёта и контроля, простую и эффективную, за которую так горячо и тщетно ратовал Ульянов-Ленин.
Кроме того, построение пакета штатными средствами позволяет выполнить и Божью заповедь, велевшую, как известно, делиться. Сделав собранный пакет достоянием народа, мы добьёмся поставленной Господом цели легче, чем братва первой половины 90-х — с помощью утюгов и паяльников.
Каковы же они, эти штатные средства дистрибутива Zenwalk?
Собственно, такое дистрибутив-специфичное средство в нашем распоряжении одно — пакет buildpkg, но его вполне достаточно для решения всех поставленных перед нами задач: гибкости сборки, учёта, контроля и делёжки.
Правда, для начала сам пакет buildpkg следует установить — на инсталляционном диске Zenwalk'а его нет, и команда
$ netpkg list | grep buildpkg
даёт следующий результат:
[N][extra/d] Found buildpkg-1.6.0-noarch-54.1.tgz on the repository : not installed
из которого, впрочем, следует, что им богато в репозиториях. Так что действуем по описанному в прошлой главе рецепту:
$ netpkg buildpkg
разумеется, от имени суперпользователя. После чего можно заняться изучением возможностей установленного пакета.
Пакет buildpkg состоит из одноименного bash-сценария в /usr/bin, документации, в том числе man-страниц — buildpkg.8 и ZENBUILD.5 (что это такое, мы скоро узнаем), двух примеров конфигов, среди которых самый для нас важный — /etc/buildpkg/ZENBUILD, и нескольких служебных файлов.
Исполняемый файл пакета, как я уже говорил, представляет собой обычный сценарий оболочки, конкретно — /bin/bash, в чём легко убедиться, просмотрев его первую строку:
$ head -n 1 /usr/bin/buildpkg #!/bin/bash
В его задачи входит:
Не очень понятно? Согласен. Надеюсь, что вскоре всё прояснится. А пока скажу так: связка из buildpkg, build-pkg_name.sh и installpkg делает примерно то же самое, что и любая система построения пакетов и любая система управления ими. То есть:
А поскольку все звенья этой цепочки, несмотря на кажущуюся длину и сложность, суть простые bash- или sh-скрипты, то интегрально она оказывается весьма простой, пожалуй что проще портов FreeBSD и, уж конечно, проще портежей Gentoo.
Правда, как отметили авторы Buildpkg How-to, всё это
...не подменяет знания того, как надо компилировать. Вы только не обязаны знать детали сборки пакетов, поскольку об этом заботятся инструментальные средства.
И всё же успех сборки целиком и полностью зависит от корректного заполнения файла ZENBUILD, но ведь и во всех остальных системах построения пакетов дело обстоит точно так же. Поэтому самое время посмотреть, что такое