【Ubuntu26.04】Ubuntu 26.04 LTSの最小構成をAutoinstallで自動インストールする

【Ubuntu26.04】Ubuntu 26.04 LTSの最小構成をAutoinstallで自動インストールする

この記事では、Proxmox VE上にUbuntu Server 26.04 LTSの検証用VMを作り、Ubuntu InstallerのAutoinstallを使って最小構成で自動インストールする。

この記事でやること

  • Ubuntu 26.04 LTS Server ISOをProxmoxに配置する
  • Windows PC上のPowerShellワンライナーでuser-dataとmeta-dataをHTTP配信する
  • Proxmox VEで検証用VMを作成する
  • セットアップ画面にてAutoinstallを開始する

前提

今回の環境は次のとおり。

項目
Proxmox VE9.1.1
Proxmox 管理 URLhttps://192.168.11.99:8006
Proxmox ノード名pve
UbuntuRHEL 9.7
RHEL ISOubuntu-26.04-live-server-amd64.iso
VM 名ubuntu-2604-autoinstall
VM ID102
CPU2 cores
メモリ4096 MiB
ディスク40 GiB
ISO ストレージlocal
VM ディスクストレージlocal-lvm
ネットワークDHCP
Autoinstall配信端末192.168.11.170
タイムゾーンAsia/Tokyo
キーボード日本語

UbuntuのAutoinstallは、公式ドキュメント上でもHTTPでuser-dataとmeta-dataを配信し、カーネル引数にautoinstall ds=nocloud-net;s=http://…/を指定する形が案内されている。

参考:

パスワードの扱い

Autoinstallのidentity.passwordには平文パスワードではなく、crypt形式の値を指定する。今回は検証用パスワードとしてroot123を使い、Autoinstallにはそのcrypt値を設定する。

crypt値は次のように生成できる。

openssl passwd -6

今回生成した値は次のとおり。

$6$TqiSqYot.ycTffeq$Lv8kUve3numOm5TKzQA5kwDo4mMY.SmbtBmgAnTXahLPSwlJ/1oTRJZKibXq5m99J/2jqbin/FTMqxJ3ArKAv/

Windows PowerShellワンライナーでAutoinstallをHTTP配信する

Windows PCのIPアドレスを確認する。

ipconfig

Proxmox側のVMから到達できるLAN側IPを使う。今回のWindows PCでは192.168.11.170だった。

ゴリ押しではあるがワンライナーで設定ファイルを配信する

次のPowerShellワンライナーは、一時フォルダにuser-dataとmeta-dataを作成し、ポート8080でHTTP配信する。PowerShellのhere-stringは1行に潰すと壊れるため、ここでは配列を改行で結合する形にしている。

identity.passwordには平文ではなくcrypt値を入れる。

$port=8080;$root=Join-Path $env:TEMP "ubuntu-2604-autoinstall";New-Item -ItemType Directory -Force $root|Out-Null;$ud=@("#cloud-config","autoinstall:","  version: 1","  locale: ja_JP.UTF-8","  keyboard:","    layout: jp","    variant: `"`"","  timezone: Asia/Tokyo","  source:","    id: ubuntu-server-minimal","  identity:","    hostname: ubuntu-2604-autoinstall","    username: ubuntu","    password: `"`$6`$TqiSqYot.ycTffeq`$Lv8kUve3numOm5TKzQA5kwDo4mMY.SmbtBmgAnTXahLPSwlJ/1oTRJZKibXq5m99J/2jqbin/FTMqxJ3ArKAv/`"","  ssh:","    install-server: true","    allow-pw: true","  apt:","    mirror-selection:","      primary:","        - uri: `"http://jp.archive.ubuntu.com/ubuntu`"","          arches: [amd64]","        - uri: `"http://archive.ubuntu.com/ubuntu`"","          arches: [amd64]","    fallback: offline-install","    geoip: false","  storage:","    layout:","      name: direct","  packages:","    - qemu-guest-agent","  late-commands:","    - curtin in-target -- systemctl enable qemu-guest-agent","  updates: security","  shutdown: reboot") -join [Environment]::NewLine;[IO.File]::WriteAllText((Join-Path $root "user-data"),$ud,[Text.UTF8Encoding]::new($false));[IO.File]::WriteAllText((Join-Path $root "meta-data"),"",[Text.ASCIIEncoding]::new());$listener=[Net.Sockets.TcpListener]::new([Net.IPAddress]::Any,$port);$listener.Start();"Serving $root at http://0.0.0.0:$port/";while($true){$client=$listener.AcceptTcpClient();try{$stream=$client.GetStream();$reader=[IO.StreamReader]::new($stream,[Text.Encoding]::ASCII,$false,1024,$true);$request=$reader.ReadLine();do{$header=$reader.ReadLine()}while($header);$path="/user-data";if($request -match '^\S+\s+([^\s]+)'){$path=$Matches[1]};$name=[Uri]::UnescapeDataString($path.Split('?')[0].TrimStart('/'));if([string]::IsNullOrWhiteSpace($name)){$name="user-data"};$file=Join-Path $root $name;if(Test-Path $file){$body=[IO.File]::ReadAllBytes($file);$head=[Text.Encoding]::ASCII.GetBytes("HTTP/1.1 200 OK`r`nContent-Type: text/plain`r`nContent-Length: $($body.Length)`r`nConnection: close`r`n`r`n");$stream.Write($head,0,$head.Length);$stream.Write($body,0,$body.Length)}else{$body=[Text.Encoding]::UTF8.GetBytes("not found");$head=[Text.Encoding]::ASCII.GetBytes("HTTP/1.1 404 Not Found`r`nContent-Type: text/plain`r`nContent-Length: $($body.Length)`r`nConnection: close`r`n`r`n");$stream.Write($head,0,$head.Length);$stream.Write($body,0,$body.Length)}}finally{$client.Close()}}

別ターミナルから疎通確認する。

PS C:\Users\kyoro> curl.exe http://192.168.11.170:8080/user-data

期待する結果は、#cloud-configから始まるAutoinstall設定が返ること。

PS C:\Users\kyoro> curl.exe http://127.0.0.1:8080/user-data
#cloud-config
autoinstall:
 version: 1
 locale: ja_JP.UTF-8
 keyboard:
 layout: jp
 variant: ""
 timezone: Asia/Tokyo
 source:
 id: ubuntu-server-minimal
 identity:
 hostname: ubuntu-2604-autoinstall
 username: ubuntu
 password: "$6$TqiSqYot.ycTffeq$Lv8kUve3numOm5TKzQA5kwDo4mMY.SmbtBmgAnTXahLPSwlJ/1oTRJZKibXq5m99J/2jqbin/FTMqxJ3ArKAv/"
 ssh:
 install-server: true
 allow-pw: true
 apt:
 mirror-selection:
 primary:
 - uri: "http://jp.archive.ubuntu.com/ubuntu"
 arches: [amd64]
 - uri: "http://archive.ubuntu.com/ubuntu"
 arches: [amd64]
 fallback: offline-install
 geoip: false
 storage:
 layout:
 name: direct
 packages:
 - qemu-guest-agent
 late-commands:
 - curtin in-target -- systemctl enable qemu-guest-agent
 updates: security
 shutdown: reboot

Windows Defender Firewallでポート8080の受信がブロックされる場合は、プライベートネットワークで許可する。

ProxmoxでVMを作成する

Proxmox VEの管理画面を開き、VMを作成する。

VM作成ウィザードでは、以下のように指定する。

画面設定
GeneralVM 名: ubuntu-2604-autoinstall
OSlocal からubuntu-26.04-live-server-amd64.isoを選択
System基本はデフォルト
DisksStorage: local-lvm、Size: 40 GiB。バスは VirtIO Block または SCSI
CPU2 cores
Memory4096 MiB
NetworkBridge は環境に合わせる。Model は VirtIO

起動パラメータにAutoinstall URLを指定する

VMを起動し、Ubuntuのインストール画面が表示されたら、eキーを押す。

linux または linuxefiで始まる行の末尾に、次のようなパラメータを追加する。

autoinstall ds=nocloud-net\;s=http://192.168.11.170:8080/

入力後は Ctrl + X または F10 で起動する。

インストール後の確認

インストールが完了するとVMが再起動する。

ユーザ名ubuntu、パスワードroot123でログインし、ubuntuのバージョンを確認する。

cat /etc/os-release

実行結果:

PRETTY_NAME="Ubuntu 26.04 LTS"
NAME="Ubuntu"
VERSION_ID="26.04"
VERSION="26.04 (Resolute Raccoon)"
VERSION_CODENAME=resolute
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=resolute
LOGO=ubuntu-logo

トラブルシュート

user-dataが取得されない場合は、まずProxmoxホストからWindows PCのHTTPサーバーへ到達できるか確認する。

curl http://192.168.11.170:8080/user-data

#cloud-configが返らない場合、Windows Defender Firewall、IPアドレス違い、ポート違いを確認する。

まとめ

Windows PCからPowerShellだけでuser-dataとmeta-dataを配信し、Proxmox側ではISO内のvmlinuz/initrdを使って起動引数を渡すと、検証用VMをかなり少ない資材で自動インストールできる。

まずこの最小構成で成功させてから、配信用サーバ、固定IP、SSH公開鍵、パッケージ追加、初期設定スクリプトへ広げるのが扱いやすい。

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *