=======Рецепты====== В этом документе описаны тонкости работы с рецептами, которые используют 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/* } Обратите внимание, что в новом CookUtils команда strip теперь вызывается автоматически, без необходимости прописывания в рецепте. ===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 "Выполнение команд после удаления..." }