Ateitis jau čia arba koduokite tiesiai naršyklėje

Papasakosiu apie juokingą situaciją, kuri nutiko man, ir kaip tapti žinomo projekto dalyviu.

Neseniai galvojau apie idėją: paleisti Linux tiesiai iš UEFI...
Idėja nėra nauja ir šia tema yra nemažai vadovų. Galite pamatyti vieną iš jų čia

Tiesą sakant, mano ilgalaikiai bandymai išspręsti šią problemą baigėsi visiškai formalizuotais sprendimas. Sprendimas yra gana veikiantis ir naudoju jį kai kuriuose savo namų įrenginiuose. Šis sprendimas aprašytas šiek tiek išsamiau. čia.

UEFI-Boot esmė yra ta, kad ESP (EFI System Partition) skaidinys yra sujungtas su /boot katalogu. Tie. visi branduoliai ir įkrovos vaizdai (initrd) yra tame pačiame skaidinyje, iš kurio UEFI gali paleisti vykdomuosius failus ir ypač paleisti sistemos įkrovos įkroviklius. Tačiau pats Linux branduolys daugelyje platinimų jau yra surinktas su UEFISTUB parinktimi, kuri leidžia paleisti patį branduolį iš UEFI.

Šis sprendimas turi vieną nemalonų momentą – ESP skaidinys suformatuotas FAT32, kuriame neįmanoma sukurti kietųjų nuorodų (kurias sistema reguliariai sukuria atnaujindama initrd). Ir čia nėra nieko ypatingo nusikalstamo, tačiau matyti sistemos įspėjimus atnaujinant branduolio komponentus nėra labai malonu...

Yra ir kitas būdas.

UEFI įkrovos tvarkyklė (ta pati, kur reikia registruoti OS įkrovos tvarkyklę) gali, be įkrovos tvarkyklių/Linux branduolių, įkelti ir tvarkykles. Taigi galite įkelti tvarkyklę failų sistemai, kurioje turite /boot, ir įkelti branduolį tiesiai iš ten naudodami UEFI. Žinoma, tvarkyklę reikia įdėti į ESP skaidinį. Maždaug tai daro įkrovos įkrovikliai, tokie kaip GRUB. Tačiau svarbiausia yra tai, kad visos dažnai naudojamos GRUB funkcijos jau yra UEFI. Tiksliau atsisiuntimo tvarkyklėje. O kad būtų dar nuobodžiau, UEFI įkrovos tvarkyklė kai kuriais klausimais turi dar daugiau galimybių.

Atrodo, kad tai gražus sprendimas, bet yra vienas „BET“ (tiksliau, buvo, bet apie tai vėliau). Faktas yra tas, kad UEFI tvarkyklės sistema yra gana paprasta. Nėra tokio dalyko kaip failų sistemos įdiegimas arba tvarkyklės susiejimas su konkrečiu įrenginiu. Yra sistemos skambutis sutartiniu pavadinimu Map, kuris paeiliui paima kiekvieną vairuotoją ir bando susieti jį su visais, bent jau tinkamais įrenginiais. Ir jei vairuotojas sugebėjo pasiimti įrenginį, tada sukuriamas žemėlapis - jungiamasis įrašas. Būtent taip naujai įkelta tvarkyklė turėtų būti inicijuota į bendrą krūvą su visomis kitomis. Ir viskas, ko jums reikia, yra nustatyti vieną bitą (LOAD_OPTION_FORCE_RECONNECT) į 1 tvarkyklės įkrovos įraše ir UEFI atliks šį visuotinį pertvarkymą jį įkėlus.

Tačiau tai padaryti nėra taip paprasta. Standartinė efibootmgr programa (kuri naudojama konfigūruoti UEFI iškrovimo tvarkyklę) nežino, kaip (tiksliau, nežinojo, kaip) nustatyti šį bitą. Turėjau jį įdiegti rankiniu būdu per gana sudėtingą ir pavojingą procedūrą.

Ir eilinį kartą, pabandžiusi tai daryti savo rankomis, neištvėriau ir įforminau problema „GitHub“. prašydami kūrėjų pridėti šią funkciją.

Praėjo kelios dienos, bet niekas į mano prašymą nekreipė dėmesio. Ir dėl smalsumo pažiūrėjau į šaltinio kodą... Iššakojau, ir ant kelių sugalvojau, kaip pridėti šią funkciją... "Ant kelių", nes nieko panašaus neįdiegiau ir redagavau šaltinį kodą tiesiai naršyklėje.

Labai paviršutiniškai moku C (programavimo kalbą), bet nubraižau apytikslį sprendimą (dažniausiai nukopijuoti-įklijuoti)... ir tada pagalvojau – bent jau pas mane ten yra daug klaidų (mano buvę bandymai redaguoti kažkieno C kodas buvo užpildytas maždaug 10 kartą) Išduosiu ištraukimo užklausą. Na suprojektuotas.

Ir pasirodė, kad Travis CI buvo prijungtas tikrinti ištraukimo užklausas. Ir jis uoliai man pasakė visas mano klaidas. Na, o jei žinomos klaidos, tai taisyti nereikia: vėl tiesiai naršyklėje, o ketvirtu bandymu kodas suveikė (man pasiekimas).

Ir taip, neišeidamas iš naršyklės, suformatavau labai tikrą „Pull Request“ įrankį, kuris naudojamas beveik visuose šiuolaikiniuose „Linux“ paskirstymuose.

Mane nustebino tai, kad tikrai nemokėdamas kalbos, nieko nenustatęs (priklausomybėms surinkti reikia nemažai bibliotekų) ir net nepaleidęs kompiliatoriaus, tiesiog „užkodavau“ visiškai veikiančią ir naudingą funkciją. naršyklė .

Tačiau mano prašymas liko neatsakytas nuo 19 m. kovo 2019 d., ir aš jau buvau pradėjęs jį pamiršti.

Bet vakar šis prašymas buvo pridėtas prie meistro.

Taigi apie ką mano istorija? Ir jis kalba apie tai, kad šiuolaikinių technologijų rėmuose pasirodė, kad tikras kodas jau gali būti parašytas naršyklėje, nediegiant jokių kūrimo įrankių ir priklausomybių vietoje.

Be to, turiu pripažinti, tai jau antrasis mano prašymas gerai žinomoms (bent jau siauruose ratuose) komunalinėms paslaugoms. Praėjusį kartą dėl mano prašymo pataisyti kai kurių laukų rodymą SyncThing žiniatinklio sąsajoje redagavau vieną eilutę aplinkoje, kurios aš visiškai nepažįstu.

Apklausoje gali dalyvauti tik registruoti vartotojai. Prisijungti, Prašau.

Ar man rašyti daugiau ar ne?

  • taip

  • neverta

Balsavo 294 vartotojai. 138 vartotojų susilaikė.

Šaltinis: www.habr.com

Добавить комментарий