Nisim Jupyter në orbitën e LXD

A keni provuar ndonjëherë të eksperimentoni me kodin ose utilitat sistemorë në Linux në mënyrë që të mos shqetësoheni për sistemin bazë dhe të mos shkatërroni gjithçka në rast të një gabimi në kodin që duhet të ekzekutohet me privilegje root?

Si Ă«shtĂ« pĂ«r shembull, nĂ«se Ă«shtĂ« e nevojshme tĂ« testoni ose запусĐșа njĂ« grup tĂ« gjithĂ« mikrosherbimeve tĂ« ndryshme nĂ« njĂ« makinĂ«? NjĂ«qind ose madje njĂ« mijĂ«?

Me makinat virtuale tĂ« menaxhuara nga hipervizori, ndoshta mund tĂ« zgjidhen kĂ«to probleme, por me çfarĂ« kostoje? PĂ«r shembull, njĂ« enĂ« nĂ« LXD e bazuar nĂ« distribuimin Alpine Linux minimalisht konsumon vetĂ«m 7.60MB RAM, dhe ku ndarja rrĂ«qethĂ«se pas nisjes zĂ« 9.5MB! Si tĂ« duket kjo, Elon Musk? Rekomandoj tĂ« shqyrtoni mundĂ«sitĂ« bazĂ« tĂ« LXD — sistemit tĂ« enĂ«ve nĂ« Linux.

Pas qĂ« Ă«shtĂ« bĂ«rĂ« e qartĂ« se çfarĂ« janĂ« enĂ«t LXD, le tĂ« shkojmĂ« mĂ« tej dhe tĂ« mendojmĂ«, çfarĂ« do tĂ« ndodhte nĂ«se do tĂ« kishte njĂ« platformĂ«-kombajn, ku mund tĂ« ekzekutojmĂ« sigurt njĂ« kod pĂ«r hostin, tĂ« krijojmĂ« grafikĂ«, t'i lidhim dinamikisht (interaktivisht) widget-et e UI me kodin tuaj, tĂ« plotĂ«sojmĂ« kodin me tekst me blackjack
 formatim? Disa si njĂ« blog interaktiv? Wow
 Dua! Dua! 🙂

Shikoni poshtĂ« ku ne do tĂ« nisim nĂ« enĂ« JupyterLab — ndĂ«rfaqja e pĂ«rdoruesit e gjeneratĂ«s sĂ« ardhshme nĂ« vend tĂ« Jupyter Notebook tĂ« vjetruar, si dhe do tĂ« instalojmĂ« module tĂ« tilla Python si NumPy, Pandas, Matplotlib, IPyWidgets tĂ« cilat do tĂ« lejojnĂ« tĂ« realizojmĂ« tĂ« gjitha ato tĂ« pĂ«rmendura mĂ« sipĂ«r dhe t'i ruajmĂ« ato nĂ« njĂ« skedar tĂ« veçantĂ« — njĂ« notebook IPython.

Nisim Jupyter në orbitën e LXD

Plani i ngritjes në orbitë ^

Nisim Jupyter në orbitën e LXD

Të kremtojmë një plan të shkurtër veprimi, në mënyrë që të na ishte më e lehtë të realizonim skemën e mësipërme:

  • Do tĂ« instalojmĂ« dhe nisim njĂ« enĂ« tĂ« bazuar nĂ« distribuimin Alpine Linux. Ne do ta pĂ«rdorim kĂ«tĂ« distribucion pasi ai Ă«shtĂ« i orientuar drejt minimalizmit dhe do tĂ« instalojmĂ« nĂ« tĂ« vetĂ«m softin mĂ« tĂ« domosdoshĂ«m, asgjĂ« tĂ« tepĂ«rt.
  • Do tĂ« shtojmĂ« njĂ« disk virtual tĂ« shtesĂ« nĂ« enĂ« tĂ« cilit do t'i japim emrin — hostfs dhe do ta montojmĂ« nĂ« sistemin rrĂ«njor tĂ« dosjeve. Ky disk do tĂ« mundĂ«sojĂ« pĂ«rdorimin e skedarĂ«ve nĂ« host nga njĂ« katalog i caktuar brenda kontejnerit. KĂ«shtu, tĂ« dhĂ«nat do tĂ« na mbeten tĂ« pavarura nga kontejneri. NĂ« rast se kontejneri fshihet, tĂ« dhĂ«nat do tĂ« qĂ«ndrojnĂ« nĂ« host. Gjithashtu, kjo skemĂ« Ă«shtĂ« e dobishme pĂ«r ndarjen e tĂ« dhĂ«nave midis shumĂ« konteinerĂ«ve duke mos pĂ«rdorur mekanizmat rrjetĂ«rore standarde tĂ« shpĂ«rndarjes sĂ« kontejnerĂ«ve.
  • Do tĂ« instalojmĂ« Bash, sudo, bibliotekat e nevojshme, do tĂ« shtojmĂ« dhe konfigurojmĂ« njĂ« pĂ«rdorues sistemor.
  • Do tĂ« instalojmĂ« Python, modulet dhe do t'i kompilojmĂ« pĂ«r varĂ«sitĂ« e tyre binarĂ«.
  • Do tĂ« instalojmĂ« dhe startojmĂ«. JupyterLab, do tĂ« konfigurojmĂ« pamjen, do tĂ« instalojmĂ« zgjerime pĂ«r tĂ«.

NĂ« kĂ«tĂ« artikull ne do tĂ« fillojmĂ« me fillimin e kontejnerit, nuk do tĂ« shqyrtojmĂ« instalimin dhe konfigurimin e LXD, gjithçka tjetĂ«r mund ta gjeni nĂ« njĂ« artikull tjetĂ«r — Funksionet bazĂ« tĂ« LXD — sistemi i konteinerĂ«ve nĂ« Linux.

Instalimi dhe konfigurimi i sistemit bazë ^

KrijojmĂ« kontejner me komandĂ«n nĂ« tĂ« cilĂ«n specifikojmĂ« imazhin — alpine3, identifikuesin pĂ«r kontejnerin — jupyterlab dhe, nĂ« rast nevoje, profilin e konfigurimeve:

lxc init alpine3 jupyterlab --profile=default --profile=hddroot

Këtu po përdor një profil konfigurimi hddroot i cili tregon të krijojmë një kontejner me seksionin root në Storage Pool i vendosur në diskun fizik HDD:

lxc profile show hddroot

config: {}
description: ""
devices:
  root:
    path: \/
    pool: hddpool
    type: disk
name: hddroot
used_by: []
lxc storage show hddpool

config:
  size: 10GB
  source: /dev/loop1
  volatile.initial_source: /dev/loop1
description: ""
name: hddpool
driver: btrfs
used_by:
- /1.0/images/ebd565585223487526ddb3607f5156e875c15a89e21b61ef004132196da6a0a3
- /1.0/profiles/hddroot
status: Created
locations:
- none

Kjo mĂ« jep mundĂ«sinĂ« tĂ« eksperimentoj me kontejnerĂ«t nĂ« diskun HDD duke kursyer burimet e diskut SSD tĂ« cilin gjithashtu e kam nĂ« sistemin tim 🙂 pĂ«r tĂ« cilin kam krijuar njĂ« profil konfigurimi tĂ« veçantĂ«. ssdroot.

Pas krijimit të kontejnerit, ai ndodhet në gjendjen STOPPED, prandaj na nevojitet ta nisim duke aktivizuar sistemin init në të:

lxc start jupyterlab

Do të nxjerrim listën e konteinerëve në LXD duke përdorur çelësin -c i cili tregon se cilat ckolona të shfaqen në ekran:

lxc list -c ns4b
+------------+---------+-------------------+--------------+
|    NAME    |  STATE  |       IPV4        | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool      |
+------------+---------+-------------------+--------------+

