Новость: Linux: yaird - замена mkinitrd, основанная на концепциях hotplug
(Категория: Linux)
Добавил Roman I Khimov
Четверг, 17 Февраль 2005, 23:59
Сегодня в LKML было впервые объявлено о yaird, Yet Another mkInitRD - заменителе mkinitrd, основанном на алгоритмах hotplug.
Автор, Эрик ван Конийненбург (Erik van Konijnenburg), исследовал две версии mkinitrd, из Debian sid и Fedora FC3, и обнаружил некоторые принципиальные проблемы обоих. Среди них числится то, что они не используют богатые возможности файловой системы sysfs (/sys), появившейся в ядре 2.6, они хуже справляются с нахождением модулей для устройств, hotplug делает это значительно лучше, плюс ко всему они оба написаны для шелла, что добавляет сложности и делает сложнее обработку структур данных и отлавливание ошибок.
Yaird написан на Perl, использует sysfs и работает схожим с hotplug образом, тем самым, автор рассчитывает на то, что он будет надежнее и лучше.
Автор отмечает, что уже есть рабочий код, который успешно работает на его собственной машине и еще одном компьютере. Однако, понятно, что это мало похоже на полноценно оттестированный код, поэтому он просит помочь, опробовать yaird на разных машинах.
Исходники доступны здесь:
http://www.xs4all.nl/~ekonijn/yaird/
Далее следует оригинальное письмо Эрика (на оригинальном, естественно, языке):
OK, time to stop polishing and start publishing.
This is to announce yaird, Yet Another mkInitRD, a rewrite of mkinitrd
based on hotplug algorithms.
MOTIVATION
==========
Why a rewrite? The versions of mkinitrd that I studied, Debian sid
and Fedora FC3, have some problems: they capture a lot of knowledge
about the boot process, but don't always understand when a new kernel
uses a different module name than the old kernel, may rely on modules
compiled into the kernel, and don't always catch errors at the earliest
opportunity.
Assumption: there are three issues that cause most of these problems.
- Backward compatibility: sysfs provides a wealth of information
about hardware, but if you have to support 2.4 kernels, you have
to limit yourself in the use you can make of that information.
- Originality: hotplug does a pretty good job of finding the appropriate
modules for a device, basically because it closely follows the
algorithms the kernel uses for matching hardware with modules.
Deviating from those algorithms is unlikely to produce a more
robust result.
- Shell scripting: beyond a certain level of complexity, the shell
syntax makes it difficult to focus on the data structures you're
trying to process and makes it difficult to do rigorous error checking.
Yaird is intended to find out whether that assumption is correct: if so,
a program to build initrd images will be more reliable if it's written
in perl, if it uses sysfs to determine what hardware needs to be supported,
and if it closely follows the methods hotplug uses find the modules
needed to support some hardware.
STATUS
======
There is working code: yaird booted the machine this note is written on.
Code is available online, there also is a paper that discusses the workings
of the application in detail.
http://www.xs4all.nl/~ekonijn/yaird/
So far, the program works correctly on every machine it's been tested on,
but with only two test boxes that does not mean much.
Basic creature comforts are in place: "configure; make" but no RPM or
deb files, a README and help option but no manual page.
Features:
- understands SATA and IDE. USB sticks and SCSI should work, but are
untested.
- understands MDADM and LVM2, activates only necessary devices,
understands stacks like LVM on top of stripe on top of mirror.
- handles both initrd and initramfs.
- understands USB keyboards.
- understands hotplug blacklist.
- knows that a module compiled into the kernel does not need insmod.
- understands /etc/fstab, including niceties such as labels, uuids and
octal escapes.
- image generation understands symbolic links and shared libraries.
(should support 32bit emulation on 64bit kernels; untested).
- templating system to simplify tuning the initrd image to the distribution.
- avoids hard-coded device numbers; does not require devfs.
- testing mode gives detailed overview of the systems hardware
and the modules needed to support that.
There are rough edges in practically every feature: this is suitable
for testing, but not for production use.
TODO
====
(1) Testing so far is 100% successful, but with just two boxes to play
with, that's not saying much. If you can find space to test the code
on your system, your results are highly appreciated. At this point,
hardware testing is most valuable: I already know that dm-crypt is
unsupported for now, but whether this stuff can boot a powerbook, sparc,
or just about anything else is an open question.
(2) Feedback. This may be an interesting idea, but how does it relate
to other new stuff floating about? In particular, what about the work
that's going on putting udev on initramfs: are these approaches complementary
or alternatives? Different perspectives on where this stuff fits in would
help.
(3) Support more configurations. dm-crypt is unsupported for now, and so
are multipath, swsusp, EVMS, NFS and loopback mounts. Implementing this
stuff becomes interesting once there are some tests results that the
basic ideas work in practice.
Regards,
Erik