Tulevaisuus on jo täällä tai koodi suoraan selaimessa

Kerron sinulle hauskasta tilanteesta, joka tapahtui minulle, ja kuinka tulla kuuluisan projektin avustajaksi.

Vähän aikaa sitten mietin ideaa: Linuxin käynnistäminen suoraan UEFI:stä...
Idea ei ole uusi, ja tästä aiheesta on olemassa useita oppaita. Voit nähdä yhden niistä täällä

Itse asiassa pitkäaikaiset yritykset ratkaista tämä ongelma johtivat täysin muodolliseen ratkaisuun päätös. Ratkaisu on varsin toimiva ja käytän sitä joissakin kotikoneissani. Tämä ratkaisu on kuvattu hieman yksityiskohtaisemmin. täällä.

UEFI-Bootin ydin on, että ESP (EFI System Partition) -osio yhdistetään /boot-hakemistoon. Nuo. kaikki ytimet ja käynnistyskuvat (initrd) sijaitsevat samassa osiossa, josta UEFI voi käynnistää suoritettavat tiedostot ja erityisesti järjestelmän käynnistyslataimet. Mutta itse Linux-ydin monissa jakeluissa on jo koottu UEFISTUB-vaihtoehdolla, joka sallii itse ytimen käynnistämisen UEFI:stä.

Tällä ratkaisulla on yksi epämiellyttävä hetki - ESP-osio on alustettu FAT32-muotoon, jolle on mahdotonta luoda kovia linkkejä (jotka järjestelmä luo säännöllisesti päivitettäessä initrd:tä). Eikä tässä ole mitään erityisen rikollista, mutta järjestelmävaroitusten näkeminen ytimen komponentteja päivitettäessä ei ole kovin miellyttävää...

On toinenkin tapa.

UEFI-käynnistyshallinta (sama, johon sinun on rekisteröitävä käyttöjärjestelmän käynnistyslatain) voi käynnistyslatainten/Linux-ytimien lisäksi ladata myös ohjaimia. Voit siis ladata ohjaimen tiedostojärjestelmään, jossa sinulla on /boot, ja ladata ytimen suoraan sieltä UEFI:n avulla. Ajuri on tietysti sijoitettava ESP-osioon. Suunnilleen näin tekevät käynnistyslataajat, kuten GRUB. Mutta kohokohta on, että kaikki usein käytetyt GRUB-toiminnot ovat jo UEFI:ssä. Tarkemmin sen lataushallinnassa. Ja ollakseen vielä tylsempää, UEFI-käynnistyshallintaohjelmalla on joissakin asioissa vielä enemmän ominaisuuksia.

Se vaikuttaa kauniilta ratkaisulta, mutta siinä on yksi "MUTTA" (tai pikemminkin se oli, mutta siitä lisää myöhemmin). Tosiasia on, että UEFI-ohjainjärjestelmä on melko yksinkertainen. Ei ole olemassa sellaista asiaa kuin tiedostojärjestelmän asentaminen tai ohjaimen liittäminen tiettyyn laitteeseen. On järjestelmäkutsu tavanomaisella nimellä Map, joka ottaa jokaisen kuljettajan vuorotellen ja yrittää yhdistää sen kaikkiin, ainakin sopiviin laitteisiin. Ja jos kuljettaja pystyi poimimaan laitteen, luodaan kartoitus - yhdistävä tietue. Juuri tällä tavalla äskettäin ladattu ajuri tulee alustaa yhteiseen kasaan kaikkien muiden kanssa. Ja kaikki mitä sinun tarvitsee on asettaa yhden bitin (LOAD_OPTION_FORCE_RECONNECT) arvoksi 1 ohjaimen käynnistystietueessa, ja UEFI tekee tämän globaalin uudelleenkartoituksen sen lataamisen jälkeen.

Mutta tämä ei ole niin helppoa. Tavallinen efibootmgr-apuohjelma (jota käytetään UEFI:n purkamisen hallinnan määrittämiseen) ei osaa (tai pikemminkin ei osannut) asettaa tätä bittiä. Minun piti asentaa se manuaalisesti melko monimutkaisen ja vaarallisen menettelyn avulla.

Ja jälleen kerran, kun yritin tehdä sen käsilläni, en kestänyt sitä ja virallistin ongelma GitHubissa pyytää kehittäjiä lisäämään tämän ominaisuuden.

Kului useita päiviä, mutta kukaan ei kiinnittänyt huomiota pyyntööni. Ja uteliaisuudesta katsoin lähdekoodia... Haaroitin sen ja keksin polvillani, kuinka lisätä tämä ominaisuus... "Polvillani", koska en asentanut mitään sellaista ja muokkasin lähdekoodia koodi suoraan selaimessa.

Tunnen C:n (ohjelmointikielen) hyvin pinnallisesti, mutta luonnostelin likimääräisen ratkaisun (lähinnä copy-paste)... ja sitten ajattelin - ainakin minulla on varmaan paljon virheitä siinä (aiemmat yritykseni muokata jonkun muun C-koodi valmistui noin 10. kerran) Annan vetopyynnön. Hyvin suunniteltu.

Ja siellä Travis CI osoittautui kiinnitetyksi tarkistamaan vetopyyntöjä. Ja hän kertoi minulle ahkerasti kaikki virheeni. No, jos on tunnettuja virheitä, sitä ei tarvitse korjata: jälleen suoraan selaimessa, ja neljännellä yrityksellä koodi toimi (saavutus minulle).

Ja juuri niin, poistumatta selaimesta, muotoilin todella todellisen Pull Requestin apuohjelmaan, jota käytetään melkein kaikissa nykyaikaisissa Linux-jakeluissa.

Yllätyin siitä, että tietämättä kieltä oikein, ilman mitään asetusta (riippuvuudet vaativat melkoisen monta kirjastoa kokoonpanoa varten) ja ilman, että olisi koskaan edes ajanut kääntäjää, "koodasin" täysin toimivan ja hyödyllisen ominaisuuden selain.

Pyyntööni ei kuitenkaan vastattu 19 lähtien, ja olin jo alkanut unohtaa sen.

Mutta eilen tämä pyyntö lisättiin masteriin.

Mistä tarinani siis kertoo? Ja hän puhuu siitä, että nykyaikaisten teknologioiden puitteissa kävi ilmi, että oikeaa koodia voidaan jo kirjoittaa selaimeen ilman, että paikallisesti otetaan käyttöön kehitystyökaluja ja riippuvuuksia.

Lisäksi minun on myönnettävä, että tämä on jo toinen vetopyyntöni tunnetuille (ainakin kapeassa piirissä) apuohjelmille. Viime kerralla pyyntöni korjata joidenkin SyncThing-verkkoliittymän kenttien näyttö johti kirjaimellisesti yksiriviseen muokkaukseeni ympäristössä, jota en tunne ollenkaan.

Vain rekisteröityneet käyttäjät voivat osallistua kyselyyn. Kirjaudu sisään, ole kiltti.

Pitäisikö minun kirjoittaa enemmän vai ei?

  • kyllä

  • ei sen arvoista

294 käyttäjää äänesti. 138 käyttäjää pidättyi äänestämästä.

Lähde: will.com

Lisää kommentti