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

Në 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

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster