[devel] minimal system

Andrey Astafiev =?iso-8859-1?q?andrei_=CE=C1_tvcell=2Eru?=
Пн Ноя 26 09:35:51 MSK 2001


долго думал, куда постить, и решил сначала
отправить сюда. надеюсь получить некоторые
комментарии и после обсуждения сделать более
приемлимый вариант описания моих действий по
созданию минимального дистрибутива на основе
Сизифа. по ходу описания приведено несколько
ошибок и несколько идеологических вопросов.

в субботу 23 ноября 2001 я принес домой
полную копию Sisyphus, сделал на машине

# apt-get dist-upgrade

обновление системы прошло нормально.
далее я попробовал сделать минимальную систему
на основе Sisyphus-20011123. задача эта,
конечно, в основном теоретическая, т.к.
есть много дистрибутивов помещающихся
на дискетке. меня интересовало, что можно
выжать в плане минимализма из Sisyphus.
за основу был взят пакет basesystem-sisyphus.
систему ставил на раздел достаточно большого
размера с файловой системой reiserfs.
первым шагом были отобраны пакеты, от которых
зависит basesystem и необходимые для них.
basesystem потянул за собой еще 92 пакета.
я еще добавил mingetty, bdflush (по умолчанию
используются в inittab, но нет зависимости),
passwd (не знаю с помощью чего другого можно
менять пароли), libreiserfs и reiserfs-utils
(что поделаешь, файловая система-то не ext2 :).
итого система установилась на 108Мб.
теперь опишу разные способы установки.

1. уставновка сразу всех необходимых пакетов,
отобранных предварительно. монтируем целевой раздел:

# mount /dev/hde7 /mnt/test

создаем структуру каталогов, куда будет помещаться
база данных rpm, иначе пакеты устанавливаться не будут.

# mkdir -p /mnt/test/var/lib/rpm

в каталоге, где лежат все пакеты, подается команда:

# rpm -i --root /mnt/test *.rpm

при выполнении этой операции на экране появились
следующие сообщения:

warning: group tty does not exist - using root
warning: created %_tmppath directory /var/tmp
/var/tmp/rpm-tmp.48947: cd: /usr/lib/perl5: No such file or
directory
chown: `root.utmp': invalid user
chown: `root.utmp': invalid user
Cannot find a boot loader, you may have to see why detectloader
has
problems or specify via the command line.
rebuilding database /var/lib/rpm

таким образом в системе были установлены 93 пакета.
добавив 5 недостающих пакетов, о которых говорилось
ранее, и произведя несколько нехитрых действий,
о которых расскажу чуть позже, я получил работающую систему.

# du -s /mnt/test
108M    /mnt/test

2. меня заинтересовали сообщения, выдаваемые rpm
при установке, и я решил установить систему аккуратно
по пакету. почистил тестовый раздел и снова сделал
структуру каталогов для базы данных rpm.

# rm -rf /mnt/test/*; mkdir -p /mnt/test/var/lib/rpm
# rpm --initdb --root /mnt/test

пакеты я устанавливал командой:

# rpm -i --root /mnt/test название_пакета.rpm

в порядке их следования по тексту (по ходу я буду
давать некоторые комментарии и задавать вопросы).
сначала я установил некоторые независимые пакеты
(лицензии, файл релиза) и библиотеки.

altlinux-release-Sisyphus-alt20011123.noarch.rpm
common-licenses-1.1-alt1.noarch.rpm
glibc-core-2.2.4-alt3.i586.rpm
libdb1-1.85-alt1.i586.rpm
libdb2-2.4.14-alt1.i586.rpm
libdb3-3.3.11-alt2.i586.rpm
libpam-0.75-alt11.i586.rpm
libpopt-1.7-alt2.i586.rpm
libpwdb-0.61.1-alt1.i586.rpm
libreadline-4.2-alt5.i586.rpm
libshadow-20000902-alt3.i586.rpm
libshhopt-1.1.6-alt1.i586.rpm
libtermcap-2.0.8-ipl21mdk.i586.rpm
zlib-1.1.3-ipl13mdk.i586.rpm

