Prihodnost je že tu ali kodirajte neposredno v brskalniku

Povedal vam bom o smešni situaciji, ki se mi je zgodila, in o tem, kako postati sodelavec znanega projekta.

Nedolgo nazaj sem razmišljal o ideji: zagnati Linux neposredno iz UEFI ...
Ideja ni nova in na to temo obstaja kar nekaj priročnikov. Enega od njih lahko vidite tukaj

Pravzaprav so se moji dolgoletni poskusi razrešitve tega vprašanja končali s popolnoma formalizacijo Odločitev. Rešitev je precej delujoča in jo uporabljam na nekaterih domačih strojih. Ta rešitev je opisana nekoliko podrobneje. tukaj.

Bistvo UEFI-Boot je, da je particija ESP (EFI System Partition) združena z imenikom /boot. Tisti. vsa jedra in zagonske slike (initrd) se nahajajo na isti particiji, s katere lahko UEFI zažene izvedljive datoteke in še posebej zažene sistemske zagonske nalagalnike. Toda samo jedro Linuxa v številnih distribucijah je že sestavljeno z možnostjo UEFISTUB, ki omogoča zagon samega jedra iz UEFI.

Ta rešitev ima en neprijeten trenutek - particija ESP je formatirana v FAT32, na kateri ni mogoče ustvariti trdih povezav (ki jih sistem redno ustvarja pri posodabljanju initrd). In v tem ni nič posebej kriminalnega, vendar videti sistemska opozorila pri posodabljanju komponent jedra ni ravno prijetno ...

Obstaja še en način.

Upravljalnik zagona UEFI (isti, kjer morate registrirati zagonski nalagalnik OS) lahko poleg zagonskih nalagalnikov/jeder Linuxa naloži tudi gonilnike. Tako lahko naložite gonilnik za datotečni sistem, kjer imate /boot, in naložite jedro neposredno od tam z uporabo UEFI. Voznik je seveda treba namestiti v particijo ESP. To je približno tisto, kar počnejo zagonski nalagalniki, kot je GRUB. Toda vrhunec je, da so vse pogosto uporabljene funkcije GRUB že v UEFI. Natančneje v njegovem upravitelju prenosov. In da bo še bolj dolgočasno, ima UEFI boot manager pri nekaterih zadevah še več možnosti.

Zdi se, da je to lepa rešitev, vendar obstaja en "AMPAK" (ali bolje rečeno, bil je, a o tem kasneje). Dejstvo je, da je sistem gonilnikov UEFI precej preprost. Namestitev datotečnega sistema ali povezovanje gonilnika z določeno napravo ni na voljo. Obstaja sistemski klic z običajnim imenom Map, ki vsakega gonilnika po vrsti vzame in ga poskuša povezati z vsemi, vsaj primernimi napravami. In če je voznik lahko prevzel napravo, se ustvari preslikava - povezovalni zapis. Točno tako naj bi bil na novo naložen gonilnik inicializiran v skupnem kupu z vsemi ostalimi. In vse kar potrebujete je, da en bit (LOAD_OPTION_FORCE_RECONNECT) nastavite na 1 v zagonskem zapisu gonilnika in UEFI bo po nalaganju izvedel to globalno preslikavo.

Vendar tega ni tako enostavno narediti. Standardni pripomoček efibootmgr (ki se uporablja za konfiguracijo upravitelja razbremenitve UEFI) ne ve, kako (ali bolje rečeno, ni vedel, kako) nastaviti tega bita. Moral sem ga namestiti ročno po precej zapletenem in nevarnem postopku.

In še enkrat, ko sem to poskušal narediti z rokami, nisem mogel zdržati in sem formaliziral izdaja na GitHubu prosi razvijalce, da dodajo to funkcijo.

Minilo je nekaj dni, a nihče ni upošteval moje prošnje. In iz radovednosti sem pogledal izvorno kodo ... sem jo forkiral, in na kolenih ugotavljal, kako dodati to funkcijo ... "Na kolenih", ker nisem inštaliral nič takega in uredil vir kodo neposredno v brskalniku.

C (programski jezik) poznam zelo površno, vendar sem si skiciral okvirno rešitev (večinoma copy-paste)... potem pa sem pomislil - vsaj jaz imam tam verjetno veliko napak (moji pretekli poskusi urejanja tujega Koda C je bila dokončana približno desetič) Izdal bom zahtevo za vlečenje. No oblikovano.

In tam se je izkazalo, da je Travis CI pritrjen za preverjanje zahtev za vleko. In pridno mi je povedal vse moje napake. No, če so znane napake, jih ni treba popravljati: spet kar v brskalniku in v četrtem poskusu je koda delovala (dosežek zame).

In kar tako, ne da bi zapustil brskalnik, sem formatiral čisto pravo Pull Request v pripomoček, ki se uporablja v skoraj vseh sodobnih distribucijah Linuxa.

Presenetilo me je dejstvo, da sem, ne da bi zares poznal jezik, ne da bi karkoli nastavil (odvisnosti zahtevajo kar nekaj knjižnic za sestavljanje) in ne da bi sploh kdaj zagnal prevajalnik, preprosto "kodiral" popolnoma delujočo in uporabno funkcijo v brskalnik.

Vendar je moja zahteva od 19. marca 2019 ostala neodzivna in sem nanjo že začela pozabljati.

Toda včeraj je bila ta zahteva dodana v master.

O čem torej govori moja zgodba? In govori o tem, da se je v okviru sodobnih tehnologij izkazalo, da je pravo kodo mogoče napisati že v brskalniku, ne da bi pri tem uporabljali razvojna orodja in odvisnosti lokalno.

Še več, moram priznati, da je to že moja druga zahteva po vleki za znane (vsaj v ožjem krogu) pripomočke. Zadnjič je moja zahteva po popravku prikaza nekaterih polj v spletnem vmesniku SyncThing povzročila moje dobesedno enovrstično urejanje v okolju, ki ga sploh ne poznam.

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Naj pišem več ali ne?

  • ja

  • ni vredno

Glasovalo je 294 uporabnikov. 138 uporabnikov se je vzdržalo.

Vir: www.habr.com

Dodaj komentar