ืœืึธื ื˜ืฉื™ื ื’ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืื™ืŸ LXD ืึธืจื‘ื™ื˜

ื”ืึธื‘ืŸ ืื™ืจ ืืœืฅ ื’ืขื”ืื˜ ืฆื• ืขืงืกืคึผืขืจื™ืžืขื ื˜ ืžื™ื˜ ืงืึธื“ ืึธื“ืขืจ ืกื™ืกื˜ืขื ื™ื•ื˜ื™ืœืึทื˜ื™ื– ืื™ืŸ ืœื™ื ื•ืงืก, ืึทื–ื•ื™ ื ื™ืฉื˜ ืฆื• ื–ืึธืจื’ ื•ื•ืขื’ืŸ ื“ื™ ื‘ืึทื–ืข ืกื™ืกื˜ืขื ืื•ืŸ ื ื™ืฉื˜ ืฆืขืœืึธื–ืŸ ืึทืœืฅ ืื™ืŸ ืคืึทืœ ืคื•ืŸ ืึท ื˜ืขื•ืช ืื™ืŸ ื“ื™ ืงืึธื“ ื•ื•ืึธืก ื–ืึธืœ ืœื•ื™ืคืŸ ืžื™ื˜ ื•ื•ืึธืจืฆืœ ืคึผืจื™ื•ื•ื™ืœืึทื“ื–ืฉืึทื–?

ืึธื‘ืขืจ ื•ื•ืึธืก ื•ื•ืขื’ืŸ ื“ืขื ืคืึทืงื˜ ืึทื– ืœืึธื–ืŸ ืก ื–ืึธื’ืŸ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืึธื“ืขืจ ืœื•ื™ืคืŸ ืึท ื’ืึทื ืฅ ืงื ื•ื™ืœ ืคื•ืŸ ืคืึทืจืฉื™ื“ืŸ ืžื™ืงืจืึธ ื‘ืึทื“ื™ื ื•ื ื’ืก ืื•ื™ืฃ ืื™ื™ืŸ ืžืึทืฉื™ืŸ? ื”ื•ื ื“ืขืจื˜ ืื“ืขืจ ืืคื™ืœื• ื˜ื•ื™ื–ื ื˜?

ืžื™ื˜ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ ื’ืขืจืื˜ืŸ ื“ื•ืจืš ืึท ื›ื™ื™ืคึผืขืจื•ื•ื™ื™ื–ืขืจ, ืึทื–ืึท ืคึผืจืึธื‘ืœืขืžืก ืงืขื ืขืŸ ืื•ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืกืึทืœื•ื•ื“, ืึธื‘ืขืจ ืื™ืŸ ื•ื•ืึธืก ืคึผืจื™ื™ึทื–? ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ืื™ืŸ LXD ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืึทืœืคึผื™ื™ืŸ ืœื™ื ื•ืงืก ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ืงืึทื ืกื•ืžื– ื‘ืœื•ื™ื– 7.60MB ื‘ืึทืจืึทืŸ, ืื•ืŸ ื•ื•ื• ื“ืขืจ ื•ื•ืึธืจืฆืœ ืฆืขื˜ื™ื™ืœื•ื ื’ ืึทืงื™ืึทืคึผื™ื™ื– ื ืึธืš ืกื˜ืึทืจื˜ืึทืคึผ 9.5MB! ื•ื•ื™ ื˜ืึธืŸ ืื™ืจ ื•ื•ื™ ืึทื–, ืขืœืึธืŸ ืžื•ืกืง? ืื™ืš ืจืขืงืึธืžืขื ื“ื™ืจืŸ ื˜ืฉืขืง ืื•ื™ืก ื™ืงืขืจื“ื™ืง ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืคื•ืŸ LXD - ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ืกื™ืกื˜ืขื ืื™ืŸ ืœื™ื ื•ืงืก

ื ืึธืš ืขืก ืื™ื– ื’ืขื•ื•ืืจืŸ ืงืœืึธืจ ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ ื•ื•ืึธืก LXD ืงืึทื ื˜ื™ื™ื ืขืจื– ื–ืขื ืขืŸ, ืœืึธืžื™ืจ ื’ื™ื™ืŸ ื•ื•ื™ื™ึทื˜ืขืจ ืื•ืŸ ื˜ืจืึทื›ื˜ืŸ, ื•ื•ืึธืก ืื•ื™ื‘ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึทื–ืึท ืึท ื›ืึทืจื•ื•ืึทืกื˜ืขืจ ืคึผืœืึทื˜ืคืึธืจืžืข ื•ื•ื• ืื™ืจ ืงืขื ืขืŸ ื‘ืขืฉืึธืœืขื ืœื•ื™ืคืŸ ืงืึธื“ ืคึฟืึทืจ ื“ื™ ื‘ืึทืœืขื‘ืึธืก, ื“ื–ืฉืขื ืขืจื™ื™ื˜ ื’ืจืึทืคืก, ื“ื™ื ืึทืžื™ืงืึทืœืœื™ (ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื•ืœื™) ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ UI ื•ื•ื™ื“ื–ืฉื™ืฅ ืžื™ื˜ ื“ื™ื™ืŸ ืงืึธื“, ื”ืขืกืึธืคืข ื“ื™ ืงืึธื“ ืžื™ื˜ ื˜ืขืงืกื˜ ืžื™ื˜ ื‘ืœืึทืงื“ื–ืฉืึทืง ... ืคืึธืจืžืึทื˜ื˜ื™ื ื’? ืขื˜ืœืขื›ืข ืกืึธืจื˜ ืคื•ืŸ ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื• ื‘ืœืึธื’? ื•ื•ืึทื•... ืื™ืš ื•ื•ื™ืœ ืขืก! ื•ื•ื™ืœืŸ! ๐Ÿ™‚

ืงื•ืง ืื•ื ื˜ืขืจ ื“ื™ ืงืึทืฅ ื•ื•ื• ืžื™ืจ ื•ื•ืขืœืŸ ืงืึทื˜ืขืจ ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืœืึทื‘ - ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ื“ื•ืจ ืคื•ืŸ ื‘ืึทื ื™ืฆืขืจ ืฆื•ื‘ื™ื ื“ ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ื“ื™ ืึทื•ื˜ื“ื™ื™ื˜ื™ื“ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ื ืึธื•ื˜ื‘ื•ืง, ืื•ืŸ ืžื™ืจ ื•ื•ืขืœืŸ ืื•ื™ืš ื™ื ืกื˜ืึทืœื™ืจืŸ ืคึผื™ื˜ื”ืึธืŸ ืžืึทื“ื–ืฉื•ืœื– ืึทื–ืึท ื•ื•ื™ ื ื•ืžืคึผื™, ืคึผืึทื ื“ืึทืก, matplotlib, IPyWidgets ื•ื•ืึธืก ื•ื•ืขื˜ ืœืึธื–ืŸ ืื™ืจ ืฆื• ื˜ืึธืŸ ืึทืœืฅ ืœื™ืกื˜ืขื“ ืื•ื™ื‘ืŸ ืื•ืŸ ืจืึทื˜ืขื•ื•ืขืŸ ืขืก ืึทืœืข ืื™ืŸ ืึท ืกืคึผืขืฆื™ืขืœ ื˜ืขืงืข - ืึทืŸ IPython ืœืึทืคึผื˜ืึทืคึผ.

ืœืึธื ื˜ืฉื™ื ื’ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืื™ืŸ LXD ืึธืจื‘ื™ื˜

ืึธืจื‘ืึทื˜ืึทืœ ื ืขืžืขืŸ-ืึทื•ื•ืขืง ืคึผืœืึทืŸ ^

ืœืึธื ื˜ืฉื™ื ื’ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืื™ืŸ LXD ืึธืจื‘ื™ื˜

ื–ืืœ ืก ืึทื•ื˜ืœื™ื™ืŸ ืึท ืงื•ืจืฅ ืงืึทืžืฃ ืคึผืœืึทืŸ ืฆื• ืžืึทื›ืŸ ืขืก ื’ืจื™ื ื’ืขืจ ืคึฟืึทืจ ืื•ื ื“ื– ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ื“ื™ ืกื›ืขืžืข ืื•ื™ื‘ืŸ:

  • ืœืึธืžื™ืจ ื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ืŸ ืงืึทื˜ืขืจ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ื™ื ื•ื•ืขื ื˜ืึทืจ ืึทืœืคึผื™ื™ืŸ ืœื™ื ื•ืงืก. ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ื“ืขื ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ื•ื•ื™ื™ึทืœ ืขืก ืื™ื– ืึทื™ืžืขื“ ืฆื• ืžื™ื ืึทืžืึทืœื™ื–ืึทื ืื•ืŸ ื•ื•ืขื˜ ื™ื ืกื˜ืึทืœื™ืจืŸ ื‘ืœื•ื™ื– ื“ื™ ืžืขืจืกื˜ ื ื™ื™ื˜ื™ืง ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืื™ืŸ ืขืก, ื’ืึธืจื ื™ืฉื˜ ื™ื‘ืขืจื™ืง.
  • ืœืึธืžื™ืจ ืœื™ื™ื’ืŸ ืึทืŸ ื ืึธืš ื•ื•ื™ืจื˜ื•ืึทืœ ื“ื™ืกืง ืื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืื•ืŸ ื’ืขื‘ืŸ ืขืก ืึท ื ืึธืžืขืŸ - hostfs ืื•ืŸ ืึธื ืงืœืึทืคึผืŸ ืขืก ืฆื• ื“ื™ ื•ื•ืึธืจืฆืœ ื˜ืขืงืข ืกื™ืกื˜ืขื. ื“ืขืจ ื“ื™ืกืง ื•ื•ืขื˜ ืžืึทื›ืŸ ืขืก ืžืขื’ืœืขืš ืฆื• ื ื•ืฆืŸ ื˜ืขืงืขืก ืื•ื™ืฃ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืคึฟื•ืŸ ืึท ื’ืขื’ืขื‘ืŸ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ. ืื–ื•ื™, ืื•ื ื“ื–ืขืจ ื“ืึทื˜ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคืจื™ื™ึท ืคื•ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ. ืื•ื™ื‘ ื“ืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ ืื™ื– ืื•ื™ืกื’ืขืžืขืงื˜, ื“ื™ ื“ืึทื˜ืŸ ื•ื•ืขื˜ ื‘ืœื™ื™ึทื‘ืŸ ืื•ื™ืฃ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก. ื“ืขืจ ืกื›ืขืžืข ืื™ื– ืื•ื™ืš ื ื•ืฆื™ืง ืคึฟืึทืจ ื™ื™ึทื ื˜ื™ื™ืœื•ื ื’ ื“ื™ ื–ืขืœื‘ืข ื“ืึทื˜ืŸ ืฆื•ื•ื™ืฉืŸ ืคื™ืœืข ืงืึทื ื˜ื™ื™ื ืขืจื– ืึธืŸ ื ื™ืฆืŸ ื“ื™ ื ืึธืจืžืึทืœ ื ืขืฅ ืžืขืงืึทื ื™ื–ืึทืžื– ืคื•ืŸ ื“ื™ ืงืึทื ื˜ื™ื™ื ืขืจ ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’.
  • ืœืึธืžื™ืจ ื™ื ืกื˜ืึทืœื™ืจืŸ Bash, sudo, ื“ื™ ื ื™ื™ื˜ื™ืง ืœื™ื™ื‘ืจืขืจื™ื–, ืœื™ื™ื’ืŸ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจ ืึท ืกื™ืกื˜ืขื ื‘ืึทื ื™ืฆืขืจ
  • ืœืึธืžื™ืจ ื™ื ืกื˜ืึทืœื™ืจืŸ ืคึผื™ื˜ื”ืึธืŸ, ืžืึทื“ื–ืฉื•ืœื– ืื•ืŸ ืฆื•ื ื•ื™ืคื ืขืžืขืŸ ื‘ื™ื™ื ืขืจื™ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืคึฟืึทืจ ื–ื™ื™
  • ื–ืืœ ืก ื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ืŸ ืงืึทื˜ืขืจ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืœืึทื‘, ืงืึทืกื˜ืึทืžื™ื™ื– ื“ื™ ืื•ื™ืกื–ืขืŸ, ื™ื ืกื˜ืึทืœื™ืจืŸ ื™ืงืกื˜ืขื ืฉืึทื ื– ืคึฟืึทืจ ืขืก.

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืžื™ืจ ื•ื•ืขืœืŸ ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜ ืงืึทื˜ืขืจ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ, ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื‘ืึทื˜ืจืึทื›ื˜ืŸ ื™ื ืกื˜ืึธืœื™ื ื’ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจ LXD, ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ืึทืœืข ื“ืขื ืื™ืŸ ืืŸ ืื ื“ืขืจ ืึทืจื˜ื™ืงืœ - ื™ืงืขืจื“ื™ืง ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ LXD - ืœื™ื ื•ืงืก ืงืึทื ื˜ื™ื™ื ืขืจ ืกื™ืกื˜ืขืžืขืŸ.

ื™ื™ึทื ืžืึธื ื˜ื™ืจื•ื ื’ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ื™ืงืขืจื“ื™ืง ืกื™ืกื˜ืขื ^

ืžื™ืจ ืžืึทื›ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ืžื™ื˜ ื“ื™ ื‘ืึทืคึฟืขืœ ืื™ืŸ ื•ื•ืึธืก ืžื™ืจ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ื‘ื™ืœื“ - alpine3, ื™ื™ื“ืขื ืึทืคื™ื™ื“ ืคึฟืึทืจ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ - jupyterlab ืื•ืŸ, ืื•ื™ื‘ ื ื™ื™ื˜ื™ืง, ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึผืจืึธื•ืคื™ื™ืœื–:

lxc init alpine3 jupyterlab --profile=default --profile=hddroot

ื“ืึธ ืื™ืš ื ื•ืฆืŸ ืึท ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึผืจืึธืคื™ืœ hddroot ื•ื•ืึธืก ืกืคึผืขืฆื™ืคื™ืฆื™ืจื˜ ืฆื• ืฉืึทืคึฟืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ืžื™ื˜ ืึท ื•ื•ืึธืจืฆืœ ืฆืขื˜ื™ื™ืœื•ื ื’ ืื™ืŸ ืกื˜ืึธืจื™ื“ื–ืฉ ืคึผื•ืœ ืœื™ื’ืŸ ืื•ื™ืฃ ืึท ื’ืฉืžื™ื•ืช ื”ื“ื“ ื“ื™ืกืง:

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

ื“ืึธืก ื’ื™ื˜ ืžื™ืจ ื“ื™ ื’ืขืœืขื’ื ื”ื™ื™ื˜ ืฆื• ืขืงืกืคึผืขืจื™ืžืขื ื˜ ืžื™ื˜ ืงืึทื ื˜ื™ื™ื ืขืจื– ืื•ื™ืฃ ื“ื™ ื”ื“ื“ ื“ื™ืกืง, ืฉืคึผืึธืจืŸ ื“ื™ ืจืขืกื•ืจืกืŸ ืคื•ืŸ ื“ื™ SSD ื“ื™ืกืง, ื•ื•ืึธืก ืื™ื– ืื•ื™ืš ื‘ื ื™ืžืฆื ืื™ืŸ ืžื™ื™ืŸ ืกื™ืกื˜ืขื ๐Ÿ™‚ ืคึฟืึทืจ ื•ื•ืึธืก ืื™ืš ื”ืึธื‘ืŸ ื‘ืืฉืืคืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคึผืจืึธืคื™ืœ ssdroot.

ื ืึธืš ื“ืขื ืงืึธื ื˜ืขืงืกื˜ ืื™ื– ื‘ืืฉืืคืŸ, ืขืก ืื™ื– ืื™ืŸ ื“ื™ ืฉื˜ืึทื˜ STOPPED, ืึทื–ื•ื™ ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืขืก ื“ื•ืจืš ืœื•ื™ืคืŸ ื“ื™ ื™ื ื™ื˜ ืกื™ืกื˜ืขื ืื™ืŸ ืขืก:

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 ืฉืึธืœ

ื‘ืึทืฉ-ืงืึธืžืคึผืœืขืฉืึทืŸ
ืคึผืจืึธื’ืจืึทืžืžืึทื‘ืœืข ืงืึทืžืคึผืœื™ืฉืึทืŸ ืคึฟืึทืจ ื“ื™ ื‘ืึทืฉ ืฉืึธืœ

ืกื•ื“ืึธ
ื’ืขื‘ืŸ ื–ื™ื›ืขืจ ื ื™ืฆืขืจืก ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืœื•ื™ืคืŸ ืขื˜ืœืขื›ืข ืงืึทืžืึทื ื“ื– ื•ื•ื™ ื•ื•ืึธืจืฆืœ

ืฉืึธื˜ืŸ
ืฉืคึผืจื™ื›ื•ื•ืึธืจื˜ ืื•ืŸ ื—ืฉื‘ื•ืŸ ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ื’ืขืฆื™ื™ึทื’ ืกื•ื•ื™ื˜ ืžื™ื˜ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืฉืึธื˜ืŸ ื˜ืขืงืขืก ืื•ืŸ PAM

tzdata
ืงื•ื•ืืœืŸ ืคึฟืึทืจ ืฆื™ื™ื˜ ื–ืึธื ืข ืื•ืŸ ื˜ืึธื’ืœื™ื›ื˜ ืฉืคึผืึธืจืŸ ืฆื™ื™ื˜ ื“ืึทื˜ืŸ

ื ืึทื ืึธ
ืคึผื™ืงืึธ ืจืขื“ืึทืงื˜ืึธืจ ืงืœืึธื•ืŸ ืžื™ื˜ ื™ืžืคึผืจื•ื•ื•ืžืึทื ืฅ

ืึทื“ื“ื™ื˜ื™ืึธื ืึทืœืœื™, ืื™ืจ ืงืขื ืขืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ ืฉื˜ื™ืฆืŸ ืื™ืŸ ื“ื™ ืกื™ืกื˜ืขื ืžืขื ื˜ืฉ ื‘ืœืขื˜ืขืจ ื“ื•ืจืš ื™ื ืกื˜ืึธืœื™ื ื’ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึผืึทืงืึทื“ื–ืฉืึทื– - 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 - ืึทืœืคึผื™ื™ืŸ ืœื™ื ื•ืงืก ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ืคึผืขืงืœ ืคืึทืจื•ื•ืึทืœื˜ืขืจ
  • 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 ืคึฟืึทืจ ื ื™ื™ึทืข ื ื™ืฆืขืจืก ืื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ, ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืกื˜ืขืคึผืก, ืžื™ืจ ื ืึธื›ืžืึทื›ืŸ ื’ืจื™ื™ื˜-ื’ืขืžืื›ื˜ ืกืงืขืขืœ ื˜ืขืงืขืก ืคึฟื•ืŸ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืกื™ืกื˜ืขื ืฆื• ืขืก. ื“ืึธืก ื•ื•ืขื˜ ืœืึธื–ืŸ ืื™ืจ ืฆื• ื‘ืึทืคืจื™ื“ื™ืงืŸ ื‘ืึทืฉ ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื•ืขืœื™. ืžื™ื™ึทืŸ ื‘ืึทืœืขื‘ืึธืก ืกื™ืกื˜ืขื ืื™ื– ืžืึทื ื“ื–ืฉืึทืจืึธ ืœื™ื ื•ืงืก ืื•ืŸ ื“ื™ ื˜ืขืงืขืก ื–ืขื ืขืŸ ืงืึทืคึผื™ื“ /etc/skel/.bash_profile, /etc/skel/.bashrc, /etc/skel/.dir_colors ืื™ืŸ ืคึผืจื™ื ืฆื™ืคึผ, ื–ื™ื™ ื–ืขื ืขืŸ ืคึผืึทืกื™ืง ืคึฟืึทืจ ืึทืœืคึผื™ื™ืŸ ืœื™ื ื•ืงืก ืื•ืŸ ื˜ืึธืŸ ื ื™ื˜ ืคืึทืจืฉืึทืคืŸ ืงืจื™ื˜ื™ืฉ ืคึผืจืึธื‘ืœืขืžืก, ืึธื‘ืขืจ ืื™ืจ ืงืขืŸ ื”ืึธื‘ืŸ ืึท ืึทื ื“ืขืจืฉ ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ืื•ืŸ ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื™ื ื“ื™ืคึผืขื ื“ืึทื ื˜ืœื™ ืจืขื›ืขื ืขืŸ ืื•ื™ื‘ ืขืก ืื™ื– ืึท ื˜ืขื•ืช ื•ื•ืขืŸ ืื™ืจ ืœื•ื™ืคืŸ 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

ืึทืœืคึผื™ื™ืŸ ืœื™ื ื•ืงืก ื™ื ืกื˜ืึธืœื– ืึท ืกื™ืกื˜ืขื ืฉืึธืœ ืคึฟืึทืจ ื™ื•ื–ืขืจื– /bin/sh, ืžื™ืจ ื•ื•ืขืœืŸ ืคืึทืจื‘ื™ื™ึทื˜ืŸ ืขืก ืžื™ื˜ root ื‘ืึทื ื™ืฆืขืจ ืื™ืŸ ื‘ืึทืฉ:

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 ืคึผืขืงืœ ืคืึทืจื•ื•ืึทืœื˜ืขืจ pip, ืื•ืŸ ื ื™ืฉื˜ ื“ื™ ืกื™ืกื˜ืขื ืื™ื™ื ืขืจ, ื•ื•ื™ื™ึทืœ ืขืก ืงืขืŸ ื–ื™ื™ืŸ ืึทื•ื˜ื“ื™ื™ื˜ื™ื“ ืื™ืŸ ื“ื™ ืกื™ืกื˜ืขื ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืื•ืŸ ื“ืขืจื™ื‘ืขืจ, ืžื™ืจ ืžื•ื–ืŸ ืžืึทื ื™ื•ืึทืœื™ ื‘ืึทืฉืœื™ืกืŸ ื“ื™ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืคึฟืึทืจ ืขืก ื“ื•ืจืš ื™ื ืกื˜ืึธืœื™ื ื’ ื“ื™ ืคืืœื’ืขื ื“ืข ืคึผืึทืงืึทื“ื–ืฉืึทื– - python3 python3-dev gcc libc-dev zeromq-dev:

lxc exec jupyterlab -- apk add python3 python3-dev gcc libc-dev zeromq-dev

ืœืึธืžื™ืจ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืคึผื™ื˜ื”ืึธืŸ ืžืึทื“ื–ืฉื•ืœื– ืื•ืŸ ืคึผืขืงืœ ืคืึทืจื•ื•ืึทืœื˜ืขืจ 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. ื“ื™ ืคึผืจืึธื‘ืœืขื ืื™ื– ืึทื– ืขืก ืื™ื– ืงื™ื™ืŸ ืคึผืึทืจืึทืžืขื˜ืขืจ ืื™ืŸ ื“ื™ ืงืึทื˜ืขืจ ื‘ืึทืคึฟืขืœ ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ืฆื• ืึท ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ; ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื‘ืœื•ื™ื– ืึทืงืกืขืคึผืฅ ืึท ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ืื•ืŸ ื“ืขืจื™ื‘ืขืจ ืžื™ืจ ืžื•ื–ืŸ ื“ืขืคื™ื ื™ืจืŸ ืขืก. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ื•ื•ืขืœืŸ ืฉืจื™ื™ึทื‘ืŸ ื“ื™ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ืึทืจื•ื™ืกืคื™ืจืŸ ื‘ืึทืคึฟืขืœ 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 - 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"

ืื™ืฆื˜ ืœื•ื™ืคืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืฆื•ื•ื™ื™ ืงืึทืžืึทื ื“ื– ืฆื• ืœื•ื™ืคืŸ ืขืก ืคึฟืึทืจ ื“ื™ ืขืจืฉื˜ืขืจ ืžืึธืœ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืœืึทื‘. ืขืก ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ืžืขื’ืœืขืš ืฆื• ืงืึทื˜ืขืจ ืขืก ืžื™ื˜ ืื™ื™ืŸ ื‘ืึทืคึฟืขืœ, ืึธื‘ืขืจ ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ื™ ืงืึทื˜ืขืจ ื‘ืึทืคึฟืขืœ, ื•ื•ืึธืก ืื™ื– ืฉื•ื•ืขืจ ืฆื• ื’ืขื“ืขื ืงืขืŸ ืื™ืŸ ื“ื™ื™ืŸ ืžื™ื™ื ื•ื ื’, ื•ื•ืขื˜ ื–ื™ื™ืŸ ื“ืขืจืžืื ื˜ ื“ื•ืจืš ื‘ืึทืฉ ืื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ, ืื•ืŸ ื ื™ืฉื˜ ืื•ื™ืฃ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก, ื•ื•ื• ืขืก ื–ืขื ืขืŸ ืฉื•ื™ืŸ ื’ืขื ื•ื’ ืงืึทืžืึทื ื“ื– ืฆื• ืจืขืงืึธืจื“ื™ืจืŸ ื–ื™ื™ ืื™ืŸ ื“ืขืจ ื’ืขืฉื™ื›ื˜ืข :)

ืœืึธื’ื™ืŸ ืฆื• ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ื•ื•ื™ ืึท ื‘ืึทื ื™ืฆืขืจ 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 ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื™ื– ื ื™ืฉื˜ ืคืึทืจืึทื ื˜ื•ื•ืึธืจื˜ืœืขืš:

ืœืึธื ื˜ืฉื™ื ื’ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืื™ืŸ LXD ืึธืจื‘ื™ื˜

ืึธื‘ืขืจ, ืžื™ืจ ื™ื–ืึธืœื™ืจืŸ ื“ื™ ื’ืื ืฆืข ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืœืึทื‘ ืื•ืŸ ืฉื˜ืขืœืŸ ืขืก ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ ืึทื–ื•ื™ ืึทื– ื“ืจื™ื˜-ืคึผืึทืจื˜ื™ื™ ื™ืงืกื˜ืขื ืฉืึทื ื– ื•ื•ืึธืก ื“ืึทืจืคืŸ ืื•ืŸ ื ื•ืฆืŸ NodeJS ืงืขื ืขืŸ ืื™ืŸ ืžื™ื ื“ืกื˜ืขืจ ื’ืึทื ื•ื•ืขื ืขืŸ ื“ืึทื˜ืŸ ืื•ื™ืฃ ื“ื™ ื“ื™ืกืง ืื ื“ืขืจืข ื•ื•ื™ ื“ื™ ื•ื•ืึธืก ืžื™ืจ ืขืคึฟืขื ืขืŸ ืื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ. ื‘ืึทืงื•ืžืขืŸ ืฆื• ื“ื™ื™ืŸ ืคึผืจื™ื•ื•ืึทื˜ ื“ืึธืงื•ืžืขื ื˜ืŸ ืื•ื™ืฃ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืื™ืŸ /home ืคึผืจืึทืกืขืกืึทื– ืคื•ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ื–ืขื ืขืŸ ืึทื ืœื™ื™ืงืœื™ ืฆื• ื–ื™ื™ืŸ ื’ืขืจืึธื˜ืŸ, ืื•ืŸ ืื•ื™ื‘ ื–ื™ื™ ื˜ืึธืŸ ื“ืึธืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื”ืึธื‘ืŸ ืคึผืจื™ื•ื•ื™ืœืึทื“ื–ืฉืึทื– ืื•ื™ืฃ ื˜ืขืงืขืก ืื•ื™ืฃ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ืกื™ืกื˜ืขื, ื•ื•ื™ื™ึทืœ ืžื™ืจ ืœื•ื™ืคืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืื™ืŸ ื ื™ื˜ ืคึผืจื™ื•ื•ื™ืœืขื“ื–ืฉื“ ืžืึธื“ืข. ื‘ืึทื–ื™ืจื˜ ืื•ื™ืฃ ื“ืขื ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข, ืื™ืจ ืงืขื ืขืŸ ืึทืกืกืขืกืก ื“ื™ ืจื™ื–ื™ืงื™ืจืŸ ืคื•ืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ื™ืงืกื˜ืขื ืฉืึทื ื– ืื™ืŸ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืœืึทื‘.

ื‘ืืฉืืคืŸ IPython ื ืึธื•ื˜ื‘ื•ืงืก (ื‘ืœืึทื˜ ืื™ืŸ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืœืึทื‘) ื•ื•ืขื˜ ืื™ืฆื˜ ื–ื™ื™ืŸ ื‘ืืฉืืคืŸ ืื™ืŸ ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ 'ืก ื”ื™ื™ื ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ - /home/jupyter, ืึธื‘ืขืจ ืื•ื ื“ื–ืขืจ ืคึผืœืึทื ื– ื–ืขื ืขืŸ ืฆื• ืฉืคึผืึทืœื˜ืŸ ื“ื™ ื“ืึทื˜ืŸ (ื™ื™ึทื ื˜ื™ื™ืœืŸ) ืฆื•ื•ื™ืฉืŸ ื“ื™ ื‘ืึทืœืขื‘ืึธืก ืื•ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ, ืึทื–ื•ื™ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืฆื• ื“ื™ ืงืึทื ืกืึธื•ืœ ืื•ืŸ ื”ืึทืœื˜ืŸ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืœืึทื‘ ื“ื•ืจืš ืขืงืกืึทืงื™ื•ื˜ื™ื ื’ ื”ืึธื˜ืงื™ื™ - CTRL+C ืื•ืŸ ืขื ื˜ืคืขืจื˜ y ืื•ื™ืฃ ื‘ืขื˜ืŸ. ื“ืขืจื ืึธืš ืคืึทืจืขื ื“ื™ืงืŸ ื“ื™ ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื• ืกืขืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ jupyter ืคืึทืจืขื ื“ื™ืงืŸ ืึท ื”ืึธื˜ืงื™ื™ CTRL+D.

ื™ื™ึทื ื˜ื™ื™ืœื•ื ื’ ื“ืึทื˜ืŸ ืžื™ื˜ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก ^

ืฆื• ื˜ื™ื™ืœืŸ ื“ืึทื˜ืŸ ืžื™ื˜ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืžื™ื˜ืœ ืื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื•ืŸ ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืœื•ื™ืคืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื‘ืึทืคึฟืขืœ ื•ื•ื• ืžื™ืจ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืฉืœื™ืกืœืขืŸ:

  • lxc config device add - ื“ืขืจ ื‘ืึทืคึฟืขืœ ืžื•ืกื™ืฃ ื“ื™ ืžื™ื˜ืœ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ
  • jupyter - ID ืคื•ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืฆื• ื•ื•ืึธืก ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ื– ืฆื•ื’ืขื’ืขื‘ืŸ
  • hostfs โ€” ื“ื™ื•ื•ื™ื™ืก ID. ืื™ืจ ืงืขื ืขืŸ ืฉื˜ืขืœืŸ ืงื™ื™ืŸ ื ืึธืžืขืŸ.
  • 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 ืื•ืŸ ืฉืึทืคึฟืŸ ื“ื™ื™ืŸ ืขืจืฉื˜ืขืจ ืœืึทืคึผื˜ืึทืคึผ ื“ื•ืจืš ื’ืขื‘ืŸ ืึท ืงืœื™ืง ื“ืขื ืงื ืขืคึผืœ ืื•ื™ืฃ ื“ื™ ื‘ืœืึทื˜ ื•ื•ื™ ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ ื“ื™ ื‘ื™ืœื“ ืื•ื ื˜ืŸ:

ืœืึธื ื˜ืฉื™ื ื’ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืื™ืŸ LXD ืึธืจื‘ื™ื˜

ื“ืขืจื ืึธืš, ืื™ืŸ ื“ื™ ืคืขืœื“ ืื•ื™ืฃ ื“ืขื ื‘ืœืึทื˜, ืึทืจื™ื™ึทืŸ ื“ื™ ืคึผื™ื˜ื”ืึธืŸ ืงืึธื“ ื•ื•ืึธืก ื•ื•ืขื˜ ืึทืจื•ื™ืกื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืงืœืึทืกื™ืฉ Hello World!. ื•ื•ืขืŸ ืื™ืจ ื”ืึธื˜ ืคืึทืจื˜ื™ืง ืึทืจื™ื™ึทืŸ, ื“ืจื™ืงืŸ CTRL+ENTER ืึธื“ืขืจ ื“ื™ "ืฉืคึผื™ืœ" ืงื ืขืคึผืœ ืื•ื™ืฃ ื“ื™ ืžื›ืฉื™ืจ ืื™ืŸ ื“ื™ ืฉืคึผื™ืฅ ืฆื• JupyterLab ื˜ืึธืŸ ื“ืึธืก:

ืœืึธื ื˜ืฉื™ื ื’ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืื™ืŸ LXD ืึธืจื‘ื™ื˜

