Ապագան արդեն այստեղ է կամ կոդն անմիջապես բրաուզերում է

Ես ձեզ կպատմեմ ինձ հետ պատահած մի զվարճալի իրավիճակի մասին և ինչպես դառնալ հայտնի նախագծի մասնակից:

Ոչ վաղ անցյալում ես մտածում էի մի գաղափարի մասին՝ բեռնել Linux-ը անմիջապես UEFI-ից...
Գաղափարը նոր չէ, և կան մի շարք ձեռնարկներ այս թեմայով: Դուք կարող եք տեսնել դրանցից մեկը այստեղ

Փաստորեն, այս հարցը լուծելու իմ երկարամյա փորձերը հանգեցրին միանգամայն պաշտոնականացման որոշում. Լուծումը բավականին արդյունավետ է, և ես այն օգտագործում եմ իմ որոշ տնային մեքենաների վրա: Այս լուծումը նկարագրված է մի փոքր ավելի մանրամասն: այստեղ.

UEFI-Boot-ի էությունն այն է, որ ESP (EFI System Partition) բաժանումը համակցված է /boot գրացուցակի հետ: Նրանք. բոլոր միջուկները և bootstrap պատկերները (initrd) գտնվում են միևնույն բաժանման վրա, որտեղից UEFI-ն կարող է գործարկել գործարկվող ֆայլեր և, մասնավորապես, գործարկել համակարգի boot loaders: Բայց Linux միջուկն ինքնին շատ բաշխումներում արդեն հավաքված է UEFISTUB տարբերակով, որը թույլ է տալիս բուն միջուկը գործարկել UEFI-ից:

Այս լուծումը ունի մեկ տհաճ պահ՝ ESP միջնորմը ֆորմատավորված է FAT32-ով, որի վրա անհնար է կոշտ հղումներ ստեղծել (որոնք համակարգը պարբերաբար ստեղծում է initrd-ը թարմացնելիս)։ Եվ սրա մեջ առանձնապես հանցավոր բան չկա, բայց միջուկի բաղադրիչները թարմացնելիս համակարգի նախազգուշացումներ տեսնելը այնքան էլ հաճելի չէ...

Մեկ այլ ճանապարհ էլ կա.

UEFI boot manager-ը (նույնը, որտեղ դուք պետք է գրանցեք OS bootloader-ը) կարող է, բացի bootloaders/Linux միջուկներից, բեռնել նաև դրայվերներ: Այսպիսով, դուք կարող եք բեռնել վարորդը ֆայլային համակարգի համար, որտեղ դուք ունեք /boot և բեռնել միջուկը անմիջապես այնտեղից՝ օգտագործելով UEFI: Վարորդը, իհարկե, պետք է տեղադրվի ESP միջնորմում: Սա մոտավորապես այն է, ինչ անում են GRUB-ի նման բեռնիչները: Բայց կարևորն այն է, որ GRUB-ի հաճախ օգտագործվող բոլոր գործառույթներն արդեն UEFI-ում են: Ավելի ճիշտ՝ իր ներբեռնման մենեջերում։ Եվ ավելի ձանձրալի լինելու համար, UEFI-ի բեռնախցիկի կառավարիչը որոշ հարցերում էլ ավելի մեծ հնարավորություններ ունի:

Թվում է, թե դա գեղեցիկ լուծում է, բայց կա մեկ «ԲԱՅՑ» (ավելի ճիշտ, դա եղել է, բայց դրա մասին ավելի ուշ): Փաստն այն է, որ UEFI վարորդական համակարգը բավականին պարզ է: Չկա այնպիսի բան, ինչպիսին է ֆայլային համակարգ մոնտաժելը կամ դրայվերը կոնկրետ սարքի հետ կապելը: Գոյություն ունի «Քարտեզ» պայմանական անունով համակարգային զանգ, որը հերթով վերցնում է յուրաքանչյուր վարորդին և փորձում այն ​​կապել բոլոր, գոնե հարմար սարքերի հետ: Իսկ եթե վարորդը կարողացել է վերցնել սարքը, ապա ստեղծվում է քարտեզագրում՝ միացնող գրառում։ Հենց այսպես պետք է նոր բեռնված դրայվերը նախաստորագրվի բոլոր մյուսների հետ ընդհանուր կույտում: Եվ այն ամենը, ինչ ձեզ հարկավոր է, դրայվերի բեռնման գրառման մեջ մեկ բիթ (LOAD_OPTION_FORCE_RECONNECT) դնել 1-ի վրա, և UEFI-ն կկատարի այս գլոբալ վերափոխումը այն բեռնելուց հետո:

Բայց դա այնքան էլ հեշտ չէ անել։ Ստանդարտ efibootmgr կոմունալ ծրագիրը (որն օգտագործվում է UEFI բեռնաթափման կառավարիչը կարգավորելու համար) չգիտի, թե ինչպես (ավելի ճիշտ, չգիտեի ինչպես) կարգավորել այս բիթը: Ես ստիպված էի այն ձեռքով տեղադրել բավականին բարդ և վտանգավոր ընթացակարգի միջոցով:

Եվ ևս մեկ անգամ, փորձելով դա անել իմ ձեռքերով, ես չդիմացա և ֆորմալացրի խնդիր GitHub-ում ծրագրավորողներին խնդրելով ավելացնել այս հատկությունը:

Անցավ մի քանի օր, բայց ոչ ոք ուշադրություն չդարձրեց իմ խնդրանքին։ Եվ հետաքրքրությունից դրդված, ես նայեցի սկզբնաղբյուրը... Ես այն ճեղքեցի և իմ ծնկների վրա հասկացա, թե ինչպես ավելացնել այս հատկությունը... «On my knees», քանի որ ես նման բան չեմ տեղադրել և խմբագրել եմ աղբյուրը: կոդը անմիջապես բրաուզերում:

Ես շատ մակերեսորեն գիտեմ C-ն (ծրագրավորման լեզուն), բայց մոտավոր լուծում գծեցի (հիմնականում copy-paste)... և հետո մտածեցի. համենայնդեպս, ես երևի շատ սխալներ ունեմ այնտեղ (ուրիշին խմբագրելու իմ անցյալ փորձերը): C ծածկագիրը լրացվել է մոտավորապես 10-րդ անգամ) Ես կհրապարակեմ «Pull Request»: Դե, նախագծված.

Եվ ահա, պարզվեց, որ Travis CI-ն կցված է ձգման հարցումները ստուգելու համար: Եվ նա ջանասիրաբար պատմեց ինձ իմ բոլոր սխալները։ Դե, եթե կան հայտնի սխալներ, կարիք չկա շտկելու այն. կրկին, հենց բրաուզերում, և չորրորդ փորձից կոդը աշխատել է (ձեռքբերում է ինձ համար):

Եվ հենց այդպես, առանց բրաուզերից դուրս գալու, ես ֆորմատավորեցի շատ իրական Pull Request-ը կոմունալ ծրագրի մեջ, որն օգտագործվում է գրեթե բոլոր ժամանակակից Linux բաշխումներում:

Ինձ զարմացրեց այն փաստը, որ առանց լեզուն իրականում իմանալու, առանց որևէ բան տեղադրելու (կախվածությունները հավաքելու համար բավականին շատ գրադարաններ են պահանջում) և նույնիսկ առանց կոմպիլյատորը գործարկելու, ես պարզապես «կոդավորեցի» միանգամայն գործող և օգտակար գործառույթը: բրաուզերը .

Սակայն խնդրանքս անպատասխան մնաց 19 թվականի մարտի 2019-ից, և ես արդեն սկսել էի մոռանալ դրա մասին։

Բայց երեկ այս խնդրանքը ավելացվել է վարպետին։

Այսպիսով, ինչի՞ մասին է իմ պատմությունը: Եվ նա խոսում է այն մասին, որ ժամանակակից տեխնոլոգիաների շրջանակներում պարզվել է, որ բրաուզերում արդեն իսկ կարելի է գրել իրական կոդ՝ առանց տեղակայելու զարգացման որևէ գործիք և կախվածություն:

Ավելին, պետք է խոստովանեմ, որ սա արդեն իմ երկրորդ խնդրանքն է հայտնի (գոնե նեղ շրջանակներում) կոմունալ ծառայությունների համար: Անցյալ անգամ SyncThing վեբ ինտերֆեյսի որոշ դաշտերի ցուցադրումը շտկելու իմ խնդրանքը հանգեցրեց իմ բառացիորեն մեկ տողով խմբագրմանը մի միջավայրում, որն ընդհանրապես չգիտեմ:

Հարցմանը կարող են մասնակցել միայն գրանցված օգտվողները։ Մուտք գործել, խնդրում եմ:

Ավելին գրե՞մ, թե՞ ոչ։

  • այո

  • չարժե այն

Քվեարկել է 294 օգտատեր։ 138 օգտատեր ձեռնպահ է մնացել։

Source: www.habr.com

Добавить комментарий