Page cover image

Custom LXD container templates များကိုဘယ်လို import လုပ်သလဲ

Proxmox ကို hypervisor အနေနဲ့ စတင်အသုံးပြုစကတည်း စာရေးသူ LXD container တွေနဲ့စတင်ရင်းနှီးကျွမ်းကျင်လာပါတယ်။ အရင်ကကြားဖူးပေမယ့် LXD ကိုလက်တွေ့မှာ ထဲထဲဝင်ဝင် မသုံးဖြစ်ခဲ့ပါဘူး။ အချို့က LXC လို့လည်းအလွယ်ခေါ်သလို၊ အချို့က LXD container လို့လည်းခေါ်ကြပါတယ်။ LXC ဆိုတာက Linux Containers ရဲ့အတိုကောက်ဖြစ်ပြီးတော့၊ LXD ဆိုတာ Linux Container Daemon ရဲ့အတိုကောက်ပါ။ LXC ဟာ low-level containerisation နည်းပညာတခုဖြစ်ပြီး ဟိုအရင်ကတည်း OpenVZ လို့ခေါ်ခဲ့ကြပါတယ်။ စာရေးသူ Sysadmin တစ်ယောက်ဖြစ်စက၊ OpenVZ ကိုအသုံးပြုတဲ့ web hosting တခုမှာ support လုပ်ရင်းနဲ့ တခေါက်မြင်ခဲ့တွေ့ခဲ့ဘူးပါတယ်။ အဲ့ဒီတုန်းက ကိုယ့်လုပ်ငန်းခွင်မှာ တွေ့နေကြမဟုတ်တဲ့အတွက် အမှတ်တမဲ့ပါပဲ။ LXD ဆိုတာက LXC ကိုအသုံးပြုပြီး ပိုမိုလွယ်ကူအောင်၊ feature တွေအများထပ်ထည့်ထားတဲ့ high-level containerisation နည်းပညာတခုပါ။ LXD နဲ့ container အပြင်၊ virtual machine တွေပါ KVM အသုံးပြုပြီး run လို့ရနိုင်ပါတယ်။

Proxmox မှာသုံးလို့ရတဲ့ LXC template တွေကို ကိုယ့်ရဲ့ local LXD installation မှာဘယ်လိုမျိုး import လုပ်ပြီးတော့ အသုံးပြုနိုင်သလဲဆိုတာကိုရှင်းပြသွားပါ့မယ်။ ဘာဖြစ်လို့ အဲ့လိုမျိုး import လုပ်ဖို့စိတ်ကူးရသလဲဆိုတာ အနည်းငယ်ရှင်းပြလိုပါတယ်။

  • စာရေးသူရဲ့ home lab နဲ့ home production environment တွေမှာ Proxmox hypervisor ကိုအသုံးပြုလာခဲ့တာကြပါပြီ။ Home lab ကို စာရေးသူ အမြဲတမ်း power on မလုပ်ထားချင်တဲ့အတွက်၊ လိုမှပဲစက်ဖွင့်ပြီးတော့ အသုံးပြုပါတယ်။ တခါတရံ အဲ့ဒီ power on လုပ်ရတာနဲ့၊ Proxmox ထဲကိုဝင်ရတာနဲ့က ကိုယ် lab ကို setup လုပ်ဖို့အချိန်က ကြန့်ကြာစေပါတယ်။ ဒီတော့ မလိုအပ်ပါက အဲ့ဒီ home lab server ကြီးကို စက်မဖွင့်လိုပါ။

  • စာရေးသူအနေနဲ့ နောက် စည်းကမ်းချက်တခုက၊ home production environment မှာဘာကိုမှ စမ်းသပ်မူမျိုး မလုပ်ရပါ။ အရင်တုန်း ဒါလေးတခုက မဖြစ်စလောက်လေးပါ၊ ဘာမှမဖြစ်ပါဘူးဆိုပြီး production မှာစမ်းသပ်မိခဲ့လို့ ကိုယ့်အိမ်က production environment ကျသွားတဲ့အခါ၊ အိမ်ကမိသားစုဝင်တွေအကုန်လုံးအတွက် impact ဖြစ်ပါတယ်။ ဒါဟာကိုယ့်ရဲ့ sysadmin တစ်ယောက်ရဲ့ ဂုဏ်သိက္ခာ ကိုအများကြီးထိခိုက်စေပါတယ်။ ဒီတော့ ကိုယ့်အလုပ်မှာ ကိုယ်ဘယ်လောက်သိကြောင်း တတ်ကြောင်းကို အပြောတခုတည်းနဲ့ မဟုတ်ပဲနဲ့၊ အလုပ်နဲ့ပါသက်သေပြနိုင်ဖို့ကအရေးကြီးပါတယ်။

  • စာရေးသူလက်ရှိ အသုံးပြုနေတဲ့ Lenovo workstation ရဲ့ spec ဟာ server တလုံးအနေနဲ့ အသုံးပြုလို့ရနိုင်လောက်တဲ့ အနေအထားဖြစ်ပါတယ်။ တချိန်တုန်း ဒီစက်ကိုအိမ်မှာ sever အဖြစ်သုံးဖို့အတွက်ဝယ်ထားပြီးကာမှ အသုံးပြုဖို့ use case ကောင်းကောင်းမရှိတာကြောင့် စာရေးသူရဲ့ main workstation အဖြစ်ပြန်ပြောင်းအသုံးပြုဖြစ်ခဲ့ပါတယ်။ Intel Xeon CPU ကြီးနဲ့ဖြစ်တဲ့အတွက် power consumption မှာ ၂၄နာရီလုံး run ထားဖို့အတွက် သိပ်မကိုက်ဘူးလို့ ထင်ပါတယ်။ Ubuntu 22.04 LTS Desktop (default - GNOME) ကိုသုံးပြီး Virtualbox ကို Vagrant နဲ့ တွဲသုံးပြီး lab တွေကို setup လုပ်ပါတယ်၊ စမ်းသပ်ပါတယ်။ Virtualbox ပေါ်မှာ Proxmox ကိုထပ်တင်ပြီး run လို့တော့ရပါတယ်။ Virtualbox က သူ့ပေါ်မှာ KVM တင် run တာသဘောမတွေ့လို့ မကြာခဏဆိုသလို crash ဖြစ်ပါတယ်။

  • Minimalism လိုမျိုး idea ကိုကြိုက်တဲ့ စာရေးသူအတွက် lab setup လုပ်တဲ့အခါမှာတောင် တတ်နိုင်ရင် VM မသုံးပဲနဲ့ ပိုပြီးတော့ Lightweight ဖြစ်တဲ့ LXD container ကိုမျက်စိကျမိပါတယ်။ Docker နဲ့မတူတာတခုက LXD ဟာ VM တလုံးလိုမျိုး behave လုပ်တဲ့အတွက် အချို့သော lab တွေမှာ အသုံးတော်တော်လေးတည့်ပါတယ်။ လက်ရှိအချိန်ထိတော့ Vagrant နဲ့ Virtualbox နှစ်ခုကို တော်တော်များများ အသုံးပြုနေရတုန်းပါ။ အခုနောက်ပိုင်းမှာတော့ LXD ကိုပါ စာရေးသူရဲ့ workstation ပေါ်မှာ install လုပ်ပြီးသုံးနေပါပြီ။ အထူးသဖြင့် LXD container နဲ့ပဲ စမ်းသပ်လို့ရနိုင်တဲ့ lab ဆိုရင် Virtualbox ကို မသုံးဖြစ်တော့ပါ။

  • စာရေးသူရဲ့ desktop မှာ snap install လုပ်ထားတဲ့ vanilla LXD installation ကိုအသုံးပြုတဲ့အခါမှာ စာရေးသူ Proxmox မှာသုံးနေကြ TurnKey Linux ကနေထုတ်တဲ့ template တွေကို access လုပ်တဲ့အခါမှာပြဿနာရှိနေပါတယ်။ TurnKey Linux ရဲ့ mirror URL ကို remote အနေနဲ့ LXD မှာထည့်ပြီး စမ်းကြည့်တော့ အဆင်မပြေဖြစ်နေပါတယ်။ ဒီတော့ အခြားဘယ်လိုနည်းလမ်းရှိသေးသလဲလို့ ကြည့်လိုက်မှ၊ template တွေကို import လုပ်လို့ရနိုင်သွားတွေ့ပါတယ်။

Prerequisites

  • Ubuntu 22.04 LTS ပေါ်မှာ LXD ကို snap နဲ့ အရင်ဆုံး install လုပ်ထားရပါ့မယ်။ Install လုပ်ပြီးရင် LXD ကို အောက်မှာပြထားတဲ့အတိုင်း ဆက်လက် setup လုပ်ရပါ့မယ်။

# install lxd snap if not installed
vagrant@lxd1:~$ sudo snap install lxd -y

# initial setup of lxd
vagrant@lxd1:~$ lxd init
Would you like to use LXD clustering? (yes/no) [default=no]: 
Do you want to configure a new storage pool? (yes/no) [default=yes]: 
Name of the new storage pool [default=default]: 
Name of the storage backend to use (btrfs, ceph, cephobject, dir, lvm, zfs) [default=zfs]: 
Create a new ZFS pool? (yes/no) [default=yes]: 
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]: 
Size in GiB of the new loop device (1GiB minimum) [default=6GiB]: 
Would you like to connect to a MAAS server? (yes/no) [default=no]: 
Would you like to create a new local network bridge? (yes/no) [default=yes]: 
What should the new bridge be called? [default=lxdbr0]: 
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]: 
Would you like the LXD server to be available over the network? (yes/no) [default=no]: 
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]: 
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]: 
  • ကိုယ်လိုချင်တဲ့ container template ကို http://mirror.turnkeylinux.org/turnkeylinux/images/proxmox/debian-12-turnkey-core_18.1-1_amd64.tar.gz ကနေပြီး download ဆွဲထားရပါ့မယ်။ ဒီ post မှာတော့ Debian 12 Bookworm core container template ကိုအသုံးပြုပါ့မယ်။

vagrant@lxd1:~$ mkdir ct
vagrant@lxd1:~$ cd ct
vagrant@lxd1:~/ct$ wget http://mirror.turnkeylinux.org/turnkeylinux/images/proxmox/debian-12-turnkey-core_18.1-1_amd64.tar.gz
--2024-08-04 09:26:49--  http://mirror.turnkeylinux.org/turnkeylinux/images/proxmox/debian-12-turnkey-core_18.1-1_amd64.tar.gz
Resolving mirror.turnkeylinux.org (mirror.turnkeylinux.org)... 131.188.12.211, 137.226.34.46, 2801:82:80ff:8000::e
Connecting to mirror.turnkeylinux.org (mirror.turnkeylinux.org)|131.188.12.211|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 221553990 (211M) [application/x-gzip]
Saving to: ‘debian-12-turnkey-core_18.1-1_amd64.tar.gz.1’

debian-12-turnkey-core_18.1-1_amd64.tar.gz.1       100%[===============================================================================================================>] 211.29M   594KB/s    in 7m 5s   

2024-08-04 09:33:55 (509 KB/s) - ‘debian-12-turnkey-core_18.1-1_amd64.tar.gz.1’ saved [221553990/221553990]
  • metadata.yaml ဆိုပြီး YAML file တခုကိုအောက်မှာပြထားတဲ့အတိုင်း ကြိုတင်ပြင်ဆင်ထားရပါ့မယ်။ ကိုယ်နဲ့သင့်တော်မယ့် parameters တွေကို လိုအပ်သလိုပြောင်းလဲပေးဖို့မမေ့ပါနဲ့။

architecture: "x86_64"
creation_date: 1722761061 # use `date +%s` command
properties:
  architecture: "x86_64"
  description: "Debian Bookworm Turnkey Core"
  os: "debian"
  release: "bookworm"                                                       
  • အဲ့ဒီ metadata.yaml file အဆင်သင့်ဖြစ်ပြီဆိုရင် အောက်မှပြထားတဲ့အတိုင်း tar command နဲ့ .tar.gz file အဖြစ်သို့ထပ်မံပြောင်းလဲပေးရပါ့မယ်။

vagrant@lxd1:~/ct$ tar -cvzf metadata.tar.gz metadata.yaml
metadata.yaml

Import LXD container template

အထက်မှာဖော်ပြထားသလို အကုန်ပြင်ဆင်ပြီးရင် template ကိုစတင် import လုပ်လို့ရနိုင်ပါပြီ။

# import lxd container template
vagrant@lxd1:~/ct$ lxc image import metadata.tar.gz debian-12-turnkey-core_18.1-1_amd64.tar.gz.1 --alias tkl-core-12
Image imported with fingerprint: 7cfd726d2f8384aaf538de2ab9fdc4d7b8e40a96dd2b03c809c48e08199e7811

# verify the import template as an image
vagrant@lxd1:~/ct$ lxc image list 
+-------------+--------------+--------+------------------------------+--------------+-----------+-----------+-----------------------------+
|    ALIAS    | FINGERPRINT  | PUBLIC |         DESCRIPTION          | ARCHITECTURE |   TYPE    |   SIZE    |         UPLOAD DATE         |
+-------------+--------------+--------+------------------------------+--------------+-----------+-----------+-----------------------------+
| tkl-core-12 | 7cfd726d2f83 | no     | Debian Bookworm Turnkey Core | x86_64       | CONTAINER | 211.29MiB | Aug 4, 2024 at 9:41am (UTC) |
+-------------+--------------+--------+------------------------------+--------------+-----------+-----------+-----------------------------+

# create a container using the image
vagrant@lxd1:~/ct$ lxc launch tkl-core-12 debian12
Creating debian12
Starting debian12                         

# check if the container is up and running
vagrant@lxd1:~/ct$ lxc list
+----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
|   NAME   |  STATE  |        IPV4         |                     IPV6                      |   TYPE    | SNAPSHOTS |
+----------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| debian12 | RUNNING | 10.177.10.79 (eth0) | fd42:a14a:b9bc:f842:216:3eff:fea4:5152 (eth0) | CONTAINER | 0         |
+----------+---------+---------------------+-----------------------------------------------+-----------+-----------+

# access the container and verify if it is operational
vagrant@lxd1:~/ct$ lxc exec debian12 bash
root@core ~# 
root@core ~# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Proxmox မှာလောက်အဆင်မပြေနိုင်ပေမယ့်လည်း စာရေးသူ local desktop မှာပဲ run ပြီးစမ်းသပ်နိုင်တာကြောင့် အတော်လေးကို သဘောကျမိပါတယ်။

Last updated

Was this helpful?