Fremtiden er allerede her eller kode direkte i nettleseren

Jeg skal fortelle deg om en morsom situasjon som skjedde med meg, og hvordan du kan bli en bidragsyter til et kjent prosjekt.

For ikke lenge siden tullet jeg med en idé: oppstart av Linux direkte fra UEFI...
Ideen er ikke ny, og det finnes en rekke manualer om dette emnet. Du kan se en av dem her

Faktisk, mine langvarige forsøk på å løse dette problemet resulterte i en fullstendig formalisert avgjørelse. Løsningen fungerer ganske bra, og jeg bruker den på noen av mine hjemmemaskiner. Denne løsningen er beskrevet litt mer detaljert. her.

Essensen av UEFI-Boot er at ESP (EFI System Partition)-partisjonen er kombinert med /boot-katalogen. De. alle kjerner og bootstrap-bilder (initrd) er plassert på samme partisjon som UEFI kan starte kjørbare filer fra, og spesielt starte systemoppstartslastere. Men selve Linux-kjernen i mange distribusjoner er allerede satt sammen med UEFISTUB-alternativet, som gjør at selve kjernen kan lanseres fra UEFI.

Denne løsningen har et ubehagelig øyeblikk - ESP-partisjonen er formatert i FAT32, som det er umulig å lage harde lenker på (som systemet oppretter regelmessig når du oppdaterer initrd). Og det er ikke noe spesielt kriminelt med dette, men å se systemadvarsler når du oppdaterer kjernekomponenter er ikke særlig hyggelig...

Det er en annen måte.

UEFI-oppstartsbehandleren (den samme hvor du må registrere OS-oppstartslasteren) kan, i tillegg til bootloadere/Linux-kjerner, også laste drivere. Så du kan laste inn driveren for filsystemet der du har /boot og laste inn kjernen direkte derfra ved å bruke UEFI. Driveren må selvfølgelig plasseres i ESP-partisjonen. Dette er omtrent hva bootloadere som GRUB gjør. Men høydepunktet er at alle de ofte brukte GRUB-funksjonene allerede er i UEFI. Mer presist i nedlastingsbehandleren. Og for å være enda mer kjedelig, har UEFI boot manager enda flere muligheter i noen saker.

Det ser ut til å være en vakker løsning, men det er ett "MEN" (eller rettere sagt, det var det, men mer om det senere). Faktum er at UEFI-driversystemet er ganske enkelt. Det er ikke noe slikt som å montere et filsystem eller knytte en driver til en bestemt enhet. Det er et systemanrop med det konvensjonelle navnet Map, som tar hver sjåfør etter tur og prøver å assosiere den med alle, i det minste passende enheter. Og hvis sjåføren var i stand til å plukke opp enheten, opprettes en kartlegging - en tilkoblingspost. Det er akkurat slik den nylastede driveren skal initialiseres i en felles haug med alle de andre. Og alt du trenger er å sette én bit (LOAD_OPTION_FORCE_RECONNECT) til 1 i driveroppstartsposten, og UEFI vil gjøre denne globale omtilordningen etter å ha lastet den.

Men dette er ikke så lett å gjøre. Standard verktøyet efibootmgr (som brukes til å konfigurere UEFI avlastningsbehandling) vet ikke hvordan (eller rettere sagt, visste ikke hvordan) denne biten skal settes. Jeg måtte installere den manuelt gjennom en ganske komplisert og farlig prosedyre.

Og nok en gang, etter å ha prøvd å gjøre det med hendene, kunne jeg ikke fordra det og formaliserte meg problemet på GitHub ber utviklere legge til denne funksjonen.

Det gikk flere dager, men ingen tok hensyn til forespørselen min. Og av nysgjerrighet så jeg på kildekoden... jeg gaflet den, og fant ut på knærne hvordan jeg skulle legge til denne funksjonen... "På mine kne" fordi jeg ikke installerte noe sånt og redigerte kilden kode direkte i nettleseren.

Jeg kjenner C (programmeringsspråket) veldig overfladisk, men jeg skisserte en omtrentlig løsning (for det meste copy-paste)... og så tenkte jeg - jeg har i hvert fall mange feil der (mine tidligere forsøk på å redigere noen andres C-koden ble fullført omtrent 10. gang) Jeg sender en Pull-forespørsel. Vi vil designet.

Og der viste det seg at Travis CI var vedlagt for å sjekke pull-forespørsler. Og han fortalte meg flittig alle feilene mine. Vel, hvis det er kjente feil, er det ikke nødvendig å fikse det: igjen, rett i nettleseren, og på det fjerde forsøket fungerte koden (en prestasjon for meg).

Og akkurat som det, uten å forlate nettleseren, formaterte jeg en veldig ekte Pull Request til et verktøy som brukes i nesten alle moderne Linux-distribusjoner.

Jeg ble overrasket over det faktum at uten å kunne språket, uten å sette opp noe (avhengigheter krever ganske mange biblioteker for montering), og uten å kjøre kompilatoren, "kodet" jeg ganske enkelt en fullstendig fungerende og nyttig funksjon i nettleser .

Forespørselen min har imidlertid ikke respondert siden 19. mars 2019, og jeg hadde allerede begynt å glemme den.

Men i går ble denne forespørselen lagt til master.

Så hva handler min historie om? Og han snakker om det faktum at, innenfor rammen av moderne teknologier, viste det seg at ekte kode allerede kan skrives i nettleseren, uten å distribuere noen utviklingsverktøy og avhengigheter lokalt.

Dessuten må jeg innrømme at dette allerede er min andre pull-forespørsel for kjente (i hvert fall i trange sirkler) verktøy. Forrige gang resulterte min forespørsel om å korrigere visningen av noen felt i SyncThing-nettgrensesnittet i min bokstavelig talt én-linje redigering i et miljø jeg ikke kjenner i det hele tatt.

Kun registrerte brukere kan delta i undersøkelsen. Logg inn, vær så snill.

Bør jeg skrive mer eller ikke?

  • ja

  • ikke verdt det

294 brukere stemte. 138 brukere avsto.

Kilde: www.habr.com

Legg til en kommentar