Debian13でCloudInit+Proxmox
Debian 13でCloud initを使ってProxmox上にPodmanがインストール済みのVMを用意したくなった
多分、GUIからはできない。
頑張ってシェルでやる必要がありそう。
ステップの概要
ステップとしては以下の流れ
1. イメージダウンロード
2. テンプレートVMを作成
3. テンプレートVMへ色々設定
4. cloud-initのyaml作成
5. テンプレートからVMを作成
6. 作成したVMへ色々設定
7. 起動
2回目以降?
同じテンプレート、同じcloud-initでVMを作成するなら、 ステップ:5 からの動作を繰り返すだけで良い。
同じテンプレートで作るだけなら ステップ:4 からの動作を繰り返すだけで良い。
ステップの詳細
まずはイメージダウンロード
code:download.sh
cd /var/lib/vz/template/iso
テンプレートVMを作成+設定
code:create.sh
# VMを作成
qm create 7777 --name debian-13-cloud --memory 4096 --net0 virtio,bridge=vmbr0 --net1 virtio,bridge=vmbr1
# ディスクのインポート
qm importdisk 7777 debian-13-generic-amd64.qcow2 local-zfs
# importing disk 'debian-13-generic-amd64.qcow2' to VM 7777 ...
# transferred 0.0 B of 3.0 GiB (0.00%)
# transferred 30.7 MiB of 3.0 GiB (1.00%)
# transferred 61.7 MiB of 3.0 GiB (2.01%)
# ...
# unused0: successfully imported disk 'local-zfs:vm-7777-disk-0'
# ディスクのアタッチ
qm set 7777 --scsihw virtio-scsi-pci --scsi0 local-zfs:vm-7777-disk-0
# Cloud-initの追加
qm set 7777 --ide2 local-zfs:cloudinit
# ブート設定を追加
qm set 7777 --boot c --bootdisk scsi0
# シリアルコンソールを有効にする
qm set 7777 --serial0 socket --vga serial0
# エージェントを有効にする (やらなくてもいい)
qm set 7777 --agent enabled=1
# テンプレート化
qm template 7777
Cloud-initのファイル作成
code:/var/lib/vz/snippets/podman-init.yml
users:
- name: debian
groups: sudo
shell: /bin/bash
lock_passwd: false
chpasswd:
list: |
debian:debian
expire: false
# cloud-initのデフォルトネットワーク設定を無効化
write_files:
- path: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
permissions: '0644'
content: |
network: {config: disabled}
# カスタムnetplan設定
- path: /etc/netplan/01-netcfg.yaml
permissions: '0644'
content: |
network:
version: 2
renderer: networkd
ethernets:
ens18:
dhcp4: true
dhcp6: false
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
ens19:
dhcp4: false
dhcp6: false
addresses:
- 10.77.70.101/8
# Podmanレジストリ設定
- path: /etc/containers/registries.conf
permissions: '0644'
content: |
# デフォルトのレジストリ設定
registry
prefix = "docker.io"
location = "docker.io"
registry
prefix = "quay.io"
location = "quay.io"
registry
prefix = "ghcr.io"
location = "ghcr.io"
# composeの署名設定
- path: /etc/containers/policy.json
permissions: '0644'
content: |
{
"default": [
{
"type": "insecureAcceptAnything"
}
],
"transports": {
"docker-daemon": {
}
}
}
# 闇ネットとのサブネット衝突回避
- path: /etc/containers/containers.conf
permissions: '0644'
content: |
default_subnet_pools = [
{"base" = "172.20.0.0/16", "size" = 24},
{"base" = "172.21.0.0/16", "size" = 24}
]
# ネットワーク設定を適用してからパッケージをインストール
runcmd:
# 既存のcloud-init netplan設定を削除
- rm -f /etc/netplan/50-cloud-init.yaml
# netplanを適用
- netplan generate
- netplan apply
# 適当に待つ
- sleep 10
# DNS確認
- echo "nameserver 8.8.8.8" > /etc/resolv.conf
- echo "nameserver 8.8.4.4" >> /etc/resolv.conf
# 接続テスト
- ping -c 3 8.8.8.8 || true
- ping -c 3 deb.debian.org || true
# パッケージ更新とインストール
- apt-get update
- apt-get install -y podman buildah skopeo curl wget git vim
# docker-compose v2をインストール
- chmod +x /usr/local/bin/docker-compose
- ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
# Podman設定
- systemctl enable --now podman.socket
- sysctl -w net.ipv4.ip_forward=1
- echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# あとから見られるようにログを出す
- podman --version > /root/podman-version.txt
- podman compose version > /root/podman-compose-version.txt
- docker-compose --version > /root/docker-compose-version.txt
- systemctl status podman.socket > /root/podman-socket-status.txt
- ip addr show > /root/network-status.txt
- cat /etc/resolv.conf > /root/resolv-conf.txt
- cat /etc/netplan/*.yaml > /root/netplan-config.txt
- cat /etc/containers/registries.conf > /root/registries-conf.txt
- df -h > /root/disk-usage.txt
- echo "Setup completed" > /root/cloud-init-done.txt
final_message: "System is ready with Podman installed!"
Podmanが入ったVMを作成
code:create-vm.sh
# VMをクローンから作成
qm clone 7777 701 --name debian-podman-vm --full --storage local-zfs
# Cloud-initの適用
qm set 701 --cicustom "user=local:snippets/podman-init.yml"
# ディスクサイズを適切なサイズへ変更
qm disk resize 701 scsi0 50
# VMの起動 (いろいろが見られるようになるまで5分くらいかかる)
qm start 701
何しているか覗きたくなったら以下で覗ける
多分WebUIからはcloud-initの状態を見られない
code:watch.sh
qm terminal 701
ログイン
ID: debian
PW: debian
rootはログイン不可だが、debianユーザーからのsudoは実行可能
sudo nopasswordにしている
すぐに変えたほうがいい