Kur krijohet kontejneri, adresa IP Ă«shtĂ« zgjedhur rastĂ«sisht, pasi kemi pĂ«rdorur profilin e konfigurimit default i cili Ă«shtĂ« konfiguruar mĂ« parĂ« nĂ« artikullin Funksionet bazĂ« tĂ« LXD — sistemi i konteinerĂ«ve nĂ« Linux.

Ne do ta ndryshojmë këtë adresë IP për një më të lehtë për t'u kujtuar, duke krijuar një ndërfaqe rrjeti në nivelin e kontejnerit, dhe jo në nivelin e profilit të konfigurimit siç është tani në konfigurimin aktual. Kjo nuk është e domosdoshme, mund ta injoroni.

KrijojmĂ« njĂ« ndĂ«rfaqe rrjeti eth0 e cila lidhet me çswitch (urĂ« rrjeti) lxdbr0 nĂ« tĂ« cilin kemi aktivizuar NAT sipas artikullit tĂ« kaluar dhe tani kontejneri do tĂ« ketĂ« qasje nĂ« internet, si dhe i caktojmĂ« njĂ« adresĂ« IP statike ndĂ«rfaqes — 10.0.5.5:

lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5

Pasi të shtoni pajisjen, kontejneri duhet të riniset:

lxc restart jupyterlab

Kontrolloni statusin e kontejnerit:

lxc list -c ns4b
+------------+---------+------------------+--------------+
|    NAME    |  STATE  |       IPV4       | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0)  | hddpool      |
+------------+---------+------------------+--------------+

Instalimi i softuerit bazë dhe konfigurimi i sistemit ^

Për administrimin e kontejnerit tonë, është e nevojshme të instaloni softuerin e mëposhtëm:

Pako
Përshkrimi

bash
Shkalla GNU Bourne Again

bash-completion
Përfundimi programues për shkallën bash

— informasiya təhlĂŒkəsizliyi
Jep disa përdoruesve mundësinë për të ekzekutuar disa komanda si root

shadow
Paketë menaxhimi i fjalëkalimeve dhe llogarive me mbështetje për skedarët shadow dhe PAM

tzdata
Burimet për informacionin mbi zonat e kohës dhe përmbushjen e saj

nano
Klon i editorit Pico me përmirësime

ShtesĂ«, mund tĂ« instaloni mbĂ«shtetje nĂ« sistemin man-pages duke instaluar paketat e mĂ«poshtme — man man-pages mdocml-apropos less

lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano

Le të shqyrtojmë komandat dhe çelësat që kemi përdorur:

  • lxc — Thirrja e klientit LXD
  • exec — Metoda e klientit LXD qĂ« ekzekuton komandĂ«n nĂ« kontejner
  • jupyterlab — Identifikuesi i kontejnerit
  • -- — NjĂ« çelĂ«s i veçantĂ« qĂ« tregon tĂ« mos interpretohet çelĂ«sat e mĂ«tejshĂ«m si çelĂ«sa pĂ«r lxc dhe tĂ« kalojĂ« tĂ« gjithĂ« stringun e mbetur siç Ă«shtĂ« nĂ« kontejner
  • apk — Menaxheri i paketave tĂ« shpĂ«rndarjes Alpine Linux
  • add — Metoda e menaxherit tĂ« paketave qĂ« instalon paketat e caktuara pas komandĂ«s

Më pas, do të vendosim zonën e kohës në sistem Europe/Moscow:

lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Pasi të vendoset zona e kohës, paketa tzdata në sistemin më nuk është e nevojshme, do të mbajë hapësirë, prandaj, ta heqim atë:

lxc exec jupyterlab -- apk del tzdata

Kontrolloni zonën e kohës:

lxc exec jupyterlab -- date

E mërkurë, 15 prill 2020, 10:49:56 MSK

