Linuxシステムコンテナで、仮想マシンでもアプリケーションコンテナでもない Linux仮想環境を作ります。
「PROXMOX環境構築 1」からのシリーズで、Linuxのシステムコンテナを初めて使ってみて、「あれ? Linuxの仮想OS環境が必要なら、別ソフト入れなくてもこれでイイんじゃね?」と思ったのが発端で、LXDというものを直接使ってみようと思い立ちました。
これまで VMware Workstation Playerというソフトを使って仮想マシンを作ってきていて、LXDをイジったことがなかったので良い機会と思いました。
ここでは Ubuntu Server 22.04.3を使って、LXDで Linuxシステムコンテナってものを作っていきますが、LXDを取り巻く環境に関して 2023年内に大きな動きがあったようですので、それを少しおさらいします。
これを調べていくと「LXC」と「LXD」という似たような単語が出てきます。
LXCはこちらのプロジェクトで開発されているツールの 1つです。
Container and virtualization tools
LXDは元々上記プロジェクトの 1つで、Ubuntuを開発している Canonicalがスポンサーしていたようですが、2023年7月4日にこのようなアナウンスがありました。
LXD は Canonical の傘下に入りました
「残念」と書いてある所から、内部でアレコレとあったんだと想像できます。
そして 2023年8月4日にこちらのものが上記のプロジェクトに加わっています。
LXDは元々 LXCのツールの 1つだったようですが、2023年7月4日にこのようなアナウンスがありました。
Incus の紹介
すぐにフォークしたツールを立ち上げる所からしても、やはり何かあったんだろうと。
総じて見ると、Canonicalが上記プロジェクトから LXDを引き揚げて自社開発物とし、上記プロジェクトでは代わりに LXDからフォークした Incusを別途開発し始めた、ということなんだろうと思います。
過去に MySQLから袂を分かった MariaDBの事を思い出します。
経緯はどうあれ次に考えるべきなのは、LXDと Incusのシェアがどうなっていくかです。
LXDを Canonicalが引き揚げたということは、Ubuntuでは LXDが主流となり、他の Linux OSでは Incusが主流となるのかも知れません。
似たような技術はいずれ 1本に収斂していくので、どちらかが生き残るはずです。
Ubuntuは Linux OSのディストリビューションとしては大きな柱ですから、仮に LXDが Ubuntu以外の Linux OSでは上手く動かず LXDが孤立することになっても LXDは即死亡ということにはならないと思います。
まだ上記の喧嘩別れから 3ヶ月では、どうにも判断がつきかねます。
悩んでいても仕方がないので、Ubuntu Server 22.04.3で LXDを使って環境を作っていこうと思います。
なお、Ubuntu Server 22.04.3にはデフォルトで snapパッケージの LXDがインストールされていまして、特に何か入れなくてもすぐに使えます。
『Software Design』誌でお馴染みの技術評論社さんのブログを参考にさせていただいております。
第769回 Canonicalが開発する LXDの公式 Web UIである LXD-UIを試してみる
それから、こちらが Canonicalの Ubuntuのサイトの LXDの文書です。
LXD
ここから作業に入ります。
Ubuntu Server 22.04.3には LXDがデフォルトでインストールされていると上で書いていますが、どのバージョンが入っているのでしょうか。
subro@UbuntuServer2204-1:~$ sudo snap info lxd
name: lxd
summary: LXD - container and VM manager
publisher: Canonical✓
store-url: https://snapcraft.io/lxd
contact: lxc-devel@lists.linuxcontainers.org
license: unset
description: |
LXD is a system container and virtual machine manager.
It offers a simple CLI and REST API to manage local or remote instances,
uses an image based workflow and support for a variety of advanced features.
Images are available for all Ubuntu releases and architectures as well
as for a wide number of other Linux distributions. Existing
integrations with many deployment and operation tools, makes it work
just like a public cloud, except everything is under your control.
LXD containers are lightweight, secure by default and a great
alternative to virtual machines when running Linux on Linux.
LXD virtual machines are modern and secure, using UEFI and secure-boot
by default and a great choice when a different kernel or operating
system is needed.
With clustering, up to 50 LXD servers can be easily joined and managed
together with the same tools and APIs and without needing any external
dependencies.
Supported configuration options for the snap (snap set lxd [=...]):
- ceph.builtin: Use snap-specific Ceph configuration [default=false]
- ceph.external: Use the system's ceph tools (ignores ceph.builtin) [default=false]
- criu.enable: Enable experimental live-migration support [default=false]
- daemon.debug: Increase logging to debug level [default=false]
- daemon.group: Set group of users that have full control over LXD [default=lxd]
- daemon.user.group: Set group of users that have restricted LXD access [default=lxd]
- daemon.preseed: Pass a YAML configuration to `lxd init` on initial start
- daemon.syslog: Send LXD log events to syslog [default=false]
- daemon.verbose: Increase logging to verbose level [default=false]
- lvm.external: Use the system's LVM tools [default=false]
- lxcfs.pidfd: Start per-container process tracking [default=false]
- lxcfs.loadavg: Start tracking per-container load average [default=false]
- lxcfs.cfs: Consider CPU shares for CPU usage [default=false]
- lxcfs.debug: Increase logging to debug level [default=false]
- openvswitch.builtin: Run a snap-specific OVS daemon [default=false]
- openvswitch.external: Use the system's OVS tools (ignores openvswitch.builtin) [default=false]
- ovn.builtin: Use snap-specific OVN configuration [default=false]
- shiftfs.enable: Enable shiftfs support [default=auto]
For system-wide configuration of the CLI, place your configuration in
/var/snap/lxd/common/global-conf/ (config.yml and servercerts)
commands:
- lxd.benchmark
- lxd.buginfo
- lxd.check-kernel
- lxd.lxc
- lxd.lxc-to-lxd
- lxd
- lxd.migrate
services:
lxd.activate: oneshot, enabled, inactive
lxd.daemon: simple, enabled, active
lxd.user-daemon: simple, enabled, inactive
snap-id: J60k4JY0HppjwOjW8dZdYc8obXKxujRu
tracking: 5.0/stable/ubuntu-22.04
refresh-date: 2023-08-10
channels:
latest/stable: 5.18-da72b8b 2023-10-11 (25945) 189MB -
latest/candidate: 5.19-31ff7b6 2023-10-20 (26093) 159MB -
latest/beta: ↑
latest/edge: git-dca623b 2023-10-20 (26099) 159MB -
5.19/stable: 5.19-31ff7b6 2023-10-20 (26093) 159MB -
5.19/candidate: ↑
5.19/beta: ↑
5.19/edge: ↑
5.18/stable: 5.18-762f582 2023-09-26 (25748) 189MB -
5.18/candidate: ↑
5.18/beta: ↑
5.18/edge: ↑
5.17/stable: 5.17-e5ead86 2023-08-29 (25505) 184MB -
5.17/candidate: ↑
5.17/beta: ↑
5.17/edge: ↑
5.16/stable: 5.16-f2b0200 2023-07-26 (25353) 183MB -
5.16/candidate: ↑
5.16/beta: ↑
5.16/edge: ↑
5.15/stable: 5.15-3fe7435 2023-06-28 (25086) 181MB -
5.15/candidate: ↑
5.15/beta: ↑
5.15/edge: ↑
5.0/stable: 5.0.2-838e1b2 2023-01-25 (24322) 117MB -
5.0/candidate: 5.0.2-838e1b2 2023-01-18 (24322) 117MB -
5.0/beta: ↑
5.0/edge: git-7f8a581 2023-10-10 (25964) 125MB -
4.0/stable: 4.0.9-a29c6f1 2022-12-04 (24061) 96MB -
4.0/candidate: 4.0.9-a29c6f1 2022-12-02 (24061) 96MB -
4.0/beta: ↑
4.0/edge: git-407205d 2022-11-22 (23988) 96MB -
3.0/stable: 3.0.4 2019-10-10 (11348) 55MB -
3.0/candidate: 3.0.4 2019-10-10 (11348) 55MB -
3.0/beta: ↑
3.0/edge: git-81b81b9 2019-10-10 (11362) 55MB -
installed: 5.0.2-838e1b2 (24322) 117MB -
2023年10月23日時点で、最新版が 5.19、インストールされているのは 5.0.2でした。
5.19にアップデートしようとしてみたのですが、この通りアップデートされません。
subro@UbuntuServer2204-1:~$ sudo snap refresh lxd
snap "lxd" has no updates available
これについて、LXDの文書にこんな箇所がありました。
Control updates of the snap
このページにこう書かれています。
Feature releases of LXD are available on the latest track. In addition, LXD provides tracks for the supported feature releases.
On all tracks, the stable risk level contains all fixes and features for the respective track, but it is only updated when the LXD team decides that a feature is ready and no issues have been revealed by users running the same revision on higher risk levels (edge and candidate).
要は「[latest]で [stable]なやつ(上のコマンド実行結果の黄行のところ)を使え」と言いたいんだと思いますけど、現在インストールされている 5.0.2がアップデートされないのが解せません。
ただ同ページでは snapの lxdパッケージインストールのコマンドに
「--channel=latest/stable」というコマンドオプションを付けています。
正しいか不明ながら、snap refreshのときにもこのコマンドオプションを付けてやってみました。
subro@UbuntuServer2204-1:~$ sudo snap refresh lxd --channel=latest/stable
lxd 5.18-da72b8b from Canonical✓ refreshed
[latest/stable] に割当たっていた 5.18 になりました。
アップデートはこれで良いでしょう。
次に LXDで Linuxシステムコンテナを綺麗な画面から作れる WEB-UIという機能を使うにあたって、lxdデーモンに外部からの API制御を許可する作業が必要のようです。
次の文書の箇所です。
Configure server options
一番最初は lxdデーモンが立ち上がっていないので立ち上げます。
subro@UbuntuServer2204-1:~$ sudo systemctl start snap.lxd.daemon
lxdデーモンの設定変更をします。
subro@UbuntuServer2204-1:~$ sudo lxc config set core.https_address :8443
If this is your first time running LXD on this machine, you should also run: lxd init
To start your first container, try: lxc launch ubuntu:22.04
Or for a virtual machine: lxc launch ubuntu:22.04 --vm
lxdデーモンにリロードをかけて、設定反映をします。
subro@UbuntuServer2204-1:~$ sudo systemctl reload snap.lxd.daemon
これで、lxdデーモンは OKでしょう。
次に WEB-UIを有効にします。
文書上で前後していますが、こちらの記述になります。
How to access the LXD web UI
[lxd ui.enable] という値を [true] に変えているようです。
subro@UbuntuServer2204-1:~$ sudo snap set lxd ui.enable=true
また lxdデーモンをリロードします。
subro@UbuntuServer2204-1:~$ sudo systemctl reload snap.lxd.daemon
これで、WEBブラウザで [8443/tcp] にアクセスすると何か出るはず。
私の環境では [https://UbuntuServer2204-1:8443] です。
※HTTPSでアクセスしないといけません。
早速アクセスしてみますと、自己署名のサーバー証明書が使われているので、最初はこういった注意が出ますが強行します。
どうやらログインは、アカウント/パスワードではなく、個人用の証明書を使って行われるようです。
Create a new certificateを押します。
手順が表示されました。
Generateを押します。
この証明書にパスワードを設定します。
2箇所に同じものを入れ、Generate certificateを押します。
[2.Trust] のところにDownload crtが現れるので押します。
私は Ubuntu Server 22.04.3ではなく、クライアントの Lubuntu 22.04.3の Firefoxでダウンロードしてしまいましたので、[lxd-ui.crt]ファイルを scpコマンドで Ubuntu Server 22.04.3に持っていってから、以下のコマンドを実行しました。
subro@UbuntuServer2204-1:~$ lxc config trust add ./lxd-ui.crt
次はクライアント(Lubuntu 22.04.3)の Firefoxに個人用の証明書を登録をします。
[3.Import] のDownload pfxを押します。
ダウンロードが完了したら、Firefoxのアドレス枠に [about:preferences#privacy]と入れます。
Firefoxの [設定] - [プライバシーとセキュリティ] を選んだ際の画面が開きます。
[証明書] の段落の証明書を表示を押します。
[あなたの証明書]タブを選択し、インポートを押します。
ファイラーが開きますので、上でダウンロードした証明書のファイル [lxd-ui.pfx] を選択します。
証明書を作る時に設定したパスワードを入れてログインを押します。
登録され、表示されました
OKを押します。
手順では「WEBブラウザのリロードをしろ」とありましたので、Firefoxを立ち上げ直しました。
「個人証明書を使うぞ〜」ってダイアログが出ましたので、OKしていったらこんな画面になりました。
手順にはここから「LXDをエンジョイしなさい」と書いてありました。
ちょっと長くなってしまいましたので、Linuxシステムコンテナの作成は次回に回します。
「Linuxシステムコンテナ(LXD) 2」に続きます。