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

Poviem vám o kurióznej situácii, ktorá sa mi stala, a o tom, ako sa stať prispievateľom do známeho projektu.

Nedávno som sa zaoberal jednou myšlienkou: spustenie Linuxu priamo z UEFI...
Myšlienka nie je nová a existuje niekoľko manuálov na túto tému. Jeden z nich si môžete pozrieť. tu

Vlastne moje dlhodobé pokusy vyriešiť tento problém vyústili do celkom prehľadného riešenia.Riešenie je plne funkčné a používam ho na niektorých svojich domácich strojoch. O niečo podrobnejšie je toto riešenie popísané tu.

Podstata UEFI-Boot spočíva v tom, že oddiel ESP (EFI System Partition) sa spája s adresárom /boot. T.j. všetky jadrá a obrazy počiatočného zavádzania (initrd) sú umiestnené na tom istom oddiele, z ktorého môže UEFI spúšťať spustiteľné súbory a konkrétne spúšťať zavádzače systému. Ale samotné jadro Linuxu sa už v mnohých distribúciách zostavuje s voľbami UEFISTUB, ktoré umožňujú jadru spustiť sa z UEFI.

Toto riešenie má jeden nepríjemný moment — oddiel ESP je naformátovaný v FAT32, na ktorom nie je možné vytvárať tvrdé odkazy (ktoré systém pravidelne vytvára pri aktualizácii initrd). A nie je na tom nič obzvlášť zlé, ale vidieť upozornenia systému pri aktualizácii komponentov jadra — nie je príliš príjemné...

Existuje aj iná cesta.

Správca zavádzania UEFI (ten, do ktorého je potrebné zadať zavádzač OS) dokáže okrem zavádzačov/jadier Linuxu načítať aj ovládače. Takže je možné načítať ovládač tej súborovej sústavy, kde máte uložené /boot, a priamo odtiaľ načítať jadro prostriedkami UEFI. Ovládač, samozrejme, je potrebné umiestniť do oddielu ESP. Približne týmto sa zaoberajú zavádzače ako GRUB. Ale kúzlo spočíva práve v tom, že všetky často používané funkcie GRUB už existujú v UEFI. Presnejšie, v jeho správcovi zavádzania. A ak by sme to ešte trochu rozoberali, správca zavádzania UEFI má dokonca viac možností v niektorých oblastiach.

Zdá sa, že je to pekné riešenie, ale existuje jedno "ALE" (vlastne bolo, ale o tom neskôr). Ide o to, že systém ovládačov UEFI je celkom jednoduchý. Neexistuje tu pojem ako pripojenie súborového systému alebo spojenie ovládača s konkrétnym zariadením. Existuje systémový volanie s podmieneným názvom Map, ktoré postupne vezme každý ovládač a pokúša sa ho spojiť so všetkými príbuznými zariadeniami. Ak sa ovládač podarí pripojiť, vytvorí sa mapovanie – spojovací záznam. Presne tak by sa mal inicializovať novo nahratý ovládač v celkovej bašte spolu so všetkými ostatnými. A to je presne to, čo je potrebné – v zavádzacom zázname ovládača nastaviť jeden bit (LOAD_OPTION_FORCE_RECONNECT) na hodnotu 1 a UEFI po jeho nahratí vykoná tento globálny premapovanie.

Lenže spraviť to nie je tak jednoduché. Štandardný nástroj efibootmgr (pomocou ktorého sa nastavuje správca zavádzania UEFI) to nevedel (presnejšie, nevedel to robiť). Musel som to nastaviť ručne cez pomerne zložitý a nebezpečný postup.

A tak, po ďalšom pokuse urobiť to ručne, som to nevydržal a zaregistroval issue na GitHub s prosbou k vývojárom, aby pridali túto možnosť.

Uplynulo niekoľko dní, ale nikto si moju žiadosť nevšimol. A tak zvedavosť ma prinútila pozrieť sa na zdrojové kódy… forkovať ich a premyslieť, ako túto funkciu pridať "na kolenách"… "Na kolenách", pretože som si nič také neinstalloval a priamo v prehliadači som upravoval zdroje.

Jazyk C poznám iba povrchne, ale zhruba som pripravil riešenie (predovšetkým kopírovaním a vkladaním)… a potom ma napadlo — a aj keď tam mám určite kopu chýb (moje predchádzajúce pokusy opraviť cudzí kód v C sa podarili až pri desiatom pokuse) — zaregistrujem Pull Request. No a zaregistroval som..

A tam bol zapojený Travis CI na kontrolu pull requestov. A on mi na mojej snahe starostlivo vyhodil všetky moje chyby. No ak sú chyby známe — prečo ich neopravovať: opäť priamo v prehliadači, a na štvrtý pokus sa kód zostavil (úspech pre mňa).

A takto, bez toho, aby som opustil prehliadač, som zaregistroval celkom reálny Pull Request do nástroja, ktorý sa používa prakticky vo všetkých moderných distribúciách Linuxu.

Prekvapilo ma, že som, bez znalosti jazyka, a bez ďalšej konfigurácie (tam je potrebné množstvo knižníc pre zostavenie) a ani raz nespúšťajúc kompilátor, jednoducho v prehliadači "naprogramoval" úplne funkčnú a užitočnú funkciu.

Môj požiadavok však visel bez reakcie od 19. marca 2019 a už som naň začal zabúdať.

Avšak včera bol tento požiadavok pridaný do master.

O čom teda hovorím? O tom, že v rámci súčasných technológií sa ukázalo, že reálny kód sa už dá písať v prehliadači bez toho, aby sa lokálne rozbiehali nejaké vývojárske nástroje a závislosti.

Naviac, treba uznať, že toto bola už moja druhá pull request v známych (aspoň v úzkych kruhoch) nástrojoch. Minulý raz moja žiadosť o opravu zobrazenia niektorých polí v webovom rozhraní SyncThing sa vyvinula v moju jednorázovú opravu v prostredí, ktoré vôbec nepoznám.

Len registrovaní používatelia sa môžu zúčastniť prieskumu. Prihláste sa, prosím.

Mám písať ešte alebo nie?

  • áno

  • nie

Hlasovalo 294 používateľov. Zdržalo sa 138 používateľov.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster