Jupyter рдХреЛ рдХрдХреНрд╖рд╛ LXD рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрднреА рднреА рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХреЛрдб рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЖрдзрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд┐рд▓рд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?


рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдорд╢реАрди рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреЗ рдкреВрд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдпрд╛ рдЪрд▓рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рд╕реМ рдпрд╛ рд╣рдЬрд╛рд░ рднреА?


рдПрдХ рд╣рд╛рдЗрдкрд░рд╡рд┐рдЬрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ рд╕рд╛рде, рдРрд╕реЗ рдХрд╛рд░реНрдп рд╕рдлрд▓ рдФрд░ рд╕рдлрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕ рдХреАрдордд рдкрд░? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд 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      |
+------------+---------+------------------+--------------+

^


:


PackageDescription
bashThe GNU Bourne Again shell
bash-completionProgrammable completion for the bash shell
sudoGive certain users the ability to run some commands as root
shadowPassword and account management tool suite with support for shadow files and PAM
tzdataSources for time zone and daylight saving time data
nanoPico editor clone with enhancements

, man-pages тАФ man man-pages mdocml-apropos less


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

:


  • lxc тАФ LXD
  • exec тАФ LXD,
  • jupyterlab тАФ
  • -- тАФ , 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 , .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 тАФ 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"

:


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 тАФ 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

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++ Python
  • freetype-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 тАФ " "


All Articles