手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 Autoinstall 自動インストール – クリーンインストールを再現可能にする

Ubuntu Server 22.04 の Autoinstall は、サーバーを手動インストールではなく、定義ファイルをもとに自動インストールする仕組みです。サーバー管理ではインプレースアップグレードよりクリーンインストールを推奨したいので、Autoinstall はそのための重要な入口になります。

Autoinstall の位置づけ

Autoinstall は、Ubuntu Server Installer である Subiquity と cloud-init を使って、インストール時の設定を自動化します。OS インストール、ユーザー、SSH、ネットワーク、ストレージなどを user-data に定義します。

要素役割
SubiquityUbuntu Server のインストーラー
cloud-init初期設定データを読み込んで適用する仕組み
user-data自動インストールの設定本体
meta-dataNoCloud datasource 用のメタ情報。空ファイルでもよい
NoCloud / NoCloud-Netローカルまたは HTTP で user-data を渡す方式

なぜ Autoinstall を使うのか

サーバー管理では、OS を長く継ぎ足して使うより、必要なタイミングでクリーンインストールし、構成管理を再適用できる方が健全です。Autoinstall は、そのクリーンインストールを手作業から定義ファイル化するための仕組みです。

  • パーティション構成をファイルで定義できる。
  • ユーザー、SSH、ネットワーク、パッケージを初期状態から揃えられる。
  • インストール結果を再現しやすい。
  • Ansible などの構成管理へ自然につなげられる。
  • 手動インストールの揺らぎを減らせる。

基本構成

ここでは Web サーバーで user-datameta-data を配布し、インストーラー起動時に ds=nocloud-net;s=... で参照させる構成にします。

/var/www/html/autoinstall/
├── meta-data
└── user-data

meta-data の作成

meta-data は NoCloud datasource が参照するファイルです。最低限、空ファイルとして作成できます。

sudo mkdir -p /var/www/html/autoinstall
sudo touch /var/www/html/autoinstall/meta-data

パスワードハッシュの作成

user-data には平文パスワードではなく、ハッシュ化したパスワードを記載します。

openssl passwd -6 -salt $(openssl rand -hex 8) 'password'

user-data の例

以下は、シングルディスク、LVM、SSH 有効化を前提にした最小寄りの例です。デバイス名、ネットワークインターフェイス名、ユーザー名、公開鍵は環境に合わせて変更します。

sudo tee /var/www/html/autoinstall/user-data <<'EOF'
#cloud-config
autoinstall:
  version: 1
  locale: en_US.UTF-8
  keyboard:
    layout: jp
  identity:
    hostname: ubuntu-2204
    username: myadmin
    realname: myadmin
    password: "$6$replace-with-generated-password-hash"
  ssh:
    install-server: true
    allow-pw: true
    authorized-keys: []
  network:
    version: 2
    ethernets:
      enp1s0:
        dhcp4: true
  storage:
    config:
      - type: disk
        id: disk-vda
        path: /dev/vda
        ptable: gpt
        wipe: superblock
        preserve: false
        grub_device: false
      - type: partition
        id: partition-efi
        device: disk-vda
        size: 1G
        flag: boot
        grub_device: true
        wipe: superblock
      - type: format
        id: format-efi
        volume: partition-efi
        fstype: fat32
      - type: mount
        id: mount-efi
        device: format-efi
        path: /boot/efi
      - type: partition
        id: partition-boot
        device: disk-vda
        size: 2G
        wipe: superblock
      - type: format
        id: format-boot
        volume: partition-boot
        fstype: ext4
      - type: mount
        id: mount-boot
        device: format-boot
        path: /boot
      - type: partition
        id: partition-lvm
        device: disk-vda
        size: -1
        wipe: superblock
      - type: lvm_volgroup
        id: vg0
        name: vg0
        devices:
          - partition-lvm
      - type: lvm_partition
        id: lv-root
        name: root
        volgroup: vg0
        size: -1
        wipe: superblock
      - type: format
        id: format-root
        volume: lv-root
        fstype: ext4
      - type: mount
        id: mount-root
        device: format-root
        path: /
  updates: security
EOF

手動インストール結果をテンプレートにする

Autoinstall の storage は書式が複雑になりやすいです。最初は一度手動インストールし、/var/log/installer/autoinstall-user-data をテンプレートとして確認すると現実的です。

cat /var/log/installer/autoinstall-user-data

特に、ディスクデバイス名、NIC 名、UEFI / BIOS、LVM 構成は環境差が出ます。サーバーごとに同じ定義を使い回す場合は、ハードウェア差分をどう吸収するかを設計する必要があります。

インストーラー起動時の指定

インストーラーの GRUB 画面で編集モードに入り、カーネルパラメータに autoinstall と NoCloud-Net の datasource を指定します。

linux /casper/vmlinuz ip=dhcp autoinstall ds="nocloud-net;s=http://10.0.51.71/autoinstall/"

シリアルコンソールを使う場合は、必要に応じて console=ttyS0 などを追加します。

linux /casper/vmlinuz ip=dhcp autoinstall ds="nocloud-net;s=http://10.0.51.71/autoinstall/" console=ttyS0

注意点

  • user-datameta-data が HTTP で取得できることを事前に確認する。
  • インストール対象ディスクを間違えるとデータを消す。検証環境で十分に確認する。
  • Ubuntu 22.04.3 付近では NoCloud の hi 引数に関する既知の注意があるため、単純な ds=nocloud-net;s=... の形から始める。
  • storage 定義は複雑なので、最初から複数ディスクや特殊構成を狙いすぎない。
  • Autoinstall は OS 初期構築までに絞り、詳細設定は Ansible などへ分離する。

Ansible との役割分担

Autoinstall は、OS を起動可能な状態にするための入口です。すべての設定を Autoinstall に詰め込むより、OS インストール、初期ユーザー、SSH、基本ストレージまでを Autoinstall に任せ、その後の詳細設定は Ansible などの構成管理で適用する方が管理しやすいです。

領域担当
OS インストールAutoinstall
初期ユーザー / SSHAutoinstall
基本ネットワークAutoinstall または初期 Ansible
ミドルウェア設定Ansible
アプリケーション設定Ansible
データ移行個別手順または専用ジョブ

まとめ

Ubuntu Server 22.04 の Autoinstall は、サーバーをクリーンインストール前提で再現可能にするための仕組みです。インプレースアップグレードで状態を継ぎ足すより、Autoinstall で OS を作り直し、Ansible などで構成を再適用する方が、サーバー管理としては健全です。

ポイントは、Autoinstall にすべてを詰め込まないことです。OS インストールに必要な最低限を定義し、アプリケーションや運用設定は構成管理へ分離すると、再構築しやすいサーバーになります。

Ubuntu 22.04 Autoinstall 自動インストール – クリーンインストールを再現可能にする

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る