Pripravím prístup k organizácii lokálnych izolovaných vývojových prostredí na svojom pracovnom stanici. Prístup bol vyvinutý pod vplyvom nasledujúcich faktorov:
- pre rôzne jazyky sú potrebné rôzne IDE a toolchainy;
- v rôznych projektoch môžu byť použité rôzne verzie toolchainov a knižníc.
Prístup spočíva v tom, že vyvíjam v LXD kontajneroch spustených lokálne na laptopu alebo pracovnej stanici s presmerovaním grafického výstupu na hosť.
Konfigurácia na príklade Ubuntu 20.04.
Úvahy o možnostiach a dôvodoch sú uvedené na konci článku.
1. Inštalácia LXD
V Ubuntu 20.04 LXD už nie je dostupný na inštaláciu ako deb balík, iba cez snap:
$ snap install lxdPo inštalácii je potrebné vykonať inicializáciu:
$ lxd initJedinečný parameter, ktorý mením, je storage backend — používam dir ako najjednoduchší. Keďže snímky a kópie nepoužívam, varovania v ma neodrádzajú:
Podobne sa adresárový backend považuje za poslednú možnosť.
Podporuje všetky hlavné funkcie LXD, ale je hrozne pomalý a neefektívny, pretože nemôže vykonávať
okamžité kópie alebo snímky, a preto musí zakaždým kópiu celého úložiska inštancie.
2. Nastavenie profilu LXD
— to sú súbory parametrov aplikované na niekoľko kontajnerov. Pre moje potreby mi stačí jediné predvolené vytvorené profily default s nasledujúcimi zmenami:
$ lxc profile device add default X0 disk source=\/tmp\/.X11-unix\/X0 path=\/tmp\/.X11-unix\/X0— aby aplikácie v kontajneroch mohli interagovať s hosťujúcim X11 serverom;$ lxc profile set default environment.DISPLAY :0— aby bola premenná prostrediaDISPLAYv kontajneroch nastavená správne;$ lxc profile set default raw.idmap "both 1000 1000"— pre správne .
3. Vytvorenie a nastavenie kontajnera
Vytvorenie kontajnera na báze obrazu images:ubuntu\/20.04:
$ lxc launch images:ubuntu\/20.04 dev1Preferujem obrazy z repozitára , pretože majú menej predinštalovaného softvéru. Z tohto dôvodu som pridal prefix images: k názvu obrazu. Vytvorenie kontajnera na báze obrazu z repozitára Ubuntu možno vykonať nasledujúcim spôsobom: $ lxc launch ubuntu\/20.04 dev1.
Prístup k root shellu kontajnera:
$ lxc exec dev1 -- bashNainštalujem Firefox a VS Code (z repozitára ):
$ 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 codeZapnem kontajner pre prehľadnosť
poweroffBonus! Celkom jednoducho sa dá preniesť GPU do kontajnera, aby aplikácie spustené v ňom mohli využiť grafickú kartu. Na to je potrebné:
- pridať zariadenie
$ lxc config device add dev1 mygpu gpu; - nainštalovať ovládače videokarty do kontajnera – tie isté, ktoré sú nainštalované na hostiteľovi.
4. Používanie kontajnera
Ak kontajner ešte nie je spustený, je potrebné ho spustiť:
lxc start dev1Spustenie VS Code ako neprivilegovaného používateľa ubuntu:
lxc exec dev1 -- sudo --login --user ubuntu codeSpustenie Firefoxu:
lxc exec dev1 -- sudo --login --user ubuntu firefoxOkna aplikácií sa budú zobrazovať na hostiteľovi, ale budú bežať vo vnútri kontajnera – podobne ako prenášanie grafiky pomocou ssh.
Neprestavujem spustené kontajnery ručne, pretože v tom nevidím zvláštny zmysel – obmedzujem sa na zatvorenie okien spustených aplikácií.
5. Záver
Preferujem nepoužívať hostiteľský OS na vývoj, pretože by to vyžadovalo inštaláciu vývojových nástrojov, ladených verzií knižníc, nastavovanie systémových komponentov špecifickým spôsobom a ďalšie manipulácie. To všetko môže viesť k neočakávanému správaniu ostatného softvéru, nesúvisiaceho s vývojom, a môže dokonca spôsobiť problémy celému OS. Napríklad zmeny v konfigurácii OpenSSL môžu spôsobiť, že OS sa prestane správne spúšťať.
Skúšal som rôzne prostriedky na izoláciu vývojového prostredia:
- virtuálne stroje (KVM, VirtualBox a pod.) – najzrejmejší variant, ale vyžaduje výrazne viac zdrojov, hoci pri vývoji pod Windows (ak je hostiteľ Linux) nie sú iné možnosti;
- nástroje cloudového vývoja spustené na lokálnom stroji (Cloud9 v kontajneri alebo virtuálnom stroji, Eclipse Che a pod.) – nie sú vyvíjané na takýto režim, vyžadujú ďalšie nastavenie a údržbu, najlepšie ich používať na účel – v cloude;
- Docker kontajnery sú, podľa môjho názoru, určené na niečo iné; nie sú najvhodnejšie na rýchle prototypovanie s použitím softvéru, ktorý ešte nie je zabalený do samostatných kontajnerov.
Zvolený prístup sa mi páči svojou jednoduchosťou a nízkym prahom vstupu. V rámcoch kontajnerov je možné aplikovať špecifické prístupy pre projekty: inštalovať a nastavovať všetko ručne alebo použiť automatizáciu (Puppet, Ansible atď.), ba dokonca rozvíjať Kontajnery LXD používam aj na spúšťanie špecifického softvéru, ktorý si vyžaduje inštaláciu veľkého množstva závislostí alebo inú verziu OS; v tomto prípade je možné vytvoriť kontajner s požadovanou verziou OS, napríklad $ lxc launch images:ubuntu/16.04 dev16.
Je dôležité pamätať na to, že z hľadiska izolácie má kontajnerizácia väčšiu útočnú plochu v porovnaní s virtualizáciou — hostiteľ a kontajner zdieľajú jedno jadro, jeho zraniteľnosť môže umožniť škodlivému softvéru uniknúť z kontajnera. Na experimenty so sporným softvérom je lepšie používať vhodnejšie mechanizmy izolácie.
Užitočné odkazy
- Obsiahly článok na Habr.
- , je dôležité nezamieňať LXD s LXC — sú to rôzne, ale vzájomne prepojené veci.
- — v tomto blogu je množstvo užitočných praktických informácií o LXD.
- — Microsoft pravidelne zhromažďuje nové zostavy a distribuuje ich s osobitnou licenciou.
Zdroj: habr.com
