Будучыня ўжо тут ці кадзім прама ў браўзэры

Раскажу аб кур'ёзнай сітуацыі, якая здарылася са мной, і аб тым як стаць канрыб'ютарам у вядомы праект.

Не так даўно важдаўся я з адной ідэяй: загрузка Linux непасрэдна з UEFI…
Ідэя не новая і ёсць некаторая колькасць мануалаў на гэтую тэму. Адзін з іх можна паглядзець тут

Уласна мае даўнія спробы вырашыць гэтае пытанне выліліся ў цалкам аформленае рашэнне. Рашэнне суцэль працоўнае і я яго выкарыстоўваю на часткі сваіх хатніх машын. Крыху больш падрабязна гэтае рашэнне апісана тут.

Сутнасць UEFI-Boot у тым, што ESP (EFI System Partition) частка сумяшчаецца з каталогам /boot. Г.зн. усе ядры, і выявы пачатковай загрузкі (initrd) размяшчаюцца на той самай частцы з якога UEFI можа запускаць выкананыя файлы і ў прыватнасці запускаць загрузнікі сістэмы. Але само ядро ​​Linux ужо ў шматлікіх дыстрыбутывах збіраецца з опцыяй UEFISTUB, якая дазваляюць само ядро ​​запусціць з UEFI.

Ёсць у гэтага рашэння адзін непрыемны момант – ESP частка адфарматаваная ў FAT32, на якой немагчыма стварыць жорсткія спасылкі (якія сістэма стварае рэгулярна пры абнаўленні initrd). І нічога асоба крымінальнага ў гэтым няма, але бачыць папярэджанні сістэмы пры абнаўленні кампанентаў ядра - не вельмі то прыемна…

Ёсць і іншы шлях.

Мэнэджар загрузкі UEFI (той самы куды трэба прапісаць загрузнік АС) умее акрамя загрузнікаў/ядзер Linux загружаць яшчэ і драйверы. Так што можна загрузіць драйвер той файлавай сістэмы, дзе ў вас ляжыць /boot і прама адтуль загружаць ядро ​​сродкамі UEFI. Драйвер, само сабой, трэба пакласці ў падзел ESP. Прыкладна гэтым і займаюцца загрузнікі тыпу GRUB. Але разыначка як раз у тым што ўсе часта выкарыстоўваныя функцыі GRUB ужо ёсць у UEFI. Дакладней у яго мэнэджэра загрузкі. А калі быць яшчэ занудней, то ў мэнэджара загрузкі UEFI ёсць нават больш магчымасцяў у некаторых пытаннях.

Быццам бы прыгожае рашэнне, але ёсць адно "АЛЕ" (дакладней было, але пра гэта пазней). Справа ў тым, што сістэма драйвераў UEFI уладкованая даволі немудрагеліста. Там няма такога паняцця як мантаванне файлавай сістэмы ці звязванне драйвера з канкрэтнай прыладай. Тамака ёсць сістэмны выклік з умоўным імем Map (ангел.) які бярэ па чарзе кожны драйвер і спрабуе звязаць яго са ўсімі, худа-бедна падыходнымі прыладамі. І калі драйвер прылада змог падчапіць, тое ствараецца мапінг - злучны запіс. Менавіта так у агульнай кучы са ўсімі астатнімі і павінен ініцыялізавацца ізноў загружаны драйвер. І вось усяго вось і трэба - у загрузным запісе драйвера паставіць адзін біт (LOAD_OPTION_FORCE_RECONNECT) у 1 і UEFI пасля яго загрузкі зробіць гэты самы глабальны ремап.

Толькі вось зрабіць гэта не так проста. Стандартная ўтыліта efibootmgr (сродкамі якой і вырабляецца налада мэнэджара разгрузкі UEFI) не ўмее (дакладней не ўмела) ставіць гэты біт. Даводзілася рукамі яго ставіць праз даволі складаную і небясьпечную працэдуру.

І вось у чарговы раз паспрабаваўшы зрабіць гэта рукамі я не вытрымаў і аформіў issue на GitHub з просьбай да распрацоўшчыкаў дадаць гэтую магчымасць.

Прайшло некалькі дзён, але на маю просьбу ніхто не звярнуў увагу. І я з цікаўнасці зірнуў на зыходнікі… фаркнуў, ды і прыкінуў "на каленках" як гэтую фічу дадаць… "На каленках" таму што нічога такога сабе не ставіў і прама ў браўзэры зыходнікі рэдагаваў.

C (мова праграмавання) я ведаю вельмі павярхоўна, але прыкладна рашэнне накідаў (пераважна копі-пастам)… ну а потым падумалася — а хоць у мяне тамака напэўна куча памылак (мінулыя мае спробы кіраваць чужы C-код збіраліся разы з 10-го) аформлю я Pull Request. Ну і аформіў.

А тамака апынуўся прыкручаны Travis CI на праверку пул рэквестаў. І ён мне старанна ўсе мае памылкі выдаў. Ну калі вядомыя памылкі - што б і не паправіць: зноў прама ў браўзэры, і з чацвёртай спробы код сабраўся (дасягненне для мяне).

І вось так, не вылазячы з браўзэра, я аформіў суцэль рэальны Pull Request ва ўтыліту, якой карыстаюцца практычна ва ўсіх сучасных дыстрыбутывах Linux.

Мяне самога здзівіў той факт што я, толкам не ведаючы мовы, і нічога ў сябе не наладжваючы (там па залежнасцях не малы пачак бібліятэк для зборкі патрэбна) і не разу нават кампілятар не запускаючы, проста ў браўзэры "накадзіў" суцэль працоўную і карысную фічу .

Аднак рэквест мой вісеў без рэакцыі з 19 сакавіка 2019 г., і я ўжо пачаў пра яго забываць.

Але вось учора гэты рэквест дадалі ў master.

Дык пра што ж маё апавяданне. А ён пра тое, што ў рамках сучасных тэхналогій аказалася, што рэальны код ужо можна пісаць у браўзэры, не разгортваючы лакальна ніякіх дэвелаперскіх інструментаў і залежнасцяў.

Прычым, трэба прызнацца, гэта ўжо другі мой пул рэквест у вядомыя (прынамсі ў вузкіх кругах) утыліты. Мінулы раз мая просьба паправіць адлюстраванне некаторых палёў у web-інтэрфейсе SyncThing вылілася ў маю літаральна адно-малую праўку ў асяроддзі, якую я наогул не ведаю.

Толькі зарэгістраваныя карыстачы могуць удзельнічаць у апытанні. Увайдзіце, Калі ласка.

Пісаць яшчэ ці не варта

  • ды

  • не варта

Прагаласавалі 294 карыстальніка. Устрымаліся 138 карыстальнікаў.

Крыніца: habr.com

Дадаць каментар