🫙

desktop-ubuntuはGUIでインストールした方が良いわ…

に公開

xubuntuでDesktop Linuxを最近何回も何回もつくってて、飽きてきたので自動化をめざしました。

cloud-initの勉強をかねて色々やってたんですが、途中でめげました。めげるまでのメモです。


Proxmox + Cloud-Init + Xubuntu Cloud ImageでGUI環境を自動構築したい

ProxmoxでUbuntu Cloud Imageを使い、GUI付きのXubuntu環境をCloud-Initで自動構築するのがゴール

やりたいこと

  • Proxmox上で複数台Xubuntu GUI環境を楽に自動構築したい
  • それらは所定のaptをインストールしたり、シェルスクリプトを実行したい
  • SSHキーやユーザー設定をして、GUI起動までをcloud-initで自動化
  • 「ログインして作業」が面倒なので、全部自動で起動するまでにできていてほしい
  • スナップショットは面倒だし、ダサい(?)のでcloud-initをつかってみたかった
  • ログイン画面にIP表示したい

1. Ubuntu Cloud Image (例: noble-server-cloudimg-amd64.img) をDL

https://cloud-images.ubuntu.com/noble/current/ DLして /var/lib/vz/template/cloudimg/ へ置きます

注意点はこれはDiskイメージであり、ISOではないことです。要はSSDです。間違えると面倒です。

あと、もうここでかきますが、サイズを大きくする処理をしないとすぐあふれます。

impoertも必要です

qm importdisk 111 /var/lib/vz/template/cloudimg/noble-server-cloudimg-amd64.img local-lvm

2. VMを作成

  • GUIで作成できるやろ、とおもったらそんなことない

  • 常通りqm create または GUI で作成

  • まずCloudInitドライブを追加はGUIでできる、

  • しかしCloudInitドライブのyamlはGUIで書けない

メモ

イメージをつくった後に、GUIからは "Hardware > Add > CloudInit Drive"

Storage: local (環境依存だとおもいます)
Format: qcow2

3. Cloud-Init スニペット用ストレージ設定

# /etc/pve/storage.cfg

dir: local
    path /var/lib/vz
    content iso,vztmpl,backup,snippets,images

snippets, imagesを追加しないといけない

4. Cloud-Init YAML (スニペット) 作成

これがキモというか、これを書く事だけが面倒だとおもっていた時期が私にもありました。

これが正しく動けば世界は平和。

# /var/lib/vz/snippets/my-xubuntu-cloudinit.yaml
#cloud-config
hostname: xubu-${RANDOM}
users:
  - name: dev
    groups: sudo
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    lock_passwd: false
    passwd: "$6$*****"
    ssh_authorized_keys:
      - ssh-ed25519 ... あなたの公開鍵 ...

package_update: true
package_upgrade: true
packages:
  - xubuntu-desktop
  - lightdm
  - wget
  - sudo
  - openssh-server
  - cloud-guest-utils

runcmd:
  - systemctl enable lightdm
  - sed -i 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
  - systemctl restart ssh
  - bash -c 'echo "IP Address: $(hostname -I)" >> /etc/issue'

タイミング問題がシビアで、何をやるにしてもちゃんと前のものがおわっているのか謎だった。

Indentがまちがってると、構文エラーを教えてくれるわけでもなく、エラーでツールがおちます。

5. Cloud-Init YAML を VMに適用

yaml適用はCLIです!!!

vi /var/lib/vz/snippets/my-xubuntu-cloudinit.yaml
qm set 111 --cicustom "user=local:snippets/my-xubuntu-cloudinit.yaml"
qm shutdown 111
qm start 111

あるとつまるハマりポイント

  • パスワードはsha512で生成する、mkpasswd をつかうだけだが、なぜか、 apt だと whoisに同梱されている

  • lightdm を入れ忘れるとGUIが起動しない, タイミングがシビア

  • パッケージが空きすぎてdpkg が失敗するとGUIが入らない Proxmox側で先にVMディスクを拡張しておこう

  • GUIの "Regenerate Image" は CLI ではこれ:

  • `qm cloudinit update 111``

qm config 111

をつかって設定されているかだけはみましょう

結果

できたこと

  • 自動ブートした、インストーラーをスキップできた
  • SSHキーが自動設定された(が、GitHubから引くのはタイミングがシビアなのか失敗)
  • /etc/issue に IP も表示された

めげたこと

  • GUI(Xubuntu + LightDM)の用意(タイミング問題があり、ログインして作業したほうがはやい、本末転倒)
  • 各種開発ツールのインストール
  • ホスト名のランダマイズ
  • GUIだけで完結する世界

終わりに

ProxmoxはGUIですべてやりたくなりますが、結局CLIが速い。

そしてProxmoxはバグ?仕様?が結構あるので、完全自動化は闇深い。

でもこれが完成したら本当に楽なんだよなあ…。

今回はあきらめましたが(自動化する手間が、手で組んだ後にスナップショットとったほうが速いのは本末転倒)、またリトライしたいですね。

Discussion