Për të mos humbur shumë kohë për konfigurimin e Bash për përdoruesit e rinj në kontejner, me veprimet e mëposhtme, do të kopjojmë në të skel-fajlat tashmë të gatshme nga sistemi pritës. Kjo do të lejojë që të zbukurojmë Bash-in në kontejner në mënyrë interaktive. Sistemi im pritës është Manjaro Linux dhe skel-fajlat e kopjuara /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors në parim i përshtaten Alpine Linux dhe nuk shkaktojnë probleme kritike, por për ju mund të jetë shpërndarje tjetër dhe duhet të merrni vesh për vete në rast të një gabimi në ekzekutimin e Bash në kontejner.

Kopjoni skel-fajlat nĂ« kontejner. ÇelĂ«si --create-dirs do tĂ« krijojĂ« direktoritĂ« e nevojshme, nĂ«se ato nuk ekzistojnĂ«:

lxc file push /etc/skel/.bash_profile jupyterlab/etc/skel/.bash_profile --create-dirs
lxc file push /etc/skel/.bashrc jupyterlab/etc/skel/.bashrc
lxc file push /etc/skel/.dir_colors jupyterlab/etc/skel/.dir_colors

Për përdoruesin root që tashmë ekziston, do të kopjojmë në direktorinë e tij të shtëpisë skel-fajllat e sapo kopjuar në konteiner:

lxc exec jupyterlab -- cp /etc/skel/.bash_profile /root/.bash_profile
lxc exec jupyterlab -- cp /etc/skel/.bashrc /root/.bashrc
lxc exec jupyterlab -- cp /etc/skel/.dir_colors /root/.dir_colors

Në Alpine Linux, për përdoruesit vendoset një shell sistemik /bin/sh, do ta zëvendësojmë atë me root përdoruesin Bash:

lxc exec jupyterlab -- usermod --shell=/bin/bash root

Për root përdoruesi nuk ishte pa fjalëkalim, i nevojitet për të vendosur një fjalëkalim. Komanda e mëposhtme do të gjenerojë dhe vendosë një fjalëkalim të ri rastësor që do ta shihni në ekranin e konsolës pas përfundimit të saj:

lxc exec jupyterlab -- /bin/bash -c "PASSWD=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12); echo "root:$PASSWD" | chpasswd && echo "New Password: $PASSWD""

New Password: sFiXEvBswuWA

Gjithashtu, do tĂ« krijojmĂ« njĂ« pĂ«rdorues tĂ« ri sistemik — jupyter pĂ«r tĂ« cilin mĂ« vonĂ« do tĂ« konfigurojmĂ« JupyterLab:

lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter

Do të gjenerojmë dhe vendosim fjalëkalimin për të:

lxc exec jupyterlab -- /bin/bash -c "PASSWD=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 12); echo "jupyter:$PASSWD" | chpasswd && echo "New Password: $PASSWD""

New Password: ZIcbzWrF8tki

MĂ« pas do tĂ« ekzekutojmĂ« dy komanda, e para do tĂ« krijojĂ« njĂ« grup sistemik — informasiya təhlĂŒkəsizliyi, dhe e dyta do tĂ« shtojĂ« nĂ« tĂ« pĂ«rdoruesin jupyter:

lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter

Të shohim, në cilat grupe është përdoruesi jupyter:

lxc exec jupyterlab -- id -Gn jupyter

jupyter sudo

Gjithçka është në rregull, vazhdojmë më tej.

LejojmĂ« tĂ« gjithĂ« pĂ«rdoruesit qĂ« janĂ« nĂ« grupin — informasiya təhlĂŒkəsizliyi tĂ« pĂ«rdorin komandĂ«n — informasiya təhlĂŒkəsizliyi. PĂ«r kĂ«tĂ« ekzekutoni skriptin e mĂ«poshtĂ«m, ku sed komenton linjĂ«n e parametrave nĂ« skedarin e konfigurimit /etc/sudoers:

lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"

Instalimi dhe konfigurimi i JupyterLab ^

JupyterLab — Ă«shtĂ« njĂ« aplikacion Python, prandaj duhet sĂ« pari tĂ« instalohet ky interpretuese. Gjithashtu, JupyterLab do tĂ« instalojmĂ« me ndihmĂ«n e menaxherit tĂ« paketave Python pip, jo me sistemin, sepse nĂ« repository sistemor mund tĂ« jetĂ« i vjetruar, dhe prandaj, duhet manualisht tĂ« lejojmĂ« varĂ«sitĂ« pĂ«r tĂ« duke instaluar paketat e mĂ«poshtme — python3 python3-dev gcc libc-dev zeromq-dev:

lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev

Do të azhurnojmë modulët Python dhe menaxherin e paketave pip në versionin aktual:

lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel

Instalojmë JupyterLab përmes menaxherit të paketave pip:

lxc exec jupyterlab -- python3 -m pip install jupyterlab

Pasi që zgjerimet në JupyterLab janë eksperimentale dhe zyrtarisht ato nuk ofrohen me paketën jupyterlab, prandaj, ne duhet t'i instalojmë dhe konfiguroni ato manualisht.

Tani do tĂ« instalojmĂ« NodeJS dhe menaxherin e paketave pĂ«r tĂ« — NPM, pasi JupyterLab pĂ«rdor ato pĂ«r zgjerimet e tij:

lxc exec jupyterlab -- apk add nodejs npm

Për të cilat zgjerime JupyterLab që do të instalojmë të funksionojnë, ato duhet të instalohen në katalogun e përdoruesit pasi aplikacioni do të ekzekutohet nga përdoruesi jupyter. Problemi është se nuk ka parametër në komandën e ekzekutimit për të kaluar katalogun, aplikacioni pranon vetëm variablën e mjedisit dhe prandaj ne duhet ta përcaktojmë atë. Për këtë, do të shkruajmë komandën për eksportimin e variablës JUPYTERLAB_DIR në mjedisin e përdoruesit jupyter, në skedarin .bashrc, i cili ekzekutohet çdo herë kur përdoruesi hyn në sistem:

lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"

Me komandën tjetër do të instalojmë një zgjerim të veçantë - menaxherin e zgjerimeve në JupyterLab:

lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"

Tani gjithçka është gati për ekzekutimin e parë JupyterLab, por ne mund të instalojmë disa zgjerime të dobishme:

  • toc — Tabela e PĂ«rmbajtjes, gjeneron njĂ« listĂ« titujsh nĂ« artikullin/joĂ«nkotĂ«ku
  • jupyterlab-horizon-theme — TemĂ« UI
  • jupyterlab_neon_theme — TemĂ« UI
  • jupyterlab-ubu-theme — NjĂ« tjetĂ«r temĂ« nga autori i kĂ«tij artikulli 🙂 Por nĂ« kĂ«tĂ« rast, do tĂ« shikohet instalimi nga repositoriumi GitHub

Pra, ekzekutoni me radhë komandat e mëposhtme për të instaluar këto zgjerime:

lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyterlab/toc @mohirio/jupyterlab-horizon-theme @yeebc/jupyterlab_neon_theme"
lxc exec jupyterlab -- su -l jupyter -c "wget -c https://github.com/microcoder/jupyterlab-ubu-theme/archive/master.zip"
lxc exec jupyterlab -- su -l jupyter -c "unzip -q master.zip && rm master.zip"
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build jupyterlab-ubu-theme-master"
lxc exec jupyterlab -- su -l jupyter -c "rm -r jupyterlab-ubu-theme-master"

Pas instalimit të zgjerimeve ne duhet t'i kompidojmë ato, pasi më parë, në instalim kemi caktuar çelësin --no-build për të kursyer kohë. Tani do të përshpejtojmë dukshëm duke i kompaktuar ato së bashku një herë:

lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"

Tani ekzekutoni dy komandat e mĂ«poshtme pĂ«r ekzekutimin e parĂ« JupyterLabE ishte e mundur ta niste shĂ«rbimin me njĂ« komandĂ«, por nĂ« kĂ«tĂ« rast, komanda e nisjes, tĂ« cilĂ«n e mbani mend, do tĂ« ruhet nĂ« bash nĂ« konteiner dhe jo nĂ« host, ku ka mjaft komanda pĂ«r t'u regjistruar nĂ« historinĂ« e tij 🙂