с некоторыми библиотеками были приключения.
пакет libgpm-1.19.4-alt1.i586.rpm отказался
ставиться, сославшись на необходимость
libncurses.so.5, а libncurses-5.2-ipl3mdk.i586.rpm
соответственно на libgpm.so.1. это легко лечится,

# rpm -i --root /mnt/test libgpm-1.19.4-alt1.i586.rpm \
                          libncurses-5.2-ipl3mdk.i586.rpm

но выглядит по-моему все равно не очень хорошо.
итак в систему были добавлены 

libgpm-1.19.4-alt1.i586.rpm
libncurses-5.2-ipl3mdk.i586.rpm

далее были установлены:

bzlib-1.0.1-alt2.i586.rpm
bzip2-1.0.1-alt2.i586.rpm
bash-2.05-alt4.i586.rpm
gzip-1.3.2-alt1.i586.rpm
info-install-4.0-ipl17mdk.i586.rpm
tar-1.13.25-alt1.i586.rpm

при установке последнего появилось сообщение,
которое было отмечено при установке сразу всех пакетов.

warning: created %_tmppath directory /var/tmp

что подвигло меня, к установке пакета filesystem,
создающего директории для размещения файлов в
дистрибутивах от ALTLinux. оказалось, что он зависит
от пакета setup, в котором содержатся стандартные файлы.
смысл этой зависимости я не понял, но в системе они
появились, естественно в следующем порядке:

setup-2.1.9-ipl21mdk.i586.rpm
filesystem-2.1.6-alt5.i586.rpm

далее "немного каши перловой". при установке perl-base
предустановочный скрипт делает 'cd /usr/lib/perl5',
не проверяя существования сего каталога, что выливается в:

/var/tmp/rpm-tmp.48947: cd: /usr/lib/perl5: No such file or
directory

тем не менее perl-base, некое его мандрейковское
расширение и еще несколько пакетов появляются в системе.

perl-base-5.6.1-alt12.i586.rpm
perl-MDK-Common-1.0.2-alt2.i586.rpm
hwclock-2.14-alt1.i586.rpm
chkconfig-1.2.19-ipl1mdk.i586.rpm
crontabs-1.7-ipl10mdk.noarch.rpm
etcskel-1.65-ipl4mdk.noarch.rpm
gawk-3.1.0-alt1.i586.rpm
getopt-1.1.2-alt1.i586.rpm
glib-1.2.10-alt2.i586.rpm
mktemp-1.4-alt1.i586.rpm
net-tools-1.60-alt1.i586.rpm
psmisc-20.1-alt1.i586.rpm
rootfiles-alt-alt3.noarch.rpm
sash-3.4-ipl5mdk.i586.rpm
sed-3.02-ipl10mdk.i586.rpm
which-2.13-alt1.i586.rpm

попробовал установить vim-minimal, но его
постустановочный скрипт выдал сообщение об ошибке.

/var/tmp/rpm-tmp.50528: ln: command not found
error: execution of %post scriptlet from vim-minimal-6.0-alt1.026
failed, exit status 127

это навело на мысль о том, что возможно скрипты,
связанные с установкой и удалением пакетов тоже
проверять на предмет зависимостей. бред? усложнение?
с одной стороны там пишутся простейшие команды,
которые бывают в системе. но случаи-то бывают разные :)
до появления команды ln я удалил из системы vim-minimal.
далее я начал устанавливать пакеты с утилитами.

diffutils-2.7-ipl22mdk.i586.rpm
fileutils-4.1-alt2.i586.rpm
vim-minimal-6.0-alt1.026.i586.rpm
grep-2.4.2-ipl5mdk.i586.rpm
textutils-2.0.14-alt1.i586.rpm
sh-utils-2.0.11-alt2.i586.rpm
procps-2.0.7-ipl5mdk.i586.rpm

о двух комплектах утилит есть, что сказать отдельно.
findutils при установке требует библиотеку libe2p.so.2,
которая входит в libe2fs. у меня нет файловой системы ext2,
так зачем же мне соответствующая библиотека. заглянув
немного вперед, я, конечно, понял, что без этой библиотеки
мне все равно не обойтись, т.к. она требуется для mkinitrd.
но если, например, я сам собираю в системе ядро и включаю
поддержку файловой системы загрузочного раздела в него,
то уже даже необходимость mkinitrd ставится под сомнение.
с другой стороны, конечно, концепция дистрибутива (в
данном случае касаемо mkinitrd) стоит значительно выше
моих личных идей по его применению. итак, были установлены:

libe2fs-1.24a-alt1.i586.rpm
findutils-4.1.7-alt1.i586.rpm

теперь об util-linux. этот пакет был разделен на несколько
пакетов, хотя собираются они все равно из одного архива.
мне не понятно, для чего было сделано данное разделение и
по какому принципу отбирались утилиты, которые были вынесены.
единственный критерий, по которому можно разнести пакеты
с утилитами, приходящий мне в голову, это наличие каждой
конкретной утилиты в fhs. по такому приципу можно было бы
разбить, скажем, все или некоторые пакеты с утилитами на
lalala-utils и lalala-fhs-utils. может быть имело бы смысл
некоторые утилиты действительно внести в отдельные пакеты...
кроме того, в requires пакета util-linux указаны пакеты с
вынесенными из него утилитами hwclock, getopt, kbdrate,
agetty, cfdisk, fdisk, sfdisk, но при этом пропущены(?)
losetup и mount. также интересным фактом для меня
оказалось то, что requires не содержит контроля версий,
т.е. в системе util-linux может иметь версию X.XXa,
kbdrate - X.XYb, а fdisk - X.ZZc.

на данный момент установить util-linux без нарушения
завивисимостей нельзя, так как agetty зависит от login,
а тот в свою очередь от pam. ок, будем разбираться с
пакетами, отвечающими за авторизацию. установить pam
сразу не представляется возможным, так как в нем
прописана зависимость на cracklib-dicts, причем модуль,
работающий с cracklib вынесен в pam-cracklib.
получается, что имеет место быть весьма странная
зависимость или разделение пакетов. имхо, зависимость
на cracklib-dicts должен иметь pam-cracklib и в него
должно быть вынесено из pam все, что относится к
cracklib, если это возможно и пока еще не сделано.
в противном случае не совсем понятен вынос в отдельный
пакет модуля pam_cracklib.so. вот.

cracklib-2.7-ipl13mdk.i586.rpm
cracklib-2.7-dicts-ipl13mdk.i586.rpm
pam-0.75-alt11.i586.rpm
pam-cracklib-0.75-alt11.i586.rpm
pam_passwdqc-0.4-alt2.i586.rpm
pam_mktemp-0.1-alt2.i586.rpm
pam_userpass-0.5-alt2.i586.rpm
pam-config-1.0-alt1.noarch.rpm
login-0.60-alt8.i586.rpm
agetty-2.11j-alt1.i586.rpm
cfdisk-2.11j-alt1.i586.rpm
fdisk-2.11j-alt1.i586.rpm
kdbrate-2.11j-alt1.i586.rpm
losetup-2.11j-alt1.i586.rpm
mount-2.11j-alt1.i586.rpm
sfdisk-2.11j-alt1.i586.rpm
util-linux-2.11j-alt1.i586.rpm
SysVinit-2.83-alt1.i586.rpm
modutils-2.4.12-alt1.i586.rpm
initscripts-5.49-ipl31mdk.i586.rpm

при установке последнего пакета появилось:
chown: `root.utmp': invalid user
chown: `root.utmp': invalid user
такие пользователь и группа в системе есть :)

e2fsprogs-1.24a-alt1.i586.rpm
mkinitrd-2.7.1-alt6.noarch.rpm
bootloader-utils-0.1-alt2.noarch.rpm
kernel24-up-2.4.15-alt0.61.i586.rpm

вполне естественно, что эта операция закончилась
предупреждением о том, что не этом разделе у меня
нет загрузчика опреционной системы (мне хватает
lilo на другом разделе).

Cannot find a boot loader, you may have to see why detectloader
has problems or specify via the command line.

еще немного об авторизации. при установке shadow-utils
не создаются файлы shadow и gshadow, хотя могли бы при
помощи скрипта на основе информации из passwd и group.

shadow-change-20000902-alt3.i586.rpm
shadow-check-20000902-alt3.i586.rpm
shadow-convert-20000902-alt3.i586.rpm
shadow-edit-20000902-alt3.i586.rpm
shadow-groups-20000902-alt3.i586.rpm
shadow-log-20000902-alt3.i586.rpm
shadow-utils-20000902-alt3.i586.rpm
ncurses-5.2-ipl3mdk.i586.rpm
dev-3.0.6-ipl5mdk.i586.rpm

установка файлов устройств привело к вот такому эффекту:

rpmdb: /mnt/test/var/lib/rpm/Providename: No such file or
directory
<skip>
rpmdb: /mnt/test/var/lib/rpm/Conflictname: No such file or
directory
rpmdb: /mnt/test/var/lib/rpm/Providename: No such file or
directory
<skip>
rpmdb: /mnt/test/var/lib/rpm/Name: No such file or directory
rpmdb: /mnt/test/var/lib/rpm/Providename: No such file or
directory
rpmdb: /mnt/test/var/lib/rpm/Conflictname: No such file or
directory
<skip>
error: db3 error(-30998) from db->close: DB_INCOMPLETE: Cache
flush was unable to complete
rpmdb: Non-empty page 32 in unused hash bucket 24
rpmdb: Non-invalid page 3 on free list
error: db3 error(-30985) from db->verify: DB_VERIFY_BAD: Database
verification failed

общий вывод занял примерно 50kb. такие сообщения за время
моих тестов появлялись с разной периодичностью при установке
разных пакетов, но насколько я заметил, только после установки
dev
и только при использовании ключа --root. c dev подобные сообщения
появляются всегда как при установке, так и при удалении.
перестроение базы непосредственно перед установкой этого
пакета не помогает. замечено также, что глюк в основном
проявляется на пакетах с больших количеством файлов.
если устанавливать все пакеты сразу, то все работает
нормально. однако, при попытке удаления, скажем, пакета
dev снова появляются аналогичные сообщения.

пробуем установить rpm и видим, что он зависит от glibc,
а не от glibc-core. это ошибка или rpm действительно
рассчитывает на что-то большее чем библиотеки из glibc?
обидно, прииходится поставить почти все пакеты, входящие
в glibc, а это почти 40Мб.

glibc-gconv-modules-2.2.4-alt3.i586.rpm
glibc-i18ndata-2.2.4-alt3.i586.rpm
glibc-locales-2.2.4-alt3.i586.rpm
glibc-nss-2.2.4-alt3.i586.rpm
glibc-timezones-2.2.4-alt3.i586.rpm
glibc-utils-2.2.4-alt3.i586.rpm
iconv-2.2.4-alt3.i586.rpm
glibc-2.2.4-alt3.i586.rpm
librpm-4.0.3-alt0.9.i586.rpm
rpm-4.0.3-alt0.9.i586.rpm
basesystem-sisyphus-alt1.noarch.rpm

оказывается, что эта система еще не является вполне
рабочей. нужно еще установить библиотеки и утилиты
для работы используемой на данном разделе файловой
системы (в данном случае reiserfs), mingetty, bdflush
(используемые по умолчанию в inittab) и passwd.

bdflush-1.5-ipl17mdk.i586.rpm
mingetty-0.9.4-ipl17mdk.i586.rpm
passwd-0.64.1-ipl4mdk.i586.rpm
libreiserfs-3.x.0h-ipl3.i586.rpm
reiserfs-utils-3.x.0h-ipl3.i586.rpm

--
andrei at tvcell d0t ru
_______________________________________________
Devel mailing list
Devel на linux.iplabs.ru
http://www.logic.ru/mailman/listinfo/devel



Подробная информация о списке рассылки Devel