Izolirajuća razvojna okruženja s LXD spremnicima

Govorit ću o pristupu organiziranja lokalnih izoliranih razvojnih okruženja na mojoj radnoj stanici. Pristup je razvijen pod utjecajem sljedećih čimbenika:

  • Različiti jezici zahtijevaju različite IDE-ove i lance alata;
  • Različiti projekti mogu koristiti različite verzije alatnih lanaca i biblioteka.

Pristup je razvoj unutar LXD spremnika koji se izvode lokalno na prijenosnom računalu ili radnoj stanici s grafičkim izlazom preusmjerenim na glavno računalo.

Primjer konfiguracije Ubuntu 20.04.

Razmišljanja o opcijama i razlozima navedena su na kraju članka.

1. LXD instalacija

В Ubuntu 20.04 LXD više nije dostupan za instalaciju kao deb paket, samo putem snapa:

$ snap install lxd

Nakon instalacije morate izvršiti inicijalizaciju:

$ lxd init

Jedini parametar koji mijenjam je storage bakend - Koristim dir kao najjednostavniji. Budući da ne koristim slike i kopije, upozorenja unutra dokumentacija Ne plaše me:

Slično tome, pozadina imenika treba se smatrati krajnjom opcijom.
Podržava sve glavne značajke LXD-a, ali je užasno spor i neučinkovit jer ne može raditi
trenutne kopije ili snimke i stoga svaki put treba kopirati cijelu pohranu instance.

2. Postavljanje LXD profila

Profili u LXD — ovo su skupovi parametara koji se primjenjuju na nekoliko spremnika. Za moje potrebe dovoljan mi je samo standardno kreiran profil default sa sljedećim izmjenama:

  • $ lxc profile device add default X0 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0 — tako da aplikacije u spremnicima mogu komunicirati s host X11 poslužiteljem;
  • $ lxc profile set default environment.DISPLAY :0 - tako da varijabla okoliša DISPLAY je ispravno ugrađen u spremnike;
  • $ lxc profile set default raw.idmap "both 1000 1000" - za ispravno preslikavanje identifikatora.

3. Izrada i postavljanje spremnika

Izrada spremnika na temelju slike images:ubuntu/20.04:

$ lxc launch images:ubuntu/20.04 dev1

Više volim slike iz repozitorija https://images.linuxcontainers.org, budući da imaju manje unaprijed instaliranog softvera. Iz tog razloga sam dodao prefiks images: na naziv slike. Stvaranje spremnika na temelju slike iz Ubuntu repozitorija može se napraviti na sljedeći način: $ lxc launch ubuntu/20.04 dev1.

Pristup korijenskoj ljusci spremnika:

$ lxc exec dev1 -- bash

Instalirat ću Firefox i VS Code (iz repozitorija prema uputama):

$ 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

Uključit ću spremnik radi jasnoće.

poweroff

Bonus! Prilično je jednostavno baciti GPU u spremnik tako da aplikacije koje se izvode u njemu mogu koristiti grafičku karticu. Da biste to učinili potrebno vam je:

  • Dodaj uređaj $ lxc config device add dev1 mygpu gpu;
  • instalirajte upravljačke programe video kartice u spremnik - iste one koji su instalirani na glavnom računalu.

4. Korištenje spremnika

Ako spremnik još nije pokrenut, morate ga pokrenuti:

lxc start dev1

Pokretanje VS koda kao nekorijenski korisnik ubuntu:

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

Pokrenite Firefox:

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

Prozori aplikacije bit će prikazani na hostu, ali će se izvršavati unutar spremnika - slično prosljeđivanju grafike pomoću ssh-a.

Ne gasim pokrenute spremnike ručno, jer ne vidim puno smisla u tome - ograničavam se na zatvaranje prozora pokrenutih aplikacija.

5. zaključak

Radije ne bih koristio glavni OS za razvoj, jer bi to zahtijevalo instaliranje razvojnih alata, debug verzije biblioteka, konfiguriranje komponenti sustava na određeni način i druge manipulacije. Sve to može dovesti do neočekivanog ponašanja u drugom softveru koji nije razvojni ili čak u cijelom OS-u. Na primjer, promjene u OpenSSL konfiguraciji mogu uzrokovati prestanak ispravnog pokretanja OS-a.

Isprobao sam različite alate za izolaciju razvojnih okruženja:

  • virtualni strojevi (KVM, VirtualBox, itd.) su najočitija opcija, ali troše znatno više resursa, iako nema drugih opcija za razvoj pod Windowsima (ako je host Linux);
  • alati za razvoj oblaka koji se izvode na lokalnom računalu (Cloud9 u kontejneru ili virtualnom stroju, Eclipse Che itd.) - nisu razvijeni za ovaj način rada, zahtijevaju dodatnu konfiguraciju i održavanje, najbolje ih je koristiti za njihovu namjenu svrha - u oblaku;
  • Docker kontejneri su opet namijenjeni nečem drugom; po mom mišljenju, nisu baš prikladni za brzu izradu prototipova pomoću softvera koji još nije zapakiran u zasebne kontejnere.

Odabrani pristup impresionira me svojom jednostavnošću i niskom barijerom za ulazak. U samim spremnicima možete koristiti pristupe specifične za projekt: instalirati i konfigurirati sve ručno ili koristiti automatizaciju (Puppet, Ansible itd.), čak i implementirati Infrastruktura temeljena na Dockeru. Također koristim LXD spremnike za pokretanje određenog softvera koji ili zahtijeva instaliranje velikog broja ovisnosti ili drugu verziju OS-a - u ovom slučaju možete stvoriti spremnik sa željenom verzijom OS-a, na primjer $ lxc launch images:ubuntu/16.04 dev16.

Važno je upamtiti da u smislu izolacije kontejnerizacija ima veću površinu napada u usporedbi s virtualizacijom - host i spremnik dijele jednu jezgru, a ranjivost u kojoj zlonamjerni softver može pobjeći iz spremnika. Kada eksperimentirate sa sumnjivim softverom, bolje je koristiti prikladnije mehanizme izolacije.

korisni linkovi

Izvor: www.habr.com

Dodajte komentar