Zenwalk
Приобщение к Linux

Алексей Федорчук

2008-06-25

назад | к началу | вперед

Построение пакетов Zenwalk: введение

Ручная сборка пакетов хороша своей универсальностью и гибкостью: в какой бы 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

В его задачи входит:

  • копирование прототипа конфига, который описывает сборку пакета — того самого /etc/buildpkg/ZENBUILD, в каталог, специально предназначенный для сборки данного пакета; последний следует заблаговременно создать руками и ими же сделать текущим;
  • прочтение содержимого ZENBUILD после его модернизации и исполнение внесённых в него директив (внесение директив, то есть собственно модернизацию, также предстоит выполнить собственноручно);
  • создание по результатам предыдущей работы еще одного скрипта — build-pkg_name.sh и, при получении соответствующих директивных указаний, его запуск; этот скрипт выполнит оставшуюся работу, хотя на завершающем этапе ему потребуется помощь installpkg, с которым мы ознакомились в предыдущей главе.

Не очень понятно? Согласен. Надеюсь, что вскоре всё прояснится. А пока скажу так: связка из buildpkg, build-pkg_name.sh и installpkg делает примерно то же самое, что и любая система построения пакетов и любая система управления ими. То есть:

  • получает архив исходных текстов;
  • распаковывает их;
  • выполняет конфигурирование, компиляцию и линковку (с учётом зависимостей);
  • инкорпорирует компоненты пакета в файловую иерархию;
  • фиксирует факт установки в соответствующих базах.

А поскольку все звенья этой цепочки, несмотря на кажущуюся длину и сложность, суть простые bash- или sh-скрипты, то интегрально она оказывается весьма простой, пожалуй что проще портов FreeBSD и, уж конечно, проще портежей Gentoo.

Правда, как отметили авторы Buildpkg How-to, всё это

...не подменяет знания того, как надо компилировать. Вы только не обязаны знать детали сборки пакетов, поскольку об этом заботятся инструментальные средства.

И всё же успех сборки целиком и полностью зависит от корректного заполнения файла ZENBUILD, но ведь и во всех остальных системах построения пакетов дело обстоит точно так же. Поэтому самое время посмотреть, что такое

назад | к началу | вперед