Table of Contents
Рецепты
В этом документе описаны тонкости работы с рецептами, которые используют CookUtils (для компиляции и сборки пакетов для SliTaz) а также TazPkg, wok и утилиты. TazPkg использует рецепт пакета для установки, удаления и получения информации о пакете «.tazpkg». Каждый рецепт начинается с комментария на английском языке:
# SliTaz package receipt
Переменные
Первые пять переменных всегда должны присутствовать и быть определены. Они соответственно указывают название пакета, его версию, категорию, дают краткое описание и контактную информацию сопровождающего. Пример для пакета файлового менеджера CLEX:
PACKAGE="clex" VERSION="3.16" CATEGORY="base-apps" SHORT_DESC="Text mode file manager." MAINTAINER="pankso@slitaz.org"
Переменные (необязательные)
CookUtils также умеет обращаться с различными дополнительными переменными. Он может, например, использовать название пакета с исходниками. Также имеются переменные, которые используются TazPkg для управления зависимостями или предоставляют информацию о пакете.
- $DEPENDS
Указывает зависимости, отделяемые друг от друга пробелом. Эту переменную использует, в основном, TazPkg при установке пакета, и CookUtils при создании больших пакетов, таких как Xorg. В нашем примере CLEX зависит от Ncurses:
DEPENDS="ncurses"
- $BUILD_DEPENDS
Указывает зависимости сборки (тоже через пробел). Эта переменная используется CookUtils при сборке пакета. Пример:
BUILD_DEPENDS="ncurses-dev"
- $TARBALL
Название архива с исходниками, включая расширение (tar.gz, tgz или tar.bz2). В общем случае используются переменные $PACKAGE и $VERSION, и изменяется только расширение, что облегчает обновление пакета без изменения переменной $VERSION. Общий пример (см. также пример $SOURCE):
TARBALL="$PACKAGE-$VERSION.tar.gz"
- $WEB_SITE
Официальный сайт пакета. Вполне возможно, что некоторые библиотеки не имеют сайта, в данном случае, нет необходимости указывать URL. Обратите внимание, что CookUtils и TazPkg предполагают наличие полного URL (с http):
WEB_SITE="http://www.clex.sk/"
- $WGET_URL
URL по которому загружается файл с исходниками. В общем случае должна использоваться переменая $TARBALL, чтобы облегчить процесс обновления пакета без изменения $VERSION. В конфигурационном файле CookUtils также определены три зеркала: $GNU_MIRROR для зеркала GNU, $SF_MIRROR на SourceForge и $XORG_MIRROR для зеркалирования графического сервера Xorg. Пример для CLEX:
WGET_URL="http://www.clex.sk/download/$TARBALL"
- $CONFIG_FILES
Некоторые пакеты содержат настраиваемые файлы конфигурации. В переменной $CONFIG_FILES содержится список этих файлов, которые могут быть сохранены командой 'tazpkg repack-config'. Эти файлы не будут заменены при переустановке пакета, если они уже существуют, и пакет может быть успешно воссоздан командой 'tazpkg repack' (даже если они были изменены). Пример с Netatalk:
CONFIG_FILES="/etc/netatalk/AppleVolumes.* /etc/netatalk/*.conf"
- $SUGGESTED
Список полезных пакетов, не являющихся необходимыми. Он используется для активации дополнительных функций.
- $WANTED
Обычно пакеты SliTaz компилируются из исходного кода. Иногда рецепт пакета не требует компиляции, в таком случае $WANTED определяет название другого пакета, из исходников которого будут копироваться файлы (используя также переменную $src).
- $SOURCE
Вполне возможно, что имя пакета TazPkg отличается от имени пакета исходников. Например, в пакетах Xorg: название библиотеки X11 — «xorg-libX11», а имя пакета иходников — «libX11». $SOURCE позволяет использовать переменные $src и $_pkg во время приготовления пакета. Следует отметить, что в случае libX11, имя архива исходников становится $SOURCE-$VERSION.tar.gz.
- $PROVIDE
Некоторые пакеты обеспечивают одинаковую функциональность, например, сначала веб-сервер был Lighttpd, а теперь доступен Apache. Все пакеты, зависящие от веб-сервера, ссылаются на Lighttpd. Переменная PROVIDE=“lighttpd” в рецепте Apache указывает пакетам, зависящим от Lighttpd, что не обязательно устанавливать Lighttpd, если уже установлен Apache.
Некоторые пакеты могут варьироваться в зависимости от выбранного веб-сервера, например, пакет php зависит от lighttpd, а php-apache — от apache. Запись PROVIDE=“php:apache” в рецепте Apache говорит, что нужно установить php-apache вместо php, если уже установлен Apache. Таким образом, любой пакет, зависящий от PHP, установит или PHP-Apache или PHP в зависимости от веб-сервера, имеющегося в системе.
Эта переменная также выбирает пакеты, скомпилированные с различными опциями. Запись PROVIDE=“epdfview:cups” в рецепте epdfview-cups позволяет установить epdfview с поддержкой печати через CUPS, если уже установлен CUPS.
Используя эту переменную, вы можете определять виртуальные пакеты.
Строки PROVIDE=“libgl” в пакете mesa и PROVIDE=“libgl:nvidia” в пакете nvidia-glx указывают, что имеется специальная, оптимизированная версия libgl, если уже установлен пакет nvidia.
- $SELF_INSTALL (устарело)
Некоторые пакеты используют собственные команды в своей функции post_install. Чтобы установить этот пакет в папку, отличную от корневой и иметь возможность использовать эти команды, пакет должен быть установлен в / на ранних стадиях. Строка SELF_INSTALL=1 указывает Tazpkg на эту особенность. Эта переменная устарела. Команда chroot “$1/” команда_пакета в функции post_install делает то, что нужно.
Переменные, определяемые в Cookutils
Некоторые показатели становятся известны только во время приготовления пакета или после того, как пакет был приготовлен. CookUtils добавит их в рецепт автоматически.
- $PACKED_SIZE
Размер файла tazpkg.
- $UNPACKED_SIZE
Место, занимаемое пакетом после установки.
- $EXTRAVERSION
Некоторые пакеты имеют две различных версии. Как в случае модулей ядра Linux, таких как SquashFS, поскольку модуль зависит от версии ядра, с которой он компилировался. В этом случае $EXTRAVERSION содержит версию ядра и CookUtils устанавливает модуль из содержимого /lib/modules.
Переменные, используемые в функциях
CookUtils определяет несколько переменных, облегчающих компиляцию и сборку пакетов tazpkg. Эти переменные автоматически контролируются CookUtils, используя информацию, содержащуюся в рецепте; они могут быть использованы в функциях compile_rules и genpkg_rules, описанных в разделе Функции.
- $src
Определяет путь к папке с распакованными исходниками.
- $_pkg
Определяет путь к скомпилированным бинарникам, установленным командой «make DESTDIR=$PWD/_pkg install». Эта переменная используется для копирования сгенерированных файлов и создания пакетов tazpkg.
- $install
То же, что и $_pkg.
- $fs
Определяет путь к файловой псевдо-системе каждого пакета. Файловая система пакета аналогична корневой системе, с небольшим дополнением. Например, CLEX будет находиться в $fs/usr/bin/clex. Обратите внимание, что перед копированием файлов с помощью функции genpkg_rules, необходимо сначала создать необходимые подпапки.
- $CONFIGURE_ARGS
Эта переменная определена в конфигурационном файле CookUtils (cook.conf). Она позволяет вам указать общие аргументы оптимизации при компиляции пакетов. По умолчанию используется архитектура i486.
- $DESTDIR
Определяет путь куда будут установлены скомпилированные бинарники, используя команду «make DESTDIR=$DESTDIR install».
Функции
Рецепт может содержать до четырех функций. CookUtils умеет управляться с функциями, содержащими правила компиляции (compile_rules) и правила создания пакета (genpkg_rules). Эти функции могут содержать любые стандартные команды GNU/Linux, такие, как sed, awk, patch и автоматически сконфигурированные переменные.
compile_rules()
При компиляции пакета: можно использовать переменную $src, чтобы перейти (cd) в папку с исходниками; можно использовать $CONFIGURE_ARGS, чтобы добавить аргументы из конфигурационного файла CookUtils. Для компиляции пакета вы можете запустить «make» без аргументов, а для установки пакет в папку _pkg необходимо использовать команду «make DESTDIR=$PWD/_pkg install». Общий пример:
# Rules to configure and make the package. compile_rules() { cd $src ./configure --prefix=/usr --infodir=/usr/share/info \ --mandir=/usr/share/man $CONFIGURE_ARGS make make DESTDIR=$PWD/_pkg install }
genpkg_rules()
Для создания пакета tazpkg нужно указать необходимые команды в функции genpkg_rules. В этом примере мы создадим псевдо-папку /usr в файловой системе пакета, скопируем все бинарники, и в конце используем strip для очистки файлов:
# Rules to gen a SliTaz package suitable for Tazpkg. genpkg_rules() { mkdir -p $fs/usr cp -a $_pkg/usr/bin $fs/usr strip -s $fs/usr/bin/* }
pre_install() и post_install()
Эти функции вызываются TazPkg до установки и после установки пакета, соответственно. Они должны быть определены до создания пакета .tazpkg при помощи CookUtils. Если для этих функций нет правил, то функции не имеют смысл и должны быть удалены. Пример использования echo для отображения текста (функция не может быть пустой):
# Pre and post install commands for Tazpkg. pre_install() { echo "Выполнение команд перед установкой..." } post_install() { echo "Выполнение команд после установки..." }
pre_remove() и post_remove()
Эти функции вызываются TazPkg до удаления и после удаления пакета, соответственно. Они должны быть определены до создания пакета .tazpkg при помощи CookUtils. Если для этих функций нет правил, то функции не имеют смысл и должны быть удалены. Пример использования echo для отображения текста (функция не может быть пустой):
# Pre and post remove commands for Tazpkg. pre_remove() { echo "Выполнение команд перед удалением..." } post_remove() { echo "Выполнение команд после удаления..." }