Izolante evolumediojn per LXD-ujoj

Mi parolos pri aliro al organizado de lokaj izolitaj evolumedioj sur mia laborstacio. La aliro estis evoluigita sub la influo de la sekvaj faktoroj:

  • Malsamaj lingvoj postulas malsamajn IDEojn kaj ilojn;
  • Malsamaj projektoj povas uzi malsamajn versiojn de ilĉenoj kaj bibliotekoj.

La aliro estas disvolvi ene de LXD-ujoj kurantaj loke sur tekkomputilo aŭ laborstacio kun grafika eligo redirektita al la gastiganto.

Ekzempla agordo Ubuntu 20.04.

Interkonsiliĝoj pri elektoj kaj kialoj estas donitaj ĉe la fino de la artikolo.

1. LXD-instalado

В Ubuntu 20.04 LXD ne plu disponeblas por instalo kiel deb-pakaĵo, nur per klako:

$ snap install lxd

Post instalado, vi devas fari inicialigon:

$ lxd init

La sola parametro, kiun mi ŝanĝas, estas storage bakend - Mi uzas dir kiel la plej simpla. Ĉar mi ne uzas bildojn kaj kopiojn, la avertoj en dokumentado Ili ne timigas min:

Simile, la dosieruja backend estas konsiderata kiel lasta rimeda elekto.
Ĝi subtenas ĉiujn ĉefajn funkciojn de LXD, sed estas terure malrapida kaj malefika ĉar ĝi ne povas funkcii
tujaj kopioj aŭ momentfotoj kaj do bezonas kopii la tutan konservadon de la petskribo ĉiufoje.

2. LXD-profila agordo

Profiloj en LXD — ĉi tiuj estas aroj de parametroj aplikataj al pluraj ujoj. Por miaj bezonoj sufiĉas por mi la sola profilo kreita defaŭlte default kun la sekvaj ŝanĝoj:

  • $ lxc profile device add default X0 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0 — por ke aplikaĵoj en ujoj povu interagi kun la gastiganta X11-servilo;
  • $ lxc profile set default environment.DISPLAY :0 - tiel ke la media variablo DISPLAY estis instalita ĝuste en ujoj;
  • $ lxc profile set default raw.idmap "both 1000 1000" - por la ĝusta mapado de identigiloj.

3. Krei kaj starigi ujon

Krei ujon surbaze de bildo images:ubuntu/20.04:

$ lxc launch images:ubuntu/20.04 dev1

Mi preferas bildojn el la deponejo https://images.linuxcontainers.org, ĉar ili havas malpli antaŭinstalitan programaron. Tial mi aldonis la prefikson images: al la bildonomo. Krei ujon bazitan sur bildo de la Ubuntu-deponejo povas esti farita jene: $ lxc launch ubuntu/20.04 dev1.

Aliro al la radika ŝelo de la ujo:

$ lxc exec dev1 -- bash

Mi instalos Firefox kaj VS Code (el la deponejo laŭ instrukcioj):

$ 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

Mi inkludos ujon por klareco.

poweroff

Bonus! Estas sufiĉe facile ĵeti GPU en ujon por ke aplikaĵoj kurantaj en ĝi povu uzi la grafikkarton. Por fari tion vi bezonas:

  • aldoni aparaton $ lxc config device add dev1 mygpu gpu;
  • instalu videokartajn ŝoforojn en la ujo - la samaj, kiuj estas instalitaj sur la gastiganto.

4. Uzante ujon

Se la ujo ankoraŭ ne funkcias, vi devas komenci ĝin:

lxc start dev1

Kurante VS Code kiel ne-radika uzanto ubuntu:

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

Lanĉu Firefox:

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

Aplikaj fenestroj estos montritaj sur la gastiganto, sed ili estos ekzekutitaj ene de la ujo - simile al plusendado de grafikaĵoj per ssh.

Mi ne mane fermas kurantajn ujojn, ĉar mi ne vidas multan signifon en ĝi - mi limigas min fermi la fenestrojn de kurantaj aplikaĵoj.

5. Konkludo

Mi preferas ne uzi gastigantan OS por disvolviĝo, ĉar tio postulus instali evoluilojn, sencimigi versiojn de bibliotekoj, agordi sistemajn komponantojn laŭ specifa maniero kaj aliajn manipuladojn. Ĉio ĉi povas konduki al neatendita konduto en aliaj ne-disvolva programaro, aŭ eĉ la tuta OS. Ekzemple, ŝanĝoj en la agordo de OpenSSL povas kaŭzi la OS ĉesi komenci ĝuste.

Mi provis malsamajn ilojn por izoli evolumediojn:

  • virtualaj maŝinoj (KVM, VirtualBox, ktp.) estas la plej evidenta opcio, sed ili konsumas signife pli da rimedoj, kvankam ne ekzistas aliaj ebloj por disvolviĝo sub Vindozo (se la gastiganto estas Linukso);
  • iloj por disvolvado de nuboj kurantaj sur loka maŝino (Cloud9 en ujo aŭ virtuala maŝino, Eclipse Che, ktp.) - ili ne estas evoluigitaj por ĉi tiu operacia maniero, ili postulas plian agordon kaj prizorgadon, estas plej bone uzi ilin por ilia celita. celo - en la nubo;
  • Docker-ujoj - denove, estas destinitaj al io alia; laŭ mi, ili ne estas tre oportunaj por rapide prototipi per programaro kiu ankoraŭ ne estas enpakita en apartaj ujoj.

La elektita aliro impresas min per sia simpleco kaj malalta baro al eniro. En la ujoj mem, vi povas uzi projekt-specifajn alirojn: instali kaj agordi ĉion permane, aŭ uzi aŭtomatigon (Puppet, Ansible, ktp.), eĉ deploji Docker-bazita infrastrukturo. Mi ankaŭ uzas LXD-ujojn por ruli specifan programaron, kiu aŭ postulas instali grandan nombron da dependecoj aŭ malsama OS-versio - en ĉi tiu kazo vi povas krei ujon kun la dezirata OS-versio, ekzemple $ lxc launch images:ubuntu/16.04 dev16.

Gravas memori, ke laŭ izoliteco, kontenerigo havas pli grandan ataksurfacon kompare kun virtualigo - la gastiganto kaj ujo dividas ununuran kernon, vundeblecon en kiu povas permesi al malware eskapi el la ujo. Kiam vi eksperimentas kun dubinda programaro, estas pli bone uzi pli taŭgajn izoligajn mekanismojn.

utilaj ligoj

fonto: www.habr.com

Aldoni komenton