spt (в данном случае речь идет о версии spt3) представляет собой инструмент для создания решений на базе некоего репозитария (Sisyphus).
Механизм работы spt прост – в некоей рабочей директории (изначально чистой), создается профиль – директория с описаниями того, как и что собирать. Профиль включает в себя файл рецепта (recipe) – инструкции по сборке, выполняя которые пошагово, можно получить желаемый результат, а также все вспомогательные файлы, требующиеся для сборки. Шаги сборки (см. ниже – tasks) – маленькие скрипты, каждый из которых, в соответствии с общепринятым в Unix подходом, делает всего одну вещь. После того, как профиль готов, сама сборка выполяется запуском одной утилиты spt, которая выполняет по очереди все шаги, вызывая каждый из них с нужными опциями.
Примеры возможных рецептов
Примеры профилей можно найти в приложении к пакету [указано название]:
Live CD [livecd] = развернутый образ + скрипты, исправляющие загрузку с readonly root и remount unionfs (механизм remounttab) + загрузчик + сворачивание в ISO.
Инсталляционный диск [installer] = развернутый образ мини-системы с инсталлятором + скрипты, исправляющие загрузку этой мини-системы и автоматический запуск инсталлятора + свернуть это все в squashfs + добавление на диск репозитария пакетов + загрузчик + сворачивание в ISO.
Инсталляционный диск «как Ubuntu» = Live CD + внутрь ставится пакет с инсталлятором.
Образ виртуального сервера для ovz = развернутый образ со нужным набором пакетов.
Ручная инсталляция системы = образ + установка fstab, lilo.conf, initrd + свертка в tarball + перенесение tarball на target-машину + распаковка там + прописывание загрузчика.
Тонкий клиент для загрузки по сети (appliance) = развернутый образ + загрузка с remounttab + загрузчик + некоторые части загрузчика подготавливаются для раскладывания в другие места, в частности, ядро и init на tftp-сервер.
Quickstart
Сделать чистую директорию и перейти туда (например, work).
Скопировать туда любой из понравившихся профилей из /usr/share/doc/spt3*/profiles/ как поддиректорию work/profile. При необходимости – доработать профиль под свои задачи.
Выполнить команду spt.
Результат можно забрать в work/chroot, work/out и work/*.iso – в зависимости от того, что нужно.
Пример:
Терминология
Рабочая директория или $work_dir – некая чистая директория, в которой будет производиться процесс сборки решения. Перед сборкой в нее должен быть помещена поддиректория profile с профилем – либо создана с нуля, либо скопирована из прилагаемых к пакету примеров. Профиль может донастраиваться под нужды пользователя
Профиль или profile – поддиректория в рабочей директории, содержащая сведения о том, что и как собирать.
Рецепт или recipe – файл в директории профиля ($work_dir/profile), описывающий процесс сборки путем перечисления некоего количество минимальных шагов сборки и, возможно, указания их опций.
task – такой минимальный шаг сборки; физически представляет собой небольшой скрипт, называющийся с spt- и лежащий в /usr/bin; в процессе полной сборки они вызываются автоматически по директивам из recipe – но возможен и их ручной вызов.
chroot – директория $work_dir/chroot, в которую распаковывается рабочий chroot системы.
Утилиты
Пока существует всего одна утилита – spt. Утилита spt прогоняет последовательно инструкции, записанные в файле recipe, запуская соответствующие им tasks с правильными опциями и т.п., отслеживает процесс выполнения или невыполнения каждого из task'ов и выводит в логи заметные (начинающеся с =====) записи о прогонке или ошибке на очередном этапе.
Опции
Все tasks получают на вход некий набор опций (в виде имя=значение). Эти опции могут быть определены в следующих местах (места расположены в порядке перекрытия значений опций – в случае задания опций в нескольких местах, используется значение указанное в месте ниже по списку):
Среди опций выделяется одна центральная и обязательная опция – это положение рабочей директории (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
Выход:
службеные директории в рабочей директории
profile – директория с профилем?.
aptbox – aptbox hasher, место, в котором работает apt, куда копируется его конфигурация из сборочной системы и в дальнейшем apt использует /etc и /var из этого aptbox.
cache – кэш инсталлированных / скаченных пакетов hasher; нужен для сборок с пакетной базой на ftp.
chroot – место, где будет строиться реальный root распаковываемой системы.
out – место, куда будет положен результирующий продукт(ы) – как правило, это сжатые образы.
tmp – временная директория.
минимальный 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 создана инфраструктура для загрузчика.