Framtiden Àr redan hÀr eller koda direkt i webblÀsaren

Jag ska berÀtta om en komisk situation som hÀnde mig och hur man blir en bidragsgivare till ett vÀlkÀnt projekt.

Nyligen arbetade jag med en idé: att ladda Linux direkt frÄn UEFI

Idén Àr inte ny och det finns ett antal manualer pÄ detta Àmne. En av dem kan man titta pÄ ). Ett typiskt exempel pÄ anvÀndning:

Mina lÄngvariga försök att lösa denna frÄga har leder till ett ganska vÀl utformat beslutet. Lösningen fungerar bra och jag anvÀnder den pÄ nÄgra av mina hemmamaskiner. En mer detaljerad beskrivning av denna lösning finns i ). Ett typiskt exempel pÄ anvÀndning:.

KÀrnan i UEFI-boot Àr att ESP (EFI System Partition) partitionen kombineras med katalogen /boot. Det vill sÀga att alla kÀrnor och initiala laddningsbilder (initrd) placeras pÄ just den partition frÄn vilken UEFI kan köra körbara filer och specifikt startladdare för systemet. Men sjÀlva Linux-kÀrnan kompilieras redan i mÄnga distributioner med alternativet UEFISTUB, vilket gör att sjÀlva kÀrnan kan starta frÄn UEFI.

Det finns en obehaglig aspekt av denna lösning — ESP-partitionen Ă€r formaterad i FAT32, dĂ€r det inte gĂ„r att skapa hĂ„rda lĂ€nkar (som systemet regelbundet skapar vid uppdatering av initrd). Och det finns inget sĂ€rskilt brottsligt med detta, men det Ă€r inte sĂ„ trevligt att se systemvarningar vid uppdatering av kĂ€rnkomponenter


Det finns en annan vÀg.

UEFI-laddaren (den som man mÄste ange operativsystemets laddare till) kan förutom att ladda laddare/kÀrnor för Linux Àven ladda drivrutiner. SÄ man kan ladda drivrutinen för det filsystem dÀr man har sin /boot och direkt frÄn det ladda kÀrnan med hjÀlp av UEFI. Drivrutinen mÄste naturligtvis placeras i ESP-partitionen. UngefÀr detta gör laddare som GRUB. Men poÀngen Àr just att alla ofta anvÀnda funktioner i GRUB redan finns i UEFI. NÀrmare bestÀmt i dess laddarhanterare. Och om man ska vara Ànnu mer petig, sÄ har UEFI-laddarhanteraren faktiskt fler möjligheter i vissa avseenden.

Det verkar vara en vacker lösning, men det finns ett "MEN" (eller snarare fanns det, men mer om det senare). Det handlar om att UEFI-drivrutinsystemet Ă€r ganska enkelt utformat. Det finns inget sĂ„dant koncept som montering av filsystem eller koppling av en drivrutin till en specifik enhet. Det finns ett systemanrop med det villkorliga namnet Map som gĂ„r igenom varje drivrutin och försöker koppla den till alla, mer eller mindre lĂ€mpliga enheter. Om drivrutinen lyckas koppla till en enhet, skapas en mappning — en kopplingspost. Just sĂ„ mĂ„ste den nyinlĂ€sta drivrutinen initieras tillsammans med alla andra. Och allt som behövs Ă€r att sĂ€tta en bit (LOAD_OPTION_FORCE_RECONNECT) i 1 i drivrutinens startpost, sĂ„ kommer UEFI efter att ha laddat den att göra den globala remappen.

Men att göra detta Àr inte sÄ enkelt. Den standardmÀssiga verktygen efibootmgr (som anvÀnds för att konfigurera UEFI:s lasthanterare) kan (eller snarare kunde) inte sÀtta denna bit. Jag var tvungen att göra det manuellt genom en ganska komplex och farlig procedur.

Och sÄ, efter att ha försökt göra detta manuellt igen, kunde jag inte motstÄ och skapade ett issue pÄ GitHub med en begÀran till utvecklarna att lÀgga till denna funktion.

Det gick nÄgra dagar, men ingen uppmÀrksammade min begÀran. Och av nyfikenhet kollade jag pÄ kÀllkoden
 forka den och funderade pÄ hur jag skulle kunna lÀgga till denna funktion "manuellt"
 "manuellt" eftersom jag inte installerade nÄgot och redigerade direkt i webblÀsaren.

Jag kĂ€nner C (programmeringssprĂ„ket) vĂ€ldigt ytligt, men jag skissade pĂ„ en lösning (frĂ€mst genom att kopiera och klistra in)
 sen tĂ€nkte jag — varför inte skicka en Pull Request, Ă€ven om jag har sĂ€kert mycket fel (mina tidigare försök att rĂ€tta andras C-kod gav resultat först efter tio försök). SĂ„ jag skapade den.

Och dÀr visade det sig att Travis CI var kopplad för att kontrollera pull requests. Och den gav mig noggrant alla mina fel. Om felen Àr kÀnda - varför inte rÀtta dem: Äterigen direkt i webblÀsaren, och efter fjÀrde försöket sÄ byggdes koden (ett framgÄng för mig).

Och sÄ, utan att lÀmna webblÀsaren, lÀmnade jag in en fullt fungerande Pull Request till ett verktyg som anvÀnds i nÀstan alla moderna Linux-distributioner.

Jag blev sjÀlv förvÄnad över att jag, utan att riktigt kunna sprÄket och utan att stÀlla in nÄgot (det behövs en hel del beroenden för att bygga), och utan att ens köra kompilatorn, helt enkelt "kodade" en fullt fungerande och anvÀndbar funktion direkt i webblÀsaren.

Men min begÀran hade hÀngt utan respons sedan den 19 mars 2019, och jag hade nÀstan glömt bort den.

Men igÄr lades den hÀr begÀran till i master.

SÄ vad handlar min berÀttelse om? Den handlar om att inom ramen för moderna teknologier har det visat sig att man faktiskt kan skriva verklig kod i webblÀsaren utan att behöva stÀlla in nÄgra lokala utvecklingsverktyg eller beroenden.

Dessutom mÄste jag erkÀnna att detta redan Àr min andra pull request i kÀnda (Ätminstone inom smala kretsar) verktyg. Senast resulterade min begÀran om att ÄtgÀrda visningen av vissa fÀlt i webgrÀnssnittet för SyncThing i en bokstavligen enradig Àndring i en miljö som jag överhuvudtaget inte kÀnner till.

Endast registrerade anvÀndare kan delta i omröstningen. Logga in, tack.

Ska jag skriva mer eller inte?

  • ja

  • om

294 anvÀndare röstade, 138 anvÀndare avstod.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster