SliTaz GNU/Linux official and community documentation wiki.
.png
This translation is older than the original page and might be outdated. See what has changed.
Translations of this page:

Рецепты

В этом документе описаны тонкости работы с рецептами, которые используют 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 "Выполнение команд после удаления..."
}