Tulevik on juba siin või kodeerime otse brauseris

Jag räägin ühisest olukorrast, mis minuga juhtus, ja sellest, kuidas saada tuntud projekti kaastöötajaks.

Hiljuti tegelesin ühe ideega: Linuxi käivitamine otse UEFI-st…
Idee ei ole uus ja selle kohta on olemas mitmeid juhendeid. Ühte neist saab vaadata siit

Koheselt mu pikaajalised katsed selle probleemi lahendamiseks on olnud päris korralikult vormistatud otsuse. Lahendus on täiesti toimiv ja ma kasutan seda osaliselt oma kodumasinates. Natuke detailsemalt on see lahendus kirjeldatud siit.

UEFI-Booti olemus seisneb selles, et ESP (EFI süsteemi partitsioon) jaguneb /boot kataloogiga. See tähendab, et kõik kernelid ja alglaadimisfailid (initrd) asuvad samal partitsioonil, millelt UEFI saab käivitada täitmisfaile ja eelkõige laadida süsteemi laadijat. Kuid paljudes distributsioonides laotakse juba Linuxi kernel UEFISTUB valikuga, mis võimaldab kernelil UEFI-st käivituda.

Sellel lahendusel on üks ebameeldiv hetk — ESP partitsioon on vormindatud FAT32-s, millel ei ole võimalik luua jääklinke (mida süsteem regulaarselt loob initrd uuendamisel). Ja selles ei ole midagi eriti hullu, kuid süsteemi hoiatuste nägemine kernelikomponentide uuendamisel — ei ole just eriti meeldiv…

On ka teine tee.

UEFI laadimishaldur (just see, kuhu tuleb kirja panna operatsioonisüsteemi laadija) oskab lisaks Linuxi laadijatele/kernelitele laadida ka draivereid. Nii et saad laadida selle failisüsteemi draiveri, kus sul on /boot ja sealt otse UEFI vahenditega laadida kernelit. Draiver, muidugi, tuleb panna ESP partitsiooni. Just sellega tegelevad laadijad nagu GRUB. Kuid nipiks on see, et kõik sageli kasutatavad GRUBi funktsioonid on juba UEFI-s olemas. Täpsemalt öeldes tema laadihalduris. Ja kui olla veel täpsem, siis UEFI laadimishalduril on teatud küsimustes isegi rohkem võimalusi.

See kui ilus lahendus, kuid on üks "KUID" (täpsemalt oli, aga sellest hiljem). Asi on selles, et UEFI draiverite süsteem on üsna lihtne. Seal ei ole sellist mõistet nagu failisüsteemi mountimine või draiveri sidumine konkreetse seadmega. Seal on süsteemi kõne tingimusliku nimega Map (ingl.) mis võtab järjestikku iga draiveri ja püüab selle siduda kõigi, enam-vähem sobivate seadmetega. Ja kui draiver suudab seadme külge ühendada, siis luuakse mappimine - siduv kirje. Just nii peab uue käivitamiseks laaditud draiver üldises massis kõigi teiste seas initsialiseerima. Ja vaid seda vajatakse - draiveri käivitamisjärjendis tuleb seadistada üks bitt (LOAD_OPTION_FORCE_RECONNECT) väärtuseks 1 ja UEFI teeb pärast selle laadimist selle globaalse ümberseadmise.

Aga lihtsalt seda teha pole sugugi kerge. Tavaline tööriist efibootmgr (mille abil konfigureeritakse UEFI laadimisjuht) ei oska (täpsemalt ei osanud) seda bitti seada. Pidin selle käsitsi seadma üsna keerulise ja ohtliku protseduuri kaudu.

Ja jälle püüdes seda käsitsi teha ei suutnud ma vastu panna ja avasin probleemi GitHubis palvega arendajatele lisada see funktsioon.

Möödusid mõned päevad, kuid keegi ei reageerinud minu palvele. Ja oma uudishimu ajel vaatasin ma lähtekoodi... forkisin ja mõtlesin, kuidas seda funktsiooni "käepäraselt" lisada... "Käepäraselt", sest ma ei installinud midagi sellist ja redigeerisin lähtekoodi otse brauseris.

C (programmeermiskeel) tunnen ma väga pinnapealselt, kuid sain ligikaudse lahenduse kokku (peamiselt kopeerimise ja kleepimise teel)... aga siis tuli mõte - kuna mul seal tõenäoliselt on palju vigu (mu varasemad katsed teiste C-koodi parandamiseks koondusid umbes 10. katsel), siis panen ma kokku Pull Requesti. Ja nii ma tegingi..

Ja seal oli juures Travis CI, et kontrollida pull requeste. Ja ta andis mulle usinalt teada kõik minu vead. Kui vead on teada - mis siis parandus ei oleks: jälle otse brauseris ja neljandal katsel koode koguti (saavutus minu jaoks).

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

Mina üllatas tõsiasi, et ma, teadmata keelt hästi ja mitte midagi enda peal seadistades (seal on sõltuvuste jaoks vajalik suur hulk raamatukogusid) ja isegi kordagi kompilaatorit käivitamata, suutsin brauseris "koodida" täiesti toimiva ja kasuliku funktsiooni.

Kuid minu taotlus oli 19. märtsist 2019 reageerimiseta ja ma olin juba hakanud sellest unustama.

Aga eile lisati see taotlus master'isse.

Nii et millest on minu jutt. See räägib sellest, et ka kaasaegsete tehnoloogiate raames on selgunud, et reaalset koodi saab juba kirjutada brauseris, ilma et paikseks mingeid arendustööriistu ja sõltuvusi seadistama.

Tuleb tunnistada, et see on juba teine kord, kui ma teenin tuntud (vähemalt kitsastes ringkondades) utiliitide nimel. Eelmise kord minu palve parandada mõningate väljade kuvamist SyncThingi veebiliideses tõi kaasa mu tõeliselt üherida muudatuse keskkonnas, mida ma üldse ei tunne.

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

Kas kirjutada veel või mitte?

  • jah

  • ei tohiks kasutada

Hääletas 294 kasutajat. 138 kasutajat hoidusid.

Allikas: habr.com

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster