Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Jupyter Π² ΠΎΡ€Π±ΠΈΡ‚Π°Ρ‚Π° Π½Π° LXD

Имали Π»ΠΈ стС Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° СкспСримСнтиратС с ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ систСмни ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ Π² Linux Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ Π΄Π° Π½Π΅ сС Ρ‚Ρ€Π΅Π²ΠΎΠΆΠΈΡ‚Π΅ Π·Π° основната систСма ΠΈ Π΄Π° Π½Π΅ ΡƒΠ½ΠΈΡ‰ΠΎΠΆΠΈΡ‚Π΅ всичко Π² случай Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° сС изпълни с root-ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ?

А ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π·Π° Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° тСстватС ΠΈΠ»ΠΈ стартиратС цСлия кластСр ΠΎΡ‚ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΈ микросСрвизи Π½Π° Π΅Π΄Π½Π° машина? Π‘Ρ‚ΠΎ ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ хиляда?

Π‘ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини, управлявани ΠΎΡ‚ Ρ…ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€, Ρ‚Π΅Π·ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС Ρ€Π΅ΡˆΠ°Ρ‚, Π½ΠΎ ΠΊΠ°ΠΊΠ²Π° Π΅ Ρ†Π΅Π½Π°Ρ‚Π°? НапримСр, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² LXD Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° дистрибуцията Alpine Linux ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ изисква само 7.60MB ΠžΠ—Π£, ΠΈ ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ корСновият дял слСд стартиранС Π·Π°Π΅ΠΌΠ° 9.5MB! Как Ρ‚ΠΈ сС струва, Илон Маск? ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π΄Π° сС запознаСш с основнитС Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π½Π° LXD β€” систСмата Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π² Linux

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΎ стана ясно ΠΊΠ°ΠΊΠ²ΠΎ прСдставляват LXD ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅, Π½Π΅ΠΊΠ° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ Π½Π°ΠΏΡ€Π΅Π΄ ΠΈ Π΄Π° помислим ΠΊΠ°ΠΊΠ²ΠΎ, Π°ΠΊΠΎ имашС Ρ‚Π°ΠΊΠ°Π²Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°-ΠΊΠΎΠΌΠ±Π°ΠΉΠ½, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ бСзопасно Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС стартира ΠΊΠΎΠ΄ Π·Π° хоста, Π΄Π° сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ (ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ) Π΄Π° сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚ UI-Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΈ с вашия ΠΊΠΎΠ΄, Π΄Π° сС допълва ΠΊΠΎΠ΄ΡŠΡ‚ с тСкст ΠΈ с бонус... Ρ„ΠΎΡ€ΠΌΠ°Ρ‚? НСщо ΠΊΠ°Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π±Π»ΠΎΠ³? Вауу… Искам! Искам! πŸ™‚

ПоглСдни ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ къдС Ρ‰Π΅ стартирамС Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° JupyterLab β€” слСдващото ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ Π½Π° потрСбитСлския интСрфСйс вмСсто остарСлия Jupyter Notebook, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ инсталирамС Ρ‚Π°ΠΊΠΈΠ²Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Python ΠΊΠ°Ρ‚ΠΎ NumPy, Pandas, Matplotlib, IPyWidgets , ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ позволят Π΄Π° сС изпълнява всичко ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡ€Π΅ ΠΈ Π΄Π° сС Π·Π°ΠΏΠ°Π·ΠΈ всичко Ρ‚ΠΎΠ²Π° Π² спСциалСн Ρ„Π°ΠΉΠ» β€” IPython-Π½ΠΎΡƒΡ‚Π±ΡƒΠΊ.

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Jupyter Π² ΠΎΡ€Π±ΠΈΡ‚Π°Ρ‚Π° Π½Π° LXD

План Π·Π° стартиранС Π² ΠΎΡ€Π±ΠΈΡ‚Π° ^

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Jupyter Π² ΠΎΡ€Π±ΠΈΡ‚Π°Ρ‚Π° Π½Π° LXD

НСка ΠΎΡ‡Π΅Ρ€Ρ‚Π°Π΅ΠΌ ΠΊΡ€Π°Ρ‚ΡŠΠΊ ΠΏΠ»Π°Π½ Π½Π° дСйствията, Π·Π° Π΄Π° Π½ΠΈ бъдС ΠΏΠΎ-лСсно Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ схСмата ΠΏΠΎ-Π³ΠΎΡ€Π΅:

  • Π©Π΅ инсталирамС ΠΈ стартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° дистрибуцията 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 ΠΊΠΎΠΉΡ‚ΠΎ ΡƒΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊΠ²ΠΈ 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      |
+------------+---------+------------------+--------------+

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° основСн софтуСр ΠΈ настройка Π½Π° систСмата ^

Π—Π° администриранС Π½Π° нашия ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° инсталирамС слСдния софтуСр:

Package
ОписаниС

bash
GNU Bourne Again shell

bash-completion
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π·Π° bash shell

sudo
Π”Π°ΠΉΡ‚Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ някои ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΊΠ°Ρ‚ΠΎ root

shadow
Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΈ Π°ΠΊΠ°ΡƒΠ½Ρ‚ΠΈ с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° shadow Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ PAM

tzdata
Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ Π·Π° Π΄Π°Π½Π½ΠΈ Π·Π° часови Π·ΠΎΠ½ΠΈ ΠΈ лятно часово Π²Ρ€Π΅ΠΌΠ΅

nano
Клонинг Π½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Pico с подобрСния

ОсвСн Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° инсталиратС ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° систСмата 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 Π·Π° Π½ΠΎΠ²ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, слСдващитС дСйствия Ρ‰Π΅ ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ 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 Ρ‰Π΅ инсталирамС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° пакСтния ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ Π½Π° 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

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΌΠ΅ 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 β€” Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅, Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° списък с заглавия Π² статията/Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ°
  • 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"

Π‘Π΅Π³Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ слСднитС Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΏΡŠΡ€Π²ΠΎ стартиранС JupyterLab. МоТСшС Π΄Π° Π³ΠΎ стартирамС с Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π½ΠΎ Π² Ρ‚ΠΎΠ·ΠΈ случай, ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° стартиранС, която Ρ‰Π΅ трябва Π΄Π° ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‰Π΅ сС запомня ΠΎΡ‚ bash Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Π½Π΅ Π½Π° хоста, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ Π²Π΅Ρ‡Π΅ са Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ Π·Π° запис Π² историята πŸ™‚

Π’Π»ΠΈΠ·Π°ΠΌΠ΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» jupyter:

lxc exec jupyterlab -- su -l jupyter

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° стартирайтС JupyterLab с ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ:

[jupyter@jupyterlab ~]$ jupyter lab --ip=0.0.0.0 --no-browser

ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ ΡƒΠ΅Π± Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° Π½Π° адрСса http://10.0.5.5:8888 ΠΈ Π½Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π°Ρ‚Π° страница Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ token Π΄ΠΎΡΡ‚ΡŠΠΏΠ°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°. ΠšΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ Π³ΠΎ ΠΈ Π³ΠΎ поставСтС Π½Π° страницата, слСд Ρ‚ΠΎΠ²Π° натиснСтС Π’Ρ…ΠΎΠ΄. Π‘Π»Π΅Π΄ Π²Π»ΠΈΠ·Π°Π½Π΅Ρ‚ΠΎ, ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ отляво Π² ΠΌΠ΅Π½ΡŽΡ‚ΠΎ Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡΡ‚Π°, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‰Π΅ Π²ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ°Ρ‚, ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€Π° Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡΡ‚Π°, Π΄Π° ΠΏΠΎΠ΅ΠΌΠ΅Ρ‚Π΅ рисковСтС ΠΏΠΎ сигурността, ΠΊΠ°Ρ‚ΠΎ инсталиратС Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ‚ΠΈ страни, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Π΅ΠΊΠΈΠΏΡŠΡ‚ JupyterLab development Π½Π΅ носи отговорност:

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Jupyter Π² ΠΎΡ€Π±ΠΈΡ‚Π°Ρ‚Π° Π½Π° LXD

ΠžΠ±Π°Ρ‡Π΅, Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π° Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°ΠΌΠ΅ изцяло JupyterLab ΠΈ Π³ΠΎ поставямС Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ странични Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ, изискващи ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ NodeJS, Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΎΡ‚ΠΊΡ€Π°Π΄Π½Π°Ρ‚ Π΄Π°Π½Π½ΠΈ Π½Π° диска, освСн Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π”ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π΄ΠΎ Π²Π°ΡˆΠΈΡ‚Π΅ Π»ΠΈΡ‡Π½ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° хоста /home ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π΅Π΄Π²Π° Π»ΠΈ Π±ΠΈ Π±ΠΈΠ» възмоТСн, Π° Π°ΠΊΠΎ Π΅ възмоТСн, Π·Π° Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΡ€Π°Π²Π° Π²ΡŠΡ€Ρ…Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π² хостовата систСма, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ стартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ Ρ€Π΅ΠΆΠΈΠΌ. На Π±Π°Π·Π° Π½Π° Ρ‚Π°Π·ΠΈ информация ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ риска ΠΎΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π² JupyterLab.

