Budoucnost je již zde nebo kód přímo v prohlížeči

Povím vám o vtipné situaci, která se mi stala, a o tom, jak se stát přispěvatelem do slavného projektu.

Není to tak dávno, co jsem si pohrával s myšlenkou: bootovat Linux přímo z UEFI...
Myšlenka není nová a existuje řada příruček na toto téma. Můžete vidět jeden z nich zde

Ve skutečnosti mé dlouhodobé pokusy o vyřešení tohoto problému vedly ke zcela formalizovanému rozhodnutí. Řešení je docela funkční a používám ho na některých svých domácích strojích. Toto řešení je popsáno trochu podrobněji. zde.

Podstatou UEFI-Boot je, že oddíl ESP (EFI System Partition) je kombinován s adresářem /boot. Tito. všechna jádra a obrazy bootstrap (initrd) jsou umístěny na stejném oddílu, ze kterého může UEFI spouštět spustitelné soubory a zejména spouštět zavaděče systému. Ale samotné jádro Linuxu v mnoha distribucích je již sestaveno s možností UEFISTUB, která umožňuje spuštění samotného jádra z UEFI.

Toto řešení má jeden nepříjemný moment - oddíl ESP je naformátován na FAT32, na kterém nelze vytvářet pevné odkazy (které systém vytváří pravidelně při aktualizaci initrd). A na tom není nic zvlášť zločinného, ​​ale vidět systémová varování při aktualizaci komponent jádra není moc příjemné...

Existuje i jiný způsob.

UEFI boot manager (stejný, kde je potřeba registrovat bootloader OS) umí kromě bootloaderů/linuxových jader načítat i ovladače. Můžete tedy načíst ovladač pro souborový systém, kde máte /boot a přímo odtud načíst jádro pomocí UEFI. Ovladač je samozřejmě potřeba umístit do oddílu ESP. Zhruba to dělají zavaděče jako GRUB. Vrcholem však je, že všechny často používané funkce GRUB jsou již v UEFI. Přesněji v jeho správci stahování. A aby to byla ještě větší nuda, UEFI boot manager má v některých věcech ještě více možností.

Zdá se to být krásné řešení, ale je tu jedno „ALE“ (nebo spíše bylo, ale o tom později). Faktem je, že systém ovladačů UEFI je docela jednoduchý. Neexistuje nic takového jako připojení souborového systému nebo přidružení ovladače ke konkrétnímu zařízení. Existuje systémové volání s konvenčním názvem Mapa, které postupně vezme každého řidiče a snaží se jej přiřadit ke všem, alespoň vhodným zařízením. A pokud se řidiči podařilo zařízení vyzvednout, pak se vytvoří mapování - spojovací záznam. Přesně takto by měl být nově načtený ovladač inicializován ve společné hromadě se všemi ostatními. A vše, co potřebujete, je nastavit jeden bit (LOAD_OPTION_FORCE_RECONNECT) na 1 v spouštěcím záznamu ovladače a UEFI po jeho načtení provede toto globální přemapování.

Ale to není tak snadné. Standardní utilita efibootmgr (která slouží ke konfiguraci UEFI offload managera) neví, jak (nebo spíše neuměla) tento bit nastavit. Musel jsem jej nainstalovat ručně poměrně komplikovaným a nebezpečným postupem.

A znovu, když jsem to zkusil udělat rukama, nemohl jsem to vydržet a formalizoval jsem problém na GitHubu žádá vývojáře, aby tuto funkci přidali.

Uplynulo několik dní, ale mé žádosti nikdo nevěnoval pozornost. A ze zvědavosti jsem se podíval na zdrojový kód... forknul jsem ho a na koleně jsem vymýšlel, jak tuto funkci přidat... „Na koleně“, protože jsem nic takového neinstaloval a upravoval zdrojový kód kód přímo v prohlížeči.

C (programovací jazyk) umím velmi povrchně, ale načrtl jsem přibližné řešení (většinou copy-paste)... a pak jsem si řekl – alespoň tam mám asi hodně chyb (moje minulé pokusy upravovat cizí C kód byl dokončen asi po desáté) Vystavím žádost o stažení. Studna navrženo.

A tam se ukázalo, že Travis CI byl připojen ke kontrole žádostí o stažení. A pilně mi vyprávěl o všech mých chybách. Pokud jsou známé chyby, není třeba je opravovat: znovu přímo v prohlížeči a na čtvrtý pokus kód fungoval (pro mě úspěch).

A právě tak, aniž bych opustil prohlížeč, jsem zformátoval velmi skutečný požadavek Pull do nástroje, který se používá téměř ve všech moderních distribucích Linuxu.

Překvapila mě skutečnost, že aniž bych skutečně znal jazyk, aniž bych cokoliv nastavoval (závislosti vyžadují poměrně dost knihoven pro sestavení) a aniž bych kdy vůbec spustil kompilátor, jsem jednoduše „nakódoval“ zcela funkční a užitečnou funkci v prohlížeč .

Moje žádost však zůstala bez odezvy od 19. března 2019 a už jsem na ni začal zapomínat.

Ale včera byl tento požadavek přidán do masteru.

O čem je tedy můj příběh? A mluví o tom, že v rámci moderních technologií se ukázalo, že skutečný kód už lze psát v prohlížeči, aniž by se lokálně nasazovaly nějaké vývojové nástroje a závislosti.

Navíc musím přiznat, že toto je již můj druhý pull request pro známé (alespoň v úzkých kruzích) utility. Minule můj požadavek na opravu zobrazení některých polí ve webovém rozhraní SyncThing vyústil v moji doslova jednořádkovou úpravu v prostředí, které vůbec neznám.

Průzkumu se mohou zúčastnit pouze registrovaní uživatelé. Přihlásit se, prosím.

Mám psát víc nebo ne?

  • ano

  • nestojí za to

Hlasovalo 294 uživatelů. 138 uživatelů se zdrželo hlasování.

Zdroj: www.habr.com

Přidat komentář