[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