Описание работы с spt3
{{To C? numerate=1 from=h2}
Общие понятия
spt (в данном случае речь идет о версии spt3) представляет собой инструмент для создания решений на базе некоего репозитария (Sisyphus).
Механизм работы spt прост – в некоей рабочей директории (изначально чистой), создается
Терминология
- Рабочая директория или $work_dir – некая чистая директория, в которой будет производиться процесс сборки решения. Перед сборкой в нее должен быть помещена поддиректория profile с профилем – либо создана с нуля, либо скопирована из прилагаемых к пакету примеров. Профиль может донастраиваться под нужды пользователя
- Профиль или profile – поддиректория в рабочей директории, содержащая сведения о том, что и как собирать.
- Рецепт или recipe – файл в директории профиля ($work_dir/profile), описывающий процесс сборки путем перечисления некоего количество минимальных шагов сборки и, возможно, указания их опций.
- task – такой минимальный шаг сборки; физически представляет собой небольшой скрипт, называющийся с spt- и лежащий в /usr/bin; в процессе полной сборки они вызываются автоматически по директивам из recipe – но возможен и их ручной вызов.
- chroot – директория $work_dir/chroot, в которую распаковывается рабочий chroot системы.
Утилиты
Пока существует всего одна утилита – spt. Утилита spt прогоняет последовательно инструкции, записанные в файле recipe, запуская соответствующие им tasks с правильными опциями и т.п., отслеживает процесс выполнения или невыполнения каждого из task'ов и выводит в логи заметные (начинающеся с =====) записи о прогонке или ошибке на очередном этапе.
Опции
Все tasks получают на вход некий набор опций (в виде имя=значение). Эти опции могут быть определены в следующих местах (места расположены в порядке перекрытия значений опций – в случае задания опций в нескольких местах, используется значение указанное в месте ниже по списку):
- Конфигурационный файл пользователя ($HOME/.sptrc);
- Конфигурационный файл профиля ($work_dir/profile/config);
- Опции командной строки -o;
Специальные опции
Среди опций выделяется одна центральная и обязательная опция – это положение рабочей директории (work_dir). Она, очевидно, не может быть задана в файле конфигурации, зато может быть:
- Задана из командной строки опцией -w;
- Угадана, если текущая директория – рабочая или находится где-то внутри рабочей.
Кроме того, есть еще 2 опции, которые действуют на все task'и:
- verbose [по умолчанию: пустое] – вывод большого количества отладочной информации при сборке образа (в случае, если verbose=-v).
- quiet [по умолчанию: пустое] – сокращение вывода отладочной информации при сборке (при quiet=-q).
Эти 3 опции доступны везде и везде ниже это больше особо оговариваться не будет.
Глобальные опции
Опции, общие для создаваемого решения (т.е. такие, которые должны быть одинаковыми во всех task'ах), удобнее всего определять в файле $work_dir/profile/config. Существуют следующие глобальные опции:
- ARCH – архитектура конечного продукта. Пока возможны значения i586 и x86_64. На сборочной машине i586 возможно собирать решения только для i586, на x86_64 – для i586 и x86_64.
- PUBLISHER
- ORIGIN
- SUITE
- LABEL
- CODENAME
- VERSION
- REPO
- DESIGN
- THEME
- LANGS
Эти и остальные опции, относящиеся к определенным task'ам, описаны в соответствующих разделах task'ов.
Tasks
spt-clean
Корректно очищает в рабочей директории все наработки, кроме директории profile. Рекомендуется выполнять как аналог “make clean” перед полной пересборкой.
Вход: никакого.
Выход: удаляется все, кроме $work_dir/profile.
spt-init-chroot
Инициализирует рабочую директорию, создавая в ней служебные поддиректории для работы hasher.
Вход:
- ARCH
- REPO
- LANGS
- apt_config
- apt_prefix
Выход:
- службеные директории в рабочей директории
- минимальный chroot в $work_dir/chroot
spt-make-chroot
Распаковывает в инициализированный chroot пакеты по списку из файла packages в директории профиля (можно использовать другой файл, задав его имя опцией).
Вход:
- рабочая директория с развернутой инфраструктурой (т.е. выполненным spt-init-chroot).
- packages [по умолчанию: $work_dir/profile/packages] – указание на файл со списком пакетов, которые надо поставить; в файле допускается комментировать строчки символом #.
- excludedocs – если установлена в --excludedocs, то файлы с документацией не ставятся.
Выход:
- корректно распакованные пакеты в chroot, выполнены post-install scripts от этих пакетов.
spt-create-repo
Создает в $out_dir репозитарий с названием IDENT с индексами с пакетами по списку из файла $IDENT.packages.
Вход:
- рабочая директория с развернутой инфраструктурой (т.е. выполненным spt-init-chroot).
- packages [по умолчанию: $work_dir/profile/packages] – указание на файл со списком пакетов, которые надо поставить; в файле допускается комментировать строчки символом #.
Выход:
- корректно распакованные пакеты в chroot, выполнены post-install scripts от этих пакетов.
Семейство spt-boot
Семейство скриптов spt-boot устанавливает/конфигурирует каким-то образом загрузчики, которые могут быть использованы для загрузки того образа, который собирался на предыдущих этапах.
spt-boot-propagator
Сложный скрипт, который подготавливает содержимое chroot к загрузке с помощью цепочки (syslinux / isolinux / pxelinux) – propagator.
Вход:
- chroot;
- profile/initfs.in – файл, перечисляющий содержимое initrd с propagator;
- profile/modules – файл, перечисляющий модули ядра, которые войдут на initrd к propagator;
- profile/isolinux.in и profile/syslinux.in – файлы конфигурации isolinux (и syslinux);
Выход:
- Заполненная директория $out_dir/isolinux, где подготовлены конфигурационные файлы isolinux, а также ядро (vmlinuz) и initrd (full.cz) для загрузки.
Семейство spt-pack
Это семейство скриптов запаковывает получившиеся файлы/директории на предыдущих этапах в некие, как правило, одиночные файлы с архивами или образами файловых систем.
spt-pack-squashfs
Упаковывает chroot в образ squashfs.
Вход: chroot
Выход: $out_dir/altlinux – файл с образом
spt-pack-iso
Упаковывает out в образ загрузочного CD iso9660. Предполагается, что в каталоге isolinux создана инфраструктура для загрузчика.
Вход: содержимое $out_dir.
Выход: ISO-файл CDFILENAME [по умолчанию: livecd.iso] в директории $work_dir.
Преобразование профилей от предыдущих версий spt и separator
TODO