Π‘ΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ IPython Π±Π΅Π»Π΅ΠΆΠ½ΠΈΡ†ΠΈ (страници Π² JupyterLab) Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Ρ‰Π΅ сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Π² Π΄ΠΎΠΌΠ°ΡˆΠ½Π°Ρ‚Π° дирСктория Π½Π° потрСбитСля β€” /home/jupyter, Π½ΠΎ Π² Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΠ»Π°Π½ΠΎΠ²Π΅ Π΅ Π΄Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ Π΄Π°Π½Π½ΠΈΡ‚Π΅ (Π΄Π° Π³ΠΈ сподСлим) ΠΌΠ΅ΠΆΠ΄Ρƒ хоста ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π·Π°Ρ‚ΠΎΠ²Π° сС Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° ΠΈ спирайтС JupyterLab ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΉΠΊΠΈ Ρ…ΠΎΡ‚ΠΊΠ΅ΠΉ β€” CTRL+C ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Ρ‚Π΅ y Π½Π° Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚Π΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ‚Π° сСсия Π½Π° потрСбитСля jupyter ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΉΠΊΠΈ Ρ…ΠΎΡ‚ΠΊΠ΅ΠΉ CTRL+D.

БподСлямС Π΄Π°Π½Π½ΠΈ с хоста ^

Π—Π° Π΄Π° сподСлитС Π΄Π°Π½Π½ΠΈ с хоста, трябва Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° устройство, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява Ρ‚ΠΎΠ²Π°, ΠΈ Π·Π° Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ посочвамС слСднитС ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅:

  • lxc config device add β€” ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° добавя конфигурация Π½Π° устройството
  • jupyter β€” Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС добавя конфигурацията
  • hostfs β€” Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° устройството. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ всякакво ΠΈΠΌΠ΅.
  • диск β€” ΠŸΠΎΡΠΎΡ‡Π²Π° сС Ρ‚ΠΈΠΏΡŠΡ‚ Π½Π° устройството
  • ΠΏΡŠΡ‚ β€” ΠŸΠΎΡΠΎΡ‡Π²Π° сС ΠΏΡŠΡ‚ΡΡ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ LXD Ρ‰Π΅ ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π° Ρ‚ΠΎΠ²Π° устройство
  • ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ β€” ΠŸΠΎΡΠΎΡ‡Π²Π° сС ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ, ΠΏΡŠΡ‚ΡΡ‚ към дирСктория Π½Π° хоста, която искатС Π΄Π° сподСлитС с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π£ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ ΠΏΡŠΡ‚Ρ спорСд Π²Π°ΡˆΠΈΡ‚Π΅ прСдпочитания
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

Π—Π΄Ρ€Π°Π²Π΅ΠΉ, свят! ^

Ако ΠΈΠΌΠ°Ρ‚Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π½Π° сСсия Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с JupyterLab, рСстартирайтС я с новия ΠΊΠ»ΡŽΡ‡ --notebook-dir Π·Π°Π΄Π°Π²Π°ΠΉΠΊΠΈ стойност /mnt/hostfs ΠΊΠ°Ρ‚ΠΎ ΠΏΡŠΡ‚ Π΄ΠΎ ΠΊΠΎΡ€Π΅Π½Π° Π½Π° Π½ΠΎΡƒΡ‚Π±ΡƒΡ†ΠΈΡ‚Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π° устройството, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ°:

jupyter lab --ip=0.0.0.0 --no-browser --notebook-dir=\/mnt\/hostfs

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° страницата http://10.0.5.5:8888 ΠΈ ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΡŠΡ€Π²ΠΈΡ си Π½ΠΎΡƒΡ‚Π±ΡƒΠΊ, натискайки Π±ΡƒΡ‚ΠΎΠ½Π° Π½Π° страницата, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ:

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Jupyter Π² ΠΎΡ€Π±ΠΈΡ‚Π°Ρ‚Π° Π½Π° LXD

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π² ΠΏΠΎΠ»Π΅Ρ‚ΠΎ Π½Π° страницата Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠ΄ Π½Π° Python, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·Π²Π΅Π΄Π΅ класичСския Hello World!. Π‘Π»Π΅Π΄ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ, натиснСтС CTRL+ENTER ΠΈΠ»ΠΈ Π±ΡƒΡ‚ΠΎΠ½Π° β€žplayβ€œ Π½Π° Π»Π΅Π½Ρ‚Π°Ρ‚Π° с инструмСнти ΠΎΡ‚Π³ΠΎΡ€Π΅, Π·Π° Π΄Π° JupyterLab изпълни Ρ‚ΠΎΠ²Π°:

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Jupyter Π² ΠΎΡ€Π±ΠΈΡ‚Π°Ρ‚Π° Π½Π° LXD

ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° ΠΏΠΎΡ‡Ρ‚ΠΈ всичко Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ Π·Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°, Π½ΠΎ Ρ‰Π΅ бъдС ΠΌΠ°Π»ΠΊΠΎ скучно, Π°ΠΊΠΎ Π½Π΅ инсталирамС Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ 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, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° сС ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΎΠ½Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°, която Π½Π΅ успях Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°:

Π“Π Π•Π¨ΠšΠ: НС ΠΌΠΎΠΆΠ° Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΊΠΎΠ»Π΅Π»Π° Π·Π° 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 ^

Ако ΠΈΠΌΠ°Ρ‚Π΅ стартиран 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 ΠΈΠ·Π²Π΅ΠΆΠ΄Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠ°Ρ‚ΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊ Π½Π° функцията:

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Jupyter Π² ΠΎΡ€Π±ΠΈΡ‚Π°Ρ‚Π° Π½Π° LXD

Много ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ IPyWidgets ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² ΡƒΡ€ΠΎΡ†ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ

Какво ΠΎΡ‰Π΅? ^

Π‘Ρ€Π°Π²ΠΎ Π½Π° вас, Π°ΠΊΠΎ стС останали ΠΈ стигнали Π΄ΠΎ края Π½Π° статията. УмишлСно Π½Π΅ прСдоставих Π³ΠΎΡ‚ΠΎΠ² скрипт Π² края Π½Π° статията, ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° инсталира JupyterLab с β€žΠ΅Π΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊβ€œ, Π·Π° Π΄Π° поощря Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈΡ‚Π΅ πŸ™‚ Но ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π° сами, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ, ΡΡŠΠ±ΠΈΡ€Π°ΠΉΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ Π² Π΅Π΄ΠΈΠ½ Bash скрипт πŸ™‚

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅:

  • Π”Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎ ΠΈΠΌΠ΅ Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° вмСсто IP адрСс, Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ Π³ΠΎ Π² прост /etc/hosts ΠΈ Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π° Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ адрСса http://jupyter.local:8888
  • Π˜Π³Ρ€Π°ΠΉΡ‚Π΅ с ограничСнията Π½Π° рСсурситС Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π³Π»Π°Π²Π°Ρ‚Π° Π² основнитС Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π½Π° LXD ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ информация Π½Π° сайта Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° LXD.
  • Π‘ΠΌΠ΅Π½Π΅Ρ‚Π΅ Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π½Π° ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ:

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Jupyter Π² ΠΎΡ€Π±ΠΈΡ‚Π°Ρ‚Π° Π½Π° LXD

И ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅! Π’ΠΎΠ²Π° Π΅ всичко. ЖСлая Π²ΠΈ успСх!

ΠΠšΠ’Π£ΠΠ›Π˜Π—ΠΠ¦Π˜Π―: 15.04.2020 18:30 β€” ΠŸΠΎΠΏΡ€Π°Π²ΠΈΡ… Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ Π² Π³Π»Π°Π²Π° Β«Π—Π΄Ρ€Π°Π²Π΅ΠΉ, свят!Β»
ΠΠšΠ’Π£ΠΠ›Π˜Π—ΠΠ¦Π˜Π―: 16.04.2020 10:00 β€” ΠšΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ… ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ… тСкст Π² описаниСто Π½Π° активацията Π½Π° ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€Π° Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ JupyterLab
ΠΠšΠ’Π£ΠΠ›Π˜Π—ΠΠ¦Π˜Π―: 16.04.2020 10:40 β€” ΠŸΠΎΠΏΡ€Π°Π²ΠΈΡ… ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ Π² тСкста ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ… Π³Π»Π°Π²Π°Ρ‚Π° Β«Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° основния софтуСр ΠΈ настройка Π½Π° систСмата»

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster