Ubuntu22.04でLXD環境構築

LXD環境を作る為の忘備録
今月号の日経Linuxに特集があったのにも触発されてちょっとちゃんとセットアップしてみた
WebUIとしてLXDMosaicとLXDWAREのLXD-Dashboardに対応

# LXD
[LXD公式](https://linuxcontainers.org/ja/)

## LXDのセットアップ
lxd initの項目については基本的にすべてデフォルトでも問題なし
※今回LXDのホストのIPは以降192.168.0.242として説明

```txt
$ sudo snap install lxd
$ lxd init
```

## ブリッジ設定
LXDホスト機の外部からコンテナやVMにアクセスできるようにする（本例では192.168.0.0/24系）

```txt
$ sudo apt update && sudo apt install -y bridge-utils
```
netplanの作成
※Ubuntu22.04から一部gateway4が使えなくなったのでroutes書式を使用
※ens32の部分（二か所はip aコマンドなどで自分の環境のNICと合わせる）
```/etc/netplan/00-installer-config.yaml
network:
  ethernets:
    ens32:
      dhcp4: false
      dhcp6: false
      accept-ra: false
  bridges:
    br0:
      interfaces: [ens32]
      addresses: [192.168.0.242/24]
      routes:
        - to: default
          via: 192.168.0.1
      link-local: []
      nameservers:
        addresses: [192.168.0.1]
      parameters:
        forward-delay: 0
        stp: no
      optional: true
  version: 2
```

```txt
$ sudo netplan apply
$ lxc profile create bridge
$ lxc network attach-profile br0 bridge eth0
$ lxc profile device add bridge root disk path=/ pool=default
```
# LXDMosaic
[LXDMosaic公式](https://lxdmosaic.readthedocs.io/en/master/)

## LXDMosaicのセットアップ
LXDMosaicコンテナからLXDホストへ繋ぐ為の認証設定
下記some-secret-stringには任意のパスワードを設定

```txt
$ lxc config set core.https_address [::]
$ lxc config set core.trust_password some-secret-string
```
LXDMosaic用のコンテナを生成
※PHPバージョンの依存関係の問題により22.04ではなく20.04を選択

```txt
$ lxc launch ubuntu:20.04 LXDMosaic --profile=bridge
$ lxc exec LXDMosaic bash
```
ここからLXDMosaicコンテナ内の操作
一旦上記のブリッジが正しく動作しているか確認する為現在のIPを取得

```txt
# ip a
```

## IPv6の無効化
ここで割り振られてしまっているIPv6のアドレスが後々邪魔になるようなので予め無効化

```/etc/sysctl.d/60-ipv6-disable.conf
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
```

```txt
sudo systemctl restart procps
```

```/etc/rc.local
#!/bin/bash
systemctl restart procps
exit 0
```

```txt
$ sudo chmod 755 /etc/rc.local
$ sudo systemctl reboot
```
rebootするとコンテナが切断されるので入り直してから以降の作業を行う
インストールが終わるとターミナル内に管理画面のアドレスが表示されるのでそれにアクセスする
※今回LXDMosaicコンテナは192.168.0.111とする

```txt
$ lxc exec lxdMosaic bash
# curl https://raw.githubusercontent.com/turtle0x1/LxdMosaic/master/examples/install_with_clone.sh >> installLxdMosaic.sh
# chmod +x installLxdMosaic.sh
# ./installLxdMosaic.sh
```

![Screenshot from 2023-02-19 17-36-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/77056e4f-51ef-0f82-a65c-22097d80777b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/cbda5d49-4441-5f51-2b3d-19f6f06de725.png)
ここではLXDMosaicのコンテナから見てLXDが動いているホストを指定する
Trust Passwordには上記のsome-secret-stringに入力したパスワードを指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/88b1fee4-c9a8-1296-5a48-0034d5bda790.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/07b3dace-0ea5-97cd-55b6-5e31cdbe622f.png)
こちらにはWeb管理画面のアカウント情報を登録するパスワードはsome-secret-stringのパスワードとは別で可
![Screenshot from 2023-02-19 17-40-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/afd91791-17ab-71b7-6df6-ae1df1cb4718.png)
![Screenshot from 2023-02-19 17-40-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/59c66a48-57a8-2980-4d03-4aacdf275cae.png)
![Screenshot from 2023-02-19 17-40-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/f3a06266-72cb-8d68-0a8e-37cdca6429ad.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/7e3b8a9e-0313-5bd0-bdf1-7ffc177ca729.png)
![Screenshot from 2023-02-19 18-49-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/1a178960-4b8b-c2a2-344a-439b43f04921.png)

# LXDWAREのLXD Dashboard
[LXDWARE公式](https://lxdware.com/)

LXD Dashboard用のコンテナを生成
※こちらはUbuntu22.04を使用
※LXDWAREの方はIPv6問題は特にないのでその対応は不要、コンテナのIPだけ確認（こちらは192.168.0.169）
※公式ドキュメントでは3.4.0で書かれているけれど最新でも問題なさそうなので3.6.0を指定
```txt
$ lxc launch ubuntu:22.04 LXDDashboard --profile=bridge
$ lxc exec LXDDashboard bash
# ip a
# apt update && apt install wget nginx php-fpm php-curl sqlite3 php-sqlite3 -y
# wget https://github.com/lxdware/lxd-dashboard/archive/v3.6.0.tar.gz
# tar -xzf v3.6.0.tar.gz
# cp -a lxd-dashboard-3.6.0/default /etc/nginx/sites-available/
# cp -a lxd-dashboard-3.6.0/lxd-dashboard /var/www/html/
```
PHPバージョン指定を7系から8系に変更

```diff:/etc/nginx/sites-enabled/default
server {
	listen 80 default_server;
	listen [::]:80 default_server;
	root /var/www/html/lxd-dashboard;
	index index.php index.html;
	server_name _;

	location / {
		try_files $uri $uri/ =404;
	}
	
	location ~ \.php$ {
        #include snippets/fastcgi-php.conf;
        #fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
-       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
-       #fastcgi_pass unix:/run/php/php8.1-fpm.sock;
+       #fastcgi_pass unix:/run/php/php7.4-fpm.sock;
+       fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    	include fastcgi_params;
    	include snippets/fastcgi-php.conf;
     }
}
```

```txt
# mkdir -p /var/lxdware/data/sqlite
# mkdir -p /var/lxdware/data/lxd
# mkdir -p /var/lxdware/backups
# chown -R www-data:www-data /var/lxdware/
# chown -R www-data:www-data /var/www/html
# systemctl restart nginx
# exit
```
セットアップ完了後にコンテナのIPにアクセス
Web画面の管理ユーザーを登録
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/a90597fc-a89a-7701-a94f-fbcb134efe9d.png)
ログイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/5e82a98d-dce0-d5fb-3145-28be02f62472.png)
LXDのホストが登録されていないので追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/e1493428-97a9-55ce-c4cc-b6ebf8ad30f2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/defcc1da-863a-8e7e-5437-8106c2deefc6.png)
下画面に書いてあるように例えばホームディレクトリにlxdware.crtという名前のファイルを作り内容に

```txt
-----BEGIN CERTIFICATE-----
～
-----END CERTIFICATE-----
```
の内容をコピーする
そののち以下のコマンドで証明書を取り込む

```txt
$ lxc config trust add lxdware.crt
```
$ lxc config set core.https_address [::] の方は上記でもやったのでやってない場合のみ行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/222ed2a8-6422-74ca-bc37-b814bbfe0601.png)
LXDホストと接続する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/0c416188-295f-d09d-4207-535b8ab926ef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/ba5859ba-3b63-826e-89bc-d5aae83711db.png)
![Screenshot from 2023-02-19 19-24-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314532/4c3f1109-4dbe-2491-15a7-73b0fc5e33de.png)

ちなみにRedHat系だとデフォルトではlxcコマンドを一般ユーザー権限で実行できないのでグループ追加が必要

```txt
$ sudo usermod -aG lxd username
```

参考記事など
[Ubuntu 20.04LTSでブリッジ接続を作成する](https://qiita.com/tabimoba/items/e371dddb4c87baa07832)
[LXDでブリッジ接続する方法（Ubuntu20.04）](https://qiita.com/tabimoba/items/e5ea32c8359f0f9e0f3b)
[UbuntuでIPv6を無効にする](https://qiita.com/htshozawa/items/77dd0be079cdf817a5a6)
[LXD で作る仮想化 GUI 環境 - Ubuntu 22.04 LTS 版](https://qiita.com/yoshi10ryu1/items/a720f9e664e5948c4e31)