ืืื ืื ืคืขื ื ืืืฆืชื ืืืชื ืกืืช ืขื ืงืื ืื ืืื ืขืืจ ืืืขืจืืช ืืืื ืืงืก ืืืื ืืืืื ืืืขืจืืช ืืืกืืกืืช ืืืงืจืืข ืืื ืืืงืจื ืฉื ืฉืืืื ืืงืื ืฉืืืืจ ืืคืขืื ืขื ืืจืฉืืืช ืฉืืจืฉ?
ืืื ืื ืืืื ืืขืืืื ืฉื ื ืื ืฉืืชื ืฆืจืื ืืืืืง ืื ืืืคืขืื ืืฉืืื ืฉืื ืฉื ืืืงืจื-ืฉืืจืืชืื ืฉืื ืื ืืืืื ื ืืืช? ืืื ืื ืืคืืื ืืืฃ?
ืขื ืืืื ืืช ืืืจืืืืืืืช ืืื ืืืืืช ืขื ืืื ืืืคืจืืืืืจ, ืืขืืืช ืืืื ืืืืืืช ืืืืคืชืจื, ืืื ืืืืื ืืืืจ? ืืืืืื, ืืืื ื-LXD ืืืืืกืก ืขื ืืืคืฆื ืฉื Alpine Linux ืฆืืจื ืืืื 7.60MB
ืืืืจืื RAM, ืืืืื ืืืืฆืช ืืฉืืจืฉ ืชืืคืกืช ืืืืจ ืืืคืขืื 9.5MB
! ืืื ืืชื ืืืื ืืช ืื, ืืืืื ืืืกืง? ืื ื ืืืืืฅ ืืืืืง ืืืืืืช ืืกืืกืืืช ืฉื LXD - ืืขืจืืช ืงืื ืืืื ืจ ืืืื ืืงืก
ืืืจื ืฉืืชืืจืจ ืืืืคื ืืืื ืื ืื ืืืืืืช LXD, ืืืื ื ืืฉืื ืื ืืฉืื, ืื ืื ืืืืชื ืคืืืคืืจืืช ืงืฆืืจ ืืื ืฉืื ืชืืืื ืืืจืืฅ ืืืืื ืงืื ืขืืืจ ืืืืจื, ืืืฆืืจ ืืจืคืื, ืืงืฉืจ ืืืืคื ืืื ืื (ืืื ืืจืืงืืืื) UI- widgets ืขื ืืงืื ืฉืืื, ืืืฉืืื ืืช ืืงืื ืืืงืกื ืขื ืืืืง ื'ืง... ืขืืฆืื? ืืืื ืืืื ืืื ืืจืืงืืืื? ืืืื... ืื ื ืจืืฆื ืืช ืื! ืจืืฆื! ๐
ืชืกืชืื ืืชืืช ืืืชืื ืืืคื ื ืฉืืง ืืืืื ืืขืืืช ื'ืืคืืืจ - ืืืืจ ืืื ืฉื ืืืฉืง ืืืฉืชืืฉ ืืืงืื ื-Jupyter Notebook ืืืืืฉื, ืืื ืื ื ื ืชืงืื ืื ืืืืืืื ืฉื Python ืืืื ืจืืื, ืคื ืืืช, ืืืคืืืืืื, IPyWidgets ืื ืฉืืืคืฉืจ ืืื ืืขืฉืืช ืืช ืื ืื ืฉืจืฉืื ืืืขืื ืืืฉืืืจ ืืื ืืงืืืฅ ืืืืื - ืืืฉื ื ืืื IPython.
ืฉืื
- ืชืืื ืืช ืืืจืื ืืกืืืืืช
- ืืชืงื ื ืืชืฆืืจื ืฉื ืืืขืจืืช ืืืกืืกืืช
- ืืชืงื ืช ืชืืื ื ืืกืืกืืช ืืืืืจืช ืืืขืจืืช
- ืืชืงื ื ืืืืืจื ืฉื JupyterLab
- ืฉืืชืืฃ ื ืชืื ืื ืขื ืืืืจื
- ืฉืืื ืขืืื!
- ืืจืืืช ืืืืืืืช ืฉื Python
- ืืืืงืช ืืืืืืื ื- JupyterLab
- ืื ืขืื?
ืชืืื ืืช ืืืจืื ืืกืืืืืช ^
ืืืื ื ืชืืจ ืชืืื ืืช ืคืขืืื ืงืฆืจื ืืื ืืืงื ืขืืื ื ืืืืฉื ืืช ืืชืืื ืืช ืืขืื:
- ืืืื ืืืชืงืื ืืืืฉืืง ืงืื ืืืื ืจ ืืืืืกืก ืขื ืขืจืืช ืืืคืฆื ืืื ืืงืก ืืืคืื ื. ืื ื ื ืฉืชืืฉ ืืืคืฆื ืืื ืืืืืื ืฉืืื ืืืืื ืช ืืืื ืืืืืื ืื ืชืงืื ืื ืจืง ืืช ืืชืืื ื ืื ืืืฆื ืืืืชืจ, ืฉืื ืืืจ ืืืืชืจ.
- ืืืื ื ืืกืืฃ ืืืกืง ืืืจืืืืื ื ืืกืฃ ืืงืื ืืืื ืจ ืื ืืชื ืื ืฉื -
hostfs
ืืืขืื ืืืชื ืืืขืจืืช ืงืืฆื ืืฉืืจืฉ. ืืืกืง ืื ืืืคืฉืจ ืืืฉืชืืฉ ืืงืืฆืื ืขื ืืืืจื ืืกืคืจืืื ื ืชืื ื ืืชืื ืืงืื ืืืื ืจ. ืืคืืื, ืื ืชืื ืื ืฉืื ื ืืืื ืืืชื ืชืืืืื ืืืืื. ืื ืืืืื ืืืืืง, ืื ืชืื ืื ืืืฉืืจื ืืืืจื. ืืื ืื, ืกืืืื ืื ืฉืืืืฉืืช ืืฉืืชืืฃ ื ืชืื ืื ืืืื ืืื ืงืื ืืืื ืจืื ืจืืื ืืืื ืืืฉืชืืฉ ืืื ืื ืื ื ืืจืฉืช ืืกืื ืืจืืืื ืฉื ืืคืฆืช ืืงืื ืืืื ืจ. - ืืืื ื ืชืงืื ืืช Bash, sudo, ืืช ืืกืคืจืืืช ืืืจืืฉืืช, ื ืืกืืฃ ืื ืงืืข ืืฉืชืืฉ ืืขืจืืช
- ืืืื ื ืชืงืื ืืช Python, ืืืืืืื ืื ืจืืื ืขืืืจื ืชืืืช ืืื ืืจืืช
- ืืืื ื ืชืงืื ืื ืคืขืื ืืขืืืช ื'ืืคืืืจ, ืืชืื ืืืฉืืช ืืช ืืืจืื, ืืชืงื ืขืืืจื ืืจืืืืช.
ืืืืืจ ืื ื ืชืืื ืขื ืืฉืงืช ืืงืื ืืืื ืจ, ืื ื ืฉืงืื ืืชืงื ื ืืืืืจื ืฉื LXD, ืืช ืื ืื ืชืืืื ืืืฆืื ืืืืืจ ืืืจ - ืชืืื ืืช ืืกืืกืืืช ืฉื LXD - ืืขืจืืืช ืืืื ืืื ืืงืก.
ืืชืงื ื ืืชืฆืืจื ืฉื ืืืขืจืืช ืืืกืืกืืช ^
ืื ื ืืืฆืจืื ืืืื ืขื ืืคืงืืื ืฉืื ืื ื ืืฆืืื ืื ืืช ืืชืืื ื - 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
ืื ื ืืชื ืื ืืืืื ืืช ืืืชื ืกืืช ืืงืื ืืืื ืจืื ืืืืกืง 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 - ืืขืจืืืช ืืืื ืืื ืืงืก.
ื ืฉื ื ืืช ืืชืืืช ื-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 |
+------------+---------+------------------+--------------+
ืืชืงื ืช ืชืืื ื ืืกืืกืืช ืืืืืจืช ืืืขืจืืช ^
ืืื ืื ืื ืืช ืืืืืื ืฉืื ื, ืขืืื ืืืชืงืื ืืช ืืชืืื ื ืืืื:
ืึฒืึดืืึธื
ืชืืืืจ
ืืืืื
ืืขืืคืช GNU Bourne Again
bash-ืืฉืืื
ืืฉืืื ื ืืชื ืช ืืชืื ืืช ืขืืืจ ืืขืืคืช bash
sudo
ืชื ืืืฉืชืืฉืื ืืกืืืืื ืืช ืืืืืืช ืืืจืืฅ ืืื ืคืงืืืืช ืืชืืจ root
ืฆื
ืืืืืช ืืืื ืื ืืืื ืกืืกืืืืช ืืืฉืืื ืืช ืขื ืชืืืื ืืงืืฆื ืฆื ื-PAM
tzdata
ืืงืืจืืช ืื ืชืื ื ืืืืจ ืืื ืืฉืขืื ืงืืฅ
ื ื ื
ืฉืืืื ืขืืจื Pico ืขื ืฉืืคืืจืื
ืื ืืกืฃ, ืืชื ืืืื ืืืชืงืื ืชืืืื ืืืคื ืืืื ืฉื ืืืขืจืืช ืขื ืืื ืืชืงื ืช ืืืืืืืช ืืืืืช - man man-pages mdocml-apropos less
lxc exec jupyterlab -- apk add bash bash-completion sudo shadow tzdata nano
ืืืื ื ืกืชืื ืขื ืืคืงืืืืช ืืืืงืฉืื ืฉืืฉืชืืฉื ื ืืื:
lxc
- ืืชืงืฉืจ ืืืงืื LXDexec
- ืฉืืืช ืืงืื LXD ืฉืืจืืฆื ืคืงืืื ืืืืืjupyterlab
- ืืืื ืืืื--
- ืืคืชื ืืืืื ืืืฆืืื ืื ืืคืจืฉ ืืคืชืืืช ื ืืกืคืื ืืืคืชืืืช ืขืืืจlxc
ืืืขืืืจืื ืืช ืฉืืจ ืืืื ืืื ืฉืืื ืืืืืapk
- ืื ืื ืืืืืืช ืืคืฆื ืฉื Alpine Linuxadd
โ ืฉืืืช ืื ืื ืืืืืืช ืฉืืชืงืื ืืืืืืช ืฉืฆืืื ื ืืืืจ ืืคืงืืื
ืืืืจ ืืื, ื ืืืืจ ืืืืจ ืืื ืืืขืจืืช. 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 ืืืืื ืืืืคื ืืื ืืจืืงืืืื. ืืืขืจืืช ืืืืจืืช ืฉืื ืืื ืื ื'ืจื ืืื ืืงืก ืืืงืืฆืื ืืืืขืชืงืื /etc/skel/.bash_profile
, /etc/skel/.bashrc
, /etc/skel/.dir_colors
ืืืืคื ืขืงืจืื ื ืื ืืชืืืืื ื-Alpine Linux ืืืื ื ืืืจืืื ืืืขืืืช ืงืจืืืืืช, ืืื ืืืชืื ืฉืืฉ ืื ืืคืฆื ืืืจืช ืืืชื ืฆืจืื ืืืืื ืืืืคื ืขืฆืืื ืื ืืฉ ืฉืืืื ืืขืช ืืคืขืืช Bash ืืงืื ืืืื ืจ.
ืืขืชืง ืืช ืงืืฆื ืืกืงื ืืืืื. ืึทืคึฐืชึตืึท --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
ืขืืืจ ืืฉืชืืฉ ืฉืืจืฉ ืฉืืืจ ืงืืื, ืืขืชืง ืืช ืงืืฆื ืืกืงื ืฉืืืขืชืงื ืื ืขืชื ืืชืื ืืืืื ืืกืคืจืืืช ืืืืช:
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
ืืืืจ ืืื, ื ืืฆืข ืฉืชื ืคืงืืืืช, ืืจืืฉืื ื ืชืืฆืืจ ืงืืืฆืช ืืขืจืืช sudo
, ืืืฉื ื ืืืกืืฃ ืื ืืฉืชืืฉ 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
. ืืืขืื ืืื ืฉืืื ืคืจืืืจ ืืคืงืืืช launch ืฉื ืืชื ืืืขืืืจ ืืกืคืจืืื, ืืืคืืืงืฆืื ืืงืืืช ืจืง ืืฉืชื ื ืกืืืื ืืืื ืขืืื ื ืืืืืืจ ืืืชื. ืืฉื ืื, ื ืืชืื ืืช ืคืงืืืช ืืืืฆืื ืืืฉืชื ื 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
- ื ืืฉื ืืืฉืง ืืืฉืชืืฉjupyterlab_neon_theme
- ื ืืฉื ืืืฉืง ืืืฉืชืืฉ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"
ืืขืช ืืคืขื ืืช ืฉืชื ืืคืงืืืืช ืืืืืช ืืื ืืืคืขืื ืืืชื ืืคืขื ืืจืืฉืื ื ืืขืืืช ื'ืืคืืืจ. ืืคืฉืจ ืืืื ืืืคืขืื ืืืชื ืืคืงืืื ืืืช, ืืื ืืืงืจื ืื, ืคืงืืืช ืืืฉืงื, ืฉืงืฉื ืืืืืจ ืืจืืฉ ืฉืื, ืชืืืืจ ื-bash ืืืืื, ืืื ืืืืจื, ืฉืื ืืฉ ืืืจ ืืกืคืืง ืคืงืืืืช ืืจืฉืื ืืืชื ืืืืกืืืจืื :)
ืืืื ืก ืืืืื ืืืฉืชืืฉ jupyter
:
lxc exec jupyterlab -- su -l jupyter
ืืืืจ ืืื, ืจืืฅ ืืขืืืช ื'ืืคืืืจ ืขื ืืคืชืืืช ืืคืจืืืจืื ืืืฆืืื:
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser
ืขืืืจ ืืืชืืืช ืืืคืืคื ืืืื ืืจื ื ืฉืื http://10.0.5.5:8888 ืืืขืืื ืฉื ืคืชื ืืื ืก ืืกืืืื ืืืฉื ืฉืชืจืื ืืืกืืฃ. ืืขืชืง ืืืืืง ืืืชื ืืืฃ ืืืืืจ ืืื ืืืฅ ืืชืืืจืืช. ืืืืจ ืืื ืืกื, ืขืืืจ ืืชืคืจืื ืืืจืืืืช ืืฉืืื, ืืคื ืฉืืืฆื ืืืืืจ ืืืื, ืฉื ืชืชืืงืฉ, ืืขืช ืืคืขืืช ืื ืื ืืืจืืืืช, ืืงืืช ืกืืืื ื ืืืืื ืขื ืืื ืืชืงื ืช ืืจืืืืช ืืฆืืืื ืฉืืืฉืืื ืฉืขืืืจื ืืคืงืืื ืคืืชืื JupyterLab ืืื ื ืืืจืื:
ืขื ืืืช, ืื ื ืืืืืืื ืืช ืืืื ืืขืืืช ื'ืืคืืืจ ืืืืงื ืืืชื ืืงืื ืืืื ืจ ืื ืฉืืจืืืืช ืฉื ืฆื ืฉืืืฉื ืฉืืืจืฉืืช ืืืฉืชืืฉืืช ื-NodeJS ืื ืืืืืืช ืืคืืืช ืืื ืื ื ืชืื ืื ืืืืกืง ืืืื ืืื ืฉืื ื ืคืืชืืื ืืชืื ืืงืื ืืืื ืจ. ืงืื ืืืกืืืื ืืคืจืืืื ืฉืื ืืืืจื ื /home
ืื ืกืืืจ ืฉืชืืืืืื ืืืืื ืืฆืืืื, ืืื ืื ืืฆืืืื, ืื ืืชื ืฆืจืื ืืืืืช ืืขื ืืจืฉืืืช ืขื ืงืืฆืื ืืืขืจืืช ืืืืจืืช, ืืืืืื ืฉืื ื ืืคืขืืืื ืืช ืืงืื ืืืื ืจ ื ืืฆื ืื ืืืื. ืืืชืืกืก ืขื ืืืืข ืื, ืืชื ืืืื ืืืขืจืื ืืช ืืกืืืื ืฉื ืืืืืช ืืจืืืืช ื ืืขืืืช ื'ืืคืืืจ.
ืืฆืจ ืืืืจืืช IPython (ืขืืืืื ื ืืขืืืช ื'ืืคืืืจ) ืืืืืฆืจ ืืขืช ืืกืคืจืืืช ืืืืช ืฉื ืืืฉืชืืฉ - /home/jupyter
, ืืื ืืชืืื ืืืช ืฉืื ื ืื ืืคืฆื ืืช ืื ืชืื ืื (ืฉืืชืืฃ) ืืื ืืืืจื ืืืืืื, ืื ืืืืจ ืืืกืืฃ ืืืคืกืง ืืขืืืช ื'ืืคืืืจ ืขื ืืื ืืคืขืืช ืืงืฉ ืงืืฆืืจ - CTRL+C
ืืขืื ื y
ืขื ืคื ืืงืฉื. ืืืืจ ืืื ืกืืื ืืช ืืืคืขืื ืืืื ืืจืืงืืืืืช ืฉื ืืืฉืชืืฉ jupyter
ืืฉืืืช ืืงืฉ ืงืืฆืืจ CTRL+D
.
ืฉืืชืืฃ ื ืชืื ืื ืขื ืืืืจื ^
ืืื ืืฉืชืฃ ื ืชืื ืื ืขื ืืืืจื, ืขืืื ืืืฆืืจ ืืืฉืืจ ืืืืื ืืืืคืฉืจ ืื ืืขืฉืืช ืืืช ืืืื ืืขืฉืืช ืืืช, ืืจืฅ ืืช ืืคืงืืื ืืืื ืฉืื ืื ื ืืฆืืื ืื ืืช ืืืคืชืืืช ืืืืื:
lxc config device add
โ ืืคืงืืื ืืืกืืคื ืืช ืชืฆืืจืช ืืืืฉืืจjupyter
- ืืืื ืืืืื ืฉืืืื ืืชืืืกืคืช ืืชืฆืืจืhostfs
- ืืืื ืืืฉืืจ. ืืชื ืืืื ืืืืืืจ ืื ืฉื.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 - ืืขืจืืืช ืืืื ืืื ืืงืก.
ืืืืจ ืืช ืืืจืฉืื ืขื ืืืืจื, ืฉืื ืืืขืืื ืืืื ืืฉืชืืฉ ืืืืื 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 ื ืืขืืืช ื'ืืคืืืจืืื, ืืืื ื ืืฉืื :)
ื .ื ืืืืจ ืืืขื ืืื ืืื ืฉืืืืฉืื ืืืฉื ืืืคืืืจ ืชืืช ืฉื ืงืื ืืืืจืช ืฆืืง ืื ื ืขืื ืืืื ืงืืื ืืืงืืื ืืขืืืช ื'ืืคืืืจ. ืืื ืืขืืืจ ืืืจืกื ืืืฉื ื, โโืืืฅ ืขื ืืงืืฉืืจ ืืืืกืืฃ ืืช ืืกืืืืช ืืืชืืืช/tree
, ืืืืขืืจ ืืืจืกื ืืืืฉื ืืชืืฆืข ืขื ืืกืืืืช /lab
, ืืื ืื ืื ืืืื ืืืืืช ืืฆืืื:
- ืืืืจืช Jupyter - http://10.0.5.5:8888/tree
- Jupyter Lab - http://10.0.5.5:8888/lab
ืืจืืืช ืืืืืืืช ืฉื Python ^
ืืกืขืืฃ ืื, ื ืชืงืื ืืืืืื ืฉืคืช Python ืืืงืื ืืื ืจืืื, ืคื ืืืช, ืืืคืืืืืื, IPyWidgets ืฉืชืืฆืืืชืืื ืืฉืืืืืช ืืืืฉืืื ื ืืืืื ืืขืืืช ื'ืืคืืืจ.
ืืคื ื ืืชืงื ืช ืืืืืื Python ืืจืฉืืืื ืืจื ืื ืื ืืืืืืืช pip
ืขืืื ื ืืคืชืืจ ืชืืืื ืชืืืช ืืขืจืืช ื-Alpine Linux:
g++
- ืืจืืฉ ืืืืืืจ ืืืืืืื, ืืืืืื ืฉืืืงื ืืืืฉืืื ืืฉืคื C + + ืืืืชืืืจ ืืคืืืชืื ืืืื ืจืืฆื ืืืืืืืื ืืื ืืจืืืfreetype-dev
- ืชืืืช ืขืืืจ ืืืืื Python ืืืคืืืืืื
ืืชืงื ืช ืชืืืช:
lxc exec jupyterlab -- apk add g++ freetype-dev
ืืฉ ืืขืื ืืืช: ืืืฆื ืื ืืืื ืฉื ืืืคืฆื ืืืืคืื ืืช ืืื ืืงืก, ืื ื ืืชื ืืืื ืืืจืืื ืืช ืืืจืกื ืืืืฉื ืฉื NumPy; ืชืืคืืข ืฉืืืืช ืงืืืคืืืฆืื ืฉืื ืืฆืืืชื ืืคืชืืจ:
ERROR: ืื ื ืืชื ืืื ืืช ืืืืืื ืขืืืจ numpy ืืืฉืชืืฉืื ื-PEP 517 ืืื ื ืืชื ืืืชืงืื ืืืชื ืืฉืืจืืช
ืืื, ื ืชืงืื ืืช ืืืืืื ืืื ืืืืืืช ืืขืจืืช ืฉืืคืืฆื ืืจืกื ืฉืืืจ ืืืืืจ, ืืื ืงืฆืช ืืืชืจ ืืฉื ื ืืื ืฉืืืื ืืจืืข ืืืชืจ:
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
ืืชื ืืืืจ ืืงืื ืชืืฆืื ืืื ืืชืืื ื ืืืื, ืืืคื IPyWidgets ืืืฆืจ ืืืื ื ืืืฉืง ืืฉืชืืฉ ืืืฃ ืฉืืงืืื ืืื ืืจืืงืฆืื ืืื ืืจืืงืืืืืช ืขื ืงืื ืืืงืืจ, ืืื ืืืคืืืืืื ืืฆืื ืืช ืืชืืฆืื ืฉื ืืงืื ืืฆืืจื ืฉื ืชืืื ื ืืืจืฃ ืคืื ืงืฆืืืช:
ืืืืืืืช ืจืืืช IPyWidgets ืืชื ืืืื ืืืฆืื ืืช ืื ืืืืจืืืื ืืื
ืื ืขืื? ^
ืื ืืืืื ืื ื ืฉืืจืชื ืืืืขืชื ืืกืืฃ ืืืืืจ. ืืืืื ื ืื ืคืจืกืืชื ืกืงืจืืคื ืืืื ืืกืืฃ ืืืืืจ ืฉืืชืงืื ืืขืืืช ื'ืืคืืืจ ื"ืืืืฆื ืืืช" ืืื ืืขืืื ืขืืืืื :) ืืื ืืชื ืืืื ืืขืฉืืช ืืช ืื ืืขืฆืื, ืืืืืื ืฉืืชื ืืืจ ืืืืข ืืื, ืืืืจ ืฉืืกืคืช ืืช ืืคืงืืืืช ืืกืงืจืืคื ืืื ืฉื Bash :)
ืืชื ืืืื ืื:
- ืืืืจ ืฉื ืจืฉืช ืขืืืจ ืืืืืื ืืืงืื ืืชืืืช IP ืขื ืืื ืืชืืืชื ืืฆืืจื ืคืฉืืื
/etc/hosts
ืืืงืื ืืช ืืืชืืืช ืืืคืืคื http://jupyter.local:8888 - ืฉืืง ืขื ืืืืืช ืืืฉืืืื ืขืืืจ ืืืืื, ืืฉืืื ืื ืงืจื ืืช ืืคืจืง ื ืืืืืืช LXD ืืกืืกืืืช ืื ืืงืื ืืืืข ื ืืกืฃ ืืืชืจ ืืืคืชืืื ืฉื LXD.
- ืฉื ื ืืช ืื ืืฉื:
ืืขืื ืืจืื ืืชื ืืืื ืืขืฉืืช! ืื ืืื. ืื ื ืืืื ืื ืืฆืืื!
ืขืืืื: 15.04.2020/18/30 XNUMX:XNUMX - ืชืืงืื ืฉืืืืืช ืืคืจืง "ืฉืืื ืขืืื!"
ืขืืืื: 16.04.2020/10/00 XNUMX:XNUMX - ืืงืกื ืืชืืงื ืื ืืกืฃ ืืชืืืืจ ืืคืขืืช ืื ืื ืืืจืืืืช ืืขืืืช ื'ืืคืืืจ
ืขืืืื: 16.04.2020/10/40 XNUMX:XNUMX - ืชืืงื ื ืฉืืืืืช ืฉื ืืฆืื ืืืงืกื ืืฉืื ื ืืขื ืืืืื ืืคืจืง "ืืชืงื ืช ืชืืื ื ืืกืืกืืช ืืืืืจืช ืืืขืจืืช"
ืืงืืจ: www.habr.com