рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрднреА рднреА рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХреЛрдб рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЖрдзрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд┐рд▓рд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?
рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдорд╢реАрди рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреЗ рдкреВрд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдпрд╛ рдЪрд▓рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рд╕реМ рдпрд╛ рд╣рдЬрд╛рд░ рднреА?
рдПрдХ рд╣рд╛рдЗрдкрд░рд╡рд┐рдЬрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд╕рд╛рде, рдРрд╕реЗ рдХрд╛рд░реНрдп рд╕рдлрд▓ рдФрд░ рд╕рдлрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕ рдХреАрдордд рдкрд░? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд LXD рдореЗрдВ рдПрдХ рдХрдВрдЯреЗрдирд░ рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗ рд╕рднреА 7.60MB
рд░реИрдо рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрд╣рд╛рдВ рдпрд╣ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рд░реВрдЯ рд╡рд┐рднрд╛рдЬрди рд▓реЗрддрд╛ рд╣реИ 9.5MB
!рдЖрдк рдХреИрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдПрд▓реЛрди рдорд╕реНрдХ?рдореИрдВ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдПрд▓рдПрдХреНрд╕рдбреА - рдХрдВрдЯреЗрдирд░ рд╕рд┐рд╕реНрдЯрдо рдХреА рдмреБрдирд┐рдпрд╛рджреА рдХреНрд╖рдорддрд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ
рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдПрд▓рдПрдХреНрд╕рдбреА рдХрдВрдЯреЗрдирд░ рдХреНрдпрд╛ рд╣реИрдВ, рдЖрдЗрдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдРрд╕рд╛ рдХреЛрдИ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо-рдкреНрд░реЛрд╕реЗрд╕рд░ рдерд╛, рдЬрд╣рд╛рдВ рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЪрд▓рд╛рдирд╛, рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛, рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ (рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ) рдпреВрдЖрдИ- рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╡рд┐рдЧреЗрдЯреНрд╕, рдкрд╛рда рдХреЗ рд╕рд╛рде рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ рд▓рд╛рдареА ...рд╕реНрд╡рд░реВрдкрдг? рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдмреНрд▓реЙрдЧ рдХреА рддрд░рд╣ рдХреБрдЫ?рд╡рд╛рд╣ ... рдореБрдЭреЗ рдпрд╣ рдЪрд╛рд╣рд┐рдП! рдЪрд╛рд╣рддреЗ рд╣реИрдВ! :)
рдмрд┐рд▓реНрд▓реА рдкрд░ рджреЗрдЦреЛ, рдЬрд╣рд╛рдВ рд╣рдо рд╢реБрднрд╛рд░рдВрдн рдХрд░реЗрдВрдЧреЗ JupyterLab рдХрдВрдЯреЗрдирд░ рдореЗрдВ - рдЕрдкреНрд░рдЪрд▓рд┐рдд Jupyter рдиреЛрдЯрдмреБрдХ рдХреЗ рдмрдЬрд╛рдп рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЕрдЧрд▓реА рдкреАрдврд╝реА рдХреЗ рд╣реИрдВ, рдФрд░ рднреА рд╕реНрдерд╛рдкрд┐рдд рдЕрдЬрдЧрд░ рдЬреИрд╕реЗ рдореЙрдбреНрдпреВрд▓ NumPy , рдкрд╛рдВрдбрд╛ , matplotlib , IPyWidgets IPython-рд▓реИрдкрдЯреЙрдк - рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдКрдкрд░ рдФрд░ рд╕рднреА рдпрд╣ рдмрдЪрд╛рдиреЗ рдХреЗ рд╕рднреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ ред

рдкрде рдкреНрд░рджрд░реНрд╢рди
рдХрдХреНрд╖рд╛ рдореЗрдВ рдЙрддрд╛рд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ ^

рд╣рдо рдПрдХ рдЫреЛрдЯреА рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ:
- Alpine Linux. , .
- тАФ
hostfs
. . . , . , . - Bash, sudo, ,
- Python,
- JupyterLab, , .
, LXD, тАФ LXD тАФ Linux.
тАФ alpine3
, тАФ jupyterlab
:
lxc init alpine3 jupyterlab --profile=default --profile=hddroot
hddroot
root- Storage Pool 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
columns :
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 |
+------------+---------+------------------+--------------+
:
, man-pages тАФ 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 , .bash_profile
, .bashrc
, .dir_colors
/etc/skel
, Bash , . , Manjaro Linux , , .
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
JupyterLab
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 ^
JupyterLab тАФ Python , . , JupyterLab 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
JupyterLab pip
:
lxc exec jupyterlab -- python3 -m pip install jupyterlab
JupyterLab jupyterlab, , .
NodeJS тАФ NPM, JupyterLab :
lxc exec jupyterlab -- apk add nodejs npm
JupyterLab , jupyter
. , , . , JUPYTERLAB_DIR
jupyter
, .bashrc
, :
lxc exec jupyterlab -- su -l jupyter -c "echo -e \"\nexport JUPYTERLAB_DIR=\$HOME/.local/share/jupyter/lab\" >> .bashrc"
тАФ 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"
JupyterLab, :
toc
тАФ Table of Contents, /jupyterlab-horizon-theme
тАФ UIjupyterlab_neon_theme
тАФ UIjupyterlab-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"
:
lxc exec jupyterlab -- su -l jupyter -c "jupyter lab clean && jlpm cache clean && npm cache clean --force"
JupyterLab. , , JupyterLab bash' , , :)
jupyter
:
lxc exec jupyterlab -- su -l jupyter
JupyterLab :
[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser
web- http://10.0.5.5:8888 token . , Login. , , , JupyterLab development :

, JupyterLab , NodeJS , . /home
, , , . JupyterLab.
IPython- ( JupyterLab) тАФ /home/jupyter
, () , , JupyterLab hotkey тАФ CTRL+C
y
. jupyter
CTRL+D
.
, , :
lxc config device add
тАФjupyter
тАФhostfs
тАФ . .disk
тАФpath
тАФ LXDsource
тАФ , .
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
Hello, World! ^
JupyterLab, --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
"play" JupyterLab :

, , Python- ( ) Python JupyterLab, , :)
P.S. , Jupyter Jupyter Notebook JupyterLab. /tree
, /lab
, :
Python ^
Python NumPy, Pandas, Matplotlib, IPyWidgets JupyterLab.
Python pip
Alpine Linux:
g++
тАФ , C++ Pythonfreetype-dev
тАФ Python Matplotlib
:
lxc exec jupyterlab -- apk add g++ freetype-dev
, Alpine Linux NumPy , :
ERROR: Could not build wheels for numpy which use PEP 517 and cannot be installed directly
, , , :
lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev
Python- pip
. , . ~15 :
lxc exec jupyterlab -- python3 -m pip install pandas matplotlib ipywidgets
:
lxc exec jupyterlab -- rm -rf /home/*/.cache/pip/*
lxc exec jupyterlab -- rm -rf /root/.cache/pip/*
JupyterLab ^
JupyterLab, , . CTRL+C
y
, JupyterLab "", 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 UI- , Matplotlib :

IPyWidgets
, . JupyterLab " ", :) , , Bash :)
, :

! . !
UPDATE: 15.04.2020 18:30 тАФ "Hello, World!"
UPDATE: 16.04.2020 10:00 тАФ JupyterLab
UPDATE: 16.04.2020 10:40 тАФ " "