Izolimi i mjediseve të zhvillimit me ndihmën e kontejnerëve LXD

Do të flas për qasjen ndaj organizimit të mjediseve të izoluara lokale të zhvillimit në stacionin tim të punës. Qasja është krijuar nën ndikimin e faktorëve të mëposhtëm:

  • për gjuhë të ndryshme nevojiten IDE dhe sete të ndryshme mjetesh;
  • në projekte të ndryshme mund të përdoren versione të ndryshme të seteve të mjeteve dhe bibliotekave.

Qasja është që zhvillimi të bëhet brenda konteinerëve LXD të ekzekutuar lokal në laptopin ose stacionin tim të punës me ridrejtim të daljes grafike në host.

Konfigurimi si shembull Ubuntu 20.04.

Mendimet për opsionet dhe arsyet janë paraqitur në fund të artikullit.

1. Instalimi i LXD

Ubuntu 20.04 LXD nuk është më i disponueshëm për instalim si një paketë deb, vetëm përmes snap:

$ snap install lxd

Pas instalimit, duhet të kryhet inicializimi:

$ lxd init

Parametri i vetëm që unë e ndryshoj është storage backend — unë përdor dir si opsioni më i thjeshtë. Duke e ditur se nuk përdor instantë dhe kopje, paralajmërimet në dokumentacion nuk më trembin:

Po ashtu, backend-i i direktorit është të konsiderohet si një opsion i fundit.
Ai mbështet të gjitha karakteristikat kryesore të LXD, por është jashtëzakonisht i ngadalshëm dhe jo efikas, pasi nuk mund të kryejë
kopje ose instantë dhe kështu duhet të kopjojë tërësisht ruajtjen e instancës çdo herë.

2. Konfigurimi i profilit LXD

Profillet në LXD — është një grup parametrash të aplikuar në disa konteinerë. Për nevojat e mia, një profil i vetëm i krijuar për default është i mjaftueshëm. default me ndryshimet në vazhdim:

  • $ lxc profile device add default X0 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0 — në mënyrë që aplikacionet në konteinerë të mund të ndërveprojnë me serverin X11 të hostit;
  • $ lxc profile set default environment.DISPLAY :0 — në mënyrë që variabli i mjedisit DISPLAY në konteinerë të vendoset siç duhet;
  • $ lxc profile set default raw.idmap "both 1000 1000" — për një mapim të saktë të identifikuesve. 3. Krijimi dhe konfigurimi i konteinerit.

Krijimi i një konteineri mbi imazhin

images:ubuntu/20.04 $ lxc launch images:ubuntu/20.04 dev1:

Unë preferoj imazhet nga repoja

, pasi ato kanë më pak softuer të instaluar paraprakisht. Për këtë arsye, unë shtova një parafjalë https://images.linuxcontainers.org, sepse ato kanë më pak softuer të instaluar. Për këtë arsye, unë shtova një prefiks images: në emrin e imazhit. Krijimi i një konteineri mbi imazhin nga repoja Ubuntu mund të kryhet kështu: $ lxc launch ubuntu/20.04 dev1.

Qasja në shell-in e root-it të konteinerit:

$ lxc exec dev1 -- bash

Do të instaloj Firefox dhe VS Code (nga repoja sipër udhëzimit):

$ 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

Do të aktivizoj kontejnerin për qartësi

poweroff

Bonus! Mjafton të kalosh GPU në kontejner për ta lejuar aplikacionet që ekzekutohen aty të përdorin kartën grafike. Për këtë duhet:

  • të shtosh pajisjen $ lxc config device add dev1 mygpu gpu;
  • të instalosh në kontejner driverat e kartës grafike — të njëjtët që janë instaluar në host.

4. Përdorimi i kontejnerit

Në rastin që kontejneri nuk është ende i aktivizuar, duhet ta aktivizosh:

lxc start dev1

Ekzekutimi i VS Code nga një përdorues jo privilegjuar ubuntu:

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

Ekzekutimi i Firefox:

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

Dritaret e aplikacioneve do të shfaqen në host, por do të ekzekutohen brenda kontejnerit — ngjashëm me kalimin e grafikës përmes ssh.

Nuk i çaktivizoj manualisht kontejnerët e aktivizuar, pasi nuk shoh ndonjë kuptim të veçantë — mjaftohem me mbylljen e dritareve të aplikacioneve të aktivizuara.

5. Përfundimi

Unë preferoj të mos përdor sistemin operacional të hostit për zhvillim, pasi do të kërkonte instalimin e mjeteve të zhvillimit, versioneve të rregullimit të biblioteka, konfigurimin e komponentëve të sistemit në mënyrë specifike dhe manipulime të tjera. Të gjitha këto mund të sjellin sjellje të papritur të softuerit tjetër, që nuk ka lidhje me zhvillimin, madje edhe tërë sistemit operacional. Për shembull, ndryshimet në konfigurimin e OpenSSL-it mund të bëjnë që sistemi operacional të ndalojë së funksionuari siç duhet.

Kam provuar mjete të ndryshme për izolimin e mjediseve të zhvillimit:

  • makinat virtuale (KVM, VirtualBox etj.) — opsioni më i dukshëm, por konsumon ndjeshëm më shumë burime, megjithatë për zhvillimin nën Windows (nëse hosti është Linux) nuk ka opsione të tjera;
  • instrumentet e zhvillimit në cloud të cilat konsumohen në makinë lokale (Cloud9 në një kontenier ose makinë virtuale, Eclipse Che etj.) — ato nuk janë zhvilluar për një regjion të tillë, ato kërkojnë konfigurim dhe mbështetje shtesë, është më mirë t'i përdorni për qëllimin e tyre — në cloud;
  • kontejnerët Docker — përsëri janë të destinuar për diçka tjetër, në mendimin tim, nuk janë shumë të përshtatshëm për të prototipizuar shpejt duke përdorur software që ende nuk është paketuar në konteinerë të veçantë.

Qasja e zgjedhur më pëlqen për thjeshtësinë dhe nivelin e ulët të hyrjes. Në vetë kontejnerët mund të aplikohet qasje specifike për projekte: të instalosh dhe konfigurosh gjithçka manualisht, ose të përdorësh automatizimin (Puppet, Ansible etj.), madje edhe të përmbushesh infrastruktura bazuar në Docker. Unë përdor kontejnerë LXD po ashtu për të drejtuar software specifik që kërkon instalimin e një sërë varësish të mëdha, ose një version tjetër të OS — në këtë rast mund të krijosh një kontejner me versionin e nevojshëm të OS, për shembull$ lxc launch images:ubuntu/16.04 dev16 Është e rëndësishme të mbash mend se në aspektin e izolimit, konteinerizimi ka një sipërfaqe të madhe sulmi krahasuar me virtualizimin — host-i dhe kontejneri ndajnë një bërthamë, një vulnerabilitet në të cilën mund të lejojë malware-n të arrijë jashtë konteinerit. Për eksperimentet me software të dyshimtë, është më mirë të përdoren mekanizma më të përshtatshëm izolimi..

Një artikull i hollësishëm në Habrë

Linqe të dobishme

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster