Tulevik on juba siin või koodime otse brauseris.

Räägin kummalisest olukorrast, mis minuga juhtus, ja sellest, kuidas saada tuntud projekti kaasautoriks.

Hiljuti tegelesin ma ühe ideega: Linuxi laadimine otse UEFI-st...
Idee pole uus ja selle teema kohta on olemas mitmeid käsiraamatuid. Ühte neist saab vaadata siin

Tegelikult said minu pikaaegsed katsed selle küsimusega tegeleda täiesti korralikud lahendus. Lahendus on täiesti toimiv ja kasutan seda osa oma kodu masinatest. Veidi põhjalikumalt on see lahendus kirjeldatud siin.

UEFI-Booti põhimõte on see, et ESP (EFI süsteemipartitsioon) jaguneb kaustaga /boot. St. kõik kernelid ja alglaadimisfailide pildid (initrd) paigutatakse samasse jaossa, millest UEFI saab käivitada käivitatavaid faile ja eelkõige süsteemi laadijaid. Kuid Linuxi kernel ise kogutakse paljudes distributsioonides juba UEFISTUB-iga, mis võimaldab kernelil UEFI-st käivituda.

Selle lahenduse juures on üks ebameeldiv asi — ESP jaotise formaat on FAT32, millel ei ole võimalik luua kõvasid linke (mida süsteem regulaarselt uuendamisel initrd looma hakkab). See pole küll midagi hullu, aga süsteemi hoiatusi tukernab komponente värskendamisel näha — see pole just meeldiv...

On ka teine tee.

UEFI käivitaja (see, kuhu tuleb kirjutada operatsioonisüsteemi laadija) oskab lisaks Linuxi laadijatele/tuumadele laadida ka draivereid. Seega on võimalik laadida juhtme, kus asub teie /boot, ja sealt otse UEFI vahenditega tuuma laadida. Draiver tuleb loomulikult paigutada ESP jaotisse. Umbes sellega tegelevad laadijad nagu GRUB. Kuid põnevus on just selles, et kõik tihti kasutatavad GRUBi funktsioonid on juba olemas UEFI-s. Täpsemalt, selle laadimishalduris. Ja kui olla veel nõudlikum, siis UEFI laadimishalduril on mõnel teemal isegi rohkem võimalusi.

Tundub olevat kena lahendus, aga on üks 'AGA' (õigemini oli, kuid sellest hiljem). Asi on selles, et UEFI draiverite süsteem on üles ehitatud üsna lihtsasti. Seal pole sellist mõistet nagu failisüsteemi mountimine või draiveri sidumine konkreetse seadmega. On olemas süsteemikõne, mille tinglik nimi on Map, mis võtab järjestikku iga draiveri ja proovib siduda selle kõigi, rohkem-vähem sobivate seadmetega. Ja kui draiver on seadmega ühendatud, siis luuakse mappimine — siduv kirje. Just selliselt peab uus laaditud draiver algselt kõigi teistega algama. Ja selleks on vaja ainult — bootimisandmetes panna draiveri jaoks üks bit (LOAD_OPTION_FORCE_RECONNECT) 1-ks ja UEFI teeb pärast laadimist selle globaalse remappi.

Aga seda pole sugugi lihtne teha. Tavaline utiliit efibootmgr (mille abil seadistatakse UEFI laadimise haldurit) ei osanud (täpsemalt ei osanud) seda bitti seadistada. Pidi käsitsi seda seadma läbi üsna keerulise ja ohtliku protseduuri.

Ja taas kord proovides seda käsitsi teha, ei pidanud ma vastu ja koostasin issue GitHubis palve ka arendajatele seda funktsiooni lisada.

Mõned päevad on möödunud, kuid keegi ei ole mu palvele tähelepanu pööranud. Ja huvi pärast vaatasin koode… forkisin ja mõtlesin, kuidas seda funktsiooni lisada... "Mõtlesin" seepärast, et ma ei installinud midagi tõeliselt enda süsteemi ja redigeerisin koode otse brauseris.

C (programmeermiskeel) tunnen ma vaid pinnapealselt, aga mõningase lahenduse visandasin (peamiselt kopeerides ja kleepides)... siis tuli mõte – kui palju mul seal eksimusi on (minu varasemad katsed kedagi teise C-koodis parandada toimusid umbes kümnendal üritusel) vormistan ma Pull Requesti. Ja vormistasin.

Seal oli ühendatud Travis CI, et kontrollida pull requeste. Ja ta andis mulle põhjalikult kõik minu vead teada. Kui vead on teada – miks mitte neid parandada: taas otse brauseris, ja neljandal katsel kood kogunes (minu jaoks saavutus).

Ja just nii, brauserist välja ronimata, vormistasin täiesti reaalse Pull Requesti utiliidile, mida kasutatakse praktiliselt kõigis kaasaegsetes Linuxi distributsioonides.

Mind hämmastas tõsiasi, et ma, praktiliselt keelt teadmata ja midagi seadistamata (seal on üsna palju sõltuvusi, mis on vajalikud kogumiseks) ning isegi kompilaatorit avamata, lihtsalt brauseris „koodisin“ täiesti töötava ja kasuliku funktsiooni.

Kuid mu taotlus oli reaktsioonita seisnud alates 19. märtsist 2019 ja olin juba hakanud unustama.

Kuid eile lisati see taotlus masterisse.

Siiski, millest on minu lugu? See räägib sellest, et tänapäevaste tehnoloogiate raames on võimalik kirjutada reaalset koodi brauseris, ilma et peaks kohalikku seadistama mingeid arendustööriistu ja sõltuvusi.

Pealegi tuleb tunnistada, et see on juba teine kord, kui esitan oma pull requesti tuntud (vähemalt kitsastes ringkondades) utiliitides. Eelmise korraga mu palve parandada teatud väljundite kuvamist SyncThing web-liideses tõi kaasa minu ühe lause õigustuse keskkonnas, mida ma üldse ei tunne.

Ainult registreeritud kasutajad saavad küsitluses osaleda. Logige sisse, palun.

Kas tasub kirjutada veel või mitte?

  • jah

  • ei tasu

Hääletas 294 kasutajat. 138 kasutajat jäi erapooletuks.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster