【ubuntu26.04】Ubuntu 26.04 Server AutoinstallをNginxで配信する

【ubuntu26.04】Ubuntu 26.04 Server AutoinstallをNginxで配信する

はじめに


Ubuntu ServerのAutoinstall を使うと、インストール時のユーザー作成、SSH設定、パッケージ追加、ストレージ構成などを自動化できる。
今回は、Ubuntu 26.04 ServerのAutoinstall設定をISOに直接埋め込まず、NginxからHTTP経由で配信する構成を作成した。
ISO側には起動パラメータで seed URLだけを指定し、`user-dataを変更すればインストール内容を変えられるようにする。
この構成にしておくと、Autoinstallの設定を修正するたびにISOを作り直す必要がない。
最終的に /var/www/autoinstall/ の直下に user-datameta-datavendor-datanetwork-config を配置する構成にする。


全体構成

構成イメージは以下のとおり。

flowchart TB
    VM["Ubuntu 26.04 Server ISOで起動したVM"]

    Nginx["Nginxサーバ
IP: 192.168.11.170
Port: 8080
DocumentRoot: /var/www/autoinstall"] VM -->|HTTP GET
http://192.168.11.170:8080/user-data
http://192.168.11.170:8080/meta-data| Nginx

Autoinstallの設定ファイルは、NginxからHTTPで配信する。

インストール対象のVMは、起動時に指定されたNoCloud datasourceのURLを参照し、そこからuser-datameta-data を取得する。


参考にした公式ドキュメント

主に以下を確認した。

確認したポイントは以下の3つ。

  1. Autoinstallの設定は#cloud-configとトップレベルの autoinstallを使う
  2. autoinstall.version1を指定する
  3. NoCloudはseed URL配下のuser-datameta-data、必要に応じてvendor-datanetwork-configを取得する
  4. GRUBのカーネルパラメータでは;\;としてエスケープする

配信サーバのIPアドレスを固定する

環境に合わせて変更する必要がある。今回の配信サーバは192.168.11.170を使用する。

IPアドレスの固定化は以下記事を参考にしてほしい。

Netplanの設定ファイルを編集する。

sudo vi /etc/netplan/00-installer-config.yaml

設定例は以下。

# This is the network config written by 'subiquity'
network:
  ethernets:
    ens18:
      dhcp4: false
      dhcp6: true
      addresses:
        - 192.168.11.170/24
      routes:
        - to: default
          via: 192.168.11.1
      nameservers:
        addresses:
          - 192.168.11.1
          - 8.8.8.8
      match:
        macaddress: bc:24:11:3b:92:7a
      set-name: ens18
  version: 2

macアドレスなどのインターフェイスは構築環境に合わせる。
設定を反映する。

sudo netplan generate
sudo netplan apply

IPアドレスを変更するとSSHが切断されるため、反映後は192.168.11.170に接続し直す。


Nginxをインストールする

Autoinstallの設定ファイルをHTTPで配信するため、Nginxをインストールする。

sudo apt update
sudo apt install -y nginx

Nginxが起動していることを確認する。

systemctl status nginx

ubuntu@ubuntu-2604-autoinstall:~$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service;
enabled; preset: enabled)
     Active: active (running) since Wed 2026-05-20 23:55:18 JST; 3s ago
 Invocation: dfee0fa447ec449da3a1369df72a04fa
       Docs: man:nginx(8)
    Process: 3098 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 3100 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 3127 (nginx)
      Tasks: 3 (limit: 1923)
     Memory: 3.1M (peak: 7.1M)
        CPU: 27ms
     CGroup: /system.slice/nginx.service
             tq3127 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             tq3129 "nginx: worker process"
             mq3131 "nginx: worker process"

May 20 23:55:18 ubuntu-2604-autoinstall systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
May 20 23:55:18 ubuntu-2604-autoinstall systemd[1]: Started nginx.service - A high performance web server and a reverse proxy server.
ubuntu@ubuntu-2604-autoinstall:~$

Autoinstall用ディレクトリを作成する

Autoinstall設定の配信用ディレクトリを作成する。

sudo mkdir -p /var/www/autoinstall

最終的な配置は以下の形にした。

/var/www/autoinstall/
├── user-data
├── meta-data
├── vendor-data
└── network-config
flowchart TB
    Root["/var/www/autoinstall/"]

    Root --> UserData["user-data
Autoinstall設定本体"] Root --> MetaData["meta-data
NoCloud用メタデータ"] Root --> VendorData["vendor-data
追加設定・ベンダーデータ"] Root --> NetworkConfig["network-config
ネットワーク設定"]

カスタムISOの都合上今回はルート直下を参照する。


user-dataを作成する

user-dataはAutoinstallの本体設定である。

今回は最小構成に寄せた。

vi 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

identity.passwordには平文パスワードではなく、ハッシュ化されたパスワードを指定する。

今回の検証用パスワードはroot123 とした。

ただし、root123は弱いパスワードであるため、本番利用では使わない方がよい。検証用途に限定する。


storage設定の注意点

今回の user-data では、以下のストレージ設定を使っている。

storage:
  layout:
    name: direct

storage.layout.name: directは、インストール対象ディスクを自動で初期化してUbuntuをインストールする設定である。

検証用VMでは扱いやすいが、物理サーバや複数ディスク構成では危険である。

本番環境や複数ディスク環境では、対象ディスクを明示的に指定する設計にした方がよい。


meta-data、vendor-data、network-configを作成する

NoCloud datasource では、seed URL 配下に user-datameta-data が必要になる。

今回は meta-datavendor-datanetwork-config を空ファイルとして作成した。

touch meta-data
touch vendor-data
touch network-config

実装メモ上では、これらは 0 バイトの空ファイルとして配置した。


配信ファイルを配置する

作成したファイルを0644/var/www/autoinstall/に配置する。

sudo install -m 0644 user-data /var/www/autoinstall/user-data
sudo install -m 0644 meta-data /var/www/autoinstall/meta-data
sudo install -m 0644 vendor-data /var/www/autoinstall/vendor-data
sudo install -m 0644 network-config /var/www/autoinstall/network-config

所有者と権限を設定する。

sudo chown -R www-data:www-data /var/www/autoinstall
sudo chmod -R 755 /var/www/autoinstall


Nginxの設定を作成する

Nginxを 8080/tcpで待ち受けさせ、/var/www/autoinstallを配信する。

設定ファイルを作成する。

sudo vi /etc/nginx/sites-available/autoinstall

内容は以下。

server {
    listen 8080;
    server_name _;

    root /var/www/autoinstall;
    autoindex off;

    access_log /var/log/nginx/autoinstall_access.log;
    error_log  /var/log/nginx/autoinstall_error.log;

    location / {
        default_type text/plain;
        try_files $uri =404;
    }

    location ~ /\. {
        deny all;
    }
}

この設定では、/var/www/autoinstall配下のファイルをHTTPで配信する。

また、アクセスログを /var/log/nginx/autoinstall_access.logに分けて出力するようにしている。

Autoinstallトラブルシュートでは、インストーラがどのパスを取りに来ているかを見ることが重要になるため、ログを分けておくと確認しやすい。


Nginx設定を有効化する

作成した設定を有効化する。

sudo ln -sfn /etc/nginx/sites-available/autoinstall /etc/nginx/sites-enabled/autoinstall

デフォルトサイトは不要なので無効化する。

sudo rm -f /etc/nginx/sites-enabled/default

設定ファイルの構文を確認する。

sudo nginx -t

ubuntu@ubuntu-2604-autoinstall:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ubuntu@ubuntu-2604-autoinstall:~$

問題なければ、Nginxを有効化して設定を反映する。

sudo systemctl enable nginx
sudo systemctl reload nginx

Nginxが起動されることを確認する。

ubuntu@ubuntu-2604-autoinstall:~$ sudo systemctl enable nginx
Synchronizing state of nginx.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable nginx
ubuntu@ubuntu-2604-autoinstall:~$ sudo systemctl reload nginx
ubuntu@ubuntu-2604-autoinstall:~$ sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Wed 2026-05-20 23:55:18 JST; 10min ago
 Invocation: dfee0fa447ec449da3a1369df72a04fa
       Docs: man:nginx(8)
    Process: 3864 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS)
   Main PID: 3127 (nginx)
      Tasks: 3 (limit: 1923)
     Memory: 3.6M (peak: 7.1M)
        CPU: 41ms
     CGroup: /system.slice/nginx.service
             tq3127 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             tq3865 "nginx: worker process"
             mq3866 "nginx: worker process"

May 20 23:55:18 ubuntu-2604-autoinstall systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
May 20 23:55:18 ubuntu-2604-autoinstall systemd[1]: Started nginx.service - A high performance web server and a reverse proxy server.
May 21 00:05:12 ubuntu-2604-autoinstall systemd[1]: Reloading nginx.service - A high performance web server and a reverse proxy server...
May 21 00:05:12 ubuntu-2604-autoinstall nginx[3864]: 2026/05/21 00:05:12 [notice] 3864#3864: signal process started
May 21 00:05:12 ubuntu-2604-autoinstall systemd[1]: Reloaded nginx.service - A high performance web server and a reverse proxy server.
ubuntu@ubuntu-2604-autoinstall:~$

配信確認を行う

作業端末から、Nginxで配信しているファイルにアクセスできるか確認する。

今回は作業端末 192.168.11.169から確認した。

curl.exe -s -D - http://192.168.11.170:8080/user-data -o -
curl.exe -s -D - http://192.168.11.170:8080/meta-data -o NUL
curl.exe -s -D - http://192.168.11.170:8080/vendor-data -o NUL
curl.exe -s -D - http://192.168.11.170:8080/network-config -o NUL

Windows端末から実行している場合、出力破棄先はNULでよい。

最終的に、以下のURLがすべて 200 OKになることを確認した。

curl.exe -s -D - http://192.168.11.170:8080/user-data -o -

PS C:\Users\kyoro> curl.exe -s -D - http://192.168.11.170:8080/user-data -o -
HTTP/1.1 200 OK

curl.exe -s -D - http://192.168.11.170:8080/meta-data -o NUL

PS C:\Users\kyoro> curl.exe -s -D - http://192.168.11.170:8080/meta-data -o NUL
HTTP/1.1 200 OK

curl.exe -s -D - http://192.168.11.170:8080/vendor-data -o NUL

PS C:\Users\kyoro> curl.exe -s -D - http://192.168.11.170:8080/vendor-data -o NUL
HTTP/1.1 200 OK

curl.exe -s -D - http://192.168.11.170:8080/network-config -o NUL

PS C:\Users\kyoro> curl.exe -s -D - http://192.168.11.170:8080/network-config -o NUL
HTTP/1.1 200 OK

Ubuntu Server ISOの起動パラメータを指定する

デフォルトのISOを使用している場合はUbuntu Server ISOで起動し、GRUBのカーネルパラメータに以下を追加する。

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

ポイントは、;\;としてエスケープすること。

GRUBのカーネルパラメータでは;が特殊文字として扱われるため、そのまま書くと意図したパラメータとして渡らない可能性がある。

今回はカスタム済みISOを使用しているため自動でインストールが走った。

ISOをカスタムしてGRUBのカーネルパラメータを埋め込む方法は下記を参考にしてほしい。


Nginxログで取得パスを確認する

インストーラを起動したら、Nginx側でアクセスログを確認する。

sudo tail -f /var/log/nginx/autoinstall_access.log

期待するアクセスは以下。

GET /user-data
GET /meta-data
GET /vendor-data
GET /network-config

インストーラ側が掴みに来ると以下のようなログが出力される。

192.168.11.48 - - [21/May/2026:00:11:25 +0900] "GET /network-config HTTP/1.1" 200 0 "-" "Cloud-Init/26.1-0ubuntu2"
192.168.11.48 - - [21/May/2026:00:11:25 +0900] "GET /meta-data HTTP/1.1" 200 0 "-" "Cloud-Init/26.1-0ubuntu2"
192.168.11.48 - - [21/May/2026:00:11:25 +0900] "GET /user-data HTTP/1.1" 200 864 "-" "Cloud-Init/26.1-0ubuntu2"
192.168.11.48 - - [21/May/2026:00:11:25 +0900] "GET /vendor-data HTTP/1.1" 200 0 "-" "Cloud-Init/26.1-0ubuntu2"

Autoinstallがうまく始まらない場合、このログ確認がかなり重要になる。


再現手順まとめ

今回の構成を再現する手順は以下。

1. 配信サーバのIPアドレスを固定する

配信サーバのIPアドレスを 192.168.11.170に固定する。(環境に合わせる)

2. Nginxをインストールする

sudo apt update
sudo apt install -y nginx

3. Autoinstall用ディレクトリを作成する

sudo mkdir -p /var/www/autoinstall

4. seedファイルを配置する

sudo install -m 0644 user-data /var/www/autoinstall/user-data
sudo install -m 0644 meta-data /var/www/autoinstall/meta-data
sudo install -m 0644 vendor-data /var/www/autoinstall/vendor-data
sudo install -m 0644 network-config /var/www/autoinstall/network-config

5. Nginxを起動する

sudo nginx -t
sudo systemctl enable nginx
sudo systemctl reload nginx

6. curlで配信確認する

curl.exe -s -D - http://192.168.11.170:8080/user-data -o -
curl.exe -s -D - http://192.168.11.170:8080/meta-data -o NUL
curl.exe -s -D - http://192.168.11.170:8080/vendor-data -o NUL
curl.exe -s -D - http://192.168.11.170:8080/network-config -o NUL

4ファイルすべてが 200 OK になることを確認する。

7. Ubuntu Server ISOの起動パラメータを指定する


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

今回はカスタム済みのISOを使用しているためGRUB画面は編集を行っていない。手動指定する際は上記を使用する。

8. Nginxログを確認する

sudo tail -f /var/log/nginx/autoinstall_access.log

以下のようなアクセスが出れば、インストーラがNginxへ到達できている。

GET /user-data
GET /meta-data
GET /vendor-data
GET /network-config

セキュリティ上の注意

今回の検証用パスワードは root123である。

これは検証用としては使えるが、本番環境では使うべきではない。

また、HTTPで配信している user-dataにはパスワードハッシュが含まれる。

そのため、この構成は検証ネットワーク限定で使うべきである。

本番寄りにする場合は、少なくとも以下の対策を検討する。

  • Autoinstall完了後にNginxを停止する
  • 配信元セグメントを限定する
  • HTTPS化する
  • SSHパスワードログインではなくSSH鍵ログインにする
  • 初回ログイン後にパスワード変更を必須にする

特に、Autoinstall用のHTTPサーバを常時公開したままにするのは避けた方がよい。


まとめ

Ubuntu 26.04 ServerのAutoinstall設定をNginxで配信することで、ISOを作り直さずにインストール内容を変更できるようになった。

Autoinstall がうまく動かない場合は、まず以下を見るのがよい。

sudo tail -f /var/log/nginx/autoinstall_access.log

今回の構成で自動でのUbuntu26.04デプロイが行えた。

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 *