ืื™ืŸ ื“ืขื ืคื•ื ื˜, ื›ึผืžืขื˜ ืึทืœืฅ ืื™ื– ื’ืจื™ื™ื˜ ืคึฟืึทืจ ื ื•ืฆืŸ, ืึธื‘ืขืจ ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึทื ื™ื ื˜ืจืึทืกื˜ื™ื ื’ ืื•ื™ื‘ ืžื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื™ื ืกื˜ืึทืœื™ืจืŸ ื ืึธืš ืคึผื™ื˜ื”ืึธืŸ ืžืึทื“ื–ืฉื•ืœื– (ืคื•ืœ-ืคืœืขื“ื–ืฉื“ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–) ื•ื•ืึธืก ืงืขื ืขืŸ ื‘ืื˜ื™ื™ื˜ื™ืง ื™ืงืกืคึผืึทื ื“ ื“ื™ ื ืึธืจืžืึทืœ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืคื•ืŸ ืคึผื™ื˜ื”ืึธืŸ ืื™ืŸ. ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืœืึทื‘ื“ืขืจื™ื‘ืขืจ, ืœืึธืžื™ืจ ืคืึธืจื–ืขืฆืŸ :)

ืคึผืก ื“ื™ ื˜ืฉื™ืงืึทื•ื•ืข ื–ืึทืš ืื™ื– ืึทื– ื“ื™ ืึทืœื˜ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืื•ื ื˜ืขืจ ืงืึธื“ ื ืึธืžืขืŸ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ื ืึธื•ื˜ื‘ื•ืง ืื™ื– ื ื™ื˜ ืึทื•ื•ืขืง ืื•ืŸ ืขืก ื™ื’ื–ื™ืกืฅ ืื™ืŸ ืคึผืึทืจืึทืœืขืœ ืžื™ื˜ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืœืึทื‘. ืฆื• ื‘ืึทืฉื˜ื™ืžืขืŸ ืฆื• ื“ื™ ืึทืœื˜ ื•ื•ืขืจืกื™ืข, ื ืึธื›ื’ื™ื™ืŸ ื“ื™ ืœื™ื ืง ืฆื• ืœื™ื™ื’ืŸ ื“ื™ ืกืึทืคื™ืงืก ืื™ืŸ ื“ื™ ืึทื“ืจืขืก/tree, ืื•ืŸ ื“ื™ ื™ื‘ืขืจื’ืึทื ื’ ืฆื• ื“ื™ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืื™ื– ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ืžื™ื˜ ื“ื™ ืกืึทืคื™ืงืก /lab, ืึธื‘ืขืจ ืขืก ื“ืึทืจืฃ ื ื™ื˜ ื–ื™ื™ืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจื˜:

ื™ืงืกืคึผืึทื ื“ื™ื ื’ ื“ื™ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืคื•ืŸ Python ^

ืื™ืŸ ื“ืขื ืึธืคึผื˜ื™ื™ืœื•ื ื’, ืžื™ืจ ื•ื•ืขืœืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ ืึทื–ืึท ืฉื˜ืึทืจืง ืคึผื™ื˜ื”ืึธืŸ ืฉืคึผืจืึทืš ืžืึทื“ื–ืฉื•ืœื– ื•ื•ื™ ื ื•ืžืคึผื™, ืคึผืึทื ื“ืึทืก, matplotlib, IPyWidgets ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ ื•ื•ืึธืก ื–ืขื ืขืŸ ื™ื ืึทื’ืจื™ื™ื˜ื™ื“ ืื™ืŸ ืœืึทืคึผื˜ืึธืคึผืก ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืœืึทื‘.

ืื™ื™ื“ืขืจ ืื™ืจ ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ืœื™ืกื˜ืขื“ ืคึผื™ื˜ื”ืึธืŸ ืžืึทื“ื–ืฉื•ืœื– ื“ื•ืจืš ื“ื™ ืคึผืขืงืœ ืคืึทืจื•ื•ืึทืœื˜ืขืจ pip ืžื™ืจ ืžื•ื–ืŸ ืขืจืฉื˜ืขืจ ื”ืึทืœื˜ืŸ ืกื™ืกื˜ืขื ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืื™ืŸ ืึทืœืคึผื™ื™ืŸ ืœื™ื ื•ืงืก:

  • g++ - ื ื•ื™ื˜ื™ืง ืคึฟืึทืจ ืงืึทืžืคึผื™ื™ืœื™ื ื’ ืžืึทื“ื–ืฉื•ืœื–, ื•ื•ื™ื™ึทืœ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹ื–ื™ื™ ื–ืขื ืขืŸ ื™ืžืคึผืœืึทืžืขื ืึทื“ ืื™ืŸ ื“ืขืจ ืฉืคึผืจืึทืš C ++ ืื•ืŸ ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ืคึผื™ื˜ื”ืึธืŸ ืื™ืŸ ืจื•ื ื˜ื™ืžืข ื•ื•ื™ ื‘ื™ื™ื ืขืจื™ ืžืึทื“ื–ืฉื•ืœื–
  • freetype-dev - ื“ืขืคึผืขื ื“ืขื ืกื™ ืคึฟืึทืจ ืคึผื™ื˜ื”ืึธืŸ ืžืึธื“ื•ืœืข matplotlib

ื™ื ืกื˜ืึธืœื™ื ื’ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื–:

lxc exec jupyterlab -- apk add g++ freetype-dev

ืขืก ืื™ื– ืื™ื™ืŸ ืคึผืจืึธื‘ืœืขื: ืื™ืŸ ื“ืขื ืงืจืึทื ื˜ ืฉื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืึทืœืคึผื™ื™ืŸ ืœื™ื ื•ืงืก ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’, ืขืก ื•ื•ืขื˜ ื ื™ื˜ ื–ื™ื™ืŸ ืžืขื’ืœืขืš ืฆื• ื–ืึทืžืœืขืŸ ื“ื™ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹NumPy; ืึท ื–ืึทืžืœื•ื ื’ ื˜ืขื•ืช ื•ื•ืขื˜ ื“ืขืจืฉื™ื™ึทื ืขืŸ ืึทื– ืื™ืš ืงืขืŸ ื ื™ืฉื˜ ื”ืึทืœื˜ืŸ:

ื’ืจื™ื™ึทื–: ืงืขืŸ ื ื™ืฉื˜ ื‘ื•ื™ืขืŸ ื•ื•ื™ืœื– ืคึฟืึทืจ ื ืึทืžืคึผื™ ื•ื•ืึธืก ื ื•ืฆืŸ PEP 517 ืื•ืŸ ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ ื’ืœื™ื™ึทืš

ื“ืขืจื™ื‘ืขืจ, ืžื™ืจ ื•ื•ืขืœืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ืขื ืžืึธื“ื•ืœืข ื•ื•ื™ ืึท ืกื™ืกื˜ืขื ืคึผืขืงืœ ื•ื•ืึธืก ื“ื™ืกื˜ืจื™ื‘ื™ื•ืฅ ืึท ืฉื•ื™ืŸ ืงืึทืžืคึผื™ื™ืœื“ ื•ื•ืขืจืกื™ืข, ืึธื‘ืขืจ ืึท ื‘ื™ืกืœ ืขืœื˜ืขืจ ื•ื•ื™ ื•ื•ืึธืก ืื™ื– ื“ืขืจื•ื•ื™ื™ึทืœ ื‘ื ื™ืžืฆื ืื•ื™ืฃ ื“ืขื ืคึผืœืึทืฅ:

lxc exec jupyterlab -- apk add py3-numpy py3-numpy-dev

ื“ืขืจื ืึธืš, ื™ื ืกื˜ืึทืœื™ืจืŸ ืคึผื™ื˜ื”ืึธืŸ ืžืึทื“ื–ืฉื•ืœื– ื“ื•ืจืš ื“ื™ ืคึผืขืงืœ ืคืึทืจื•ื•ืึทืœื˜ืขืจ 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 ื“ื–ืฉืขื ืขืจื™ื™ืฅ ืึท ื•ื™ ืขืœืขืžืขื ื˜ ืื•ื™ืฃ ื“ืขื ื‘ืœืึทื˜ ื•ื•ืึธืก ื™ื ื˜ืขืจืึทืงืฅ ื™ื ื˜ืขืจืึทืงื˜ื™ื•ื•ืœื™ ืžื™ื˜ ื“ื™ ืžืงื•ืจ ืงืึธื“, ืื•ืŸ ืื•ื™ืš matplotlib ื“ื™ืกืคึผืœื™ื™ื– ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืงืึธื“ ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ ืึท ื‘ื™ืœื“ ื•ื•ื™ ืึท ืคื•ื ืงืฆื™ืข ื’ืจืึทืคื™ืง:

ืœืึธื ื˜ืฉื™ื ื’ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืื™ืŸ LXD ืึธืจื‘ื™ื˜

ืคื™ืœืข ื‘ื™ื™ืฉืคื™ืœืŸ IPyWidgets ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ืขืก ืื™ืŸ ื˜ื•ื˜ืึธืจื™ืึทืœื– ื“ืึธ

ื•ื•ืืก ื ืืš? ^

ื’ื•ื˜ ื’ืขื˜ืืŸ ืื•ื™ื‘ ืื™ืจ ืกื˜ื™ื™ื“ ืื•ืŸ ืจื™ื˜ืฉื˜ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ. ืื™ืš ื“ื™ืœื™ื‘ืจืึทื˜ ื ื™ืฉื˜ ืคึผืึธืกื˜ืŸ ืึท ืคืึทืจื˜ื™ืง ืฉืจื™ืคื˜ ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ื•ื•ืึธืก ื•ื•ืึธืœื˜ ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื–ืฉื•ืคึผื™ื˜ืขืจ ืœืึทื‘ ืื™ืŸ "ืื™ื™ืŸ ืงืœื™ืง" ืฆื• ืžื•ื˜ื™ืงืŸ ื•ื•ืึธืจืงืขืจืก :) ืึธื‘ืขืจ ืื™ืจ ืงืขื ืขืŸ ื˜ืึธืŸ ืขืก ื–ื™ืš, ื•ื•ื™ื™ึทืœ ืื™ืจ ืฉื•ื™ืŸ ื•ื•ื™ืกืŸ ื•ื•ื™, ื•ื•ื™ื™ืœ ื’ืขื–ืืžืœื˜ ื“ื™ ืงืึทืžืึทื ื“ื– ืื™ืŸ ืึท ืื™ื™ืŸ ื‘ืึทืฉ ืฉืจื™ืคื˜ :)

ืื™ืจ ืงืขื ื˜ ืื•ื™ืš:

  • ืฉื˜ืขืœืŸ ืึท ื ืขืฅ ื ืึธืžืขืŸ ืคึฟืึทืจ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ืึทืŸ IP ืึทื“ืจืขืก ื“ื•ืจืš ืฉืจื™ื™ื‘ืŸ ืขืก ืื™ืŸ ืึท ืคึผืฉื•ื˜ /etc/hosts ืื•ืŸ ืึทืจื™ื™ึทืŸ ื“ื™ ืึทื“ืจืขืก ืื™ืŸ ื“ืขื ื‘ืœืขื˜ืขืจืขืจ http://jupyter.local:8888
  • ืฉืคึผื™ืœ ืžื™ื˜ ื“ื™ ืžื™ื˜ืœ ืฉื™ืขื•ืจ ืคึฟืึทืจ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ, ืคึฟืึทืจ ื“ืขื ืœื™ื™ืขื ืขืŸ ื“ืขื ืงืึทืคึผื™ื˜ืœ ืื™ืŸ ื™ืงืขืจื“ื™ืง LXD ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ืึธื“ืขืจ ื‘ืึทืงื•ืžืขืŸ ืžืขืจ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื•ื™ืฃ ื“ื™ 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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’