Die toekoms is reeds hier of kodeer direk in die blaaier

Ek sal jou vertel van 'n snaakse situasie wat met my gebeur het, en hoe om 'n bydraer tot 'n bekende projek te word.

Nie lank gelede het ek aan 'n idee gepeuter nie: om Linux direk vanaf UEFI te selflaai ...
Die idee is nie nuut nie en daar is 'n aantal handleidings oor hierdie onderwerp. Jy kan een van hulle sien hier

Eintlik het my langdurige pogings om hierdie probleem op te los, gelei tot 'n heeltemal geformaliseerde besluit. Die oplossing werk nogal en ek gebruik dit op sommige van my tuismasjiene. Hierdie oplossing word in 'n bietjie meer detail beskryf. hier.

Die essensie van UEFI-Boot is dat die ESP (EFI System Partition) partisie gekombineer word met die /boot directory. Dié. alle pitte en selflaaibeelde (initrd) is op dieselfde partisie geleë vanwaar UEFI uitvoerbare lêers kan begin en veral stelselselflaailaaiers kan begin. Maar die Linux-kern self in baie verspreidings is reeds saamgestel met die UEFISTUB-opsie, wat toelaat dat die kern self vanaf UEFI geloods word.

Hierdie oplossing het een onaangename oomblik - die ESP-partisie is geformateer in FAT32, waarop dit onmoontlik is om harde skakels te skep (wat die stelsel gereeld skep wanneer die initrd opgedateer word). En daar is niks besonders krimineel hieraan nie, maar om stelselwaarskuwings te sien wanneer kernkomponente opgedateer word, is nie baie aangenaam nie ...

Daar is 'n ander manier.

Die UEFI selflaaibestuurder (dieselfde een waar jy die OS selflaaiprogram moet registreer) kan, benewens selflaailaaiers/Linux-kerne, ook drywers laai. So jy kan die bestuurder vir die lêerstelsel waar jy /boot het, laai en die kern direk van daar af laai met UEFI. Die bestuurder moet natuurlik in die ESP-partisie geplaas word. Dit is ongeveer wat selflaailaaiers soos GRUB doen. Maar die hoogtepunt is dat al die gereeld gebruikte GRUB-funksies reeds in UEFI is. Meer presies in sy aflaaibestuurder. En om nog meer vervelig te wees, het die UEFI-selflaaibestuurder in sommige sake selfs meer vermoëns.

Dit blyk 'n pragtige oplossing te wees, maar daar is een "MAAR" (of liewer, dit was, maar later meer daaroor). Die feit is dat die UEFI-bestuurderstelsel redelik eenvoudig is. Daar is nie iets soos om 'n lêerstelsel te monteer of 'n bestuurder met 'n spesifieke toestel te assosieer nie. Daar is 'n stelseloproep met die konvensionele naam Map, wat elke bestuurder om die beurt neem en probeer om dit met alle, ten minste geskikte toestelle, te assosieer. En as die bestuurder die toestel kon optel, word 'n kartering geskep - 'n verbindingsrekord. Dit is presies hoe die nuutgelaaide bestuurder in 'n gemeenskaplike hoop met al die ander geïnisieer moet word. En al wat jy nodig het, is om een ​​bietjie (LOAD_OPTION_FORCE_RECONNECT) op 1 in die bestuurder se selflaairekord te stel en UEFI sal hierdie globale herkaart doen nadat dit gelaai is.

Maar dit is nie so maklik om te doen nie. Die standaard efibootmgr-nutsding (wat gebruik word om die UEFI-aflaaibestuurder op te stel) weet nie hoe (of eerder, het nie geweet hoe nie) om hierdie bietjie te stel nie. Ek moes dit met die hand installeer deur 'n taamlik ingewikkelde en gevaarlike prosedure.

En weereens, nadat ek dit met my hande probeer doen het, kon ek dit nie verduur nie en het geformaliseer kwessie op GitHub ontwikkelaars te vra om hierdie kenmerk by te voeg.

Etlike dae het verloop, maar niemand het aandag aan my versoek gegee nie. En uit nuuskierigheid het ek na die bronkode gekyk... Ek het dit gevurk, en op my knieë uitgepluis hoe om hierdie kenmerk by te voeg... “Op my knieë” want ek het nie so iets geïnstalleer nie en die bron gewysig kode direk in die blaaier.

Ek ken C (die programmeertaal) baie oppervlakkig, maar ek het 'n benaderde oplossing geskets (meestal copy-paste)... en toe dink ek - ek het darem seker baie foute daar (my vorige pogings om iemand anders s'n te redigeer) C-kode is ongeveer die 10de keer voltooi) Ek sal 'n trekversoek uitreik. Wel ontwerp.

En daar blyk Travis CI aangeheg te wees om trekversoeke na te gaan. En hy het my ywerig al my foute vertel. Wel, as daar bekende foute is, is dit nie nodig om dit reg te stel nie: weer reg in die blaaier, en met die vierde poging het die kode gewerk ('n prestasie vir my).

En net so, sonder om die blaaier te verlaat, het ek 'n baie regte Pull Request geformateer in 'n hulpprogram wat in byna alle moderne Linux-verspreidings gebruik word.

Ek was verras deur die feit dat, sonder om die taal regtig te ken, sonder om enigiets op te stel (afhanklikhede vereis 'n hele paar biblioteke vir samestelling), en sonder om ooit eers die samesteller te laat loop, ek eenvoudig 'n heeltemal werkende en nuttige kenmerk in die blaaier.

My versoek het egter sedert 19 Maart 2019 nie gereageer nie, en ek het reeds daarvan begin vergeet.

Maar gister is hierdie versoek by meester gevoeg.

So waaroor gaan my storie? En hy praat van die feit dat dit binne die raamwerk van moderne tegnologieë geblyk het dat regte kode reeds in die blaaier geskryf kan word, sonder om enige ontwikkelingsinstrumente en afhanklikhede plaaslik te ontplooi.

Boonop moet ek erken, dit is reeds my tweede trekversoek vir bekende (ten minste in nou kringe) nutsdienste. Verlede keer het my versoek om die vertoning van sommige velde in die SyncThing-webkoppelvlak te korrigeer gelei tot my letterlik eenreëlwysiging in 'n omgewing wat ek glad nie ken nie.

Slegs geregistreerde gebruikers kan aan die opname deelneem. Meld aan, asseblief.

Moet ek meer skryf of nie?

  • Ja

  • nie die moeite werd nie

294 gebruikers het gestem. 138 gebruikers het buite stemming gebly.

Bron: will.com

Voeg 'n opmerking