Izolimi i mjediseve të zhvillimit përmes kontejnerëve LXD

Do të flas për qasjen në organizimin e mjediseve të izoluara lokale të zhvillimit në stacionin tim të punës. Qasja u formua nën ndikimin e faktorëve të mëposhtëm:

  • pĂ«r gjuhĂ« tĂ« ndryshme nevojiten IDE dhe toolchains tĂ« ndryshme;
  • nĂ« projekte tĂ« ndryshme mund tĂ« pĂ«rdoren versione tĂ« ndryshme tĂ« toolchain-Ă«ve dhe bibliotekave.

Qasja qëndron në zhvillimin brenda kontejnerëve LXD të drejtuar lokal në laptopin ose stacionin tim të punës, me ridrejtimin e daljes së grafikës në host.

Konfigurimi me një shembull Ubuntu 20.04.

Reflektimet mbi opsionet dhe arsyet janë prezentuar në fund të artikullit.

1. Instalimi i LXD

Në Ubuntu 20.04 LXD nuk është më i disponueshëm për instalim si paketë deb, vetëm përmes snap:

$ snap install lxd

Pas instalimit, duhet të kryejmë inicializimin:

$ lxd init

Parametri i vetĂ«m qĂ« ndryshoj Ă«shtĂ« storage backend — unĂ« pĂ«rdor dir si opsionin mĂ« tĂ« thjeshtĂ«. Duke qenĂ« se nuk pĂ«rdor snapshot dhe kopje, paralajmĂ«rimet nĂ« dokumentacionin nuk mĂ« frikĂ«sojnĂ«:

Po ashtu, backend-i i drejtorisë duhet të merret në konsideratë si një opsion i fundit.
Mbështet të gjitha funksionalitetet kryesore të LXD, por është mjaft i ngadaltë dhe i pastrukturuar pasi nuk mund të kryejë
kopje të menjëhershme ose snapshot dhe kështu duhet të kopjojë gjithë hapësirën e ruajtjes së instancës çdo herë.

2. Konfigurimi i profilit LXD

Profile në LXD janë grupe parametrash të aplikuara në disa kontejnerë. Për nevojat e mia, mjafton një profil i vetëm i krijuar në mënyrë të paracaktuar default me këto ndryshime:

  • $ lxc profile device add default X0 disk source=\/tmp\/.X11-unix\/X0 path=\/tmp\/.X11-unix\/X0 — qĂ« aplikacionet nĂ« kontejnerĂ« tĂ« mund tĂ« ndĂ«rveprojnĂ« me serverin X11 tĂ« hostit;
  • $ lxc profile set default environment.DISPLAY :0 — qĂ« variabla e ambientit DISPLAY nĂ« kontejnerĂ« tĂ« jetĂ« e vendosur saktĂ«sisht;
  • $ lxc profile set default raw.idmap "both 1000 1000" — pĂ«r mapimin e saktĂ« tĂ« identifikuesve 3. Krijimi dhe konfigurimi i kontejnerit.

Krijimi i kontejnerit nga imazhi

images:ubuntu\/20.04 $ lxc launch images:ubuntu\/20.04 dev1:

Unë preferoj imazhet nga repozitori

, sepse kanë më pak soft të parainstaluar. Për këtë arsye, kam shtuar një prefiks https://images.linuxcontainers.orgnë emrin e imazhit. Krijimi i një kontejneri nga një imazh në repozitorin Ubuntu mund të realizohet në këtë mënyrë: images: $ lxc launch ubuntu\/20.04 dev1 Qasja në shell-in e root-it të kontejnerit:.

$ lxc exec dev1 -- bash

Do të instaloj Firefox dhe VS Code (nga repozitori

sip me udhĂ«zimin sipas udhĂ«zimeve):

$ apt update
$ apt install curl gpg firefox

$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
$ install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list

$ apt update
$ apt install code

Do ta e aktivizoj kontejnerin për përshkrim vizual

ndezje

Bonus! ËshtĂ« mjaft e thjeshtĂ« tĂ« kalosh GPU nĂ« kontejner, nĂ« mĂ«nyrĂ« qĂ« aplikacionet e drejtuara atje tĂ« mund tĂ« pĂ«rdorin kartĂ«n grafike. PĂ«r kĂ«tĂ«, ke nevojĂ«:

  • shto pajisjen $ lxc config device add dev1 mygpu gpu;
  • instalo driverat e kartĂ«s grafike nĂ« kontejner — ato tĂ« njĂ«jtat qĂ« janĂ« instaluar nĂ« host.

4. Përdorimi i kontejnerit

Nëse kontejneri ende nuk është nisur, duhet ta nisesh atë:

lxc start dev1

Nisja e VS Code me emrin e përdoruesit të pafavorizuar ubuntu:

lxc exec dev1 -- sudo --login --user ubuntu code

Nisja e Firefox-it:

lxc exec dev1 -- sudo --login --user ubuntu firefox

Dritaret e aplikacioneve do tĂ« shfaqen nĂ« host, por ato do tĂ« ekzekutohen brenda kontejnerit — ashtu si kalimi i grafikĂ«s me ssh.

Nuk i fik manualisht kontejnerĂ«t e nisur, pasi nuk shoh ndonjĂ« kuptim tĂ« veçantĂ« nĂ« kĂ«tĂ« — mjafton tĂ« mbyll dritaret e aplikacioneve tĂ« nisura.

5. Përfundim

Preferoj të mos përdor sistemin operativ të hostit për zhvillim, pasi do të kërkonte instalimin e paketave të zhvillimit, versioneve të gabueshme të biblioteka, konfigurimin e komponentëve të sistemit në një mënyrë specifike dhe manipulime të tjera. Të gjitha këto mund të çojnë në sjellje të papritur të softuerit tjetër që nuk ka të bëjë me zhvillimin, madje edhe të sistemit operativ tërësisht. Për shembull, ndryshimet në konfigurimin e OpenSSL mund të çojnë në atë që OS nuk nis më siç duhet.

Kam provuar mjete të ndryshme për izolimin e mjediseve të zhvillimit:

  • makina virtuale (KVM, VirtualBox etj.) — opsioni mĂ« i dukshĂ«m, por konsumon shumĂ« mĂ« tepĂ«r burime, ndonĂ«se pĂ«r zhvillimin nĂ«n Windows (nĂ«se hosti Ă«shtĂ« Linux) nuk ka opsione tĂ« tjera;
  • mjetet e zhvillimit tĂ« cloud-it tĂ« nisura nĂ« makinĂ«n lokale (Cloud9 nĂ« kontejner apo makinĂ« virtuale, Eclipse Che etj.) — ato nuk janĂ« zhvilluar pĂ«r njĂ« mod tĂ« tillĂ« pune, kĂ«rkojnĂ« konfigurim tĂ« mĂ«tejshĂ«m dhe mbĂ«shtetje, Ă«shtĂ« mĂ« mirĂ« t'i pĂ«rdorĂ«sh siç duhet — nĂ« cloud;
  • kontainerĂ«t Docker — pĂ«rsĂ«ri janĂ« tĂ« destinuara pĂ«r diçka tjetĂ«r, sipas mendimit tim nuk janĂ« shumĂ« tĂ« pĂ«rshtatshme pĂ«r tĂ« prototipuar shpejt me programin qĂ« nuk Ă«shtĂ« paketuar ende nĂ« kontainerĂ« tĂ« veçantĂ«.

Qasja e zgjedhur mĂ« pĂ«lqen pĂ«r thjeshtĂ«sinĂ« dhe pragun e ulĂ«t tĂ« hyrjes. NĂ« vetĂ« kontainerĂ«t mund tĂ« aplikohet qasje specifike pĂ«r projekte: tĂ« instalosh dhe konfigurash gjithçka manualisht, ose tĂ« aplikosh automatizimin (Puppet, Ansible etj.), madje edhe tĂ« zhvillosh infrastrukturĂ«n mbi bazĂ«n e Docker.UnĂ« pĂ«rdor kontainerĂ«t LXD gjithashtu pĂ«r tĂ« drejtuar software specifik qĂ« ose kĂ«rkon instalimin e njĂ« numri tĂ« madh varĂ«sish, ose njĂ« version tjetĂ«r tĂ« OS — nĂ« kĂ«tĂ« rast, mund tĂ« krijosh njĂ« kontainer me versionin e nevojshĂ«m tĂ« sistemit operativ, pĂ«r shembull $ lxc launch images:ubuntu/16.04 dev16.

ËshtĂ« e rĂ«ndĂ«sishme tĂ« mbahet mend se, nĂ« aspektin e izolimit, containerizimi ka njĂ« sipĂ«rfaqe tani mĂ« tĂ« madhe sulmi krahasuar me virtualizimin — hosti dhe kontaineri ndajnĂ« njĂ« bĂ«rthamĂ«, njĂ« dobĂ«si nĂ« tĂ« cilĂ«n mund tĂ« lejojĂ« softuerin e dĂ«mshĂ«m tĂ« shpĂ«tojĂ« nga konteneri. PĂ«r eksperimente me software tĂ« dyshimtĂ«, Ă«shtĂ« mĂ« mirĂ« tĂ« pĂ«rdoren mekanizma izolimi mĂ« tĂ« pĂ«rshtatshĂ«m.

Useful links

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster