Portál AbcLinuxu, 24. dubna 2024 18:27


Dotaz: Udev v initrd

26.7.2010 02:10 ja_kral_ll | skóre: 17
Udev v initrd
Přečteno: 292×
Odpovědět | Admin
Ahoj,

trochu laškuju s cryptorootem a tedy i initrd.

Nevíte o nějakym způsobu jak si v /dev po každym spuštění vytvořit soubory reprezentující disky ? Tahat na to do initrd udev se mi zdá zvrhlost a tak zvažuji že si napíši nějaký scriptík co zjistí připojené disky v procu a podle toho zavolá mknod.

Nevíte o nějakém hotovém řešení ?

Díky
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.7.2010 07:16 frr | skóre: 34
Rozbalit Rozbalit vše Re: Udev v initrd
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ve FC5 je v initrd prográmek zvaný tuším udev_start. Včetně GNU Libc to má celé nějakých 5 MB. Netuším, jak velké je to třeba ve FC13 - nezkoumal jsem.

Původně jsem se taky o něco snažil "po svém" v shellu, ale přistupoval jsem k tomu dost lemplovsky, moc mi to nefungovalo - na UDEV jsem přešel prakticky ve chvíli, kdy se objevil. IDE disky a partitions byly zjistitelné z /proc, SCSI disky asi budou chtít sahat do /sys (ale ono je to možná vhodné pro všechny druhy disků) - /proc/scsi/scsi není příliš podrobné. Jedna věc jsou device nodes (těch se dá vyrobit hrst staticky dopředu), druhá věc je vůbec zjistit, jaká zařízení jsou hardwarově připojena a podle nich vyrábět fstab (případně i generovat major/minor). Shell na to podle mého není dost mocný, Perl znamená desítky MB v malých souborech... snad jedině napsat si něco v holém C :-)

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.
[:wq]
26.7.2010 09:38 MMichal | skóre: 21
Rozbalit Rozbalit vše Re: Udev v initrd
Na Debianu pro cekani v initrd slouzi, pokud se nepletu, parametr bootu "rootdelay".
26.7.2010 07:23 Michal Karas | skóre: 45 | blog: /dev/random
Rozbalit Rozbalit vše Re: Udev v initrd
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj, trošku OT odpověď. Udev v initrd asi až taková zvrhlost nebude, minimálně Arch ho tam už spouští (a slyšel jsem, že pár dalších distribucí taky). Kdybys chtěl mrknout, jak to funguje, tak to je balíček mkinitcpio (a konkrétně hook encrypt).
Max avatar 26.7.2010 10:02 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Udev v initrd
Přesně, navíc je udev doporučován dávat do initrd kvůli rychlejšímu startu systému.
Zdar Max
Měl jsem sen ... :(
26.7.2010 13:09 ja_kral_ll | skóre: 17
Rozbalit Rozbalit vše Re: Udev v initrd
Odpovědět | | Sbalit | Link | Blokovat | Admin
Aha, takže to nakonec dopadne tak že tam hodim staticky linkovanej udev...
26.7.2010 19:37 xHire | skóre: 21 | blog: Linuxovník
Rozbalit Rozbalit vše Re: Udev v initrd
Odpovědět | | Sbalit | Link | Blokovat | Admin
Šifruji celý harddisk a bootuji z flashky, přičemž initrd jsem si sestavil sám ze všech potřebných komponent. Rozchodit to nebylo jednoduché, můžu sem kdyžtak ještě během dneška hodit jeho obsah (jenom jako výpis souborů) + init skript. Nejvíce práce na rozcházení bylo právě s udevem a stále to ještě nemám úplně dolazené. Jiný funkční způsob než s použitím udev jsem nenašel (mám takový dojem, že některý z mnou používaných programů na něm dokonce přímo závisí).
Kryptoměny a bločenka.
26.7.2010 22:52 xHire | skóre: 21 | blog: Linuxovník
Rozbalit Rozbalit vše Re: Udev v initrd
Příloha:
Tak jak jsem slíbil. Chtěl jsem nakonec svůj initramfs přiložit k tomuto příspěvku, ale systém ho odmítl jako příliš velký. Tak aspoň přikládám výpis jeho obsahu. Když na to teď, po pár týdnech, opět koukám, některé věci mi (opět) nedávají smysl (například duplikace lib64 v lib -- zřejmě jsem to tam měl kvůli testování, jinak nevím), takže to berte s rezervou. ;-)

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ů :-D).

Snad to bude aspoň trošku přínosné.
Kryptoměny a bločenka.
Grunt avatar 26.7.2010 23:30 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
Rozbalit Rozbalit vše Re: Udev v initrd
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nic bych si z toho nedělal. Ve Fedoře od dob co začali používat Dracuta v initrd smrdí jak celý initrd, tak téměř všechny moduly (a výsledek má skoro 30MB nebo 50MB).A divím, se že do něj nenacpali ještě celý inicializační subsystém. Pokud je potřeba, dá se udělat minimální verze udev z busyboxu (ale těžko říct, jak se bude snášet s tím systémovým).
Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
michich avatar 27.7.2010 07:42 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: Udev v initrd
Až takhle velký ten výsledek není. U mě má výchozí 12 MB, se zapnutým hostonly=yes v /etc/dracut.conf pak 5 MB.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.