[devel] I: spt
Anton D. Kachalov
=?iso-8859-1?q?mouse_=CE=C1_altlinux=2Eorg?=
Пт Янв 27 16:08:23 MSK 2006
В i/S залит spt.
Это давний форк от separator. Про него я ещё пускал слушок на Протвенской
конференции. Основная фишка - это использование hasher для инициализации
чрута и дальнейшей работой с чрутом после установки пакетов.
На сегодняшний день, для инициализации чрута потребуется немного
изменённый basesystem (без зависимости на dev). Это вопрос уже обсуждался
с ldv на . Так же, это актуально в свете udev'a. Вместе с этим, появится
новый dev (std и min).
http://lrn.ru/~mouse/spt/basesystem-sisyphus-alt13.nodev.src.rpm
Есть альтернативный способ для кул-хацкеров :)
a) патчим /usr/share/hasher/mkchroot:
--- hasher.orig/mkchroot 2005-11-26 01:15:53 +0300
+++ hasher/mkchroot 2005-11-29 20:56:32 +0300
@@ -95,7 +95,8 @@
Verbose "Changed working directory to \`$chroot'."
mkdir -m711 $verbose .host
-mkdir -m755 $verbose .in dev dev/pts
+mkdir -m1775 $verbose dev
+mkdir -m755 $verbose .in dev/pts
chgrp "$gid1" $verbose . dev dev/pts
mkdir -m1770 $verbose .out
chgrp "$gid2" $verbose .out
b) собираем пакет MAKEDEV без директории /dev и /dev/pts.
После чего даже с обычным basesystem'ом пакет dev поставится в чрут.
Данный вопрос тоже обсуждается в ldv@ :)
Вернёмся к нашим попугаям.
1. Инициализация рабочей директории.
$ spt -v -P default ~/workdir
spt: changed working directory to `/home/mouse/workdir'
spt: creating profile `default'
2. Профайл. Конфиги.
Все настройки хранятся в $workdir/profile.
Каждый проект состоит из одной или нескольких компонент.
- config
Основной конфиг проекта, задющий имя, версию и т.д. Многие из переменных говорят сами за себя. Но на двух стоит остановится.
o ARCH - фактически, вывод uname -m. При работе сепаратора создаётся
директория $workdir/repo/ARCH/RPMS.hasher куда можно складывать
RPM-файлы, подцепляемые во время разворачивания чрута.
[TODO: сделать параметр --repo для явного указания местоположения
репозитария]
o COMPONENTS - список конфигурационных файлов по компонентно,
задающие файлы со списками пакетов, именя конечных образов,
скрипты, запускаемые после разворачивания чрута.
o CDFILENAME - имя ISO-образа. По умолчанию, livecd.iso. Так же,
его можно задать через command line. Т.к. это шелл-переменная, то
иногда уместно использовать нечто вроде:
CDFILENAME="livecd-$(uname -m)-$(date +%Y%m%d).iso"
- *.cnf
Конфигурационный файл отдельно взятой компоненты.
o CLASS - имя класса. Наследие оригинального separator.
Фактически, указывает на директорию с глобальными пост-скриптами,
которые должны выполнятся взависимости от выбранного профайла: для
livecd выполняются одни, для инсталлятора - другие.
o DIRS - шаблон файлов или просто имя файла со списком пакетов.
[TODO: переименовать во что-то более соответствующее назначению]
o OUT - имя образа запакованного чрута. Используется при
отсутствующей переменной NOIMAGE.
o NOIMAGE - переменная, говорящая spt паковать чрут.
o POSTLOCAL - имя директории с локальными пост-скриптами. По
умолчанию, это setup.d, который можно найти в
$workdir/profile/postinstall/ Для разных компонент иногда
требуется использовать разные локальные пост-скрипты.
Note: ВСЕ пост-скрипты выполняются _внутри_ чрута.
[TODO: сделать дополнительные пост-скрипты, выполняемые снаружи
для манипуляции файлами, созданными в чруте. Так же, вынести
некоторый функционал spt в отдельные функции в файл functions,
которые можно будет использовать в своих не чрут-скриптах.
Например, создание iso-образа, копирование файлов из чрута в out
для "набивки" контента для CD-диска и т.д.]
o IDENT - некий идентификатор. Юзабелен в случае, когда создаётся
несколько RPMS-репозитариев для инсталлятора (RPMS.$IDENT).
o FILES - директория с дополнительными файлами, которые
скопируются в out.
o INSTALLDIR, COPYONLY, INSTALL2HASH - тоже наследие оригинального
сепаратора. Используются при создании инсталлятора. О точном
назначении лучше спросить rider'a :)
- {isolinux,syslinux}.cfg.in
Конфиги для isolinux, которые просто копируются в out/isolinux.
Зачем нужно копировать syslinux пока непонятно =) Это тоже из
унаследованного из separator. Отрывать не стал -- вдруг что
сломает?
- initfs
Файл описывающий содержимое для initramfs. Лучше не трогать =)
Только при работе под x86_64 нужно проследить, чтобы:
file /init ссылался на /usr/lib64/propagator/bin/init, а не
/usr/lib/propagator/bin/init. То же и для /sbin/stage1. В
следующих версиях зафикшу :)
Пара слов о списке пакетов.
Каждая строчка может содержать только одно имя пакета. Допустимы
зависимости на определённые версии и релиз пакета.
Например:
basesystem=sisyphus-alt13.nodev
# firefox
startup>=0.9.8.4
udev
3. Сепаратизм.
После всех приготовлений наступает самый ответственный момент -
непосредственно стряпанье:
$ spt -v ~/workdir
Пока всё :)
А так, читаем spt --help и смотрим внутрь spt.
PS. Да, кстати. Есть ещё дополнительная тулзень для инсталляции дерева в
чрут. Удобно в случае, когда часто меняется контент одного из пакетов,
например, при отладке. Называется сиё чудо spt-install.
$ spt-install ~/workdir /home/mouse/tmp/spt-0.2-buildroot
Теперь точно всё :)
Замечания, пожелания?
--
mouse
Подробная информация о списке рассылки Devel