Глава 9. Справочник

Содержание

Класс autotools
oe_runconf / autotools_do_configure
Предустановка переменных autoconf (site файл)
Класс binconfig
Directories: Installation variables
Directories: Staging variables
Класс distutils
fakeroot (device node handling)
How fakeroot works
Root filesystem, images and fakeroot
Recipes and fakeroot
Класс image
Обработка специальных файлов (fakeroot)
Файлы устройств (/dev)
Типы образов
Источники пакетов
Image types
Defining images
Available image types
Custom image types
pkgconfig class
rootfs_ipkg class
SECTION variable: Package category
siteinfo class
CONFIG_SITE: The autoconf site files
SRC_URI variable: Source code and patches
http/https/ftp (wget)
file: for patches and additional files
cvs
svn
git
Mirrors
Manipulating SRC_URI
Source distribution (src_distribute_local)
update-alternatives class
Naming of the alternative commands
How alternatives work
The update-alternatives command
Priority of the alternatives
Tracking of the installed alternatives
Using the update-alternatives class
update-rc.d class
Multiple update-rc.d packages

Класс autotools

Autotools является одним из наиболее часто встречающихся методов конфигурации приложений. Всё, что использует стандартную последовательность ./configure; make; make install, использует autotools. Обычно скрипт конфигурации поддерживает большое число опций для указания различных директорий установки, настройки возможностей и путей поиска заголовочных и библиотечных файлов.

Класс autotools выполняет большую часть работы за вас. В нём определяются соответствующие задачи для configure, compile, stage и install. Всё что нужно сделать разработчику -- дописать в рецепт inherit autotools. Вот пример использования класса из рецепта netcat:

DESCRIPTION = "GNU Netcat"
HOMEPAGE = "http://netcat.sourceforge.net"
LICENSE = "GPLv2"
MAINTAINER = "Your name <yname@example.com>"
SECTION = "console/networking"
PR = "r1"

SRC_URI = "${SOURCEFORGE_MIRROR}/netcat/netcat-${PV}.tar.bz2"

inherit autotools

В этом рецепте определён заголовок, указан адрес исходного кода и унаследован класс autotools. В простейших случаях этих действий достаточно. При необходимости передачи дополнительных параметров скрипту конфигурации, таких как включения и/или выключения каких-либо настроек, нужные параметры указываются с помощью переменной EXTRA_OECONF. Пример из рецепта lftp показывает добавление нескольких дополнительных опций:

  EXTRA_OECONF = "--disable-largefile --disable-rpath --with-included-readline=no"
  

Если вы определяете собственные задачи для configure, compile, stage или install (через do_<taskname>), то они перезапишут методы класса autotools. Если это вам нужно только выполнить дополнительные операции (вместо полной замены стандартной реализации), можно использовать методы do_<task>_append или do_<task>_prepend. Пример из рецепта conserver показывает некоторые дополнительные устанавливаемые элементы:

  # Include the init script and default settings in the package
do_install_append () {
    install -m 0755 -d ${D}${sysconfdir}/default ${D}${sysconfdir}/init.d
    install -m 0644 ${WORKDIR}/conserver.default ${D}${sysconfdir}/default/conserver
    install -m 0755 ${WORKDIR}/conserver.init ${D}${sysconfdir}/init.d/conserver
}

oe_runconf / autotools_do_configure

Autotools генерирует конфигурационный метод oe_runconf, запускающий скрипт конфигурации, и метод autotools_do_configure, генерирующий файл конфигурации (выполняя automake и autoconf) и затем вызывающий oe_runconf. Сгенерированный метод для задачи configure, do_configure просто просто вызывает метод autotools_do_configure.

Иногда бывает нужно реализовать свой метод do_configure, когда нужно выполнить дополнительную настройку или избежать запуска automake и autoconf, и потом вызвать oe_runconf.

Пример из ipacct рецепта показывает, как избежать запуска automake/autoconf:

    do_configure() {
    oe_runconf
    }
    

Иногда перед вызовом autoconf/automake нужно вручную выполнить действия над autotools файлами. В этом случае вы можете определить собственный метод do_configure, который выполняет необходимые действия и затем вызывает autotools_do_configure.

Предустановка переменных autoconf (site файл)

Метод настройки средствами autotools позволяет кэшировать результаты тестов. В случае кросс-компиляции бывает иногда необходимо создать кэш с предварительно вычисленными результатами (так как тесты, созданные для запуска на целевой машине не могут быть запущены при кросс-компиляции). Такой кэш создаётся с помощью site файлов для используемой архитектуры и могут быть специфичны для собираемого пакета.

Autoconf использует site файлы, определённые в переменной CONFIG_SITE, которая представляет разделённый пробелами список файлов к загрузке. Подробности о том, как устанавливается эта переменная, указаны в разделе про класс siteinfo siteinfo class (класс, ответственный за установку переменной).

Нужно принять во внимание следующие вещи касательно кэширования:

  1. Проверьте другие site файлы, чтобы узнать есть ли там настройки для приложения, которые вы пытаетесь собрать.

    Иногда настройки нужно только обновить для целевой машины, которую использует разработчик. Настройки для другой машины могут подсказать, что нужно определить.

  2. Иногда одна и та же настройка используется несколькими приложениями.

    Это может иметь побочный эффект: значение, добавленное для одного приложения ломает сборку другого. При проблемах сборки бывает полезно сбросить все неиспользуемые настройки, чтобы гарантировать отсутствие подобных ошибок.

  3. Не все значения могут храниться в кэше.

    Список переменных, использующих кэширование, определяется автором скрипта конфигурации, так что иногда не все переменные могут быть установлены через кэш. В этом случае для достижения желаемого результата обычно необходимо внести изменения в оригинальный скрипт конфигурации.

Все site файлы представляют собой скрипты оболочки, выполняемые autoconf, и на данный момент существует два метода установки переменных. Во-первых, явная установка значения переменной:

ac_cv_sys_restartable_syscalls=yes

И во-вторых, условная установка:

ac_cv_uchar=${ac_cv_uchar=no}

Условный способ использует синтаксис оболочки, чтобы указать " значение присваивается переменной только если оно ещё не присвоено" . Условная установка позволяет присвоить значения переменным в оболочке до вызова configure и не беспокоиться о их перезаписи site файлом.

Замечание

Site файлы применяются в определённом порядке, так что специфические для приложения файлы выполняются до файлов высшего уровня. Использование условного присваивания указывает на применение первого определение, явное -- последнего.

Чтобы отключить использование кэшированных значений нужно очистить переменную CONFIG_SITE перед выполнением скрипта конфигурации. Однако это стоит делать лишь в крайнем случае. Пример из db рецепта:

    # Cancel the site stuff - it's set for db3 and destroys the
    # configure.
    CONFIG_SITE = ""
    do_configure() {
        oe_runconf
    }