ΠΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π»ΠΈ Π²Π°ΠΌ ΡΠΊΡΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌΠΈ Π² Linux ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΡΡΡΡΠΈΡΡ Π·Π° Π±Π°Π·ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ Π½Π΅ ΡΠ½Π΅ΡΡΠΈ Π²ΡΡ Ρ ΠΏΠΎΡΡΠΎΡ Π°ΠΌΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡΡΡΠΈΡΡΡ Ρ root-ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΌΠΈ?
Π ΠΊΠ°ΠΊ Π½Π° ΡΡΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅Π»ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅? Π‘ΠΎΡΠ½Ρ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΡΡΡΡΡ?
Π‘ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΌΠ°ΡΠΈΠ½Π°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ Π³ΠΈΠΏΠ΅ΡΠ²ΠΈΠ·ΠΎΡΠΎΠΌ ΡΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΠ΅ΡΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, Π½ΠΎ ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅Π½ΠΎΠΉ? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π² LXD Π½Π° Π±Π°Π·Π΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° Alpine Linux ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ Π²ΡΠ΅Π³ΠΎ 7.60MB
ΠΠΠ£, ΠΈ Π³Π΄Π΅ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΡΠ°Π·Π΄Π΅Π» ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ 9.5MB
! ΠΠ°ΠΊ ΡΠ΅Π±Π΅ ΡΠ°ΠΊΠΎΠ΅, ΠΠ»ΠΎΠ½ ΠΠ°ΡΠΊ? Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ LXD β ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Π² Linux
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π² ΡΠ΅Π»ΠΎΠΌ ΡΡΠ°Π»ΠΎ ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ LXD, ΠΏΠΎΠΉΠ΄Π΅ΠΌ Π΄Π°Π»ΡΡΠ΅ ΠΈ ΠΏΠΎΠ΄ΡΠΌΠ°Π΅ΠΌ, Π° ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π±ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°-ΠΊΠΎΠΌΠ±Π°ΠΉΠ½, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ Ρ ΠΎΡΡΠ°, Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π³ΡΠ°ΡΠΈΠΊΠΈ, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ (ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎ) ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ UI-Π²ΠΈΠ΄ΠΆΠ΅ΡΡ Ρ ΡΠ²ΠΎΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠ΄ ΡΠ΅ΠΊΡΡΠΎΠΌ Ρ Π±Π»Π΅ΠΊΠ΄ΠΆΠ΅ΠΊΠΎΠΌ… ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ? Π§ΡΠΎ-ΡΠΎ ΡΠΈΠΏΠ° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠ³Π°? ΠΠ°ΡΡβ¦ Π₯ΠΎΡΡ! Π₯ΠΎΡΡ! π
ΠΠ°Π³Π»ΡΠ΄ΡΠ²Π°ΠΉ ΠΏΠΎΠ΄ ΠΊΠ°Ρ Π³Π΄Π΅ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ JupyterLab β ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π²ΠΌΠ΅ΡΡΠΎ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅Π³ΠΎ Jupyter Notebook, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Python ΠΊΠ°ΠΊ NumPy, Pandas, Matplotlib, IPyWidgets ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π²ΡΡΠ²ΠΎΡΡΡΡ Π²ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π²ΡΡΠ΅ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΡΠΎ Π²ΡΡ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ β IPython-Π½ΠΎΡΡΠ±ΡΠΊΠ΅.
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ
- ΠΠ»Π°Π½ Π²Π·Π»ΡΡΠ° Π½Π° ΠΎΡΠ±ΠΈΡΡ
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΡΡΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° JupyterLab
- Π Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ Ρ Ρ ΠΎΡΡΠΎΠΌ
- Hello, World!
- Π Π°ΡΡΠΈΡΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Python
- Π’Π΅ΡΡΠΈΡΡΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² JupyterLab
- Π§ΡΠΎ Π΅ΡΡ?
ΠΠ»Π°Π½ Π²Π·Π»ΡΡΠ° Π½Π° ΠΎΡΠ±ΠΈΡΡ ^
ΠΠ°ΠΊΠΈΠ΄Π°Π΅ΠΌ ΠΊΡΠ°ΡΠΊΠΈΠΉ ΠΏΠ»Π°Π½ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΡΡΠΎΠ±Ρ Π½Π°ΠΌ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡ Π΅ΠΌΡ Π²ΡΡΠ΅:
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΈ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π½Π° Π±Π°Π·Π΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° 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 |
+------------+---------+------------------+--------------+
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΡΡΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ ^
ΠΠ»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΡ:
Package
Description
bash
The GNU Bourne Again shell
bash-completion
Programmable completion for the bash shell
sudo
Give certain users the ability to run some commands as root
shadow
Password and account management tool suite with support for shadow files and PAM
tzdata
Sources for time zone and daylight saving time data
nano
Pico 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
β ΠΡΠ·ΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠ° 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 Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ Π² ΠΈΠ½ΡΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. Π£ ΠΌΠ΅Π½Ρ Ρ
ΠΎΡΡΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° β 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
Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π½Π°ΡΡΡΠΎΠΈΠΌ 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"
Π‘Π΅ΠΉΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° 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
, Π½ΠΎ Π΅Π³ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ:
- Jupyter Notebook β http://10.0.5.5:8888/tree
- Jupyter Lab β http://10.0.5.5:8888/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 ipywidgets matplotlib
Π§ΠΈΡΡΠΈΠΌ ΠΊΠ΅ΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ:
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 ΡΠΊΡΠΈΠΏΡ π
Π’Π°ΠΊΠΆΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅:
- ΠΠ°Π΄Π°ΡΡ ΡΠ΅ΡΠ΅Π²ΠΎΠ΅ ΠΈΠΌΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π²ΠΌΠ΅ΡΡΠΎ IP Π°Π΄ΡΠ΅ΡΠ° ΠΏΡΠΎΠΏΠΈΡΠ°Π² Π΅Π³ΠΎ Π² ΠΏΡΠΎΡΡΠΎΠΌ
/etc/hosts
ΠΈ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π½Π°Π±ΠΈΡΠ°ΡΡ Π°Π΄ΡΠ΅Ρ http://jupyter.local:8888 - ΠΠΎΠΈΠ³ΡΠ°ΡΡΡΡ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΈΡΠ΅ Π³Π»Π°Π²Ρ Π² Π±Π°Π·ΠΎΠ²ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ LXD ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π° ΡΠ°ΠΉΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° LXD.
- ΠΠΎΠΌΠ΅Π½ΡΡΡ ΡΠ΅ΠΌΡ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ:
Π ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎ Π΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅! ΠΠ° ΡΡΠΎΠΌ Π²ΡΡ. ΠΠ΅Π»Π°Ρ Π²Π°ΠΌ ΡΡΠΏΠ΅Ρ ΠΎΠ²!
UPDATE: 15.04.2020 18:30 β ΠΡΠΏΡΠ°Π²ΠΈΠ» ΠΎΡΠΈΠ±ΠΊΠΈ Π² Π³Π»Π°Π²Π΅ «Hello, World!»
UPDATE: 16.04.2020 10:00 β Π‘ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π» ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΡΠ΅ΠΊΡΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ JupyterLab
UPDATE: 16.04.2020 10:40 β ΠΡΠΏΡΠ°Π²ΠΈΠ» Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΠΊ Π»ΡΡΡΠ΅ΠΌΡ Π³Π»Π°Π²Ρ «Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΡΡΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ»
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com