Að einangra þróunarumhverfi með LXD ílátum

Ég mun tala um nálgun við að skipuleggja staðbundið einangrað þróunarumhverfi á vinnustöðinni minni. Aðferðin var þróuð undir áhrifum eftirfarandi þátta:

  • Mismunandi tungumál þurfa mismunandi IDE og verkfærakeðjur;
  • Mismunandi verkefni geta notað mismunandi útgáfur af verkfærakeðjum og bókasöfnum.

Aðferðin er að þróa inni í LXD gámum sem keyra á staðnum á fartölvu eða vinnustöð með grafíkúttak sem vísað er til hýsilsins.

Dæmi um uppsetningu ubuntu 20.04.

Hugleiðingar um valkosti og ástæður eru gefnar í lok greinarinnar.

1. LXD uppsetning

В ubuntu 20.04 LXD er ekki lengur fáanlegt fyrir uppsetningu sem deb pakki, aðeins í gegnum snap:

$ snap install lxd

Eftir uppsetningu þarftu að framkvæma frumstillingu:

$ lxd init

Eina færibreytan sem ég breyti er storage bakend - Ég nota dir sem einfaldasta. Þar sem ég nota ekki myndir og afrit eru viðvaranirnar í skjöl Þeir hræða mig ekki:

Að sama skapi á að líta á bakenda skráasafnsins sem síðasta úrræði.
Það styður alla helstu LXD eiginleika, en er hræðilega hægt og óhagkvæmt þar sem það getur ekki framkvæmt
skyndiafrit eða skyndimyndir og þarf því að afrita alla geymslu tilviksins í hvert skipti.

2. LXD prófíluppsetning

Snið í LXD — þetta eru sett af færibreytum sem notuð eru á nokkra ílát. Fyrir þarfir mínar er eini prófíllinn sem búinn er til sjálfgefið nóg fyrir mig default með eftirfarandi breytingum:

  • $ lxc profile device add default X0 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0 — svo að forrit í gámum geti haft samskipti við hýsil X11 miðlara;
  • $ lxc profile set default environment.DISPLAY :0 - þannig að umhverfisbreytan DISPLAY var sett upp rétt í gámum;
  • $ lxc profile set default raw.idmap "both 1000 1000" - fyrir hið rétta auðkenniskortlagning.

3. Búa til og setja upp gám

Að búa til ílát byggt á mynd images:ubuntu/20.04:

$ lxc launch images:ubuntu/20.04 dev1

Ég vil frekar myndir úr geymslunni https://images.linuxcontainers.org, þar sem þeir hafa minna foruppsettan hugbúnað. Af þessum sökum bætti ég við forskeytinu images: við nafn myndarinnar. Að búa til ílát byggt á mynd úr Ubuntu geymslunni er hægt að gera á eftirfarandi hátt: $ lxc launch ubuntu/20.04 dev1.

Aðgangur að rótarskel ílátsins:

$ lxc exec dev1 -- bash

Ég mun setja upp Firefox og VS kóða (úr geymslunni samkvæmt leiðbeiningum):

$ 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

Ég læt fylgja með ílát til glöggvunar.

poweroff

Bónus! Það er frekar auðvelt að henda GPU í ílát svo að forrit sem keyra í honum geti notað skjákortið. Til að gera þetta þarftu:

  • bæta við tæki $ lxc config device add dev1 mygpu gpu;
  • setja upp skjákorta rekla í gámnum - þeir sömu og eru settir upp á hýsilinn.

4. Að nota ílát

Ef ílátið er ekki enn í gangi þarftu að ræsa það:

lxc start dev1

Keyrir VS kóða sem notandi sem ekki er rót Ubuntu:

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

Ræstu Firefox:

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

Forritsgluggar munu birtast á hýsingaraðilanum, en þeir verða keyrðir inni í gámnum - svipað og áframsendingargrafík með ssh.

Ég loka ekki hlaupandi gámum handvirkt, vegna þess að ég sé ekki mikinn tilgang í því - ég takmarka mig við að loka gluggum keyrandi forrita.

5. Niðurstaða

Ég kýs að nota ekki hýsilstýrikerfi fyrir þróun, þar sem þetta myndi krefjast uppsetningar þróunarverkfæra, kembiútgáfur af bókasöfnum, stilla kerfisíhluti á ákveðinn hátt og önnur meðhöndlun. Allt þetta getur leitt til óvæntar hegðunar í öðrum hugbúnaði sem ekki er í þróun, eða jafnvel öllu stýrikerfinu. Til dæmis geta breytingar á OpenSSL stillingum valdið því að stýrikerfið hættir að byrja rétt.

Ég hef prófað mismunandi verkfæri til að einangra þróunarumhverfi:

  • sýndarvélar (KVM, VirtualBox, o.s.frv.) eru augljósasti kosturinn, en þær eyða umtalsvert meira fjármagni, þó að það séu engir aðrir möguleikar til þróunar undir Windows (ef hýsillinn er Linux);
  • skýjaþróunarverkfæri sem keyra á staðbundinni vél (Cloud9 í gámi eða sýndarvél, Eclipse Che o.s.frv.) - þau eru ekki þróuð fyrir þennan aðgerðarmáta, þau þurfa frekari stillingar og viðhald, það er best að nota þau fyrir tilætluð tilgangur - í skýinu;
  • Docker gámar eru aftur ætlaðir fyrir eitthvað annað; að mínu mati eru þeir ekki mjög þægilegir fyrir fljótlega frumgerð með því að nota hugbúnað sem er ekki enn pakkaður í aðskilda ílát.

Valin nálgun heillar mig með einfaldleika sínum og litlum aðgangshindrunum. Í gámunum sjálfum er hægt að nota verksértækar aðferðir: setja upp og stilla allt handvirkt, eða nota sjálfvirkni (Puppet, Ansible, osfrv.), jafnvel dreifa Innviðir sem byggja á bryggju. Ég nota líka LXD gáma til að keyra sérstakan hugbúnað sem annað hvort krefst þess að setja upp mikinn fjölda ósjálfstæðra eða annarrar stýrikerfisútgáfu - í þessu tilviki geturðu búið til gám með viðkomandi stýrikerfisútgáfu, til dæmis $ lxc launch images:ubuntu/16.04 dev16.

Það er mikilvægt að muna að með tilliti til einangrunar hefur gámavæðing stærra árásarflöt samanborið við sýndarvæðingu - hýsilinn og gámurinn deila einum kjarna, varnarleysi þar sem getur leyft spilliforritum að sleppa úr gámnum. Þegar verið er að gera tilraunir með vafasaman hugbúnað er betra að nota viðeigandi einangrunaraðferðir.

gagnlegir krækjur

Heimild: www.habr.com

Bæta við athugasemd