E ardhmja është tashmë këtu ose kodoni direkt në shfletues

Do t'ju tregoj për një situatë qesharake që më ka ndodhur dhe si të bëhem kontribues në një projekt të famshëm.

Jo shumë kohë më parë po mendoja me një ide: të nisja Linux direkt nga UEFI...
Ideja nuk është e re dhe ka një sërë manualesh mbi këtë temë. Ju mund të shihni një prej tyre këtu

Në fakt, përpjekjet e mia të kahershme për të zgjidhur këtë çështje rezultuan në një zyrtarizimin plotësisht zgjidhje. Zgjidhja është mjaft funksionale dhe unë e përdor atë në disa nga makinat e mia të shtëpisë. Kjo zgjidhje përshkruhet më në detaje. këtu.

Thelbi i UEFI-Boot është që ndarja ESP (EFI System Partition) të kombinohet me drejtorinë /boot. Ato. të gjitha kernelet dhe imazhet e bootstrap (initrd) janë të vendosura në të njëjtën ndarje nga e cila UEFI mund të nisë skedarët e ekzekutueshëm dhe, në veçanti, të nisë ngarkuesit e nisjes së sistemit. Por vetë kerneli Linux në shumë shpërndarje tashmë është i montuar me opsionin UEFISTUB, i cili lejon që vetë kerneli të lëshohet nga UEFI.

Kjo zgjidhje ka një moment të pakëndshëm - ndarja ESP është e formatuar në FAT32, në të cilën është e pamundur të krijohen lidhje të forta (të cilat sistemi i krijon rregullisht kur përditëson initrd). Dhe nuk ka asgjë veçanërisht kriminale për këtë, por të shohësh paralajmërime të sistemit kur përditësohen komponentët e kernelit nuk është shumë e këndshme...

Ka një mënyrë tjetër.

Menaxheri i nisjes UEFI (i njëjti ku duhet të regjistroni ngarkuesin e sistemit operativ), përveç ngarkuesve/kernelit Linux, mund të ngarkojë edhe drejtuesit. Kështu që ju mund të ngarkoni drejtuesin për sistemin e skedarëve ku keni /boot dhe të ngarkoni kernelin direkt nga atje duke përdorur UEFI. Shoferi, natyrisht, duhet të vendoset në ndarjen ESP. Kjo është përafërsisht ajo që bëjnë bootloaders si GRUB. Por pika kryesore është se të gjitha funksionet e përdorura shpesh GRUB janë tashmë në UEFI. Më saktësisht në menaxherin e tij të shkarkimit. Dhe për të qenë edhe më i mërzitshëm, menaxheri i nisjes UEFI ka edhe më shumë aftësi në disa çështje.

Duket se është një zgjidhje e bukur, por ka një "POR" (ose më mirë, ishte, por më shumë për këtë më vonë). Fakti është se sistemi i drejtuesve UEFI është mjaft i thjeshtë. Nuk ka gjë të tillë si montimi i një sistemi skedari ose shoqërimi i një drejtuesi me një pajisje specifike. Ekziston një thirrje sistemi me emrin konvencional Map, i cili merr me radhë secilin drejtues dhe përpiqet ta shoqërojë atë me të gjitha, të paktën pajisjet e përshtatshme. Dhe nëse shoferi ishte në gjendje të merrte pajisjen, atëherë krijohet një hartë - një rekord lidhës. Pikërisht kështu duhet të inicializohet drejtuesi i sapo ngarkuar në një grumbull të përbashkët me të gjithë të tjerët. Dhe gjithçka që ju nevojitet është të vendosni një bit (LOAD_OPTION_FORCE_RECONNECT) në 1 në rekordin e nisjes së shoferit dhe UEFI do ta bëjë këtë rimarrë globale pasi ta ngarkojë atë.

Por kjo nuk është aq e lehtë për t'u bërë. Shërbimi standard efibootmgr (i cili përdoret për të konfiguruar menaxherin e shkarkimit UEFI) nuk di se si (ose më mirë, nuk e di se si) ta vendosë këtë bit. Më duhej ta instaloja manualisht përmes një procedure mjaft të ndërlikuar dhe të rrezikshme.

Dhe edhe një herë, pasi u përpoqa ta bëja me duart e mia, nuk durova dot dhe u zyrtarizova problem në GitHub duke u kërkuar zhvilluesve të shtojnë këtë veçori.

Kaluan disa ditë, por askush nuk ia vuri veshin kërkesës sime. Dhe nga kurioziteti, shikova kodin burimor... E forcova dhe kuptova në gjunjë se si ta shtoja këtë veçori... "Në gjunjët e mi" sepse nuk instalova asgjë të tillë dhe redaktova burimin kodi direkt në shfletues.

Unë e njoh C (gjuhën e programimit) shumë sipërfaqësisht, por skicova një zgjidhje të përafërt (kryesisht copy-paste) ... dhe më pas mendova - të paktën unë ndoshta kam shumë gabime atje (përpjekjet e mia të kaluara për të redaktuar dikë tjetër Kodi C u plotësua për herë të 10-të) Unë do të lëshoj një Kërkesë tërheqjeje. Epo projektuar.

Dhe atje Travis CI doli të ishte bashkangjitur për të kontrolluar kërkesat për tërheqje. Dhe ai më tha me zell të gjitha gabimet e mia. Epo, nëse ka gabime të njohura, nuk ka nevojë ta rregulloni atë: përsëri, menjëherë në shfletues dhe në përpjekjen e katërt kodi funksionoi (një arritje për mua).

Dhe ashtu si kjo, pa u larguar nga shfletuesi, formatova një kërkesë shumë reale për tërheqje në një mjet që përdoret pothuajse në të gjitha shpërndarjet moderne Linux.

U befasova nga fakti që, pa e ditur vërtetë gjuhën, pa vendosur asgjë (varësitë kërkojnë mjaft biblioteka për montim) dhe pa e drejtuar asnjëherë kompajlerin, thjesht "kodova" një veçori plotësisht funksionale dhe të dobishme në shfletuesi.

Megjithatë, kërkesa ime mbeti pa përgjigje që më 19 mars 2019 dhe tashmë kisha filluar ta harroj.

Por dje kjo kërkesë iu shtua masterit.

Pra, për çfarë është historia ime? Dhe ai po flet për faktin se, brenda kornizës së teknologjive moderne, doli që kodi i vërtetë tashmë mund të shkruhet në shfletues, pa vendosur ndonjë mjet zhvillimi dhe varësi në vend.

Për më tepër, duhet të pranoj, kjo është tashmë kërkesa ime e dytë tërheqëse për shërbimet e njohura (të paktën në qarqe të ngushta). Herën e fundit, kërkesa ime për të korrigjuar shfaqjen e disa fushave në ndërfaqen e internetit SyncThing rezultoi në modifikimin tim fjalë për fjalë me një rresht në një mjedis që nuk e njoh fare.

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, te lutem

A duhet të shkruaj më shumë apo jo?

  • po

  • nuk ia vlen

294 përdorues kanë votuar. 138 përdorues abstenuan.

Burimi: www.habr.com

Shto një koment