From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Bokovoy To: devel@linux.iplabs.ru Subject: Re: [devel] minimal system Message-ID: <20011126112429.GG25753@pc152.belcaf.minsk.by> References: <20011126093551.6d234204.andrei@tvcell.ru> Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20011126093551.6d234204.andrei@tvcell.ru> User-Agent: Mutt/1.3.23.2i Sender: devel-admin@linux.iplabs.ru Errors-To: devel-admin@linux.iplabs.ru X-BeenThere: devel@linux.iplabs.ru X-Mailman-Version: 2.0 Precedence: bulk Reply-To: devel@linux.iplabs.ru List-Help: List-Post: List-Subscribe: , List-Id: ALT Linux Team Developers mailing list List-Unsubscribe: , List-Archive: X-Original-Date: Mon, 26 Nov 2001 13:24:30 +0200 Date: Mon, 26 Nov 2001 13:24:30 +0200 Archived-At: List-Archive: List-Post: On Mon, Nov 26, 2001 at 09:35:51AM +0300, Andrey Astafiev wrote: > долго думал, куда постить, и решил сначала > отправить сюда. надеюсь получить некоторые > комментарии и после обсуждения сделать более > приемлимый вариант описания моих действий по > созданию минимального дистрибутива на основе > Сизифа. по ходу описания приведено несколько > ошибок и несколько идеологических вопросов. Спасибо! Я некоторые моменты прокомментирую, дабы стало понятно текущее направление нашего развития в этом контексте. Далее я буду довольно часто ссылаться на BTE (Build & Test Environment), который сейчас находится в разработке и при помощи которого некоторые ошибки в зависимостях (и не только) нам уже удалось отловить. > # rpm -i --root /mnt/test *.rpm > > при выполнении этой операции на экране появились > следующие сообщения: Все правильно. Подготовка chroot-а должна производится другим образом: 1. mkdir -t /mnt/test/{bin,etc/rpm,usr/lib/rpm,var/lib/rpm} 2. rpm2cpio rpm-4.0.3-alt*.i586.rpm | \ (cd /mnt/test ; \ cpio -iumd --quiet bin/rpm usr/lib/rpm/{rpmrc,macros}) 3. echo "%_dbapi 3" >/mnt/test/etc/rpm/macros.db1 4. chroot /mnt/test /bin/rpm --initdb Суть этих операций состоит в том, что: 1. Текущий RPM 4.0.3 содержит совместную с DB3 ошибку при работе с chroot-ованием, проявляющуюся при использовании опции --root и выражающуюся в порче как системной, так и за-chroot-енной базы RPM (видно ниже в Вашем примере). 2. Поэтому мы используем статически собранный /bin/rpm, помещая его в chroot и запуская внутри (chroot делается _перед_ запуском, а сам RPM отрабатывает, не зная, что он в chroot-е). 3. Для того, чтобы запустился именно статический RPM, мы не ставим в chroot /usr/lib/rpm/rpmpopt-4.0.3, где происходят переопределения обработки опций RPM. > # du -s /mnt/test > 108M /mnt/test В моем случае (в BTE), когда в систему ставятся setup и basesystem, получается: # du -s -x sandroot.K26513 212M sandroot.K26513 Количество установленных пакетов -- 117, вот полный список (все зависимости вытянуты BTE из APT-а, список получен внутри chroot-а командой rpm -qa --qf='[%{SIZE}\t%{NAME}-%{VERSION}-%{RELEASE}\n]'|sort -n ): 0 basesystem-sisyphus-alt1 0 filesystem-2.1.6-alt5 30 altlinux-release-Sisyphus-alt20011121 56 kernel-headers-common-1.0-alt1 439 pam-config-1.0-alt1 898 crontabs-1.7-ipl10mdk 6942 kbdrate-2.11j-alt1 8589 shadow-edit-20000902-alt3 9493 rootfiles-alt-alt3 11041 mkinitrd-2.7.1-alt5 16592 mktemp-1.4-alt1 18092 shadow-log-20000902-alt3 18224 info-install-4.0-ipl17mdk 18664 libgpm-1.19.4-alt1 19247 libtermcap-2.0.8-ipl21mdk 19252 libltdl-1.4-alt2 19361 libshhopt-1.1.6-alt1 20957 agetty-2.11j-alt1 22262 shadow-check-20000902-alt3 25239 shadow-convert-20000902-alt3 25470 losetup-2.11j-alt1 28935 bootloader-utils-0.1-alt1 30050 etcskel-1.65-ipl4mdk 30933 shadow-groups-20000902-alt3 33172 login-0.60-alt8 34199 libintl-0.10.40-alt1 35829 which-2.13-alt1 41335 libshadow-20000902-alt3 44055 getopt-1.1.2-alt1 47539 pam_passwdqc-0.4-alt2 48594 libpopt-1.7-alt2 49204 libpam-0.75-alt11 49463 perl-MDK-Common-1.0.2-alt2 51124 cfdisk-2.11j-alt1 52140 bzip2-1.0.1-alt2 56064 shadow-change-20000902-alt3 56845 zlib-1.1.3-ipl13mdk 58872 iconv-2.2.4-alt3 60160 libdb1-1.85-alt1 62020 setup-2.1.9-ipl21mdk 64052 sed-3.02-ipl10mdk 64456 bzlib-1.0.1-alt2 64565 sfdisk-2.11j-alt1 64974 psmisc-20.1-alt1 66669 hwclock-2.14-alt1 79891 cracklib-2.7-ipl13mdk 85571 gzip-1.3.2-alt1 92410 ed-0.2-ipl22mdk 102442 chkconfig-1.2.19-ipl1mdk 104752 fdisk-2.11j-alt1 116525 gdbm-1.8.0-ipl8mdk 123440 libe2fs-1.24a-alt1 126681 libexpat-1.95.2-alt1 128597 findutils-4.1.7-alt1 134478 SysVinit-2.83-alt1 147085 mount-2.11j-alt1 152080 dev-3.0.6-ipl5mdk 152471 diffutils-2.7-ipl22mdk 162289 glib-1.2.10-alt2 169897 rpm-build-4.0.3-alt0.9 169995 libreadline-4.2-alt5 174019 patch-2.5.4-ipl8mdk 183706 m4-1.4.1-alt1 205608 libpwdb-0.61.1-alt1 210948 libgmp-3.1.1-ipl2mdk 231503 cracklib-dicts-2.7-ipl13mdk 255282 libdb2-2.4.14-alt1 263194 procps-2.0.7-ipl5mdk 274108 cpp-2.96-ipl14mdk 311503 common-licenses-1.1-alt1 321563 glibc-timezones-2.2.4-alt3 335268 libncurses-5.2-ipl3mdk 365798 initscripts-5.49-ipl31mdk 384706 vim-minimal-6.0-alt1.026 425768 pam-0.75-alt11 439975 grep-2.4.2-ipl5mdk 443315 shadow-utils-20000902-alt3 500944 libbfd-2.11.92.0.10-alt1 514055 glibc-utils-2.2.4-alt3 546176 librpm-4.0.3-alt0.9 549760 gettext-0.10.40-alt1 565144 sash-3.4-ipl5mdk 633683 autoconf-2.13-alt2 636186 bash-2.05-alt4 639123 net-tools-1.60-alt1 720805 file-3.36-alt2 755526 gawk-3.1.0-alt1 758652 gettext-base-0.10.40-alt1 785721 make-3.79.1-ipl4mdk 815196 e2fsprogs-1.24a-alt1 864848 texinfo-4.0-ipl17mdk 886845 automake-1.4-alt3.p5 889520 libtool-1.4-alt2 894932 ncurses-5.2-ipl3mdk 906336 modutils-2.4.12-alt1 929626 tar-1.13.25-alt1 997143 glibc-2.2.4-alt3 1158665 libssl-0.9.6b-alt1 1633488 fileutils-4.1-alt2 1681684 textutils-2.0.14-alt1 1701020 sh-utils-2.0.11-alt2 1869390 perl-base-5.6.1-alt12 2088227 util-linux-2.11j-alt1 2123081 glibc-nss-2.2.4-alt3 2283367 libdb3-3.3.11-alt2 2559320 binutils-2.11.92.0.10-alt1 2742750 rpm-4.0.3-alt0.9 4166806 glibc-gconv-modules-2.2.4-alt3 5781455 kernel24-headers-2.4.15-alt0.61 6390871 gcc-2.96-ipl14mdk 9025561 glibc-core-2.2.4-alt3 11282069 python-2.1.1-alt3 13813981 perl-5.6.1-alt12 16799129 glibc-i18ndata-2.2.4-alt3 26191258 kernel24-up-2.4.15-alt0.61 38739812 glibc-devel-2.2.4-alt3 43610318 glibc-locales-2.2.4-alt3 > с некоторыми библиотеками были приключения. > пакет 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 > > но выглядит по-моему все равно не очень хорошо. Естественно. BTE использует вот такой алгоритм: 1. Команда apt-get --print-uris -o Dir::Cache=${root}/var/cache/apt \ -o Dir::State=${root}/var/lib/apt \ -o Dir::Etc=${root}/etc/apt \ -o Debug::pkgProblemResolver=false \ -o Debug::pkgRPMPM=false \ -o RPM::RootDir=${root} \ install имя-пакета Дважды повторив эту команду для (последовательно) setup и basesystem получаем список файлов, которые необходимо установить для минимальной системы. Обратите внимание на переопределение RPM::RootDir и Dir::{Cache,State,Etc}, чтобы использовалась установка из chroot. 2. Репозитарий, относительно которого строится система, монтируется внутрь chroot-а (mount -o bind,ro или mount -t nfs localhost:/repository -o ro, в зависимости от типа ядра). 3. Затем выданный список подсовывается внутри chroot-а имеющемуся там статическому RPM-у, с соответствующей заменой пути к файлам на адекватную внутри chroot-а (в случае BTE -- это /repos) и RPM ставит пакеты. Очень важно ставить в два приема -- вначале setup, затем basesystem. Дело в том, что setup содержит /etc/{group,passwd} с системными пользователями, на которые опираются многие системные пакеты. К сожалению, текущий glibc-core не содержит libnss_files и потому эти пользователи и группы пока не ресолвятся. Дмитрий Левин, надеюсь, выпустит обновленный glibc-core. > при установке последнего появилось сообщение, > которое было отмечено при установке сразу всех пакетов. > warning: created %_tmppath directory /var/tmp > > что подвигло меня, к установке пакета filesystem, > создающего директории для размещения файлов в > дистрибутивах от ALTLinux. оказалось, что он зависит > от пакета setup, в котором содержатся стандартные файлы. > смысл этой зависимости я не понял, но в системе они > появились, естественно в следующем порядке: > > setup-2.1.9-ipl21mdk.i586.rpm > filesystem-2.1.6-alt5.i586.rpm Смысл зависимостей таков: 1. Setup обеспечивает установку архитектурнонезависимых файлов, содержащих описание системных пользователей, групп и некоторой другой важной информации. 2. Filesystem содержит системообразующие файлы и директории, не принадлежащие другим пакетам. Оба этих пакета обязаны стоять в системе до установки basesystem. > при установке последнего пакета появилось: > chown: `root.utmp': invalid user > chown: `root.utmp': invalid user > такие пользователь и группа в системе есть :) Это последствие отсутствия в glibc-core libnss_files. > установка файлов устройств привело к вот такому эффекту: > > rpmdb: /mnt/test/var/lib/rpm/Providename: No such file or > directory > > rpmdb: /mnt/test/var/lib/rpm/Conflictname: No such file or > directory > rpmdb: /mnt/test/var/lib/rpm/Providename: No such file or > directory > > 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 > > 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 Вот она и есть -- та самая ошибка RPM 4.0.3 + DB3, которая не позволяет пользоваться опцией --root в RPM. Мы с Дмитрием смогли повторить ее на базе пакетов из RedHat 7.2, понадобилось всего 10 пакетов, установленных в две итерации, чтобы испортить обе базы -- системную и тестовую в chroot-е. К сожалению, мне не известен текущий статус этой проблемы, думаю, что Дмитрий здесь добавить что-то новое. > пробуем установить rpm и видим, что он зависит от glibc, > а не от glibc-core. это ошибка или rpm действительно > рассчитывает на что-то большее чем библиотеки из glibc? > обидно, прииходится поставить почти все пакеты, входящие > в glibc, а это почти 40Мб. Сам RPM собран статически, ему нужен только glibc-core для ресолвинга пользователей и групп, но это будет работать только, когда Дмитрий выпустит новый релиз glibc, пока что требуется установка glibc-nss и того, от чего он зависит. -- / Alexander Bokovoy $ cat /proc/identity >~/.signature `Senior software developer and analyst for SaM-Solutions Ltd.` --- Nov 21 20:58:58 alconost kernel: VFS: Busy inodes after unmount. Self-destruct in 5 seconds. Have a nice day... _______________________________________________ Devel mailing list Devel@linux.iplabs.ru http://www.logic.ru/mailman/listinfo/devel