[devel] propagator - diet vs glibc
Nick S. Grechukh
=?iso-8859-1?q?gns_=CE=C1_altlinux=2Eru?=
Вс Фев 4 12:56:17 MSK 2007
2007/2/2, Mikhail Yakshin <greycat на altlinux.org>:
> Nick S. Grechukh пишет:
> Они примерно так:
> Выборочные + запакованные ~ 2.5 мега
> Выборочные + незапакованные ~ 9-10 мегов
> Все + запакованные ~ 10-11 мегов
> Все + незапакованные ~ 35-50-55 мегов
понятно. mar чем хорош, из него вытягивается без распаковки.
> Отсюда и решать, сколько не жалко требовать с пользователя.
> Кстати, относительно pivot'а в propagator - он делается так:
>
> /* overmount image under new root if needed */
> if ( statfs(IMAGE_LOCATION, &sfs) )
> fatal_error("statfs "IMAGE_LOCATION);
> /* if something is mounted under IMAGE_LOCATION ? */
> if ( sfs.f_type != RAMFS_MAGIC && sfs.f_type != TMPFS_MAGIC ) {
> if ( mount(IMAGE_LOCATION, "." IMAGE_LOCATION, NULL,
> MS_MOVE, NULL) )
> fatal_error("overmounting image location");
> /* test for nested mount: disk or nfs with iso image */
> if ( statfs(IMAGE_LOCATION, &sfs) )
> fatal_error("nested statfs "IMAGE_LOCATION);
> if ( sfs.f_type != RAMFS_MAGIC && sfs.f_type !=
> TMPFS_MAGIC )
> if ( mount(IMAGE_LOCATION, "." IMAGE_LOCATION
> "/isolinux", NULL, MS_MOVE, NULL) )
> fatal_error("overmounting nested image
> location");
> }
>
> umount("/sys");
> umount("/proc/bus/usb");
> umount("/proc");
>
> /* Delete rootfs contents */
> if ( nuke_dir("/") )
> fatal_error("nuking initramfs contents");
>
> /* Overmount the root */
> if ( mount(".", "/", NULL, MS_MOVE, NULL) )
> fatal_error("overmounting root");
>
> /* chroot, chdir */
> if (chroot(".") || chdir("/"))
> fatal_error("chroot");
>
> Судя по вот этому вызову nuke_dir - если он действительно отрабатывает и
> у нас ramfs/tmpfs - то все должно быть хорошо. Просто мы поднимаем
> планку минимального количества памяти, на которой запустится наш новый
> propagator.
это написано в filesystems/ramfs-rootfs-initramfs.txt
- When switching another root device, initrd would pivot_root and then
umount the ramdisk. But initramfs is rootfs: you can neither pivot_root
rootfs, nor unmount it. Instead delete everything out of rootfs to
free up the space (find -xdev / -exec rm '{}' ';'), overmount rootfs
with the new root (cd /newmount; mount --move . /; chroot .), attach
stdin/stdout/stderr to the new /dev/console, and exec the new init.
а пропагатор именно initramfs.
Подробная информация о списке рассылки Devel