spravne, dostavame se k jadru veci. ja bych to nedelal, nicmene to neovlivnim a uz v tuto chvili mi prestalo fungovat nastaveni alsa, protoze prave alsact je v nekde v /usr a ten se uz ted pri bootu nemountuje, takze jak jste spravne pochopil, nelibi se mi to prave proto, ze uz to presunute je a genkernel patch nema...
> buď se gentooisti naučí používat initrd (což chápu, že se mnohým nechce)
Nevim, jakou motivaci k tomu Gentooisti maji, ale vubec bych se nedivil, kdyby si spolu se mnou hodne z nich myslelo, ze cely koncept initrd je z principu veci vadny a je to ukazkovy priklad workaroundu, ktery vic problemu zpusobuje, nez resi.
Proc propanakrale udrzovat nejaky "startovaci image" s kopiemi neceho, co mam v /, kdyz ho stejne z / nacitam? Dyt to je taskarice jak brno - proc rovnou nepouzit minimalistickou startovaci partition / ?
No jo, ale to by chtelo trochu discipliny a nezasirat / kravinama... Coz chceme, takze pridame dalsi presrackovanou kravinu jmenem initrd...
No jo, ale to by chtelo trochu discipliny a nezasirat / kravinama... Coz chceme, takze pridame dalsi presrackovanou kravinu jmenem initrd...
Fajn, tak mi prosím s trouchou disciplíny vytvoř kravinama nezasranej /, kterej nabootuje z NFS, přičemž potřebuju NFS 4.1 a zabezpečení přes Kerberos. Principiálně vadné je podle tebe zřejmě všechno, co neodpovídá BSD dogmatům.
Proč to nejde udělat? Protože nechces zasírat / kravina, no. Pro jednoho je kravina kerberos, pro druhého je kravina cups, pro třetího je kravina bluetooth klávesnice nebo myš, ale nic z toho nefunguje správně, dokud není namountovaný /usr. Nevidím absolutně žádný smysl v pátrání po tom, co všechno nefunguje za účelem přesunutí do /. Práce úplně k ničemu.
A muzes mi nejak polopaticky vysvetlit, jakej je rozdil mezi temahle dvema vecma?
1. zjistuju, co vsechno musim dat do initrd, abych mohl nabootovat
2. zjistuju, co vsechno musim dat do /, abych mohl nabootovat
No offence, nemam v umyslu trollovat, ale opravdu nechapu logiku uvazovani "nechceme to davat do /, tak to kopirujeme do initrd". Hlavne proto, ze v / mi to zustane navzdy na jednom miste, zatimco do initrd to musim pri kazde zmene kopirovat, rozbalovat, menit, zpatky zabalit, udrzovat konfiguraci, co vsechno tam ma byt, udrzovat miliony skriptu, ktery se o to vsechno staraji.
Mit tu samou vec na dvou mistech je vzdycky nejhorsi mozny reseni a melo by se imho volit jenom v pripade, kdy fakt neni zbyti, protoze s tim jsou vzdycky problemy.
opravdu nechapu logiku uvazovani "nechceme to davat do /, tak to kopirujeme do initrd"
Ano, to asi zůstalo opravdu nepochopeno. :-) Jediné, co tam potřebuju, jsou věci nutné k připojení /usr. Opravdu nikdo tam nechce rvát cups, BT stack atd. do initrd/initramfs, není k tomu žádný důvod.
Hlavne proto, ze v / mi to zustane navzdy na jednom miste
Ano, zatímco initramfs mi to zůstane nejen na jedno místě, ale ještě všecho pohromadě v jednom souboru. Fakt nevidím, v čem je ta výhoda /.
musim pri kazde zmene kopirovat, rozbalovat, menit, zpatky zabalit, udrzovat konfiguraci, co vsechno tam ma byt, udrzovat miliony skriptu, ktery se o to vsechno staraji.
Hmmm... napsat update-initramfs -u v Debianu nebo genkernel --install initramfs v Gentoo, to je fakt děsná práce. :-)
> Opravdu nikdo tam nechce rvát cups, BT stack atd. do initrd/initramfs, není k tomu žádný důvod.
Vubec nechapu pointu.
>> Ano, zatímco initramfs mi to zůstane nejen na jedno místě, ale ještě všecho pohromadě v jednom souboru. Fakt nevidím, v čem je ta výhoda /.
Jakto na jednom miste? Ty veci, ktery mas v initrd prece ODNEKUD kopirujes, ne? Takze je mas NEKDE a potom jeste v initrd. A tyhle dve veci musis odrzovat synchronizovany, misto, abys rovnou pouzil pri bootu to NEKDE a zadnou synchronizaci nepotreboval.
Opet to chce asi priklad z FreeBSD (fakt nejde o zadna dogmata, je to priklad): prijde ti slozity bootovani z NFS+kerberos? A prislo by ti srovnatelne slozity bootovani ze ZFS (obcas se rika, ze ZFS je OS v OS :)? Tak na to jsou ve FreeBSD potreba dva soubory: pmbr (512B) a gtpzfsboot (39KB). Tyhle dva soubory musis odnekud natahnout (typicky zacatek partition + jedna dedikovana partition pro gptzfsboot) a potom uz jedes vsechno primo ze ZFS.
Totez s diskless bootem: potrebujes jeden soubor pxeboot (262KB), kterej umi nacist konfiguraci z DHCP a / namountovat z NFS. Nic uz pak neni potreba premountaovavat, jede se rovnou z toho, co je namountovany.
Magie? Nemyslim si. Proste adekvatni reseni situace bez berlicek. A jelikoz tam zadna berlicka neni, neni potreba ji resit a nic ti ji nemuze podrazit. Zadne "aha, nebootuje to, protoze jsem do initrd zapomnel dat X" se nekona. System nabootuje i v ruznych nestandardnich situacich jako treba kdyz ho preneses na jinej HW apod.
> Hmmm... napsat update-initramfs -u v Debianu nebo genkernel --install initramfs v Gentoo, to je fakt děsná práce. :-)
A vnimas nejaky rozdil mezi "spustit utilitu" a "naprogramovat a udrzovat utilitu"?
A tyhle dve veci musis odrzovat synchronizovany, misto, abys rovnou pouzil pri bootu to NEKDE a zadnou synchronizaci nepotreboval.
Ne, nemusím. Naopak např. Gentoo to tak vůbec nedělá. V initramfs se defaultně používají otestované stabilní verze bez ohledu na to, co je v systému. (Samozřejmě je to konfigurovatelné, pokud chceš verzi jinou/aktuální.) V Debianu se používá to, co je aktuálně v systému s tím, že přes hook se automaticky aktualizuje i initramfs. Práce pro uživatele naprosto nulová.
No tak pokud Gentoo nepouziva aktualni verze, tak to je urcite krok spravnym smerem, to jsem nevedel. Sice pak moc nechapu duvod (aktualni verze modulu jadra tam stejne nemam), ale urcite je to uspech, ze misto BSDackyho jednoho 40K souboru zvladlo Gentoo to samy udelat pomoci nekolikamegovyho image ;)
Nerozumíme si. Jádro je v initramfs samozřejmě vždy to aktuální, které bootuju :-) Mluvím o nástrojích v tom initramfs. Příklad.
Aha, ja jsem myslel, ze v tom initrd ma treba nejakou univerzalni verzi driveru filesystemu, kterou pouzije jenom na to, aby namountovalo root.
No tak pokud je to takhle, tak plati, co jsem rikal: musi se slozite zjistovat, co se ma do image zkopirovat, image se musi vytvorit, musi existovat navic dalsi init skripty atd. Proste uplne zbytecna namaha s nulovym efektem. Spis bych rekl zapornym, protoze:
1. kdyz v imagi neco nemam, tak nenabootuju (na jinym hw apod.)
2. stejny system muzu jenom s obtizema nabootovat jinym zpusobem (napr. normalne bootuju z nfs, ale ted potrebuju TENTYZ system nabootovat z disku)
Opravdu nerozumím.
1/ Pokud si kompilujete "optimalizované" (minimální) jádro pouze pro vlastní stroj, tak samozřejmě nebude na jiném HW bootovat, pokud ten ovladač nemá, to snad dá rozum. To vůbec nesouvisí s initramfs. Pokud máte jádro univerzální, tak nabootuje všude.
2/ Uhm? Změnit v bootloaderu parametry pro jádro třeba z root=/dev/nfs nfsroot=aaa.bbb.ccc.ddd:/some/path na root=/dev/sda1 je práce na několik sekund.
1) nemluvim o zadnem optimalizovanem jadru. Pokud pouzivam initrd, tak tam typicky nekopiruju vsechny moduly, ale jenom nektere. Musim teda a] nejak urcit, ktere to jsou b] na systemu, kde by byly potreba jine, mi ten system nenabootuje.
Oproti tomu kdyz bootuju rovnou z /, mam k dispozici vsechny moduly.
2) A jste si jisty, ze vetsine distribuci staci opravdu jenom zmenit tenhle parametr a bezproblemu nabootuji? Ja si tim teda jisty nejsem. Viz napr. polozky MODULES a HOOKS v /etc/mkinitcpio.conf...
Nerikam, ze to nejde, nemam to vyzkousene. Jenom rikam, ze bych si opravdu nebyl predem jisty, ze to pujde. Napriklad bych si nelajzl to zkouset na masine nekde na druhem konci republiky, ke ktere nemam jiny pristup. S FreeBSD bych se neceho podobneho tolik nebal prave proto, ze boot je jednodussi a timpadem i mnozina pruseru, ke kterym muze dojit, je podstatne mensi.
To je velice jednoduché.
„1. zjistuju, co vsechno musim dat do initrd, abych mohl nabootovat“
Toto odhaduje program, který ti vytvoří initrd a který jde případně dokonfigurovat.
„2. zjistuju, co vsechno musim dat do /, abych mohl nabootovat“
Toto v současných systémech určuje distributor, který tvoří balíčky. Ruční přesouvání souborů ti způsobí problémy s updatem.
„Mit tu samou vec na dvou mistech je vzdycky nejhorsi mozny reseni a melo by se imho volit jenom v pripade, kdy fakt neni zbyti, protoze s tim jsou vzdycky problemy.“
Pokud máš lepší nápad, který nebude způsobovat regrese oproti metodě s initrd, tak sem s ním. Může to být feature (přes)příští Fedory a pak to zase proplout do ostatních systémů :). Nebo naopak.
Jenže je tam jeden drobný rozdíl, který nebereš v úvahu: initrd musím udržovat co nejmenší, protože jinak by se mi loadoval hodinu, zatímco v / se nemusím nijak žinýrovat. Do nějakých těch třeba půl giga se mi vejde fakt všechno, co 99.9999% systémů k nabootování potřebuje. Přesněji řečeno všechno, co potřebuji až do fáze namountování /usr.
A těch 0.0001 procent adminů podivných systémů, si holt bude muset poradit nějak jinak. Tak to holt je - a je tomu tak i s initrd, které taky nemůže myslet na všechno.
Prostě čím složitější způsob bootu a mountování /usr, tím obludnější initrd. Limitně až do velikosti normálního /.
> Pokud máš lepší nápad, který nebude způsobovat regrese oproti metodě s initrd, tak sem s ním.
Nápad na co? Jak udržet bloatware v chodu? To s chutí nechám autorům toho bloatwaru.
Nebo jaký konkrétní problém tahle šaráda (UsrMove) řeší, kromě toho, že má Linux rozbité bootování bez /usr? A co konkrétně řeší initrd, co by nešlo udělat jinak?
kromě toho, že má Linux rozbité bootování bez /usr
To je snad sám o sobě zatraceně dobrý důvod, ne?
A co konkrétně řeší initrd, co by nešlo udělat jinak?
Jinak to jde udělat taky, akorát osobně nemám žádný důvod, proč bych to dělal. Jedinci s fóbií z initramfs mohou v jednoduchých případech (pokud vám jde opravdu jen o oddělený /usr oddíl) použít např. busybox. Pokud máte / na LVM2 nebo šifrovaný, tak to samozřejmě bez initramfs nepůjde a nešlo ani doteď.
> To je snad sám o sobě zatraceně dobrý důvod, ne?
To je zatraceně dobrý důvod to **opravit** a ne vymýšlet berličky, aby se to opravovat nemuselo.
> Pokud máte / na LVM2 nebo šifrovaný, tak to samozřejmě bez initramfs nepůjde a nešlo ani doteď.
Asi je čas toho nechat, protože se motáme v kruhu. Napsal jsem snad už dost jasně, že FreeBSD umí bootovat ze ZFS rootu a žádné initrd k tomu nepotřebuje.
Jaký je principielní rozdíl mezi LVM2 a ZFS z hlediska bootování?
To je zatraceně dobrý důvod to **opravit** a ne vymýšlet berličky, aby se to opravovat nemuselo.
Ano, opraveno to bude, až se to přesune do /usr. Vymýšlení berliček typu musíme přesunout do / tohle, tohle, tamto a ještě támdlencto, jo a estě onohle, toho už mají maintaineři evidentně plné zuby. Nedává to vůbec žádný smysl.
P.S. ZFS nepoužívám. Jestli je vám tak nepochopitelné, že k tomu, abyste zprovoznil LVM2, potřebujete userspace utilitu, tak už fakt nevím, jak to vysvětlit.
>> Ano, opraveno to bude, až se to přesune do /usr.
No asi máme trochu jinou představu o pojmu "opravit"...
>> Vymýšlení berliček typu musíme přesunout do / tohle, tohle, tamto a ještě támdlencto, jo a estě onohle, toho už mají maintaineři evidentně plné zuby.
Co to je za ptákovinu? V / jsou samozřejmě všechny věci, potřebné k dalším fázím bootu STANDARDNĚ.
Imho normální boot prostě vypadá takhle:
1. zavaděč, který umí pracovat s médiem M1 (disk, nfs, ...) načíst filesystém FS1 (ext, zfs, lvm pičfs)
2. skrz médium M1 se z FS1 načte kernel a provede základní inicializace
3. vše ostatní (/home, /var, /usr, ...) je na médiu M2 s FS2 a jelikož už mám kernel a všechny moduly, bez problému si to namountuju a nastartuju libovolně bloatwarové služby z /usr
Nevidím, žádnou tak zásadní výhodu, která by vyvážila kopec nevýhod, když do tohodle přidám ještě stadium 1a "natáhnu z FS1 médiem M1 jakýsi rádobyroot".
>> Jestli je vám tak nepochopitelné, že k tomu, abyste zprovoznil LVM2, potřebujete userspace utilitu, tak už fakt nevím, jak to vysvětlit.
To s tím ale právě vůbec nesouvisí. Je nějaký důvod to nevyřešit tak, že:
1. / je minimalistický a na nějakém rozumnějším FS, pro který existuje rozumný loader
2. zbytek už si zprovozním jakkoli
Jde jenom o to, jestli řešení s initrd je elegantnější než tohle. A já tvrdím, že není. A tvrdím to ze zkušenosti, protože s Linuxem se mi tisíckrát stalo "myslel jsem, že to nabootuje, ale nenabootovalo", zatímco s FreeBSD se mi stejně hodněkrát stalo "myslel jsem, že to nenabootuje, ale nabootovalo".
Tím končím, zjevně se neshodneme a já nemám potřebu někoho přesvědčovat. Jenom jsem chtěl naznačit, že lidi, kteří znají jenom Linux mají tendenci linuxová řešení považovat za řešení sine qua non.
HOWGH.
Ano, tohle absolutně nikam nevede. Není žádná definice toho, co to je potřebné k dalším fázím bootu STANDARDNĚ.. Někdo si dá / na ext2, někdo si ho dá na LVM2, někdo si / zašifruje a klíč má na SD kartě. Jestli vaším "řešením" je "standardně" nic z toho nepodporovat, resp. znemožnit, tak tohle "řešení" si prosím nechte v BSD, nemám zájem.
P.S. LVM2 není filesystém.
Ať si šifruje co chce, ať si bootuje třeba přes médium "poštovní holub", to je úplně jedno - pořád má ten samý problém: z hardwaru X dostat nějaká data a rozumět jejich struktuře. Čili tak jako tak - ať si kdo chce co chce říká, ať si mamka slzy utírá - musí mít loader, který umí s tím HW pracovat a rozumí struktuře dat na médiu, odkud tahá ten initrd image. Oproti normálnímu mountu to má AFAIK jedinou výhodu: initrd je jeden soubor, takže ho můžu tahat jednodušeji (např. prvních X bloků média) než je přímé přimountování nějakého FS ***z toho SAMÉHO média***.
P.S. průměrně inteligentní člověk snad z výše napsaného pochopí, že pojmem "FS" v tomhle kontextu myslím "strukturu dat na mediu" a kolik je tam mezivrstev nás nezajímá. Takže že LVM není FS sice kupodivu vím, ale to je v tomhle případě irelevantní, proto jsem si to dovolil zkrátit.
Když mám root na LVM, tak přece taky potřebuju (nebo aspoň ještě do nedávna tomu tak bylo) mít aspoň /boot na nějaké normální ext partišně, nebo ne?
Už ne... (Ne, že bych to doporučil)
Potom stojí za zamyšlení, proč vlastně na té partišně nemít celý (minimalistický!) root...
No ale vždyť ho tam máte v tom initramfs!
Tečka na závěr :)
Zjevně se najdou i lidi, kteří pochopili:
Sometimes Linus (Greg KH, ...) like to say how great the haphazard/random development model is, and how every architecture mistake can be quickly and easily fixed inside kernel tree. The whole '/lib/modules' idea is a mistake, I should be able to place kernel and it's modules in one partition and rootfs in another, and vary the kernel without the slightest change to rootfs. It does not work now because before we can mount rootfs (in order to see /lib/modules), many modules need to load. Yes, with messy initrd we can do it. But this 'lib/modules' idea was a mistake.
http://kerneltrap.org/node/7874
Good point! Nebylo by od věci použít třeba /boot/kernel/* :)))
„Jenže je tam jeden drobný rozdíl, který nebereš v úvahu“
Bacha, tys dával najevo, že nevidíš rozdíl vůbec a že bys byl rád, aby ti byl vysvětlen. Nikde jsem netvrdil, že pokrývám rozdíly všechny.
„Nebo jaký konkrétní problém tahle šaráda (UsrMove) řeší, kromě toho, že má Linux rozbité bootování bez /usr?“
Tenhle přesun žádný zásadní problém neřeší, to jsem považoval za všeobecnou znalost.
„A co konkrétně řeší initrd, co by nešlo udělat jinak?“
Umožňuje s relativně malým kernelem bootovat na libovolném stroji, tedy nemusí být kernel zkompilovaný až u uživatele na míru danému hardware a zároveň nemusí mít zakompilované všechny možné ovladače. Umožňuje bootování z různých partition, které kernel sám o sobě neumí použít jako rootfs ani následně připojit, jako třeba LVM a šifrované oddíly. Při troše snahy umí initrd
bootovat komplet ze sítě.
>> Bacha, tys dával najevo, že nevidíš rozdíl vůbec a že bys byl rád, aby ti byl vysvětlen.
Pro pochopení byla klíčová věta "ale opravdu nechapu logiku uvazovani "nechceme to davat do /, tak to kopirujeme do initrd"."
To, že initrd se vytváří automaticky a / vytváří autoři OS není argument, protože výběr programů do / dělám jednou, ale initrd musím vytvářet pro každý stroj a po každém updatu.
>> Tenhle přesun žádný zásadní problém neřeší, to jsem považoval za všeobecnou znalost.
Fedoří dokument vypočítává několik problémů, které to má řešit - a všechny považuju za pochybné (líbil se mi jeden komentář kohosi "dělá to na mě dojem, že někdo tohle chce udělat a seč může pro to hledá argumenty libovolné kvality").
==
Ad "co řeší initrd": co píšeš, přece není doslovně pravda. Nikdy nemůžu bootovat z média, které neumím použít, to dá rozum. Vždycky musím od někud načíst kernel a initrd. A to je právě ta klíčová otázka: proč na tom místě (který musí loader umět používat!) místo kernel+initrd nemám prostě normální partišnu - buď jenom s /boot, nebo rovnou s celým / ?
Není přece např. pravda, že initrd je potřeba pro bootování šifrovaného systému - vždycky musím mít nějaké nešifrované úložiště, ze kterého natáhnu kernel+initrd. A to úložiště musí být dostatečně jednoduché (nešifrovaná oblast s jednoduchým FS), aby ho uměl použít loader.
Initrd prostě **nutné** není. Je to jenom jeden ze způsobů řešení bootování - a já si myslím, že dost nemotorný a čím dál překombinovanější. Z mýho pohledu jeho největší nevýhoda je, že si na něj lidi zvyknout a začnou ho považovat za nutnost/standard (to se píše i v tom dokumentu o UsrMove: "budete sice muset použít initrd, ale to už stejně používáte tak jako tak"). To není dobrá situace a dost to zavání windowsismem.
„Pro pochopení byla klíčová věta "ale opravdu nechapu logiku uvazovani "nechceme to davat do /, tak to kopirujeme do initrd"."“
Takhle se initrd ani nepoužívá.
„Fedoří dokument vypočítává několik problémů, které to má řešit“
Přesně tak. A žádný z nich nepovažuju za *zásadní* problém.
„dělá to na mě dojem, že někdo tohle chce udělat a seč může pro to hledá argumenty libovolné kvality“
Pro každou změnu se hledají pro a proti.
„A to je právě ta klíčová otázka: proč na tom místě (který musí loader umět používat!) místo kernel+initrd nemám prostě normální partišnu - buď jenom s /boot, nebo rovnou s celým / ?“
K čemu by to bylo? Bootloader by mohl přistupovat ke kernelovým modulům, jenže je k ničemu nepotřebuje a neumí je používat. Kernel by k nim přistupovat nemohl, takže je nemusíš přesouvat, ale můžeš je rovnou smazat.
„Není přece např. pravda, že initrd je potřeba pro bootování šifrovaného systému“
Momentálně pokud vím, tak kernel nemá v sobě žádné UI (když nepočítáš sysrq), takže pokud je šifrovaný filesystém chráněný heslem, je potřeba před jeho připojením mít k dispozici UI, které řeší userspace, který se obvykle přibaluje ve formě initrd.
„vždycky musím mít nějaké nešifrované úložiště, ze kterého natáhnu kernel+initrd“
To obvykle musíš.
„Initrd prostě **nutné** není.“
Ani jsem nikdy nikde netvrdil, že je.
„To není dobrá situace a dost to zavání windowsismem.“
Argumentum ad fenestram. Jak krásné.
Zkusím to říct ještě jinak: zkus si představit, že jsi nikdy žádné initrd neviděl.
Máš zadání: chci mít důležité části systému na RAID26, který je děsně složitý.
Jak bys to vyřešil?
Řešení 1:
Máš separátní partišnu s nějakým rozumným FS (třeba ext2), kam dáš /boot (kam logicky dáš kernel i se všemi moduly a nebudeš ho rafinovaně dávat půlku do /boot a zbytek do /lib/modules). Pak boot bude vypadat takhle: bootloader umí číst ext2, natáhne a spustí kernel, který si načte všechny potřebný moduly pro RAID26 a z něho spustí /sbin/init. Pokud je potřeba v téhle fázi něco v userspace, pak to logicky patří do /boot a nikam jinam. Zvolený FS musí umět číst i loader i kernel, ale to nevadí, protože je to FS jednoduchý a ve všech scénářích stejný.
Řešení 2:
Vyrobíš BloatedLoader(R) (prakticky vzato druhý speciální kernel), který umí číst RAID26. Pomocí něj natáhneš z RAID26 kernel a initrd. A budeš prohlašovat, že to je boží řešení, protože můžeš bootovat, z čeho chceš, a že pro bootování z RAID26 je to nutnost, protože RAID26 je taaaak složitý a vyžaduje user-space utility.
Chytře zamlčíš nedostatky:
1. kód pro čtení RAID26 musíš mít jednak v loaderu, jednak v kernelu (de facto totiž udržuješ dva různé kernely se stejnou schopností (číst RAID26), ale úplně jiným kódem)
2. musíš udržovat ekosystém pro srpávnou volbu toho, co je v initrd potřeba, a pro jeho vygenerování
3. musíš myslet na to, abys initrd vygeneroval vždycky, kdy je to potřeba
4. když disk z počítače vyndáš a dáš jinam, tak nenabootuje, protože v initrd není to, co tam mít potřebuješ
5. jo a jen tak mimochodem - dost pravděpodobně pořád budeš potřebovat nějakou formu té spešl partišny z Řešení 1, protože kód BloatedLoaderu je tak velký (nezapomeňme, že je to druhý kernel), že se ti do miniaturního bootsektoru nevejde a odněkud ho načíst potřebuješ
No takže si zvolíš Řešení 2, budeš se tvářit, že je to jediný možný řešení, protože máš přece RAID26! a když ti někdo řekne, že systém X umí taky bootovat z RAID26 a initrd k tomu nepotřebuje, opáčíš mu, že tě jeho X-ová dogmata nezajímají...
bootloader umí číst ext2, natáhne a spustí kernel, který si načte všechny potřebný moduly pro RAID26 a z něho spustí /sbin/init. Pokud je potřeba v téhle fázi něco v userspace, pak to logicky patří do /boot a nikam jinam.
Gratuluji, právě jste vytvořil duplicitní / s tím, že to má ten ohromný "benefit", že to není v ono hrozném fujtajbl initramfs, kterému nerozumíte, ale v /boot. To jsme to ale vyřešili. Ufff.
Jaký duplicitní / ?
Prostě věci, které jsou potřeba k bootu*, jsou v /boot a NIKDE JINDE. Od toho ten adresář (na rozumně čistém systému) je.
* to za normálních okolností znamená jenom kernel a jeho moduly, případně ještě nějaký last-stage zavaděč.
Jasně, pokud potřebuju k namountování / miliony user-space utilit, tak by tohle schema nebylo dobrý, ale pak je otázka, jestli vůbec fs, který potřebuje user-space utility (k namountování!) je rozumně navržený.
Sorry, ale na tohle fakt nemám nervy.
Přečtěte si, jak vypadá bootování ze složitějších fs - a to bez initrd - třeba tady:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/boot-blocks.html
http://www.wanda25.de/geli2.html
https://www.dan.me.uk/blog/2010/02/08/booting-from-zfs-raid0156-in-freebsd/
Tvůj popis řešení místo reality popisuje především tvé dojmy. Zatímco implementace RAID ti na dvou místech vadí, implementace ext2 ti na dvou místech přijde samozřejmá.
Způsob, jakým je to řešeno v linuxu je hodně univerzální. Protože každý, kdo nasazuje či distribuuje systém založený na linuxovém jádře, má jiné potřeby. Zakázat initrd z nějakých dogmatických důvodů je nesmysl. V některých případech je to užitečná věc (i kdybych uvedl jen network boot do nějaké aplikace přímo v initrd, třeba instalátoru).
Linux přistupuje k diskovému prostoru výhradně pomocí driverů. Tudíž je nutné drivery buď zakompilovat do kernelu, nebo mu je předat v archivu.
Alternativou by bylo tuhle vlastnost Linuxu změnit a umožnit mu používat nějaké rozhraní BIOSu či dalších bootloaderů pro přístup k disku. Stále bys ale musel zakompilovávat všechny FS, které očekáváš, že budou na disku použity.
Univerzalita vylučuje, že by ten FS musel být za všech okolností ext2. Takže bootloader tak jako tak bude muset obsahovat podporu použitého FS.
Je zajímavé s jakou samozřejmostí připouštíš duplikaci implementace FS a jak se stejnou samozřejmostí shazuješ duplikaci implementace RAID. Je z toho jasně vidět, že celý tvůj myšlenkový pochod je už ovládnutý touhou podpořit předem danou pravdu a ne se dobrat nějakého rozumného výsledku. Ale máš možnost to změnit.
Takže řešení 1 stojí přesně na tom samém, co kritizuješ na řešení 2.
> Tvůj popis řešení místo reality popisuje především tvé dojmy.
Jestli myslíš Řešení 1, tak to je realita, jak se bootuje v BSD. A afaik i v Solarisu do verze 10. Takže tuhle poznámku nechápu.
> Zakázat initrd z nějakých dogmatických důvodů je nesmysl. V některých případech je to užitečná věc
Souhlasím. Ale těch případů, kdy je to opravdu potřeba, je minimum. Neříkám, že initrd je potřeba dogmaticky zakázat, ale že ve většině případů není důvod ho dogmaticky nasazovat.
> Univerzalita vylučuje, že by ten FS musel být za všech okolností ext2.
Ještě jednou a už fakt naposledy: kernel a initrd se musí natahovat z úložiště, se kterým musí umět pracovat loader. Tu "univezalitu" můžeš za takové podmínky dosáhnout jednou ze dvou možností:
1. loader umí číst všechny možné filesystémy
2. loader jich umí jenom pár a kernel a initrd musí být uložen na jednom z nich
Grub například umí tyhle: FAT, FFS, ext2 + čtení konkrétních bloků z disku.
Sorry, ale fakt nikde nevidím univerzalitu, vidím 3 podporované FS (+RAW).
Říkám velmi jednoduchou věc: místo toho, abych na tyto PODPOROVANÉ FS dal kernel+initrd, raději bych z nich rovnou namountoval /boot nebo /. A tímpádem se zbavil initrd, přičemž ona UNIVERZALITA NÁSLEDUJÍCÍCH STÁDIÍ BOOTU ZŮSTANE ÚPLNĚ STEJNÁ. Pokud mi nerozumíš v tom, že ta univerzalita je stejná, potom to utněme, protože líp svůj názor už vysvětlit neumím.
Grub například umí tyhle: FAT, FFS, ext2 + čtení konkrétních bloků z disku.
To bude asi nějaký speciální BSD grub. Pro normální grub doporučuju přečíst dokumentaci.
raději bych z nich rovnou namountoval /boot nebo /.
Dík, já bych zase raději nic podobného nedělal, protože mám jeden /boot pro několik distribucí, tudíž myšlenka mountovat z bootloaderu / je úplně nepoužitelná.
„Takže tuhle poznámku nechápu.“
To jsem si všiml. Takže jinak. Tvůj způsob popisu odráží dojmy, ne skutečné vlastnosti. Zatímco jednou je duplicita implementace diskového formátu samozřejmostí, podruhé je neodpustitelnou chybou.
Tenhle přístup je značně dogmatický a v podstatě nemá smysl, abych s tebou jakkoli polemizoval, dokud nebudeš mít chuť hodnotit obě možnosti stejně kriticky (a beze strachu, že bys došel k jinému závěru než dosud).
„ale že ve většině případů není důvod ho dogmaticky nasazovat.“
Tedy bys jeho konfiguraci odstranil z instalátorů distribucí? Může být, ale je potřeba posoudit důsledky na celý ekosystém.
„Ještě jednou a už fakt naposledy“
Já budu jenom rád, když to pochopíš :).
„Sorry, ale fakt nikde nevidím univerzalitu, vidím 3 podporované FS (+RAW).“
Pak nezbývá, než tě odkázat do dokumentace současné verze GRUBu.
http://www.gnu.org/software/grub/manual/html_node/Features.html
„Říkám velmi jednoduchou věc: místo toho, abych na tyto PODPOROVANÉ FS dal kernel+initrd, raději bych z nich rovnou namountoval /boot nebo /.“
Nevím, proč mě nutíš to psát znovu, ale dobře. Když Linux startuje, nemá k dispozici žádné otevřené filesystémy.
Mountovat / v bootloaderu je nesmysl, protože / si mountuje kernel. Naopak /boot se za běhu systému vůbec nepoužívá, nemusí být vůbec mountovaný, a
dávat do něj cokoli, co může systém za běhu potřebovat je z tohoto pohledu pitomost, protože dosud tam nic takového není.
>> Tvůj způsob popisu odráží dojmy, ne skutečné vlastnosti.
Vlastnosti čeho?
>> Zatímco jednou je duplicita implementace diskového formátu samozřejmostí, podruhé je neodpustitelnou chybou.
Není žádnou chybou duplikovat jeden FS (viz níž), ale je imho úplně zbytečný duplikovat kód dvaceti filesystémů.
>> Pak nezbývá, než tě odkázat do dokumentace současné verze GRUBu.
Omlouvám se, google má na prvním místě manuál pro verzi 0.4, to jsem si nevšiml. No takže Grub jde cestou od bodu 1 k bodu 2 v předchozím příspěvku. To není žádná výhra, protože problémem dvojky je to duplikování driverů.
>> Nevím, proč mě nutíš to psát znovu, ale dobře.
Nenutím, pouze asi píšu nesrozumitelně, nebo v tom hledáš něco složitějšího, než tam je...
Pokud budu mít bootovací partišnu s jednoduchým FS (např ext2), tak z ní loader natáhne kernel. KERNEL (!!!!!) si tu partišnu namountuje (driver toho jednoduchýho fs má natvrdo), natáhne z ní libovolný potřebný moduly a poté už bootuje stejně jako s initrd.
Ta deklarovaná univerzálnost je ÚPLNĚ STEJNÁ, prostě místo initrd je bootovací partišna. Výhoda bootovací partišny je jasná:
1. neduplikují se drivery. Loader umí jenom (např.) ext2. Všechno ostatní umí kernel.
2. nic se nerozbaluje do ramdisku -> rychlejší boot, míň paměti
3. není potřeba vytvářet žádný image s jakýmikoli duplikovanými soubory. To, co se namountuje, tam už zůstane namountovaný až do vypnutí počítače. (kromě speciálních případů, kdy je potřeba něco přemountovat, ale to jsou okrajový specialitky)
Nevýhody jsou taky jasný:
1. / musí být na jednoduchým FS, kterému jednoduchý loader rozumí
2. tímpádem se v / musí udržovat pořádek a nesmí se zasírat blbostma
3. je potřeba jedna partišna navíc (pokud mám GPT nebo BSD partišny, žádný problém to není)
4. pokud z nějakýho důvodu potřebuju v / držet nějaký data, vyžadující speciální zacházení (např. šifrovaný /etc), musí se při nejbližší příležitosti tenhle adresář přemountovat z jinýho úložiště.
4 vypadá hrozivě, ale není to vůbec žádnej problém, protože přemountovat to můžu hned - klidně jako hnedka první věc po spuštění /sbin/init
Tak pokud si už rozumíme a chceš pokračovat v diskusi, omezme se prosím na téma "proč je bootovací partišna špatná a v čem je initrd "partišna" lepší" a vyhněme se prosím větám typu "popisuješ dojmy".
Pokud si pořád nerozumíme, navrhuju diskusi ukončit.
Pokud budu mít bootovací partišnu s jednoduchým FS (např ext2), tak z ní loader natáhne kernel. KERNEL (!!!!!) si tu partišnu namountuje (driver toho jednoduchýho fs má natvrdo), natáhne z ní libovolný potřebný moduly a poté už bootuje stejně jako s initrd.
Hůůůůůůů, to jsme se ale posunuli, že? Jak se to liší od stávajícího stavu?
P.S. Bootloader nepotřebujete žádný, pokud máte UEFI. Opět to neřeší nic ve vztahu k danému problému. Bootloader si sice natáhne kernel z FAT32, ale ten sám o sobě např. z LVM2 nebo z / šifrovaného přes LUKS nic nepřečte.
> Znova opakuju, že s UEFI nepotřebujete žádný další loader pro načtení kernelu
Souhlasím. UEFI odstraňuje problém duplikace kódu. Ostatní platí dál.
> stále z toho LVM2 nebo šifrovaného / nejste schopen nabootovat.
Cituju z předchozího příspěvku: "Pokud budu mít bootovací partišnu s jednoduchým FS (např ext2), tak z ní loader natáhne kernel. KERNEL (!!!!!) si tu partišnu namountuje"
Co přesně teda má znamenat věta "z šifrovaného / nejste schopen nabootovat."? Nerozumím jí. Co přesně nejsem schopen udělat v situaci namountovaného / (tedy v situaci kvalitativně lepší než s namountovaným initrd)?
Toto řešení jsem popsal a žádný "šifrovaný /" tam není.
Bezva, ale já ho tady mám a vaše "alternativní" řešení je mi na prdlajz. Na vámi popsanou situaci žádný initrd nepotřebuju. Na šifrovaný / ho potřebuju, na LVM2 ho taky potřebuju. Vytváříte alternativní řešení neexistujícího problému.
No to je bezvadný. Místo nešifrovaného / máte nešifrované initrd.
Tím bych se rád vrátil k tomu, co jsem taky už psal: "omezme se prosím na téma "proč je bootovací partišna špatná a v čem je initrd "partišna" lepší"".
V čem je tedy nešifrované initrd lepší než nešifrované (opět: minimalistické!) / ?
Jediná nevýhoda je snad v tom, že vše, co chci šifrovat (etc, home, usr, var) musím mít umístěné na jiném svazku než je /. Pokud máte dojem, že to je větší nevýhoda než jsou popsané nevýhody initrd, potom diskuse skončila, protože na to prostě máme jiný názor.
„No to je bezvadný. Místo nešifrovaného / máte nešifrované initrd.“
Což je samo o sobě o mnoho lepší situace.
„V čem je tedy nešifrované initrd lepší než nešifrované (opět: minimalistické!) / ?“
Obsahuje jen to nejnutnější, takže je relativně malý, dá se zkomprimovat a je neměnný (obvykle se generuje až při update kernelu). Tudíž má podobné vlastnosti jako kernel samotný a nepředstavuje tak prakticky žádnou další přítěž.
Malý neměnný kernel a malý neměnný initrd se pak dají zabezpečovat různě, od externího média, přes digitální podpis, až po chráněné interní úložiště. Možná vymyslíš pár dalších věcí.
„Jediná nevýhoda je snad v tom, že vše, co chci šifrovat (etc, home, usr, var) musím mít umístěné na jiném svazku než je /.“
Což je taky dost nepříjemná vlastnost.
„Pokud máte dojem, že to je větší nevýhoda než jsou popsané nevýhody initrd“
Jaké popsané nevýhody? Zatím vím o jedné jediné skutečné, že se initrd musí vůbec vytvořit. Pak o nepatrném zpoždění při bootu. A pak ještě domnělá výhoda v úspoře paměti, která je ale mylná, protože paměť naopak ušetří initrd.
„potom diskuse skončila, protože na to prostě máme jiný názor.“
Jedna věc je mít jiné potřeby, druhá věc je mít odlišný a dobře podložený názor, ale tohle bych viděl ještě na tu třetí možnost.
> Což je samo o sobě o mnoho lepší situace.
V čem přesně? Opět opakuji: MINIMALISTICKÝ /. Čili vše hodné šifrování je někde jinde.
> Obsahuje jen to nejnutnější, takže je relativně malý, dá se zkomprimovat a je neměnný
Minimalistický / je neměnný zhruba stejně jako initrd. Proč jsou ostatní věci výhoda, tomu nerozumím.
> Což je taky dost nepříjemná vlastnost.
To je otázka názoru. home, usr, tmp ani var podle mě tak jako tak na / nemají co dělat. Problém je jenom to etc. Když chci šifrovat, budu holt mít asi tak jeden soubor duplikovaný. To je pořád imho menší daň než celá infrastruktura kolem initrd.
> Jaké popsané nevýhody? Zatím vím o jedné jediné skutečné, že se initrd musí vůbec vytvořit. Pak o nepatrném zpoždění při bootu. A pak ještě domnělá výhoda v úspoře paměti, která je ale mylná, protože paměť naopak ušetří initrd.
"Vůbec vytvořit" znamená udržovat nástroje k jeho vytvoření a udržovat jeho konfiguraci. Paměť se uvolní, to je pravda. Na normálním počítači nemá smysl řešit, na embedded může být problém.
> ale tohle bych viděl ještě na tu třetí možnost
Samozřejmě můžeš mít názor jakej chceš, já jsem rád, že jsme se teď konečně dostali k diskusi o důvodech a ne o dojmech, takže bych byl rád, kdybysme se zdrželi invektiv, je-li to možný.
„To je otázka názoru. home, usr, tmp ani var podle mě tak jako tak na / nemají co dělat.“
Tento názor nesdílím a nevidím jediný důvod k tomu, aby to obecně platilo. V konkrétních případech vyčlením samostatné FS na to, co je pro mě zrovna praktické oddělit.
„Když chci šifrovat, budu holt mít asi tak jeden soubor duplikovaný.“
To o tom jednom souboru je jen zbožné přání.
„"Vůbec vytvořit" znamená udržovat nástroje k jeho vytvoření a udržovat jeho konfiguraci.“
Většina z toho se řeší stejně kvůli těm výjimečným případům, kde to bez nějaké formy initrd prakticky nejde (síťové instalace apod). Konfigurace v běžných případech je zcela automatická.
„na embedded může být problém.“
Na embedded lze obejít tím, že se initrd nepoužije a místo toho se kompiluje kernel na míru konkrétnímu modelu. Je to velmi oblíbená metoda.
„takže bych byl rád, kdybysme se zdrželi invektiv, je-li to možný.“
Nemám ve zvyku používat invektivy, kde to situace nevyžaduje, a ani netuším, proč bychom je měli používat tady.
> Tento názor nesdílím a nevidím jediný důvod k tomu, aby to obecně platilo.
Ani já ne. Taky jsem napsal, že _podle mě_ tam nemají co dělat. Čili pro mě osobně je tenhle bod nulová nevýhoda. Pro někoho jiného to nevýhoda být může. Pořád si ale myslím, že podstatně menší než nevýhody initrd.
(pro jistotu dodávám, že tahle nevýhoda platí jenom v případě šifrování a navíc nemusí být jít o 6 separátních partišen, některý věci stačí symlinkovat - např. na FreeBSD je home často symlink do /usr/home)
> To o tom jednom souboru je jen zbožné přání.
Vy jste tvrdil, že by něco muselo být duplicitní. Je na vás, abyste řekl, co. Pro jistotu jenom dodám: /etc se může přemountovat jako první věc po nahrání /sbin/initu, není důvod s tím otálet dýl.
> Většina z toho se řeší stejně kvůli těm výjimečným případům, kde to bez nějaké formy initrd prakticky nejde (síťové instalace apod).
Mně vytýkáte, že nejsem v realitě a sdílím tady dojmy... A řeknete tohle nepotrvzené nezdůvodněné tvrzení. Opět opakuji (jako protipříklad): FreeBSD bootuje ze sítě bez potřeby initrd.
Takže jsme pořád u toho samého: co bez initrd nejde? Nebo aspoň jde výrazně komplikovaněji? V čem je teda ta opodstatněnost initrd?
> Na embedded lze obejít tím, že se initrd nepoužije a místo toho se kompiluje kernel na míru konkrétnímu modelu. Je to velmi oblíbená metoda.
No ale to je samo o sobě opět komplikace: v tomhle případě musím použít úplně jiný způsob bootu, než ten tzv. "univerzální". A samozřejmě budu muset řešit zpoustu komplikací, protože initrd se stalo "standardem" i v situacích, kde vůbec není potřeba, takže se obecně počítá s tím, že ho všichni mají.
Jako klidně si mě měj za škarohlída, ale to je přesně to, o čem jsem mluvil na začítku: nějaká věc se vyřeší berličkou a potom se musí řešit situace, kdy je berlička podražena...
> Nemám ve zvyku používat invektivy
Dobře. Vyjádření "tohle bude ten třetí případ" a to těch dojmech a ne-realitě, nebudu brát jako invektivy.
Pro jistotu jenom dodám: /etc se může přemountovat jako první věc po nahrání /sbin/initu, není důvod s tím otálet dýl.
Prima, takže člověku, který chce komplet zašifrovat systém, jsme to zjednodušili tím, že místo /boot a / bude mít ještě dalších asi 10 oddílů včetně separátního /etc - protože initrd je hrozně fuj. :-)))
> Zopakujme si výchozí situaci, cituji: "člověku, který chce komplet zašifrovat systém"
Vzdávám se a uznávám, že tohle jsem nedomyslel: pro člověka, který chce šifrovat prázdný adresář /dev a adresáře /bin a /lib, jejichž obsah je volně ke stažení, skutečně tahle metoda není vhodná :)
Pro takového člověka skutečně initrd bude nejspíš lepší variantou :)
„Vy jste tvrdil, že by něco muselo být duplicitní. Je na vás, abyste řekl, co.“
Konfigurace sysvinit nebo systemd. Dá se zkoušet udělat nějaká berlička v initu,
ale přijde mi jednodušší takové věci vůbec nedělat. Ale dobře.
„FreeBSD bootuje ze sítě bez potřeby initrd.“
initrd je jen obyčejný archiv s userspace. Nepředpokládám, že by mělo nějaký smysl bootovat kernel bez userspace. Jasně, dají se používat věci jako NFS, HTTPFS, ale v současné době je mnohem jednodušší prsknout tam ten jeden archiv.
Opravuju tedy své tvrzení, že by to bylo přes síťový filesystém komplikovanější než s archivem.
„Takže jsme pořád u toho samého: co bez initrd nejde?“
Až na nešikovnou formulaci se sítí jsem od začátku tvrdil, že se bez initrd obejít dá. Nevím tedy, proč bych měl dokazovat opak.
„Nebo aspoň jde výrazně komplikovaněji? V čem je teda ta opodstatněnost initrd?“
Zde se musím opakovat. Úplně původní význam je odlehčení generického jádra, aby nemuselo obsahovat všechny moduly potřebné k bootování z různých zařízení. Šlo tedy hlavně o úsporu paměti.
Dále initrd umožňuje před mountováním rootfs provést různé akce, které neimplementuje kernel. Připojení šifrovaného rootfs při zadání passphrase budiž konkrétním příkladem. Linuxové LVM rovněž není soběstačné (důvody neznám). Síťová konfigurace a další věci.
Umožňuje rovněž elegantně předat po síti userspace pro instalaci nebo rescue systém třeba po FTP nebo HTTP.
Obvykle se linux bez initrd používá jen s kernelem kompilovaným na míru dané HW sestavě, což je nepohodlné jak při instalci OS, tak při updatech, tak při výměně hardware a v enterprise sféře ještě chybí testování výsledné binárky.
„v tomhle případě musím použít úplně jiný způsob bootu, než ten tzv. "univerzální"“
Na embedded platformách tak jako tak ten klasický univerzální nebývá k dispozici a celý boot bývá nestandardní už jen tím, že se často používají zcela odlišné filesystémy na zcela odlišných úložištích.
Navíc tvá výtka byla směřována optimalizaci paměti, což je další důvod, proč se stejně musí specifický build kernelu udělat. Možnost použít initrd je stále, jen to není zvykem.
„nějaká věc se vyřeší berličkou a potom se musí řešit situace, kdy je berlička podražena...“
V podstatě se na to díváš správně. Ale ptal ses na důvody a účel. Já je celkem znám, proto se snažím ti odpovídat.
Další věc je, že mám pocit, že hodně vycházíš z dogmat FreeBSD. A FreeBSD není Linux a ty rozdíly jsou v mnoha případech zásadní. Už i samotný počet odlišných distribucí dělá svoje. Já jsem zase hodně navyklý na některé představy a dogmata kolem Linuxu a rád se dozvím něco, co současný linuxový svět přesahuje, ale musí to mít hlavu a patu.
„Dobře. Vyjádření "tohle bude ten třetí případ" a to těch dojmech a ne-realitě, nebudu brát jako invektivy.“
Díky a potvrzuju, že tak ani nebyly myšleny.
> Konfigurace sysvinit nebo systemd.
No tak dobře, jeden soubor je zbožné přání, ve skutečnosti jsou to dva: /etc/rc a /etc/fstab :)
> Opravuju tedy své tvrzení, že by to bylo přes síťový filesystém komplikovanější než s archivem.
Tak na tom se můžeme shodnout: pokud chci bootovat ze sítě, ale nechci síťový filesystém, tak to pak bez image půjde těžko :)))
> Úplně původní význam je odlehčení generického jádra, aby nemuselo obsahovat všechny moduly potřebné k bootování z různých zařízení.
...přičemž se tyto moduly přesunuly do loaderu, kde jsou duplicitní. Jak moc se tím ušetří paměti, to těžko posoudíme.
Hrubě zorientovat se můžeme takhle: GENERIC jádro na FreeBSD má 11M. Kolik má Linuxové?
> Dále initrd umožňuje před mountováním rootfs provést různé akce, které neimplementuje kernel. Připojení šifrovaného rootfs při zadání passphrase budiž konkrétním příkladem.
To umožňuje bootovací partišna taky, tady žádná výhoda není.
> Další věc je, že mám pocit, že hodně vycházíš z dogmat FreeBSD.
Nechápu, co pořád máš s těmi dogmaty. FreeBSD používám jako příklad systému, kde se initrd nepoužívá a ptám se: "Čeho tak úžasného teda Linux tím initrd dosáhl"? A proč jej používá i v situacích, kde nemá žádné pádné opodstatnění?
„No tak dobře, jeden soubor je zbožné přání, ve skutečnosti jsou to dva: /etc/rc a /etc/fstab :)“
To by se dalo považovat za fatální neznalost.
„...přičemž se tyto moduly přesunuly do loaderu, kde jsou duplicitní. Jak moc se tím ušetří paměti, to těžko posoudíme.“
Ušetří se paměť za všechny moduly, které se nepoužijou. Duplicitní z hlediska RAM nejsou. Zhlediska disku a no, ale to je prkotina.
„Hrubě zorientovat se můžeme takhle: GENERIC jádro na FreeBSD má 11M. Kolik má Linuxové?“
Na mém systému (64bit fedora) má méně než 5 MB (a osobně se mi to přijde zbytečně moc, pamatuju si ho kolem 1 MB). Na embedded platformách se obvykle pečlivěji konfiguruje a mívá něco přes 1 MB, pokud se nepletu.
Pro zajímavost, můj initrd má 18 MB. Obojí je komprimované. Adresář s moduly má okolo 100 MB.
„To umožňuje bootovací partišna taky, tady žádná výhoda není.“
Popíráš již napsané, ale dobře tedy. Další lekce... ač přemýšlím, jestli tvé úmyslné ignorování již napsaného není samo o sobě urážkou.
Jde o to, čemu říkáš bootovací partition. Třeba linuxová /boot partition se v systému vůbec nepoužívá, takže ta je ze hry. A bavíme se tedy o / partition.
Bez initrd je nutnost mít rootfs mountovatelnou čistě pomocí parametru kernelu.
* Je vyloučený rootfs na LVM (kvůli implementaci)
* Je vyloučený šifrovaný rootfs (kernel neimplementuje passphrase, HW klíče a podobné věci)
* Je komplikovaný boot s rootfs na síti (obvykle se dělá z userspace a ten bez initrd chybí)
* Naroste velikost kernelu o hromadu modulů pro různé chipsety (kvůli diskům)
Najdou se i další věci, ale tyhle jsou dejme tomu z mého pohledu klíčové.
Mountovat jednotlivé podadresáře je komplikace pro administrátora. Použití initrd není.
Překrývat etc je zbytečná komplikace oproti použití initrd. Navíc překrytý etc se nedá efektivně spravovat. Je to nehorázná prasárna, navíc by se to de facto spravovalo stejným způsobem jako teď initrd, který je ale naštěstí nepotřebuje vlastní partition.
Držet v rootfs jen potřebné věci je prakticky nemožné, protože umístění souborů řeší distributor. Naopak initrd se generuje na konkrétním stroji podle potřeby (a dá se případně doladit aniž by se udělal bordel na disku).
Dodělat IO do kernelu a umožnit zadávání passphrase k rootfs by bylo možné. Nicméně by to bylo duplicitní k init podpoře passphrase, protože nemusí být
šifrovaná jenom root partition. Nehledě na to, že použití initrd umožňuje
udržet kernel čistší, když toto implementovat nemusí.
„Čeho tak úžasného teda Linux tím initrd dosáhl?“
Mně výše uvedené (a po několikáté zopakované) jako opodstatnění pro initrd stačí. Navíc jak si utřiďuju myšlenky, abych to dokázal sepsat, tak se mi čím dál tím víc zdá initrd jako nejčistší možné řešení výše uvedených usecases.
A jakékoli překrývání neprázdných adresářů a duplikace mezi RW filesystémy mi přijde čím dál tím víc jako extrémně špatné řešení.
„A proč jej používá i v situacích, kde nemá žádné pádné opodstatnění?“
Protože je to jednodušší než detekovat situace, kdy initrd není potřeba? Protože jeden způsob se na jedné distribuci lépe otestuje a je méně náchylný na chyby?
Každopádně díky za inspiraci, takhle jsem se tím nikdy neprobíral, možná to časem zužitkuju v nějakém článku :).
> To by se dalo považovat za fatální neznalost.
Dobře, nechám se poučit. Kde je problém?
> Duplicitní z hlediska RAM nejsou. Zhlediska disku a no, ale to je prkotina.
Jsou duplicitní z hlediska vývoje. O disku by mě fakt nenapadlo mluvit, tak padlej na hlavu nejsem.
> Na mém systému (64bit fedora) má méně než 5 MB
Bezva. 6M k dobru :)
> jestli tvé úmyslné ignorování již napsaného není samo o sobě urážkou. Jde o to, čemu říkáš bootovací partition.
Hele, popravdě mi trochu dochází trpělivost.
Jako je hezký, že mě chceš poučovat o mých neznalostech, to se vždycky hodí, ale bez servitků řečeno, mě sere, když napíšeš tohle po tom, co jsem tady už X-krát popsal, co myslím bootovací partišnou.
Sorry, takhle ne. Takže na zbytek nereaguju a tohle jsem jakože neslyšel, ok?
„Dobře, nechám se poučit. Kde je problém?“
Třeba v tom, že init systémy na linuxu používají úplně jiné soubory a je jich podstatně víc.
„Jsou duplicitní z hlediska vývoje. O disku by mě fakt nenapadlo mluvit, tak padlej na hlavu nejsem.“
To bude únavou, zaměnil jsem v tvé větě loader za initrd. O duplicitě v loaderu už jsem psal. Tam jsou tvé požadavky na jeden FS a dva formáty disku v linuxovém ekosystému nesplnitelné. Nezávisle na initrd.
„Hele, popravdě mi trochu dochází trpělivost.“
To není můj problém. Já tu projevuju trpělivost v extrémním množství tím, že ti opakuju argumenty, které jsi se rozhodl ignorovat.
„Sorry, takhle ne. Takže na zbytek nereaguju“
Beru to jako výraz uznání. Vzhledem k tomu, jakou jsem si dal práci s pečlivým sepsáním argumentů, že jsi zjistil, že mám pravdu. I když způsob vyjádření je pro mě trošku nezvyklý.
> Třeba v tom, že init systémy na linuxu používají úplně jiné soubory a je jich podstatně víc.
No dobře, tak teda ať neumřu blbej, které všechny soubory z /etc používá například takový Arch Linuxový init předtím, než spustí první řádku prvního startovacího skriptu?
Já mám v /etc/inittab (kterej jsem nenapsal, ok, to bylo zásadní opomenutí :))) tohle:
rc::sysinit:/etc/rc.sysinit
rs:S1:wait:/etc/rc.single
rm:2345:wait:/etc/rc.multi
rh:06:wait:/etc/rc.shutdown
su:S:wait:/sbin/sulogin -p
Jaké jiné soubory v /etc teda používá? A zopakuju ještě jednou: /etc může přemountovat HNED jako první věc.
Jinak velmi děkuju za trpělivé vysvětlování a upozorňování na moje neznalosti, ale už mi to fakt přijde mírně v komické rovině. Takže za mě shrnuju takhle:
Dobrali jsme se složitě k tomu, že initrd je dobré na to, že:
1. umožňuje nemít některé věci natvrdo v kernelu, ale mít je jako modul. Odhadem se tím ušetří nějaký ty jednotky megabajtů. Což je v dnešní době velký úspěch.
2. umožní Linuxu zprovoznit root na LVM, přestože FreeBSD má root na zfs i bez něj
3. umožní Linuxu mít šifrovaný root, přestože FreeBSD ho má i bez něj: http://www.wanda25.de/geli.html
4. šifrovaný disk bych sice mohl udělat i na Linuxu jinak, ale to bych měl duplicitních asi tak 5 (ať nežeru) souborů v /etc, což je děsná prasárna a komplikace.
5. bootování ze sítě je na Linuxu bez initrd složité, přestože FreeBSD na to má jednu pár kilobytovou utilitku.
Prostě initrd umožňuje obrovskou flexibilitu.
A cena, která se za to platí, je jednoduchá (srovnej z hrůzostrašností v bodu 4!): 1. udržuju image toho, co už v systému mám.
2. udržuju spousty sriptů a konfiguráků, abych věděl, co tam mám mít
3. na generování potřebuju zvláštní software, kterej se čas od času ukáže jako naprd, tak pro jistotu napíšu novej
4. občas se ukáže, že to zas tak geniální nápad nebyl, tak to radikálně změním i v kernelu
Takže tímto děkuji za trpělivé poučování, pečlivé sepsání argumentů a zejména velmi důkladné naslouchání, přes všechny moje kolosální neznalosti.
Dík, myslím, že už mi to opravdu došlo a nebude to potřeba znovu opakovat.
Arch Linux nepoužívám. Vše ostatní už jsem rozepsal do detailu i s odůvodněními, proč se některé věci řeší jiným způsobem než ve FreeBSD. Každopádně jsem si tím docela slušně utřídil myšlenky, za což ti děkuju. Pokud máš pocit, že to tobě nic nepřineslo, budiž.
Co mě na tom všem překvapuje je, že máš tolik argumentů proti initrd a tolik argumentů proti množství oddělených modulů kernelu, že by člověk čekal, že mě to přesvědčí, že linuxový způsob je úplně mimo a řešení ve freebsd je jediné správné. Ale nestalo se tomu tak, a to ač mi freebsd jinak v mnohém vyhovuje.
> Arch Linux nepoužívám.
Asi není potřeba používat Arch Linux na to, aby člověk pochopil, že když první řádek prvního spuštěného init skriptu přemountuje /etc, tak se z toho svět nezhroutí.
Ale asi to tak není, jenom mám kolosální neznalosti :)
> Co mě na tom všem překvapuje je, že máš tolik argumentů
Ne. Mám jediný: je to zbytečně překombinované na to, že to neumí v podstatě nic zásadního, co by nešlo jednodušeji udělat jinak.
Jestli máš pocit, že zaznělo hodně argumentů, tak to nebyly argumenty proti initrd, ale argumenty proti nepravdivým argumentům pro initrd.
Proti mám opravdu jenom ten jeden.
> řešení ve freebsd je jediné správné
Není jediné správné. Žádné řešení není "jediné správné". Bootování ve FreeBSD je jiné, podstatně primitivnější a přesto umí zjevně plus mínus to samé.
> že by člověk čekal, že mě to přesvědčí [...] Ale nestalo se tomu tak,
A tak na tom zase není nic divného, člověk by taky čekal, že když mají Linuxáci tolik argumentů, proč je Linux lepší než Windows, tak to někoho přesvědčí... Ale nestalo se tomu tak. Na desktopu pořád jednotky procent :)
> a rád se dozvím něco, co současný linuxový svět přesahuje
Jako to v tomhle tématu asi nečekej, FreeBSD určitě nemá nějaký geniální systém bootování, nad kterým by sis cvrknul :) (teda možná kromě toho, že část loaderu je napsaná ve forthu a proto je tak flexibilní a přitom malinká)
Jestli v tomhle ohledu může FreeBSD nabídnout (podle mýho skromnýho pohledu, nejsem žádnej guru), tak právě to, že méně je někdy více...
Ja totiž právě zas mám pocit, že udržování té děsivé infrastruktury kolem initrd nemá __hlavu a patu__ ;)
„Jako to v tomhle tématu asi nečekej, FreeBSD určitě nemá nějaký geniální systém bootování, nad kterým by sis cvrknul :) (teda možná kromě toho, že část loaderu je napsaná ve forthu a proto je tak flexibilní a přitom malinká)“
Ono je dobré si uvědomovat, že Linux není BSD, že má zcela odlišný ekosystém, zcela odlišný způsob vývoje (myslím tím nejen kernel, ale i samotné distribuce)
a vůbec spousta věcí se řeší úplně jinak.
„Ja totiž právě zas mám pocit, že udržování té děsivé infrastruktury kolem initrd nemá __hlavu a patu__ ;)“
Chápu, ale složitost infrastruktury se odvíjí právě od možností, jaké ten systém nabízí. A teď je postavený možná krkolomně, ale i tak natolik univerzálně, že
není problém initrd rozšířit o jakýkoli usecase někdo vymyslí.
Každopádně je dobré, že veškeré komplikace padaní na hlavu vývojářů distribucí a ne administrátorů systémů nebo uživatelů.
Jo a ještě ty embedded platformy jsem zapomněl, sorry za tři posty...
Jasně, že embedded bootují hodně nestandardně. Ale spíš mi šlo o princip: je hezký, když máš jedno stupidně jednoduchý řešení (univerzální ;), který pak můžeš použít víceméně všude, právě proto, že je tak stupidní. Jakmile máš řešení překombinovaný, který má spoustu předpokladů a začne se masově používat, tak se zapomene na to, že tam ty předpoklady vlastně jsou (na normálních platformách se neprojeví).
...no a pak dochází k takovým věcem, jako že se zjistí, že vlastně nejde nabootovat, když není namountovaný /usr, což se do té doby považovalo za normální věc...
...no a aby to teda šlo, když to nejde kvůli těm zapomenutým předpokladům, tak se vymyslí další konina, která do systému zavede zase kupu dalších předpokladů. .. a celá tahle šará jde do čímdál většího kopru. Windows budiž odstrašujícím příkladem.
„Není žádnou chybou duplikovat jeden FS (viz níž), ale je imho úplně zbytečný duplikovat kód dvaceti filesystémů.“
Jak myslíš. Ale pokud máš pocit, že je možné v celém linuxovém světě prosadit jedno konkrétní rozložení disku a jeden konkrétní filesystém, tak bych tě rád upozornil, že jsi na omylu.
„KERNEL (!!!!!) si tu partišnu namountuje (driver toho jednoduchýho fs má natvrdo)“
A kde má driver na řadič disku a související moduly? Popřípadě na řadič sítě, pokud by rootfs byl čistě náhodou ze sítě?
„Ta deklarovaná univerzálnost je ÚPLNĚ STEJNÁ“
Umět bootovat jen z jednoho FS nemá s univerzalitou nic společného.
„2. nic se nerozbaluje do ramdisku -> rychlejší boot, míň paměti“
Ve skutečnosti je to po bootu víc zabrané paměti (zakompilované drivery).
„1. / musí být na jednoduchým FS, kterému jednoduchý loader rozumí“
(jediný podporovaný fs, jediné podporované rozložení disku)
Takovéhle požadavky linuxovému světu nevnutíš a nezabráníš použití alternativních FS a alternativních rozložení disku a tím i modulárních
bootloaderů s podporou většího množství FS a rozložení.
„3. je potřeba jedna partišna navíc (pokud mám GPT nebo BSD partišny, žádný problém to není)“
Podle mě jsi zapoměl zdůvodnit, jaktože FS smí být pouze jeden, zatímco formátů disku smí být vícero.
„4. pokud z nějakýho důvodu potřebuju v / držet nějaký data, vyžadující speciální zacházení (např. šifrovaný /etc), musí se při nejbližší příležitosti tenhle adresář přemountovat z jinýho úložiště.“
V tom případě ale musím mít v /etc základní věci a tudíž bude celý ten podadresář duplikovaný. To mi přijde na údržbu podstatně složitější než initrd.
„4 vypadá hrozivě, ale není to vůbec žádnej problém, protože přemountovat to můžu hned - klidně jako hnedka první věc po spuštění /sbin/init“
Takže ještě budu muset řešit duplikování konfigurace sysvinit a/nebo systemd.
„Tak pokud si už rozumíme a chceš pokračovat v diskusi, omezme se prosím na téma "proč je bootovací partišna špatná a v čem je initrd "partišna" lepší" a vyhněme se prosím větám typu "popisuješ dojmy".“
Nejednalo se o útok, ale o to, že ty máš určitou představu, jak to někde funguje a jak to fungovat má. Tu představu považuješ do jisté míry za dogma.
Pokud se chceš naučit něco nového o bootování na linuxu, máš možnost. Pokud mi chceš říct něco nového o tom, jak to bootování může fungovat, taky budu rád.
Ale točit pořád dogmata:
1) Zdrojový kód bootloaderu smí implementovat pouze jeden konkrétní filesystém.
2) Zdrojový kód bootloaderu smí implementovat ... rozložení disku.
3) Duplicita souborů v initrd je špatná.
4) Duplicita konfigurace sysvinit/systemd v /etc je v pořádku.
5) ...
To je tak trochu o ničem, nemyslíš?
> ty máš určitou představu, jak to někde funguje a jak to fungovat má. Tu představu považuješ do jisté míry za dogma.
Ne. Já zdůvodňuju, proč podle mění není initrd nutné a ve většině případů přináší víc komplikací než užitku.
Dál se prosím omezme na téma "v čem je initrd lepší než minimalistická / partišna s nějakým jednoduchým filesystémem".
Pokud si nerozumíme v tom, že věc z prvního odstavce jde redukovat na věc druhého odstavce, navrhuji diskusi ukončit.
Aha, no to jsme tedy opravdu moc nepokročili. Takže stávající / zduplikujeme do /boot, ano? A já měl dojem, že vám hrozně vadila ta duplikace. :P
A není náhodou místo opětovného vymýšlení kola lepší přimountovat UEFI oddíl, zkopírovat tam ten kernel a initramfs, vytvořit jednořádkový /EFI/arch/linux.conf a nabootovat? :-)
„Ne. Já zdůvodňuju, proč podle mění není initrd nutné“
Tak to je ovšem zvláštní věnovat tolik úsilí zdůvodňování něčeho tak samozřejmého, na čem se od začátku shodneme.
„a ve většině případů přináší víc komplikací než užitku.“
A tohle je takové statistické tvrzení, které vůbec nic nepřináší. Ono totiž moc nezáleží na tom, jestli je těch případů většina nebo menšina, ale jak moc jsou z hlediska vývoje toho systému významné.
„Dál se prosím omezme na téma "v čem je initrd lepší než minimalistická / partišna s nějakým jednoduchým filesystémem".“
K tomuhle tématu už jsem této diskuzi napsal vše potřebné.
> Tak to je ovšem zvláštní věnovat tolik úsilí zdůvodňování něčeho tak samozřejmého, na čem se od začátku shodneme.
No ono to asi bude tím, že jsem reagoval většinu času na výtky, které byly pro věc nepodstatné a tímpádem jsme se k jádru dostali až teď.
Stejně je ale zajímavé, že to je taková samozřejmost, když to "není realita" :)
Btw, můžeš se pokusit to vysvětlit Lolovi, který s tím zjevně nesouhlasí.