お金をかけずにサーバーの勉強をしよう

Linuxシステムコンテナ(LXD) 1

2023年10月23日

メニューへ戻る

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でアクセスしないといけません。

早速アクセスしてみますと、自己署名のサーバー証明書が使われているので、最初はこういった注意が出ますが強行します。
LXD WEB-UI 1

どうやらログインは、アカウント/パスワードではなく、個人用の証明書を使って行われるようです。
Create a new certificateを押します。
LXD WEB-UI 2

手順が表示されました。
Generateを押します。
LXD WEB-UI 3

この証明書にパスワードを設定します。
2箇所に同じものを入れ、Generate certificateを押します。
LXD WEB-UI 4

[2.Trust] のところにDownload crtが現れるので押します。
LXD WEB-UI 5
私は 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を押します。
LXD WEB-UI 6

ダウンロードが完了したら、Firefoxのアドレス枠に [about:preferences#privacy]と入れます。
Firefoxの [設定] - [プライバシーとセキュリティ] を選んだ際の画面が開きます。
[証明書] の段落の証明書を表示を押します。
LXD WEB-UI 7

[あなたの証明書]タブを選択し、インポートを押します。
LXD WEB-UI 8
ファイラーが開きますので、上でダウンロードした証明書のファイル [lxd-ui.pfx] を選択します。

証明書を作る時に設定したパスワードを入れてログインを押します。
LXD WEB-UI 9

登録され、表示されました
OKを押します。
LXD WEB-UI 10

手順では「WEBブラウザのリロードをしろ」とありましたので、Firefoxを立ち上げ直しました。

「個人証明書を使うぞ〜」ってダイアログが出ましたので、OKしていったらこんな画面になりました。
手順にはここから「LXDをエンジョイしなさい」と書いてありました。 LXD WEB-UI 11


ちょっと長くなってしまいましたので、Linuxシステムコンテナの作成は次回に回します。

Linuxシステムコンテナ(LXD) 2」に続きます。