Fejlesztői környezetek elkülönítése LXD tárolókkal

Szólok a helyi elszigetelt fejlesztői környezetek megszervezésének megközelítéséről a munkaállomásomon. A megközelítést a következő tényezők hatására fejlesztették ki:

  • A különböző nyelvek különböző IDE-ket és eszközláncokat igényelnek;
  • A különböző projektek az eszközláncok és könyvtárak különböző verzióit használhatják.

A megközelítés az LXD konténereken belüli fejlesztés, amely helyben fut egy laptopon vagy munkaállomáson, és a grafikus kimenetet a gazdagépre irányítják át.

Példa konfiguráció Ubuntu 20.04.

A lehetőségekről és az okokról szóló gondolatok a cikk végén találhatók.

1. LXD telepítés

В Ubuntu 20.04 Az LXD már nem telepíthető deb csomagként, csak snap-en keresztül:

$ snap install lxd

A telepítés után inicializálást kell végrehajtania:

$ lxd init

Az egyetlen paraméter, amit megváltoztatok storage bakend - Használom dir mint a legegyszerűbbet. Mivel nem használok képeket és másolatokat, a figyelmeztetések be dokumentáció Nem ijesztenek meg:

Hasonlóképpen, a címtár-háttérrendszert utolsó lehetőségnek kell tekinteni.
Támogatja az összes fő LXD funkciót, de rettenetesen lassú és nem hatékony, mivel nem tud működni
azonnali másolatokat vagy pillanatképeket, ezért minden alkalommal át kell másolnia a példány teljes tárhelyét.

2. LXD profil beállítása

Profilok LXD-ben — ezek több tárolóra alkalmazott paraméterkészletek. Az én igényeimhez elég nekem az egyetlen alapértelmezés szerint létrehozott profil default a következő változtatásokkal:

  • $ lxc profile device add default X0 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0 — hogy a konténerekben lévő alkalmazások kölcsönhatásba léphessenek a gazdagép X11 szerverrel;
  • $ lxc profile set default environment.DISPLAY :0 - hogy a környezeti változó DISPLAY megfelelően volt beszerelve a konténerekbe;
  • $ lxc profile set default raw.idmap "both 1000 1000" - a helyesért azonosító leképezés.

3. Konténer létrehozása és felállítása

Tároló létrehozása kép alapján images:ubuntu/20.04:

$ lxc launch images:ubuntu/20.04 dev1

Inkább a tárból származó képeket szeretem https://images.linuxcontainers.org, mivel kevesebb előre telepített szoftverrel rendelkeznek. Emiatt hozzáadtam az előtagot images: a kép nevére. A konténer létrehozása az Ubuntu tárolóból származó kép alapján a következőképpen történhet: $ lxc launch ubuntu/20.04 dev1.

Hozzáférés a tároló gyökérhéjához:

$ lxc exec dev1 -- bash

Telepítem a Firefoxot és a VS Code-ot (a tárolóból utasítások szerint):

$ 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

Mellékelek egy edényt az áttekinthetőség kedvéért.

poweroff

Bónusz! Elég egyszerű egy GPU-t bedobni egy konténerbe, hogy a benne futó alkalmazások tudják használni a grafikus kártyát. Ehhez szüksége van:

  • Eszköz hozzáadása $ lxc config device add dev1 mygpu gpu;
  • telepítse a videokártya-illesztőprogramokat a tárolóba - ugyanazokat, amelyek a gazdagépen vannak telepítve.

4. Tartály használata

Ha a tároló még nem fut, akkor el kell indítania:

lxc start dev1

VS Code futtatása nem root felhasználóként ubuntu:

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

Indítsa el a Firefoxot:

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

Az alkalmazás ablakai megjelennek a gazdagépen, de a konténeren belül futnak le – hasonlóan az ssh segítségével történő grafika továbbításához.

Nem állítom le kézzel a futó konténereket, mert nem látom sok értelmét - a futó alkalmazások ablakainak bezárására szorítkozom.

5. következtetés

Inkább nem használok gazdagép operációs rendszert a fejlesztéshez, mert ehhez fejlesztői eszközök telepítése, könyvtárak hibakeresési verziói, a rendszerkomponensek meghatározott módon történő konfigurálása és egyéb manipulációk szükségesek. Mindez váratlan viselkedéshez vezethet más, nem fejlesztő szoftverben, vagy akár az egész operációs rendszerben. Például az OpenSSL-konfiguráció módosításai az operációs rendszer megfelelő indításának leállását okozhatják.

Különféle eszközöket próbáltam ki a fejlesztői környezetek elkülönítésére:

  • a virtuális gépek (KVM, VirtualBox stb.) a legkézenfekvőbb lehetőség, de lényegesen több erőforrást fogyasztanak, bár Windows alatt nincs más lehetőség a fejlesztésre (ha a gazdagép Linux);
  • helyi gépen futó felhőfejlesztő eszközök (Cloud9 konténerben vagy virtuális gépben, Eclipse Che stb.) - nem erre a működési módra lettek kifejlesztve, további konfigurációt és karbantartást igényelnek, célszerű a rendeltetésüknek megfelelően használni őket cél - a felhőben;
  • A Docker konténereket megint másra szánják, véleményem szerint nem túl kényelmesek a gyors prototípuskészítéshez olyan szoftverekkel, amelyek még nincsenek külön konténerekbe csomagolva.

A választott megközelítés lenyűgöz az egyszerűségével és alacsony belépési korlátaival. Magukban a konténerekben projektspecifikus megközelítéseket használhat: mindent manuálisan telepíthet és konfigurálhat, vagy használhat automatizálást (Puppet, Ansible stb.), akár telepíthet is. Docker-alapú infrastruktúra. LXD konténereket használok speciális szoftverek futtatására is, amelyekhez vagy nagyszámú függőséget kell telepíteni, vagy egy másik operációs rendszer verziót kell telepíteni – ebben az esetben létrehozhat egy tárolót a kívánt operációs rendszer verziójával, pl. $ lxc launch images:ubuntu/16.04 dev16.

Fontos megjegyezni, hogy az elszigeteltség szempontjából a konténerezés nagyobb támadási felülettel rendelkezik, mint a virtualizáció – a gazdagép és a tároló egy magon osztozik, ami egy sérülékenység, amely lehetővé teszi a rosszindulatú programok kiszabadulását a tárolóból. Ha kétes szoftverekkel kísérletezik, jobb, ha megfelelőbb elkülönítési mechanizmusokat használ.

Hasznos Linkek

Forrás: will.com

Hozzászólás