Hyni në konteiner si përdorues jupyter:

lxc exec jupyterlab -- su -l jupyter

Pastaj nisni JupyterLab me çelësat dhe parametrat siç tregohet:

[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser

Shkoni në shfletuesin e internetit në adresën http://10.0.5.5:8888 dhe në faqen e hapur shkruani token qasje që do të shihni në konsolë. Kopjoni atë dhe ngjituni në faqe, pastaj klikoni Identifikohu. Pas hyrjes, kaloni në menunë e zgjerimeve majtas, siç tregohet në figurën më poshtë, ku ju ofrohet që gjatë aktivizimit të menaxhuesit të zgjerimeve të pranoni rrezikshmëri për të instaluar zgjerime nga palë të treta, për të cilat ekipi Zhvillimi i JupyterLab nuk merr përgjegjësi:

Nisim Jupyter në orbitën e LXD

MegjithatĂ«, ne po e izolojmĂ« atĂ« plotĂ«sisht JupyterLab dhe e vendosim nĂ« konteiner, nĂ« mĂ«nyrĂ« qĂ« zgjerimet e jashtme qĂ« kĂ«rkojnĂ« dhe pĂ«rdorin NodeJS tĂ« mos mund tĂ« vjedhin tĂ« paktĂ«n tĂ« dhĂ«nat nĂ« disk pĂ«rveç atyre qĂ« ne hapim brenda konteinerit. TĂ« arrijmĂ« nĂ« dokumentet tuaja private nĂ« host /home Ă«shtĂ« e vĂ«shtirĂ« nga proceset nĂ« konteiner, dhe edhe nĂ«se Ă«shtĂ« e mundur, kjo kĂ«rkon privilegje mbi skedarĂ«t nĂ« sistemin host, pasi ne e nisim konteinerin nĂ« reĆŸim jo privilegjuar. Duke u bazuar nĂ« kĂ«tĂ« informacion, ju mund tĂ« vlerĂ«soni rrezikun e aktivizimit tĂ« zgjerimeve nĂ« JupyterLab.

IPython notebook tĂ« krijuara (faqet nĂ« JupyterLab) tani do tĂ« krijohen nĂ« drejtorinĂ« e shtĂ«pisĂ« sĂ« pĂ«rdoruesit — /home/jupyter, por nĂ« planet tona Ă«shtĂ« qĂ« tĂ« ndajmĂ« tĂ« dhĂ«nat (tĂ« ndarim) midis hostit dhe konteinerit, kĂ«shtu qĂ«, kthehuni nĂ« konsolĂ« dhe ndaloni JupyterLab duke bĂ«rĂ« hotkey — CTRL+C dhe duke u pĂ«rgjigjur y kĂ«rkesĂ«s. MĂ« pas, ndaloni sesionin interaktiv tĂ« pĂ«rdoruesit jupyter duke bĂ«rĂ« hotkey CTRL+D.

Ndajmë të dhënat me hostin ^

Për të ndarë të dhënat me hostin, ne duhet të krijojmë në konteiner një pajisje që e lejon këtë, dhe për këtë, tregoni komandën e mëposhtme ku ne specifikojmë çelësat e mëposhtëm:

  • lxc config device add — Komanda shton konfigurimin e pajisjes
  • jupyter — Identifikuesi i konteinerit nĂ« tĂ« cilin shtohet konfigurimi
  • hostfs — Identifikuesi i pajisjes. Ju mund tĂ« jepni çdo emĂ«r.
  • disk — Tregohet lloji i pajisjes
  • path — Tregohet rruga nĂ« konteinerin ku LXD do tĂ« montojĂ« kĂ«tĂ« pajisje
  • source — ShĂ«nohet burimi, rruga drejt katalogut nĂ« hostin qĂ« dĂ«shironi tĂ« ndani me kontejnerin. ShĂ«noni rrugĂ«n sipas preferencave tuaja
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks

PĂ«r katalogun /home/dv/projects/ipython-notebooks duhet tĂ« jetĂ« e vendosur leja pĂ«r pĂ«rdoruesin e konteinerit i cili tani ka UID tĂ« barabartĂ« me SubUID + UID, shihni kapitullin Siguria. PrivilegjĂ«t e kontejnerĂ«ve nĂ« artikullin Funksionet bazĂ« tĂ« LXD — sistemi i konteinerĂ«ve nĂ« Linux.

Vendosim lejen në host, ku pronari do të jetë përdoruesi i konteinerit jupyter, dhe variabli $USER do t'i tregojë përdoruesit tuaj të hostit si grup:

sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks

Hello, World! ^

Nëse ende keni hapur një sesion konsolë në kontenier me JupyterLab, atëherë rivendoseni me çelësin e ri --notebook-dir duke vendosur vlerën /mnt/hostfs si rrugën deri në korin e notebook-ë për kontenierin për pajisjen që krijuam në hapin e mëparshëm:

jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs

Pastaj shkoni në faqen http://10.0.5.5:8888 dhe krijoni notebook-un tuaj të parë duke klikuar butonin në faqen siç është treguar në figurën më poshtë:

Nisim Jupyter në orbitën e LXD

Më pas në fushën në faqe shkruani kod në gjuhën Python që do të nxjerrë klasiken Hello World!. Pas përfundimit të hyrjes, shtypni CTRL+ENTER apo butonin "luaj" në panelin e mjetëve lart që JupyterLab të ekzekutojë këtë:

Nisim Jupyter në orbitën e LXD

Me kĂ«tĂ«, pothuajse gjithçka Ă«shtĂ« gati pĂ«r t'u pĂ«rdorur, por do tĂ« ishte e mĂ«rzitshme, nĂ«se nuk instalojmĂ« module tĂ« tjera Python (aplikacione tĂ« plota) qĂ« lejojnĂ« zgjerimin e konsiderueshĂ«m tĂ« kapaciteteve standarde tĂ« Python nĂ« JupyterLab, prandaj, le tĂ« vazhdojmĂ« 🙂

P.S. E interesante është se implementimi i vjetër Jupyter me emrin kodor Jupyter Notebook nuk ka humbur dhe ekziston paralelisht me JupyterLab. Për të kaluar në versionin e vjetër, vizitoni linkun duke shtuar sufiksin në adresë/tree, dhe kalimi në versionin e ri bëhet me sufiksin /lab, por nuk është detyrueshëm ta tregoni:

Zgjerimi i mundësive të Python ^

Në këtë seksion do të instalojmë module kaq të fuqishme të gjuhës Python si NumPy, Pandas, Matplotlib, IPyWidgets rezultatet e të cilëve do të integrohen në notebook JupyterLab.

Para se të instalojmë module të lartpërmendura Python përmes menaxherit të paketave pip ne duhet fillimisht të lejojmë varësitë sistemore në Alpine Linux:

  • g++ — Nevojitet pĂ«r kompilimin e moduleve, pasi disa prej tyre janĂ« implementuar nĂ« gjuhĂ«n C++ dhe lidhen me Python nĂ« kohĂ«n e ekzekutimit si module binarĂ«
  • freetype-dev — varĂ«si pĂ«r modulin Python Matplotlib

Instalojmë varësitë:

lxc exec jupyterlab -- apk add g++ freetype-dev

Ka një problem, në gjendjen aktuale të distribuimit të Alpine Linux, nuk do të mund të kompilohet një version i ri i NumPy, do të dalë një gabim kompilimi që nuk mund ta zgjidh:

ERROR: Nuk mund të ndërtosh rrotat për numpy që përdorin PEP 517 dhe nuk mund të instalohet drejtpërdrejt

Prandaj, ne do ta instalojmë këtë modul si një paketë sistemore që shpërndan një version të kompiliuar tashmë, por pak më të vjetër se ai i disponueshëm tani në sit:

lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev

Më pas, instalojmë modulat e Pythonit përmes menaxhuesit të paketave pip. Kërko durim, pasi disa module do të kompilohet dhe do të marrë disa minuta. Në makinën time, kompilimi zgjati rreth 15 minuta:

lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib

Fshijmë caches e instalimeve:

lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*

Testimi i moduleve në JupyterLab ^

Nëse keni të aktivizuar JupyterLab, riaktivizoni atë që të aktivizohen modulat e reja të instaluara. Për ta bërë këtë, në seancën e konsolës, shtypni CTRL+C aty ku është aktivizuar dhe shkruani y në kërkesën e ndalimit, pastaj riaktivizoni JupyterLab duke shtypur çelësin 'lart' në tastierë, për të mos e shkruar përsëri komandën dhe pastaj Enter për ta aktivizuar:

jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs

Shkoni në faqen http://10.0.5.5:8888/lab ose rifreskoni faqen në shfletues, pastaj shkruani kodin e mëposhtëm në një qelizë të re të notebook-ut:

%matplotlib inline

from ipywidgets import interactive
import matplotlib.pyplot as plt
import numpy as np

def f(m, b):
    plt.figure(2)
    x = np.linspace(-10, 10, num=1000)
    plt.plot(x, m * x + b)
    plt.ylim(-5, 5)
    plt.show()

interactive_plot = interactive(f, m=(-2.0, 2.0), b=(-3, 3, 0.5))
output = interactive_plot.children[-1]
output.layout.height = '350px'
interactive_plot

Ju duhet të merrni një rezultat si në imazhin më poshtë, ku IPyWidgets gjeneron një element UI në faqen që ndërvepron në mënyrë interaktive me kodin burimor, si dhe Matplotlib nxjerr rezultatin e kodit në formën e imazhit si grafik funksioni:

Nisim Jupyter në orbitën e LXD

Shumë shembuj IPyWidgets mund të gjeni në tutoriale këtu

ÇfarĂ« tjetĂ«r? ^

Jeni tĂ« mrekullueshĂ«m, nĂ«se keni mbetur dhe arritur deri nĂ« fund tĂ« artikullit. UnĂ« me qĂ«llim nuk e publikova skriptin e gatshĂ«m nĂ« fund tĂ« artikullit qĂ« do tĂ« instalonte JupyterLab me 'njĂ« klik', pĂ«r tĂ« inkurajuar punĂ«torĂ«t 🙂 Por ju mund ta bĂ«ni kĂ«tĂ« vetĂ«, sepse tashmĂ« e dini se si, duke mbledhur komandat nĂ« njĂ« skript Bash tĂ« vetĂ«m 🙂

Gjithashtu, mund të:

  • Caktoni emrin e rrjetit pĂ«r kontejnerin nĂ« vend tĂ« adresĂ«s IP duke e shkruar atĂ« nĂ« njĂ« /etc/hosts dhe nĂ« shfletues shkruani adresĂ«n http://jupyter.local:8888
  • Luani me kufizimin e burimeve pĂ«r kontejnerin, pĂ«r kĂ«tĂ« lexoni kapitullin nĂ« mundĂ«sitĂ« bazike tĂ« LXD ose merrni mĂ« shumĂ« informacion nĂ« faqen e zhvilluesit tĂ« LXD.
  • Ndrysho temĂ«n:

Nisim Jupyter në orbitën e LXD

Dhe shumë gjëra të tjera mund të bëni! Këtu është gjithçka. Ju uroj sukses!

UPDATE: 15.04.2020 18:30 — Korrigjova gabimet nĂ« kapitullin «PĂ«rshĂ«ndetje, BotĂ«!»
UPDATE: 16.04.2020 10:00 — Rregullova dhe shtova tekstin nĂ« pĂ«rshkrimin e aktivizimit tĂ« menaxherit tĂ« shtesave JupyterLab
UPDATE: 16.04.2020 10:40 — Korrigjova gabimet e gjetura nĂ« tekst dhe paksa e ndryshova pĂ«r mirĂ« kapitullin «Instalimi i softuerit bazĂ« dhe konfigurimi i sistemit»

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster