LXDやらハイパーバイザーでたくさんVMを生やしたい。でも毎回セットアップするのは面倒くさい。sshのセキュリティ設定とか後回しにしてたらそのまま本番運用してしまった。 私のような面倒くさがりにとってこのような問題は常について回るものです。しかしどこかのすごい人™が開発したlxd-uiとcloud-initを組み合わせ使うと数クリックで初期設定済みのコンテナが立ち上がるという素晴らしいおうちクラウドを実現できたというお話です。
セットアップ
LXDをセットアップ
# lxdがsnapで入ってない場合
sudo apt install snapd
sudo snap install lxd
# Ubuntuなどで既にインストールされてる場合
sudo snap refresh --stable lxd
# WebUIを有効にする
sudo snap set lxd ui.enable=true
sudo snap restart --reload lxd
lxc config set core.https_address "[::]:8443"
WebUIの証明書周りの設定をする
[サーバーのIP]:8443 にhttpsでアクセスするとセットアップ画面が出てきます。基本的にこの画面の指示に従って証明書周りの設定をします。
ここでは詳細は省きますがコケたらこのサイトが参考になるかも
cloud-initの準備
- 左にあるナビゲーションのprofilesから適当なプロファイル(普通は
default
)を選びます。 - “configuration” タブに移動し右下の"edit profile"をクリックします
- “yaml-configuration” を選択し編集します。
cloud-initの中身の例
文法はyamlですが**cloud-init.user-data
の下に#cloud-config
と書かないと動きません。**
この例では必要なパッケージを入れてユーザーを追加し、ssh周りの設定をしtailscaleを入れています。
config:
cloud-init.user-data: |
#cloud-config
package_upgrade: true
packages:
- openssh-server
- nano
- curl
- wget
- unzip
- nftables
users:
- name: myname
shell: /usr/bin/bash
groups: wheel
ssh-authorized-keys:
- ssh-ed25519 [SSHの公開鍵]
ssh_pwauth: no
runcmd:
- curl -fsSL https://tailscale.com/install.sh | sh
- sed -i -e 's/^#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config
- systemctl reload sshd
保存とインスタンスの作成
編集できたら"save changes"をクリックして保存して、左ナビゲーションバーの"instances"から適当にインスタンスを生やします。
ここで注意ですが全てのイメージ(ディストリビューション)がcloud-initに対応してるわけではありません。Variantが"cloud"のやつを選びましょう。
トラブルシューティング
cloud-initのステータスを確認する
[root@test1 ~]# cloud-init status
status: done
cloud-initのログを見る
/var/log/cloud-init.log
にあります