Ես կխոսեմ իմ աշխատանքային կայանում տեղական մեկուսացված զարգացման միջավայրեր կազմակերպելու մոտեցման մասին: Մոտեցումը մշակվել է հետևյալ գործոնների ազդեցության ներքո.
Տարբեր լեզուներ պահանջում են տարբեր IDE-ներ և գործիքների շղթաներ.
Տարբեր նախագծեր կարող են օգտագործել գործիքների շղթաների և գրադարանների տարբեր տարբերակներ:
Մոտեցումը կայանում է նրանում, որ մշակվի LXD կոնտեյներների ներսում, որոնք աշխատում են նոութբուքի կամ աշխատակայանի վրա, որտեղ գրաֆիկական ելքը վերահղված է դեպի հյուրընկալողը:
Օրինակ կոնֆիգուրացիա Ubuntu 20.04.
Մտորումներ տարբերակների և պատճառների վերաբերյալ տրված են հոդվածի վերջում:
1. LXD տեղադրում
В Ubuntu 20.04 LXD-ն այլևս հասանելի չէ տեղադրման համար որպես deb փաթեթ, միայն snap-ի միջոցով.
$ snap install lxd
Տեղադրվելուց հետո դուք պետք է կատարեք նախնականացում.
$ lxd init
Միակ պարամետրը, որը ես փոխում եմ, դա է storage bakend - Ես օգտագործում եմ dir որպես ամենապարզ. Քանի որ ես չեմ օգտագործում նկարներ և պատճեններ, նախազգուշացումները փաստաթղթավորում Նրանք ինձ չեն վախեցնում.
Նմանապես, գրացուցակի հետնամասը պետք է դիտարկվի որպես վերջին միջոց:
Այն աջակցում է LXD-ի բոլոր հիմնական հնարավորություններին, բայց ահավոր դանդաղ է և անարդյունավետ, քանի որ չի կարող կատարել
ակնթարթային պատճեններ կամ ակնթարթային նկարներ, և, հետևաբար, պետք է ամեն անգամ պատճենել օրինակի պահեստի ամբողջությունը:
2. LXD պրոֆիլի կարգավորում
Պրոֆիլներ LXD-ում — սրանք պարամետրերի մի շարք են, որոնք կիրառվում են մի քանի բեռնարկղերի վրա: Իմ կարիքների համար ինձ բավարար է լռելյայնորեն ստեղծված միակ պրոֆիլը default հետևյալ փոփոխություններով.
$ lxc profile device add default X0 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0 — այնպես, որ բեռնարկղերի հավելվածները կարողանան փոխազդել հյուրընկալող X11 սերվերի հետ;
$ lxc profile set default environment.DISPLAY :0 - այնպես, որ շրջակա միջավայրի փոփոխականը DISPLAY ճիշտ տեղադրվել է տարաներում;
Պատկերի հիման վրա կոնտեյների ստեղծում images:ubuntu/20.04:
$ lxc launch images:ubuntu/20.04 dev1
Ես նախընտրում եմ պատկերները պահոցից https://images.linuxcontainers.org, քանի որ նրանք ունեն ավելի քիչ նախապես տեղադրված ծրագրեր: Այդ իսկ պատճառով ես ավելացրի նախածանցը images: պատկերի անվանը: Ubuntu-ի պահոցից պատկերի հիման վրա կոնտեյների ստեղծումը կարող է կատարվել հետևյալ կերպ. $ lxc launch ubuntu/20.04 dev1.
Բոնուս: Բավականին հեշտ է GPU-ն գցել կոնտեյների մեջ, որպեսզի դրանում աշխատող հավելվածները կարողանան օգտագործել գրաֆիկական քարտը: Դա անելու համար ձեզ հարկավոր է.
Հավելվածի պատուհանները կցուցադրվեն հոսթի վրա, բայց դրանք կկատարվեն կոնտեյների ներսում՝ նման է ssh-ի միջոցով գրաֆիկայի վերահասցեավորմանը:
Ես ձեռքով չեմ անջատում գործող բեռնարկղերը, քանի որ դրա մեջ մեծ իմաստ չեմ տեսնում. ես սահմանափակվում եմ գործարկվող հավելվածների պատուհանները փակելով:
5. Եզրակացություն
Ես նախընտրում եմ չօգտագործել հյուրընկալող OS մշակման համար, քանի որ դա կպահանջի մշակման գործիքների տեղադրում, գրադարանների վրիպազերծման տարբերակները, համակարգի բաղադրիչները հատուկ ձևով կարգավորելը և այլ մանիպուլյացիաներ: Այս ամենը կարող է հանգեցնել անսպասելի պահվածքի այլ ոչ մշակման ծրագրերում կամ նույնիսկ ամբողջ ՕՀ-ում: Օրինակ, OpenSSL կազմաձևման փոփոխությունները կարող են հանգեցնել ՕՀ-ի ճիշտ գործարկման դադարեցմանը:
Զարգացման միջավայրերը մեկուսացնելու համար ես փորձել եմ տարբեր գործիքներ.
վիրտուալ մեքենաները (KVM, VirtualBox և այլն) ամենաակնառու տարբերակն են, բայց դրանք զգալիորեն ավելի շատ ռեսուրսներ են սպառում, չնայած Windows-ի տակ զարգացման այլ տարբերակներ չկան (եթե հոսթինգը Linux է);
ամպի մշակման գործիքներ, որոնք աշխատում են տեղական մեքենայի վրա (Cloud9 կոնտեյներով կամ վիրտուալ մեքենայում, Eclipse Che և այլն) - դրանք մշակված չեն գործողության այս ռեժիմի համար, դրանք պահանջում են լրացուցիչ կազմաձևում և սպասարկում, ավելի լավ է դրանք օգտագործել իրենց նախատեսվածի համար: նպատակը - ամպի մեջ;
Docker բեռնարկղերը կրկին նախատեսված են այլ բանի համար, իմ կարծիքով, դրանք այնքան էլ հարմար չեն արագ նախատիպերի համար՝ օգտագործելով ծրագրակազմ, որը դեռ փաթեթավորված չէ առանձին տարաներում:
Ընտրված մոտեցումն ինձ տպավորում է իր պարզությամբ և մուտքի ցածր խոչընդոտով: Կոնտեյներներում դուք կարող եք օգտագործել ծրագրին հատուկ մոտեցումներ. տեղադրել և կարգավորել ամեն ինչ ձեռքով, կամ օգտագործել ավտոմատացում (Puppet, Ansible և այլն), նույնիսկ տեղակայել: Docker-ի վրա հիմնված ենթակառուցվածք. Ես նաև օգտագործում եմ LXD կոնտեյներներ հատուկ ծրագրակազմ գործարկելու համար, որը կա՛մ պահանջում է մեծ թվով կախվածությունների կամ ՕՀ-ի այլ տարբերակի տեղադրում. այս դեպքում դուք կարող եք ստեղծել կոնտեյներ OS-ի ցանկալի տարբերակով, օրինակ. $ lxc launch images:ubuntu/16.04 dev16.
Կարևոր է հիշել, որ մեկուսացման առումով կոնտեյներացումն ավելի մեծ հարձակման մակերես ունի՝ համեմատած վիրտուալացման հետ. հոսթն ու կոնտեյները կիսում են մեկ միջուկ, խոցելիություն, որը կարող է թույլ տալ չարամիտ ծրագրերին փախչել կոնտեյներից: Կասկածելի ծրագրերի հետ փորձեր կատարելիս ավելի լավ է օգտագործել մեկուսացման ավելի համապատասխան մեխանիզմներ: