Portál AbcLinuxu, 30. října 2025 17:43
Jeden zádrhel je se zařízeními na USB. Totiž detekce USB stromu dobíhá až poté, co se kernel už pokusí mountnout root. Takže třeba dát si root natvrdo (bez initrd) rovnou na /dev/sda1 na USBčku je prakticky nemožné - nebo jsem nepřišel na to, jak donutit kernel, aby před mountováním / počkal, až dojede inicializace USB. Když ale v initrd počkáte, třeba i nějaký pevný čas (mě se osvědčilo 6s), najednou tam ty disky jsou... Čili lenoch by počkal ve skriptu 6s a pak spustil udev_start.
Do lib jsem nakopíroval celou udev složku a do sbin zase binárky udevadm a udevd, navíc ještě nesmím zapomenout na pravidla v etc/udev, byť tam mám pouze pro device-mapper.
Zde ještě init v plném znění:
#!/bin/sh -x
export PATH=/bin:/sbin
export LD_LIBRARY_PATH=/lib64:/lib
# wait a little to avoid trailing kernel output
sleep 7
mount -t proc proc /proc
CMDLINE=`cat /proc/cmdline`
mount -t sysfs sysfs /sys
mount -n -t devtmpfs udev /dev -o mode=0755,size=10M,nosuid
# i don't have a qwerty keyboard
#loadkmap < /etc/kmap-cz
# run udevd
echo > /proc/sys/kernel/hotplug
udevd --daemon --resolve-names=never
udevadm trigger --action=add
udevadm settle
# dm-crypt
cryptsetup luksOpen /dev/sda encdisk
# lvm
vgscan
vgimport lvm0
vgchange -a y lvm0
# root filesystem
mount -r /dev/lvm0/root /newroot
# stop udev
udevpid=$(pidof udevd)
udevadm settle
kill ${udevpid} > /dev/null 2>&1
while pidof udevd > /dev/null; do
sleep 0.1
done
# remount /dev
mount --move /dev /newroot/dev
# unmount pseudo FS
umount /sys
umount /proc
# root switch
exec /bin/busybox switch_root /newroot /sbin/init ${CMDLINE}
Hodně udev věcí jsem okoukával u Archu, nicméně si myslím, že by to šlo řešit ještě o něco lépe, než jak to mám já. Je tu vidět i zatím nedořešený problém s načítáním správného mapování klávesnice (což je důležité vědět při zadávání hesla -- zde bylo zakopáno hodně mých marných pokusů
).
Snad to bude aspoň trošku přínosné.
hostonly=yes v /etc/dracut.conf pak 5 MB.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.