Proxmox VEでUbuntu 24.04 LTSを非対話インストールする

カテゴリ: 未分類

UbuntuをProxmox VEにインストールするとき、毎回GUIで設定するのは手間がかかります。
UbuntuのCloud Imageとcloud-initを使って、完全非対話でVMを構築したので、その時の手順を備忘録として書いておきます。

SSH keyでログイン可能・sudoパスワードなし・Proxmox UIでIPが見える状態で起動完了まで自動化しています

1. 事前準備

snippetsを有効化する(最初の一回だけ)

cloud-initの設定ファイル(YAML)は snippets に保存します。
Proxmoxインストール直後はsnippetがなかったので、ローカルストレージにsnippetsタイプを追加しておきます。
コマンドを実行するとWebUIからもsnippetsが作られたことが確認できます。

pvesm set local --content iso,backup,vztmpl,snippets

2. Ubuntu Cloud Image をダウンロード

Ubuntu Cloud Image は、クラウド環境向けに最小構成で作られた公式イメージです。
Proxmoxでは、このイメージをそのままVMのベースディスクに使えます。

cd /var/lib/vz/template/iso
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img -O ubuntu-24.04-cloudimg-amd64.img

# 確認
ls -lh /var/lib/vz/template/iso

出力例:

-rw-r--r-- 1 root root 592M Oct  2 03:43 ubuntu-24.04-cloudimg-amd64.img

3. cloud-init の設定ファイルを作成

SSHでログインできる最小構成でcloud-initの設定ファイルを作っておきます。
公開鍵ログイン・パスワードなしでsudoできる設定で、ProxmoxからIPが見えるようqemu-guest-agentも自動導入します。
ユーザ名はappにしておきます。

ssh_authorized_keysの中は、ssh-keygenコマンドなどであらかじめ公開鍵を作成しておき、public keyを指定します。

cat >/var/lib/vz/snippets/cloud-init_ubuntu-minimal.yaml <<'YAML'
#cloud-config
package_update: false
package_upgrade: false

users:
  - name: app
    groups: sudo
    shell: /bin/bash
    lock_passwd: false
    ssh_authorized_keys:
      - "ssh-..."

write_files:
  - path: /etc/sudoers.d/99-app-nopasswd
    permissions: '0440'
    content: |
      app ALL=(ALL) NOPASSWD:ALL

runcmd:
  - |
    apt-get update
    apt-get install -y qemu-guest-agent
    echo "This VM was configured automatically on $(date '+%Y-%m-%d %H:%M:%S') UTC by CLOUD-INIT. IP: $(hostname -I | awk '{print $1}')" > /etc/issue
YAML

cat /var/lib/vz/snippets/cloud-init_ubuntu-minimal.yaml

ポイント
- ssh_authorized_keys に自分の公開鍵を登録しておく
- /etc/issue に生成日時とIPを表示(Proxmoxのコンソールで見やすい)
- qemu-guest-agent がインストールされるので、Web UI の Summaryタブで IP が表示されるようになる


4. VMを作成する

WebUIから操作すると面倒なので、Consoleから作成します。
ここでは例としてVM IDを220とします。数字は空いているIDでOKです。

# 既存VMがあれば削除(再作成の時)
# qm destroy 220

# 新規作成
qm create 220 --name ubu2510 --memory 4096 --cores 2 --net0 virtio,bridge=vmbr0

# ディスクをCloud Imageから作成して接続
qm importdisk 220 /var/lib/vz/template/iso/ubuntu-24.04-cloudimg-amd64.img local-lvm
qm set 220 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-220-disk-0
qm set 220 --bootdisk scsi0
qm set 220 --boot order=scsi0
qm resize 220 scsi0 32G

# cloud-initの設定があるドライブを追加
qm set 220 --ide2 local-lvm:cloudinit
qm set 220 --cicustom "user=local:snippets/cloud-init_ubuntu-minimal.yaml"

# 固定IP設定(自宅の環境に応じて変更する)
qm set 220 --ipconfig0 ip=192.168.1.220/24,gw=192.168.1.1

# QEMU Guest Agentを有効化(Proxmox UIでIPが見えるようにする)
qm set 220 --agent enabled=1

# 起動前確認
qm config 220

5. VMを起動

qm start 220

起動後しばらく待ってから手元の環境にて、以下のコマンドでログインできれば成功です。

ssh -i ~/.ssh/id_rsa app@192.168.12.220

6. GUI環境を入れたい場合(任意)

後からGUIを追加することもできます。
最小構成でGNOMEだけ入れたい場合は以下のコマンドでOKです。
自動でここまでセットアップしたい場合はyamlのruncmdに書いておきます。
再起動されるので、最後に書いておくと良いです。

sudo env DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a \
  apt-get -o Dpkg::Options::="--force-confdef" \
          -o Dpkg::Options::="--force-confold" \
          install -y ubuntu-desktop-minimal gdm3

Tips

  • /etc/issue に IP と構築日時を出すことで、Webコンソールで一目で状態確認可能
  • qemu-guest-agent を入れると、ShutdownReboot も Proxmox UI から安全に操作可能
  • SSHログイン後にパスワードを設定したい場合はsudo passwd appで設定する

その他、よく使うソフトのインストールコマンド

# gh
sudo apt-get install -y curl
type -p curl >/dev/null || sudo apt install curl -y
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null

sudo apt install -y gh
gh --version


# Docker
curl -fsSL https://get.docker.com | sudo sh
sudo systemctl start docker
sudo usermod -a -G docker app
sudo docker run hello-world
# VSCode, Chromium, Alacritty
sudo snap install --classic code
sudo snap install chromium
sudo apt install -y alacritty

# modern cli commands
sudo apt-get install -y git eza ripgrep btm neovim

# TypeScript
sudo apt-get install -y nodejs npm
npm install -g typescript
関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です