[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