Budućnost je već tu ili kodirajte direktno u pretraživaču

Ispričat ću vam jednu smiješnu situaciju koja mi se dogodila i kako postati saradnik poznatog projekta.

Ne tako davno sam se bavio idejom: dizanjem Linuxa direktno iz UEFI...
Ideja nije nova i postoji niz priručnika na ovu temu. Možete vidjeti jednu od njih ovdje

Zapravo, moji dugogodišnji pokušaji da riješim ovaj problem rezultirali su potpuno formalizacijom odluka. Rješenje je prilično funkcionalno i koristim ga na nekim od mojih kućnih mašina. Ovo rješenje je opisano malo detaljnije. ovdje.

Suština UEFI-Boot-a je da se ESP (EFI sistemska particija) particija kombinuje sa /boot direktorijumom. One. svi kerneli i bootstrap slike (initrd) nalaze se na istoj particiji sa koje UEFI može pokrenuti izvršne datoteke i, posebno, pokretati sistemske pokretače. Ali sama jezgra Linuxa u mnogim distribucijama je već sastavljena sa opcijom UEFISTUB, koja omogućava da se sam kernel pokrene iz UEFI-ja.

Ovo rješenje ima jedan neprijatan momenat - ESP particija je formatirana u FAT32, na kojoj je nemoguće kreirati tvrde veze (koje sistem redovno kreira prilikom ažuriranja initrd-a). I nema ničeg posebno kriminalnog u tome, ali vidjeti sistemska upozorenja prilikom ažuriranja komponenti kernela nije baš ugodno...

Postoji još jedan način.

UEFI boot manager (isti onaj gdje trebate registrovati pokretač OS) može, osim pokretača/Linux kernela, učitavati i drajvere. Dakle, možete učitati drajver za sistem datoteka na kojem imate /boot i učitati kernel direktno odatle koristeći UEFI. Drajver, naravno, treba postaviti u ESP particiju. To je otprilike ono što rade bootloaderi poput GRUB-a. Ali vrhunac je da su sve često korištene GRUB funkcije već u UEFI. Tačnije u njegovom menadžeru preuzimanja. I da budemo još dosadniji, UEFI boot manager ima još više mogućnosti u nekim stvarima.

Čini se da je to lijepo rješenje, ali postoji jedno „ALI“ (ili bolje rečeno, bilo je, ali o tome kasnije). Činjenica je da je UEFI drajverski sistem prilično jednostavan. Ne postoji takva stvar kao što je montiranje sistema datoteka ili povezivanje drajvera sa određenim uređajem. Postoji sistemski poziv sa konvencionalnim imenom Map, koji uzima svaki drajver redom i pokušava da ga poveže sa svim, barem odgovarajućim uređajima. A ako je vozač uspio podići uređaj, tada se kreira mapiranje - zapis povezivanja. Upravo na ovaj način treba inicijalizirati novoučitani drajver u zajedničkoj hrpi sa svim ostalima. I sve što trebate je da postavite jedan bit (LOAD_OPTION_FORCE_RECONNECT) na 1 u zapisu pokretanja drajvera i UEFI će izvršiti ovo globalno ponovno mapiranje nakon što ga učita.

Ali to nije tako lako učiniti. Standardni uslužni program efibootmgr (koji se koristi za konfiguriranje UEFI offload managera) ne zna (ili bolje rečeno, nije znao kako) postaviti ovaj bit. Morao sam ga ručno instalirati kroz prilično kompliciranu i opasnu proceduru.

I još jednom, nakon što sam to pokušao da uradim rukama, nisam izdržao i formalizovao sam se problem na GitHubu tražeći od programera da dodaju ovu funkciju.

Prošlo je nekoliko dana, ali niko se nije obazirao na moj zahtjev. I iz radoznalosti, pogledao sam izvorni kod... Racunao sam ga, i na koljenima skontao kako da dodam ovu funkciju... "Na koljenima" jer nisam instalirao tako nista i uredio sam izvor koda direktno u pretraživaču.

Poznajem C (programski jezik) vrlo površno, ali sam skicirao približno rješenje (uglavnom copy-paste)... i onda sam pomislio - barem ja tu vjerovatno imam dosta grešaka (moji prošli pokušaji da uredim tuđe C kod je završen otprilike 10. put) Izdat ću zahtjev za povlačenje. Pa dizajniran.

I tamo se pokazalo da je Travis CI vezan za provjeru zahtjeva za povlačenjem. I marljivo mi je ispričao sve moje greške. Pa, ako postoje poznate greške, nema potrebe da ih popravljate: opet, direktno u pretraživaču, i iz četvrtog pokušaja kod je proradio (za mene dostignuće).

I baš tako, bez napuštanja pretraživača, formatirao sam vrlo pravi Pull Request u uslužni program koji se koristi u gotovo svim modernim distribucijama Linuxa.

Iznenadila me je činjenica da sam, bez stvarnog poznavanja jezika, bez podešavanja bilo čega (zavisnosti zahtijevaju dosta biblioteka za asembler), i bez pokretanja kompajlera, jednostavno "kodirao" potpuno funkcionalnu i korisnu funkciju u Pretraživač .

Međutim, moj zahtjev je ostao bez odgovora od 19. marta 2019. godine i već sam ga počeo zaboravljati.

Ali jučer je ovaj zahtjev dodan u master.

O čemu je moja priča? I on govori o tome da se u okviru modernih tehnologija pokazalo da se pravi kod već može napisati u pretraživaču, bez lokalnog postavljanja razvojnih alata i zavisnosti.

Štaviše, moram priznati, ovo je već moj drugi pull zahtjev za dobro poznate (barem u uskim krugovima) uslužne programe. Prošli put, moj zahtjev da ispravim prikaz nekih polja u SyncThing web sučelju rezultirao je mojim doslovno uređivanjem u jednom redu u okruženju koje uopće ne poznajem.

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Da pišem više ili ne?

  • da

  • ne vredi

Glasalo je 294 korisnika. Uzdržano je bilo 138 korisnika.

izvor: www.habr.com

Dodajte komentar