Budúcnosť je už tu alebo kód priamo v prehliadači

Poviem vám o zábavnej situácii, ktorá sa mi stala, a o tom, ako sa stať prispievateľom do slávneho projektu.

Nie je to tak dávno, čo som sa zaoberal myšlienkou: bootovanie Linuxu priamo z UEFI...
Myšlienka nie je nová a existuje množstvo manuálov na túto tému. Môžete vidieť jeden z nich tu

V skutočnosti moje dlhodobé pokusy o vyriešenie tohto problému viedli k úplnej formalizácii rozhodnutie. Riešenie je celkom funkčné a používam ho na niektorých svojich domácich strojoch. Toto riešenie je popísané trochu podrobnejšie. tu.

Podstatou UEFI-Boot je, že oddiel ESP (EFI System Partition) je kombinovaný s adresárom /boot. Tie. všetky jadrá a obrazy bootstrap (initrd) sú umiestnené na rovnakom oddiele, z ktorého môže UEFI spúšťať spustiteľné súbory a najmä spúšťať zavádzače systému. Ale samotné jadro Linuxu v mnohých distribúciách je už zostavené s možnosťou UEFISTUB, ktorá umožňuje spustenie samotného jadra z UEFI.

Toto riešenie má jeden nepríjemný moment - partícia ESP je naformátovaná na FAT32, na ktorom nie je možné vytvárať pevné odkazy (ktoré systém pravidelne vytvára pri aktualizácii initrd). A nie je na tom nič obzvlášť trestné, ale vidieť systémové varovania pri aktualizácii komponentov jadra nie je veľmi príjemné...

Existuje aj iný spôsob.

UEFI boot manager (ten istý, kde je potrebné zaregistrovať bootloader OS) dokáže okrem bootloaderov/linuxových jadier načítať aj ovládače. Môžete teda načítať ovládač pre súborový systém, kde máte /boot a priamo odtiaľ načítať jadro pomocou UEFI. Ovládač je samozrejme potrebné umiestniť do partície ESP. Zhruba to robia bootloadery ako GRUB. Ale vrcholom je, že všetky často používané funkcie GRUB sú už v UEFI. Presnejšie v jeho správcovi sťahovania. A aby to bola ešte väčšia nuda, UEFI boot manager má v niektorých veciach ešte viac možností.

Zdá sa, že je to krásne riešenie, ale je tu jedno „ALE“ (alebo skôr bolo, ale o tom neskôr). Faktom je, že systém ovládačov UEFI je pomerne jednoduchý. Neexistuje nič také ako pripojenie súborového systému alebo priradenie ovládača ku konkrétnemu zariadeniu. Existuje systémové volanie s konvenčným názvom Mapa, ktoré postupne preberá každého vodiča a snaží sa ho priradiť ku všetkým, aspoň vhodným zariadeniam. A ak sa vodičovi podarilo zariadenie vyzdvihnúť, potom sa vytvorí mapovanie - spojovací záznam. Presne takto by sa mal inicializovať novonačítaný ovládač v spoločnej halde so všetkými ostatnými. A všetko, čo potrebujete, je nastaviť jeden bit (LOAD_OPTION_FORCE_RECONNECT) na 1 v zavádzacom zázname ovládača a UEFI po jeho načítaní vykoná toto globálne premapovanie.

Ale to nie je také jednoduché. Štandardná utilita efibootmgr (ktorá slúži na konfiguráciu UEFI offload managera) nevie (alebo skôr nevedela ako) nastaviť tento bit. Musel som ho nainštalovať ručne pomerne komplikovaným a nebezpečným postupom.

A znova, keď som to skúsil urobiť rukami, nemohol som to vydržať a formalizovať problém na GitHub požiadať vývojárov o pridanie tejto funkcie.

Prešlo niekoľko dní, no mojej žiadosti nikto nevenoval pozornosť. A zo zvedavosti som si pozrel zdrojový kód... Forkoval som ho, a na kolene som vymýšľal, ako túto funkciu pridať... “Na kolene”, pretože som nič také neinštaloval a upravil zdroj kód priamo v prehliadači.

C (programovací jazyk) poznám veľmi povrchne, ale načrtol som približné riešenie (väčšinou copy-paste)... a potom som si povedal – aspoň tam mám asi veľa chýb (moje minulé pokusy upravovať cudzie C kód bol dokončený asi 10. krát) Vystavím žiadosť o stiahnutie. Dobre navrhnuté.

A ukázalo sa, že Travis CI je pripojený na kontrolu žiadostí o stiahnutie. A usilovne mi hovoril všetky moje chyby. Ak sú známe chyby, nie je potrebné ich opravovať: znova priamo v prehliadači a na štvrtý pokus kód fungoval (pre mňa úspech).

A práve tak, bez toho, aby som opustil prehliadač, som naformátoval veľmi skutočnú požiadavku na stiahnutie do nástroja, ktorý sa používa takmer vo všetkých moderných distribúciách Linuxu.

Prekvapila ma skutočnosť, že bez toho, aby som skutočne ovládal jazyk, bez toho, aby som čokoľvek nastavoval (závislosti vyžadujú pomerne veľa knižníc na zostavenie) a bez toho, aby som niekedy spustil kompilátor, som jednoducho „nakódoval“ úplne fungujúcu a užitočnú funkciu v prehliadač .

Moja žiadosť však zostala bez odozvy od 19. marca 2019 a už som na ňu začala zabúdať.

Ale včera bola táto požiadavka pridaná k master.

O čom je teda môj príbeh? A hovorí o tom, že v rámci moderných technológií sa ukázalo, že skutočný kód sa už dá napísať v prehliadači bez lokálneho nasadenia akýchkoľvek vývojových nástrojov a závislostí.

Navyše musím priznať, že toto je už moja druhá požiadavka na ťahanie známych (aspoň v úzkych kruhoch) utilít. Minule moja požiadavka na opravu zobrazovania niektorých polí vo webovom rozhraní SyncThing vyústila do mojej doslova jednoriadkovej úpravy v prostredí, ktoré vôbec nepoznám.

Do prieskumu sa môžu zapojiť iba registrovaní užívatelia. Prihlásiť saProsím.

Mám písať viac alebo nie?

  • áno

  • nestojí za to

Hlasovalo 294 užívateľov. 138 užívateľov sa zdržalo hlasovania.

Zdroj: hab.com

Pridať komentár