åºç€ãšãªãã·ã¹ãã ãæ°ã«ããããroot æš©éã§å®è¡ãããã¯ãã®ã³ãŒãã§ãšã©ãŒãçºçããå Žåã«ãã¹ãŠãç Žæ£ãããããããšãªããLinux ã§ã³ãŒããã·ã¹ãã ãŠãŒãã£ãªãã£ãå®éšããªããã°ãªããªãã£ãããšããããŸãã?
ããããXNUMX å°ã®ãã·ã³äžã§ããŸããŸãªãã€ã¯ããµãŒãã¹ã®ã¯ã©ã¹ã¿ãŒå šäœããã¹ããŸãã¯å®è¡ããå¿ èŠãããå Žåã¯ã©ãã§ãããã? çŸããããã¯åã§ããïŒ
ãã€ããŒãã€ã¶ãŒã«ãã£ãŠä»®æ³ãã·ã³ã管çãããã°ããã®ãããªåé¡ã¯è§£æ±ºã§ããŸããã解決ãããã§ããããããããã©ã®ãããªã³ã¹ãããããã®ã§ãããã? ããšãã°ãAlpine Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ã«åºã¥ã LXD ã®ã³ã³ããã¯ã 7.60MB
RAMãããã³èµ·ååŸã«ã«ãŒã ããŒãã£ã·ã§ã³ãå ããå Žæ 9.5MB
ïŒ ã€ãŒãã³ã»ãã¹ã¯ããããããã§ããããïŒ ãã§ãã¯ã¢ãŠãããããšããå§ãããŸã Linux ã®ã³ã³ãã ã·ã¹ãã ã§ãã LXD ã®åºæ¬æ©èœ
LXD ã³ã³ãããšã¯äœããäžè¬çã«æããã«ãªã£ãã®ã§ãããã«é²ãã§èããŠã¿ãŸãããããã¹ãã®ã³ãŒããå®å šã«å®è¡ããã°ã©ããçæããUI ãŠã£ãžã§ãããã³ãŒãã«åçã« (察話çã«) ãªã³ã¯ã§ãããããªããŒãã¹ã¿ ãã©ãããã©ãŒã ããã£ããšãããã©ããªãã§ããããããã©ãã¯ãžã£ãã¯ã䜿çšããŠã³ãŒããããã¹ãã§è£å®ããŸã...æžåŒèšå®? ã€ã³ã¿ã©ã¯ãã£ããªããã°ã®ãããªãã®ã§ããããïŒ ãããâŠæ¬²ããïŒ æ¬²ããïŒ ð
ã³ã³ããã§æã¡äžããç«ã®äžãèŠãŠãã ãã ãžã¥ãã¿ãŒã©ã - æ代é ãã® Jupyter Notebook ã«ä»£ãã次äžä»£ã®ãŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ããŸãã次ã®ãã㪠Python ã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŸãã NumPy, ãã³ã, matplotlib, IPyãŠã£ãžã§ãã ããã«ãããäžèšã®ãã¹ãŠãå®è¡ããããããã¹ãŠç¹å¥ãªãã¡ã€ã« (IPython ã©ããããã) ã«ä¿åã§ããããã«ãªããŸãã
ããã²ãŒã·ã§ã³
- è»éé¢éžèšç»
- åºæ¬ã·ã¹ãã ã®ã€ã³ã¹ããŒã«ãšæ§æ
- åºæ¬ãœãããŠã§ã¢ã®ã€ã³ã¹ããŒã«ãšã·ã¹ãã ã®ã»ããã¢ãã
- JupyterLab ã®ã€ã³ã¹ããŒã«ãšæ§æ
- ãã¹ããšã®ããŒã¿å ±æ
- ããã«ã¡ã¯äžçïŒ
- Python ã®æ©èœãæ¡åŒµãã
- JupyterLab ã§ã®ã¢ãžã¥ãŒã«ã®ãã¹ã
- ä»ã«äœããããŸããïŒ
è»éé¢éžèšç» ^
äžèšã®ã¹ããŒã ã®å®è£ ã容æã«ããããã®ç°¡åãªè¡åèšç»ã®æŠèŠã説æããŸãããã
- ãã£ã¹ããªãã¥ãŒã·ã§ã³ããããããŒã¹ã«ã³ã³ãããã€ã³ã¹ããŒã«ããŠèµ·åããŸããã ã¢ã«ãã€ã³Linuxã ãã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã¯æå°éãç®çãšããŠãããæãå¿ èŠãªãœãããŠã§ã¢ã®ã¿ãã€ã³ã¹ããŒã«ããäœåãªãã®ã¯äœãã€ã³ã¹ããŒã«ããªãããããã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã䜿çšããŸãã
- ã³ã³ããã«ä»®æ³ãã£ã¹ã¯ãè¿œå ããååãä»ããŠã¿ãŸããã -
hostfs
ãããã«ãŒã ãã¡ã€ã« ã·ã¹ãã ã«ããŠã³ãããŸãã ãã®ãã£ã¹ã¯ã«ãããã³ã³ããå ã®æå®ããããã£ã¬ã¯ããªãããã¹ãäžã®ãã¡ã€ã«ã䜿çšã§ããããã«ãªããŸãã ãããã£ãŠãããŒã¿ã¯ã³ã³ããããç¬ç«ãããã®ã«ãªããŸãã ã³ã³ãããŒãåé€ãããŠããããŒã¿ã¯ãã¹ãäžã«æ®ããŸãã ãŸãããã®ã¹ããŒã ã¯ãã³ã³ãã㌠ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®æšæºãããã¯ãŒã¯ ã¡ã«ããºã ã䜿çšããã«ãå€ãã®ã³ã³ãããŒéã§åãããŒã¿ãå ±æããå Žåã«ã圹ç«ã¡ãŸãã - Bashãsudoãå¿ èŠãªã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããã·ã¹ãã ãŠãŒã¶ãŒãè¿œå ããŠèšå®ããŸããã
- Python ãšã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ãããããã®ãã€ããªäŸåé¢ä¿ãã³ã³ãã€ã«ããŸããã
- ã€ã³ã¹ããŒã«ããŠèµ·åããŸããã ãžã¥ãã¿ãŒã©ããå€èŠ³ãã«ã¹ã¿ãã€ãºããæ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããŸãã
ãã®èšäºã§ã¯ãã³ã³ããã®èµ·åããå§ããŸããLXD ã®ã€ã³ã¹ããŒã«ãšæ§æã«ã€ããŠã¯èæ ®ããŸãããããã«ã€ããŠã¯ãã¹ãŠå¥ã®èšäºã§èª¬æããŸãã LXD ã®åºæ¬æ©èœ - Linux ã³ã³ãã ã·ã¹ãã .
åºæ¬ã·ã¹ãã ã®ã€ã³ã¹ããŒã«ãšæ§æ ^
ã€ã¡ãŒãžãæå®ããã³ãã³ãã§ã³ã³ãããäœæããŸãã alpine3
ãã³ã³ããã®èå¥å - jupyterlab
ãããŠå¿
èŠã«å¿ããŠæ§æãããã¡ã€ã«:
lxc init alpine3 jupyterlab --profile=default --profile=hddroot
ããã§ã¯æ§æãããã¡ã€ã«ã䜿çšããŠããŸã hddroot
ããã¯ãã«ãŒã ããŒãã£ã·ã§ã³ãæã€ã³ã³ãããäœæããããšãæå®ããŸãã ã¹ãã¬ãŒãžããŒã« ç©ç 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
ããã«ãããSSD ãã£ã¹ã¯ã®ãªãœãŒã¹ãç¯çŽããªãããHDD ãã£ã¹ã¯äžã®ã³ã³ãããå®éšããæ©äŒãåŸãããŸããSSD ãã£ã¹ã¯ã¯ãç§ã®ã·ã¹ãã ã§ãå©çšå¯èœã§ã ð ãã®ããã«å¥ã®æ§æãããã¡ã€ã«ãäœæããŸãã ssdroot
.
ã³ã³ãããäœæããããšã次ã®ç¶æ
ã«ãªããŸãã STOPPED
ãããã£ãŠããã®äžã§ init ã·ã¹ãã ãå®è¡ããŠèµ·åããå¿
èŠããããŸãã
lxc start jupyterlab
ããŒã䜿ã£ãŠLXDã§ã³ã³ããã®äžèŠ§ã衚瀺ããŠã¿ãŸããã -c
ããã¯ã©ãã瀺ããŸãã cåã®è¡šç€º:
lxc list -c ns4b
+------------+---------+-------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+-------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.198 (eth0) | hddpool |
+------------+---------+-------------------+--------------+
ã³ã³ããã®äœææã«ãæ§æãããã¡ã€ã«ã䜿çšãããããIP ã¢ãã¬ã¹ãã©ã³ãã ã«éžæãããŸããã default
以åã«èšäºã§èšå®ãããã® LXD ã®åºæ¬æ©èœ - Linux ã³ã³ãã ã·ã¹ãã .
çŸåšã®æ§æã®ããã«æ§æãããã¡ã€ã« ã¬ãã«ã§ã¯ãªããã³ã³ãã ã¬ãã«ã§ãããã¯ãŒã¯ ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããããšã«ããããã® IP ã¢ãã¬ã¹ãããèŠãããããã®ã«å€æŽããŸãã ãããè¡ãå¿ èŠã¯ãããŸãããã¹ãããããŠãæ§ããŸããã
ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ãŒã¹ã®äœæ eth0
ã¹ã€ããïŒãããã¯ãŒã¯ããªããžïŒã«ãªã³ã¯ããŸã lxdbr0
ããã§ã¯ãåã®èšäºã«åŸã£ãŠ NAT ãæå¹ã«ãããšãã³ã³ãããã€ã³ã¿ãŒãããã«ã¢ã¯ã»ã¹ã§ããããã«ãªããã€ã³ã¿ãŒãã§ã€ã¹ã«éç IP ã¢ãã¬ã¹ãå²ãåœãŠãããŸãã 10.0.5.5
:
lxc config device add jupyterlab eth0 nic name=eth0 nictype=bridged parent=lxdbr0 ipv4.address=10.0.5.5
ããã€ã¹ãè¿œå ããåŸãã³ã³ãããŒãåèµ·åããå¿ èŠããããŸãã
lxc restart jupyterlab
ã³ã³ããã®ã¹ããŒã¿ã¹ã確èªãã:
lxc list -c ns4b
+------------+---------+------------------+--------------+
| NAME | STATE | IPV4 | STORAGE POOL |
+------------+---------+------------------+--------------+
| jupyterlab | RUNNING | 10.0.5.5 (eth0) | hddpool |
+------------+---------+------------------+--------------+
åºæ¬ãœãããŠã§ã¢ã®ã€ã³ã¹ããŒã«ãšã·ã¹ãã ã®ã»ããã¢ãã ^
ã³ã³ããã管çããã«ã¯ã次ã®ãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ããã±ãŒãž
説æ
bash
GNU Bourne Again ã·ã§ã«
bash-è£å®
bash ã·ã§ã«ã®ããã°ã©ã å¯èœãªè£å®
sudo
ç¹å®ã®ãŠãŒã¶ãŒã« root ãšããŠããã€ãã®ã³ãã³ããå®è¡ã§ããããã«ãã
圱
ã·ã£ã㊠ãã¡ã€ã«ãš PAM ããµããŒããããã¹ã¯ãŒãããã³ã¢ã«ãŠã³ã管çããŒã« ã¹ã€ãŒã
ãããŒã¿
ã¿ã€ã ãŸãŒã³ãšå€æéã®ããŒã¿ã®ãœãŒã¹
ãã¯ãŒã
匷åããã Pico ãšãã£ã¿ãŒã®ã¯ããŒã³
ããã«ã次ã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããããšã§ãã·ã¹ãã ã®ãã³ããŒãžã«ãµããŒããã€ã³ã¹ããŒã«ã§ããŸã- man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano
䜿çšããã³ãã³ããšããŒãèŠãŠã¿ãŸãããã
lxc
â LXD ã¯ã©ã€ã¢ã³ããåŒã³åºãexec
- ã³ã³ããå ã§ã³ãã³ããå®è¡ããLXDã¯ã©ã€ã¢ã³ãã¡ãœããjupyterlab
â ã³ã³ããID--
- ãã以éã®ããŒã次ã®ããŒãšããŠè§£éããªãããã«æå®ããç¹å¥ãªããŒlxc
æ®ãã®æååããã®ãŸãŸã³ã³ããã«æž¡ããŸãapk
â Alpine Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ ããã±ãŒãž ãããŒãžã£ãŒadd
â ã³ãã³ãã®åŸã«æå®ãããããã±ãŒãžãã€ã³ã¹ããŒã«ããããã±ãŒãž ãããŒãžã£ãŒ ã¡ãœãã
次ã«ãã·ã¹ãã ã«ã¿ã€ã ãŸãŒã³ãèšå®ããŸã Europe/Moscow
:
lxc exec jupyterlab -- cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
ã¿ã€ã ãŸãŒã³ãã€ã³ã¹ããŒã«ããåŸãããã±ãŒãžã¯ tzdata
ã·ã¹ãã ã§ã¯äžèŠã«ãªããã¹ããŒã¹ãå æãããããåé€ããŸãããã
lxc exec jupyterlab -- apk del tzdata
ã¿ã€ã ãŸãŒã³ã確èªãã:
lxc exec jupyterlab -- date
Wed Apr 15 10:49:56 MSK 2020
ã³ã³ããå
ã®æ°èŠãŠãŒã¶ãŒåãã« Bash ãã»ããã¢ããããã®ã«å€ãã®æéãè²»ãããªãããã«ããããã«ã次ã®æé ã§ã¯ãæ¢è£œã® skel ãã¡ã€ã«ããã¹ã ã·ã¹ãã ãããã¹ã ã·ã¹ãã ã«ã³ããŒããŸãã ããã«ãããã³ã³ããå
ã® Bash ãã€ã³ã¿ã©ã¯ãã£ãã«æŽåœ¢ã§ããããã«ãªããŸãã ç§ã®ãã¹ã ã·ã¹ãã 㯠Manjaro Linux ã§ããã¡ã€ã«ã¯ã³ããŒãããŠããŸã /etc/skel/.bash_profile
, /etc/skel/.bashrc
, /etc/skel/.dir_colors
åºæ¬çã«ãããã㯠Alpine Linux ã«é©ããŠãããé倧ãªåé¡ãåŒãèµ·ããããšã¯ãããŸããããå¥ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã䜿çšããŠããå¯èœæ§ããããã³ã³ãããŒã§ Bash ãå®è¡ãããšãã«ãšã©ãŒãçºçãããã©ãããåå¥ã«ç¢ºèªããå¿
èŠããããŸãã
skel ãã¡ã€ã«ãã³ã³ãããŒã«ã³ããŒããŸãã éµ --create-dirs
å¿
èŠãªãã£ã¬ã¯ããªãååšããªãå Žåã¯äœæããŸãã
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
æ¢åã® root ãŠãŒã¶ãŒã®å Žåã¯ãã³ã³ãããŒã«ã³ããŒããã°ããã® skel ãã¡ã€ã«ãããŒã ãã£ã¬ã¯ããªã«ã³ããŒããŸãã
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
Alpine Linux ã¯ãŠãŒã¶ãŒçšã®ã·ã¹ãã ã·ã§ã«ãã€ã³ã¹ããŒã«ããŸã /bin/sh
ã«çœ®ãæããŸãã root
Bash ã®ãŠãŒã¶ãŒ:
lxc exec jupyterlab -- usermod --shell=/bin/bash root
ãã® root
ãŠãŒã¶ãŒã¯ãã¹ã¯ãŒããªãã§ã¯ãªãã£ãã®ã§ããã¹ã¯ãŒããèšå®ããå¿
èŠããããŸãã 次ã®ã³ãã³ãã¯ãæ°ããã©ã³ãã ãªãã¹ã¯ãŒããçæããŠèšå®ããŸããå®è¡åŸã«ã³ã³ãœãŒã«ç»é¢ã«ãã¹ã¯ãŒãã衚瀺ãããŸãã
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
ãŸããæ°ããã·ã¹ãã ãŠãŒã¶ãŒãäœæããŸããã - jupyter
åŸã§æ§æããŸã ãžã¥ãã¿ãŒã©ã:
lxc exec jupyterlab -- useradd --create-home --shell=/bin/bash jupyter
ãã¹ã¯ãŒããçæããŠèšå®ããŸãããã
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
次ã«ãXNUMX ã€ã®ã³ãã³ããå®è¡ããŸããæåã®ã³ãã³ãã¯ã·ã¹ãã ã°ã«ãŒããäœæããŸãã sudo
ãXNUMXçªç®ã¯ããã«ãŠãŒã¶ãŒãè¿œå ããŸã jupyter
:
lxc exec jupyterlab -- groupadd --system sudo
lxc exec jupyterlab -- groupmems --group sudo --add jupyter
ãŠãŒã¶ãŒãã©ã®ã°ã«ãŒãã«å±ããŠããããèŠãŠã¿ãŸããã jupyter
:
lxc exec jupyterlab -- id -Gn jupyter
jupyter sudo
ãã¹ãŠåé¡ãããŸããã次ã«é²ã¿ãŸãããã
ã°ã«ãŒãã®ã¡ã³ããŒã§ãããã¹ãŠã®ãŠãŒã¶ãŒãèš±å¯ããŸã sudo
ã³ãã³ãã䜿çšãã sudo
ã ãããè¡ãã«ã¯ã次ã®ã¹ã¯ãªãããå®è¡ããŸãã sed
èšå®ãã¡ã€ã«å
ã®ãã©ã¡ãŒã¿è¡ã®ã³ã¡ã³ãã解é€ããŸãã /etc/sudoers
:
lxc exec jupyterlab -- /bin/bash -c "sed --in-place -e '/^#[ t]*%sudo[ t]*ALL=(ALL)[ t]*ALL$/ s/^[# ]*//' /etc/sudoers"
JupyterLab ã®ã€ã³ã¹ããŒã«ãšæ§æ ^
ãžã¥ãã¿ãŒã©ã 㯠Python ã¢ããªã±ãŒã·ã§ã³ãªã®ã§ãæåã«ãã®ã€ã³ã¿ãŒããªã¿ãŒãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ãŸãã ãžã¥ãã¿ãŒã©ã Pythonããã±ãŒãžãããŒãžã£ãŒã䜿çšããŠã€ã³ã¹ããŒã«ããŸã pip
ãã·ã¹ãã ã®ãã®ã§ã¯ãããŸãããã·ã¹ãã ãªããžããªã§å€ããªã£ãŠããå¯èœæ§ãããããã次ã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããŠäŸåé¢ä¿ãæåã§è§£æ±ºããå¿
èŠããããŸã- python3 python3-dev gcc libc-dev zeromq-dev
:
lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev
Pythonã¢ãžã¥ãŒã«ãšããã±ãŒãžãããŒãžã£ãŒãæŽæ°ããŸããã pip
çŸåšã®ããŒãžã§ã³ãž:
lxc exec jupyterlab -- python3 -m pip install --upgrade pip setuptools wheel
ã»ãã ãžã¥ãã¿ãŒã©ã ããã±ãŒãžãããŒãžã£ãŒçµç± pip
:
lxc exec jupyterlab -- python3 -m pip install jupyterlab
ã®æ¡åŒµæ©èœä»¥æ¥ã ãžã¥ãã¿ãŒã©ã ãããã¯å®éšçãªãã®ã§ãããjupyterlab ããã±ãŒãžã«æ£åŒã«å梱ãããŠããªããããæåã§ã€ã³ã¹ããŒã«ããŠæ§æããå¿ èŠããããŸãã
NodeJS ãšãã®ããã±ãŒãž ãããŒãžã£ãŒã§ãã NPM ãã€ã³ã¹ããŒã«ããŸãããã ãžã¥ãã¿ãŒã©ã ããããæ¡åŒµæ©èœã«äœ¿çšããŸãã
lxc exec jupyterlab -- apk add nodejs npm
æ¡åŒµæ©èœãž ãžã¥ãã¿ãŒã©ã ããããã€ã³ã¹ããŒã«ãããã®ã¯æ©èœããŸãããã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒããèµ·åãããããããŠãŒã¶ãŒãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ããå¿
èŠããããŸã jupyter
ã åé¡ã¯ãèµ·åã³ãã³ãã«ã¯ãã£ã¬ã¯ããªã«æž¡ãããšãã§ãããã©ã¡ãŒã¿ããªãããšã§ããã¢ããªã±ãŒã·ã§ã³ã¯ç°å¢å€æ°ã®ã¿ãåãå
¥ãããããç°å¢å€æ°ãå®çŸ©ããå¿
èŠããããŸãã ãããè¡ãã«ã¯ãå€æ°ã®ãšã¯ã¹ããŒã ã³ãã³ããäœæããŸãã JUPYTERLAB_DIR
ãŠãŒã¶ãŒã®ç°å¢ã§ jupyter
ã ãã¡ã€ã«ãž .bashrc
ããã¯ãŠãŒã¶ãŒããã°ã€ã³ãããã³ã«å®è¡ãããŸãã
lxc exec jupyterlab -- su -l jupyter -c "echo -e "nexport JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab" >> .bashrc"
次ã®ã³ãã³ãã¯ãç¹å¥ãªæ¡åŒµæ©èœã§ããæ¡åŒµæ©èœãããŒãžã£ãŒãã€ã³ã¹ããŒã«ããŸãã ãžã¥ãã¿ãŒã©ã:
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager"
ããã§æåã®èµ·åã®æºåããã¹ãŠæŽããŸãã ãžã¥ãã¿ãŒã©ããã ããããã€ãã®äŸ¿å©ãªæ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããããšãã§ããŸãã
toc
â ç®æ¬¡ãèšäº/ããŒãããã¯ã®èŠåºãã®ãªã¹ããçæããŸããjupyterlab-horizon-theme
â UIããŒãjupyterlab_neon_theme
â UIããŒãjupyterlab-ubu-theme
- ããäžã€ äœè ããã®ããŒã ãã®èšäº:) ãã ãããã®å ŽåãGitHub ãªããžããªããã®ã€ã³ã¹ããŒã«ã衚瀺ãããŸãã
ãããã£ãŠã次ã®ã³ãã³ããé çªã«å®è¡ããŠããããã®æ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããŸãã
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"
æ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããåŸãæ¡åŒµæ©èœãã³ã³ãã€ã«ããå¿
èŠããããŸããããã¯ãã€ã³ã¹ããŒã«æã«ããŒãæå®ããããã§ãã --no-build
æéãç¯çŽããããã«ã ããããäžåºŠã«ã³ã³ãã€ã«ããããšã§å€§å¹
ã«é床ãåäžããŸãã
lxc exec jupyterlab -- su -l jupyter -c "export JUPYTERLAB_DIR=$HOME/.local/share/jupyter/lab; jupyter lab build"
åããŠå®è¡ããã«ã¯ã次㮠XNUMX ã€ã®ã³ãã³ããå®è¡ããŸãã ãžã¥ãã¿ãŒã©ãã XNUMX ã€ã®ã³ãã³ãã§èµ·åããããšãå¯èœã§ããããã®å Žåãé ã®äžã§èŠããã®ãé£ããèµ·åã³ãã³ãã¯ããã§ã«ååãªã³ãã³ããååšãããã¹ãã§ã¯ãªããã³ã³ããå ã® bash ã«ãã£ãŠèšæ¶ãããŸããå±¥æŽã«èšé²ããŸã:)
ãŠãŒã¶ãŒãšããŠã³ã³ããã«ãã°ã€ã³ããŸã jupyter
:
lxc exec jupyterlab -- su -l jupyter
次ã«ãå®è¡ããŸã ãžã¥ãã¿ãŒã©ã 瀺ãããŠããããŒãšãã©ã¡ãŒã¿ã䜿çšããŸãã
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser
Web ãã©ãŠã¶ã§ã¢ãã¬ã¹ã«ã¢ã¯ã»ã¹ããŸã http://10.0.5.5:8888 éããããŒãžã§æ¬¡ã®ããã«å ¥åããŸã ããŒã¯ã³ ã³ã³ãœãŒã«ã«è¡šç€ºãããã¢ã¯ã»ã¹æš©ã ã³ããŒããŠããŒãžã«è²Œãä»ããã¯ãªãã¯ããŸãã ãã°ã€ã³ã ãã°ã€ã³åŸãäžã®å³ã«ç€ºãããã«ãå·ŠåŽã®æ¡åŒµæ©èœã¡ãã¥ãŒã«ç§»åããŸããæ¡åŒµæ©èœãããŒãžã£ãŒãã¢ã¯ãã£ãåãããšãã«ãã³ãã³ããå¿ èŠãªãµãŒãããŒãã£ã®æ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããŠã»ãã¥ãªã㣠ãªã¹ã¯ãè² ããã©ããã確èªããã¡ãã»ãŒãžã衚瀺ãããŸãã JupyterLab ã®éçº ã¯è²¬ä»»ãè² ããŸãã:
ãã ããå
šäœãåé¢ããŸãã ãžã¥ãã¿ãŒã©ã ãããã³ã³ããå
ã«é
眮ããŠãNodeJS ãå¿
èŠãšãã䜿çšãããµãŒãããŒãã£ã®æ¡åŒµæ©èœããå°ãªããšãã³ã³ããå
ã§éããã®ä»¥å€ã®ãã£ã¹ã¯äžã®ããŒã¿ãçãããšãã§ããªãããã«ããŸãã ãã¹ãäžã®ãã©ã€ããŒã ããã¥ã¡ã³ãã«ã¢ã¯ã»ã¹ããŸãã /home
ã³ã³ããããã®ããã»ã¹ãæåããå¯èœæ§ã¯äœããæåããå Žåã¯ãã³ã³ãããå®è¡ããããããã¹ã ã·ã¹ãã äžã®ãã¡ã€ã«ã«å¯Ÿããæš©éãå¿
èŠã«ãªããŸãã éç¹æš©ã¢ãŒãã ãã®æ
å ±ã«åºã¥ããŠãæ¡åŒµæ©èœãå«ãããªã¹ã¯ãè©äŸ¡ã§ããŸãã ãžã¥ãã¿ãŒã©ã.
äœæããã IPython ããŒããã㯠(ããŒãž ãžã¥ãã¿ãŒã©ã) ãŠãŒã¶ãŒã®ããŒã ãã£ã¬ã¯ããªã«äœæãããŸã - /home/jupyter
ãã ãããã¹ããšã³ã³ãããŒã®éã§ããŒã¿ãåå² (å
±æ) ããèšç»ãªã®ã§ãã³ã³ãœãŒã«ã«æ»ã£ãŠåæ¢ããŸãã ãžã¥ãã¿ãŒã©ã ãããããŒãå®è¡ããããšã§ - CTRL+C
ãããŠçãã y
èŠæ±ã«å¿ããŠã 次ã«ããŠãŒã¶ãŒã®å¯Ÿè©±åã»ãã·ã§ã³ãçµäºããŸãã jupyter
ãããããŒãå®äºãã CTRL+D
.
ãã¹ããšã®ããŒã¿å ±æ ^
ãã¹ããšããŒã¿ãå ±æããã«ã¯ããããå®è¡ã§ããããã€ã¹ãã³ã³ããå ã«äœæããå¿ èŠããããŸãããããè¡ãã«ã¯ã次ã®ããŒãæå®ããŠæ¬¡ã®ã³ãã³ããå®è¡ããŸãã
lxc config device add
â ãã®ã³ãã³ãã¯ããã€ã¹æ§æãè¿œå ããŸãjupyter
â æ§æãè¿œå ãããã³ã³ããã® IDhostfs
- ããã€ã¹IDã ä»»æã®ååãèšå®ã§ããŸããdisk
â ããã€ã¹ã®çš®é¡ã衚瀺ãããŸãpath
â LXD ããã®ããã€ã¹ãããŠã³ãããã³ã³ããå ã®ãã¹ãæå®ããŸãsource
â ãœãŒã¹ãã€ãŸãã³ã³ãããšå ±æãããã¹ãäžã®ãã£ã¬ã¯ããªãžã®ãã¹ãæå®ããŸãã 奜ã¿ã«å¿ããŠãã¹ãæå®ããŠãã ãã
lxc config device add jupyterlab hostfs disk path=/mnt/hostfs source=/home/dv/projects/ipython-notebooks
ã«ã¿ãã°çš /home/dv/projects/ipython-notebooks
æš©éã¯ãçŸåšæ¬¡ã® UID ãæã€ã³ã³ãã ãŠãŒã¶ãŒã«èšå®ããå¿
èŠããããŸãã SubUID + UID
ã®ç« ãåç
§ å®å
šæ§ã ã³ã³ããã®æš©é èšäºã®äžã§ LXD ã®åºæ¬æ©èœ - Linux ã³ã³ãã ã·ã¹ãã .
ãã¹ãã«æš©éãèšå®ããŸããææè
ã¯ã³ã³ãã㌠ãŠãŒã¶ãŒã«ãªããŸãã jupyter
ãå€æ° $USER
ãã¹ã ãŠãŒã¶ãŒãã°ã«ãŒããšããŠæå®ããŸãã
sudo chown 1001000:$USER /home/dv/projects/ipython-notebooks
ããã«ã¡ã¯äžçïŒ ^
ã³ã³ããå
ã§ãŸã ã³ã³ãœãŒã« ã»ãã·ã§ã³ãéããŠããå Žåã¯ã ãžã¥ãã¿ãŒã©ããæ°ããããŒã§åèµ·åããŸã --notebook-dir
å€ãèšå®ããããšã§ /mnt/hostfs
åã®æé ã§äœæããããã€ã¹ã®ã³ã³ããå
ã®ã©ãããããã®ã«ãŒããžã®ãã¹ãšããŠæ¬¡ã®ããã«å
¥åããŸãã
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
次ã«ãããŒãžã«ç§»åããŸã http://10.0.5.5:8888 次ã®å³ã«ç€ºãããã«ãããŒãžäžã®ãã¿ã³ãã¯ãªãã¯ããŠæåã®ã©ããããããäœæããŸãã
次ã«ãããŒãžäžã®ãã£ãŒã«ãã«ãã¯ã©ã·ãã¯ãªã³ãŒãã衚瀺ãã Python ã³ãŒããå
¥åããŸãã Hello World!
ã å
¥åãçµãã£ãã ãæŒããŸã CTRL+ENTER
ãŸãã¯ãäžéšã®ããŒã«ããŒã®ãåçããã¿ã³ã䜿çšããŠãJupyterLab ã§ãããå®è¡ããŸãã
ãã®æç¹ã§ãã»ãŒãã¹ãŠã®ãã®ã䜿çšã§ããããã«ãªããŸããããPython ã®æšæºæ©èœãå€§å¹ ã«æ¡åŒµã§ããè¿œå ã® Python ã¢ãžã¥ãŒã« (æ¬æ Œçãªã¢ããªã±ãŒã·ã§ã³) ãã€ã³ã¹ããŒã«ããªããšé¢çœããããŸããã ãžã¥ãã¿ãŒã©ããããã£ãŠã次ã«é²ã¿ãŸããã:)
PS èå³æ·±ãã®ã¯ãå€ãå®è£
ãžã¥ãã¿ãŒ ã³ãŒãããŒã ã®äžã§ ãžã¥ãã¿ãŒããŒã æ¶ãå»ã£ãããã§ã¯ãªãããããšäžŠè¡ããŠååšããŠããŸãã ãžã¥ãã¿ãŒã©ãã å€ãããŒãžã§ã³ã«åãæ¿ããã«ã¯ãã¢ãã¬ã¹ã«ãµãã£ãã¯ã¹ãè¿œå ããŠãªã³ã¯ãã¯ãªãã¯ããŸãã/tree
ãæ°ããããŒãžã§ã³ãžã®ç§»è¡ã¯æ¥å°ŸèŸã䜿çšããŠå®è¡ãããŸãã /lab
ãã ããæå®ããå¿
èŠã¯ãããŸããã
- ãžã¥ãã¿ãŒããŒããã㯠- http://10.0.5.5:8888/tree
- ãžã¥ãã¿ãŒã©ã - http://10.0.5.5:8888/lab
Python ã®æ©èœãæ¡åŒµãã ^
ãã®ã»ã¯ã·ã§ã³ã§ã¯ã次ã®ãããªåŒ·å㪠Python èšèªã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŸãã NumPy, ãã³ã, matplotlib, IPyãŠã£ãžã§ãã ãã®çµæã¯ã©ãããããã«çµ±åãããŸã ãžã¥ãã¿ãŒã©ã.
ãªã¹ãããã Python ã¢ãžã¥ãŒã«ãããã±ãŒãž ãããŒãžã£ãŒãéããŠã€ã³ã¹ããŒã«ããåã« pip
ãŸããAlpine Linux ã®ã·ã¹ãã äŸåé¢ä¿ã解決ããå¿
èŠããããŸãã
g++
â ã¢ãžã¥ãŒã«ã®äžéšã¯èšèªã§å®è£ ãããŠãããããã¢ãžã¥ãŒã«ã®ã³ã³ãã€ã«ã«å¿ èŠã§ã C + + å®è¡æã«ãã€ã㪠ã¢ãžã¥ãŒã«ãšã㊠Python ã«æ¥ç¶ããŸãfreetype-dev
- Pythonã¢ãžã¥ãŒã«ã®äŸåé¢ä¿ matplotlib
äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«:
lxc exec jupyterlab -- apk add g++ freetype-dev
åé¡ã XNUMX ã€ãããŸããAlpine Linux ãã£ã¹ããªãã¥ãŒã·ã§ã³ã®çŸåšã®ç¶æ ã§ã¯ãNumPy ã®æ°ããããŒãžã§ã³ãã³ã³ãã€ã«ããããšãã§ãããã³ã³ãã€ã« ãšã©ãŒã衚瀺ãããŸããã解決ã§ããŸããã§ããã
ERROR: PEP 517 ã䜿çšãã numpy çšã®ãã€ãŒã«ãæ§ç¯ã§ãããçŽæ¥ã€ã³ã¹ããŒã«ã§ããŸãã
ãããã£ãŠããã®ã¢ãžã¥ãŒã«ã¯ãã³ã³ãã€ã«æžã¿ã®ããŒãžã§ã³ãé åžããã·ã¹ãã ããã±ãŒãžãšããŠã€ã³ã¹ããŒã«ããŸãããçŸåšãµã€ãã§å ¥æå¯èœãªãã®ãããå°ãå€ãã§ãã
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev
次ã«ãããã±ãŒãžãããŒãžã£ãŒãéã㊠Python ã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŸãã pip
ã äžéšã®ã¢ãžã¥ãŒã«ã¯ã³ã³ãã€ã«ã«æ°åãããå Žåãããããããã°ãããåŸ
ã¡ãã ããã ç§ã®ãã·ã³ã§ã¯ãã³ã³ãã€ã«ã«çŽ 15 åããããŸããã
lxc exec jupyterlab -- python3 -m pip install pandas ipywidgets matplotlib
ã€ã³ã¹ããŒã«ãã£ãã·ã¥ã®ã¯ãªã¢:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*
JupyterLab ã§ã®ã¢ãžã¥ãŒã«ã®ãã¹ã ^
èµ°ã£ãŠãããªã ãžã¥ãã¿ãŒã©ããåèµ·åãããšãæ°ããã€ã³ã¹ããŒã«ãããã¢ãžã¥ãŒã«ãæå¹ã«ãªããŸãã ãããè¡ãã«ã¯ãã³ã³ãœãŒã« ã»ãã·ã§ã³ã§ã CTRL+C
å®è¡ããŠããå Žæã§å
¥åããŠãã ãã y
ãªã¯ãšã¹ããåæ¢ããŠããå床éå§ããã«ã¯ ãžã¥ãã¿ãŒã©ã ã³ãã³ããå床å
¥åããªãããã«ããŒããŒãã®äžç¢å°ãæŒããŠããã Enter
ãããéå§ããã«ã¯:
jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=/mnt/hostfs
ÐеÑейЎОÑеМаÑÑÑаМОÑÑ http://10.0.5.5:8888/lab ãŸãã¯ããã©ãŠã¶ã§ããŒãžãæŽæ°ããæ°ããããŒãããã¯ã®ã»ã«ã«æ¬¡ã®ã³ãŒããå ¥åããŸãã
%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
以äžã®å³ã®ãããªçµæãåŸãããã¯ãã§ãã IPyãŠã£ãžã§ãã ãœãŒã¹ ã³ãŒããšã€ã³ã¿ã©ã¯ãã£ãã«å¯Ÿè©±ãã UI èŠçŽ ãããŒãžäžã«çæããŸãã matplotlib ã³ãŒãã®çµæãé¢æ°ã°ã©ããšããŠç»å圢åŒã§è¡šç€ºããŸãã
å€ãã®äŸ IPyãŠã£ãžã§ãã ãã¥ãŒããªã¢ã«ã§èŠã€ããããšãã§ããŸã ããã§
ä»ã«äœããããŸããïŒ ^
ãã®ãŸãŸèšäºã®æåŸãŸã§èªãã§ããã ããã°å¹žãã§ãã èšäºã®æåŸã«ã¯ãã€ã³ã¹ããŒã«ããæ¢è£œã®ã¹ã¯ãªãããæå³çã«æçš¿ããŸããã§ããã ãžã¥ãã¿ãŒã©ã ãã¯ã³ã¯ãªãã¯ãã§åŸæ¥å¡ãå±ãŸãããšãã§ããŸã :) ããããã³ãã³ãã XNUMX ã€ã® Bash ã¹ã¯ãªããã«ãŸãšããŠããã®ã§ãæ¹æ³ã¯ãã§ã«ããã£ãŠããã®ã§ãèªåã§è¡ãããšãã§ããŸã :)
ããªããããããšãã§ããŸãïŒ
- IP ã¢ãã¬ã¹ã®ä»£ããã«ã³ã³ããã®ãããã¯ãŒã¯åãåçŽãªåœ¢åŒã§èšè¿°ããŠèšå®ããŸãã
/etc/hosts
ãã©ãŠã¶ã«ã¢ãã¬ã¹ãå ¥åããŸã http://jupyter.local:8888 - ã³ã³ããã®ãªãœãŒã¹å¶éãè©ŠããŠã¿ãŸããããããã«ã€ããŠã¯ã次ã®ç« ãèªãã§ãã ããã åºæ¬ç㪠LXD æ©èœ ãŸãã¯ãLXD éçºè ãµã€ãã§è©³çŽ°æ å ±ãå ¥æããŠãã ããã
- ããŒããå€æŽããŸãã
ä»ã«ãã§ããããšã¯ãããããããŸãã ããã ãã§ãã ç§ã¯ããªãã®æåãç¥ã£ãŠïŒ
æŽæ°: 15.04.2020/18/30 XNUMX:XNUMX - ãHello, World!ãã®ç« ã®èª€ããä¿®æ£
UPDATE: 16.04.2020/10/00 XNUMX:XNUMX â æ¡åŒµæ©èœãããŒãžã£ãŒã®ã¢ã¯ãã£ããŒã·ã§ã³ã®èª¬ææãä¿®æ£ããã³è¿œå ãžã¥ãã¿ãŒã©ã
æŽæ°: 16.04.2020/10/40 XNUMX:XNUMX â ããã¹ãå
ã§èŠã€ãã£ã誀ããä¿®æ£ãããåºæ¬ãœãããŠã§ã¢ã®ã€ã³ã¹ããŒã«ãšã·ã¹ãã ã®ã»ããã¢ãããã®ç« ãããããããããããããã«ãããã«å€æŽããŸããã
åºæïŒ habr.com