100台のサーバー構築における「次へ – 次へ – 完了」という悪夢
キャリアを始めたばかりの頃、忘れられないタスクがありました。ある日の午後、開発チームに引き渡すために20台以上の物理サーバーにOSをインストールするという仕事です。当時は手作業しか知らず、USBを差し込み、言語を選択し、パーティションを分割し、ユーザー名とパスワードを設定する……という作業を20回繰り返しました。結果、5時間以上かかり、目は疲れ果て、最悪なことに疲労によるタイポで2台のサーバーのホスト名を間違えて設定してしまいました。
実験室(ラボ)の管理、クラウドインフラの運用、あるいはテスト用に数十台のVMを素早く作成する必要がある場合、一歩ずつクリックして進めるのは時間の無駄です。Ubuntu Autoinstall(Subiquityとcloud-initベース)は、まさに救世主です。このツールを使えば、すべての設定を1つのファイルで定義できます。ISOをマウントして起動し、コーヒーを淹れに行くだけで、5分後にはサーバーの準備が整っています。
クイックスタート:5分でAutoinstallを試してみる
その威力を実感するために、最小限の設定ファイルを作成してみましょう。このファイルは、言語、キーボードレイアウト、管理者ユーザーを自動的に設定するため、手を動かす必要はありません。
以下の内容で user-data ファイルを作成します:
#cloud-config
autoinstall:
version: 1
identity:
hostname: itfromzero-server
password: "$6$exDY1SdbMBRfv89B$2lsE9mU78788.16n9E.D0bw9.6.D0bw9.6.D0bw9.6"
realname: IT Admin
username: itadmin
locale: en_US.UTF-8
keyboard:
layout: us
ssh:
install-server: true
allow-pw: true
storage:
layout:
name: direct
重要な注意点: セキュリティのため、ファイル内のパスワードはハッシュ形式である必要があります。このハッシュ文字列は、Pythonのワンライナーで簡単に生成できます:python3 -c 'import crypt; print(crypt.crypt("mypassword", crypt.mksalt(crypt.METHOD_SHA512)))'。
最も手軽なテスト方法は、KVM/QEMUやVMwareを使用することです。この user-data ファイルをセカンダリドライブ(NoCloudデータソース)としてアタッチするだけです。Ubuntu ServerのISOを起動すると、システムが自動的にこのファイルを検出し、最初から最後までインストールプロセスを自動化します。
動作の仕組み:なぜAutoinstallは強力なのか?
20.04 LTS以降、Ubuntuは古くなった Debian Installer (preseed) を廃止し、Subiquity に移行しました。最大のアップグレードポイントは、読みやすいYAML形式の採用と、cloud-init による高度なカスタマイズ性です。
1. user-dataファイル:システムの心臓部
これは将来のサーバーの設計図です。ディスクパーティションの分割からソフトウェアのインストールまで、あらゆる指示が含まれます。標準的な設定ファイルは、必ず #cloud-config という行で始まる必要があります。
2. 欠かせないコンポーネント
- storage: ディスク構成を決定します。
layout: directでディスク全体を使用することも、専門的なサーバー向けに複雑なLVMやRAIDを構成することも可能です。 - identity: ホスト名やログイン情報など、サーバーの識別情報を宣言します。
- packages: 初回起動時に
vim、git、docker-ceなどのツールを自動的にインストールします。 - late-commands: 再起動前の「仕上げ」コマンドです。GitHubからSSHキーをダウンロードしたり、インストール完了時にTelegramへ通知を送信したりするのに使用できます。
応用編:「差すだけで動く」カスタムISOのビルド
仮想ドライブ経由で設定ファイルを提供するのは、時として手間がかかります。よりプロフェッショナルな方法として、設定ファイルを元のISOファイルに直接埋め込んでみましょう。これにより、1本のUSBメモリだけであらゆる物理サーバーを「一掃」できるようになります。
カスタムISOのビルド手順は通常、以下のようになります:
# 1. 元のISOを解凍する(例:22.04.3)
mkdir -p /tmp/iso
7z x ubuntu-22.04.3-live-server-amd64.iso -o/tmp/iso
# 2. 設定ファイルをnocloudディレクトリに配置する
mkdir -p /tmp/iso/nocloud
cp my-user-data /tmp/iso/nocloud/user-data
touch /tmp/iso/nocloud/meta-data
# 3. grub.cfgのブートパラメータを編集する
# インストーラーにデータの取得先を教えるために 'autoinstall ds=nocloud;s=/cdrom/nocloud/' を追加
sed -i 's/---/autoinstall ds=nocloud;s=\/cdrom\/nocloud\/ ---/g' /tmp/iso/boot/grub/grub.cfg
# 4. xorrisoでISOを再パッケージ化する
ヒント:長いxorrisoコマンドを打つのが面倒な場合は、GitHubにある ubuntu-autoinstall-generator というツールを探してみてください。これを使えば、コマンド一行でISOのパッケージ化ができ、大幅な時間の節約になります。
トラブルを避けるための実践的なアドバイス
数多くの実戦投入を経て、初心者が陥りやすいミスを防ぐための4つの重要な注意点をまとめました:
YAMLの構文に注意
YAMLは空白(インデント)に非常に厳格です。スペースが1つ多いだけでインストーラーが停止し、手動介入を求められます。ビルド前に必ずオンラインのLinterでファイルをチェックしましょう。
パスワードよりSSHキーを優先
セキュリティと管理のしやすさのため、設定ファイル内でSSHキーを宣言しましょう。これにより、複雑なハッシュパスワードを覚えることなく、すぐにサーバーへSSH接続できるようになります。
ssh:
install-server: true
authorized-keys:
- ssh-rsa AAAAB3Nza... user@itfromzero
静的ネットワーク設定を忘れない
DHCPがないデータセンター環境では、IP取得を試みる際にサーバーがハングアップします。インストールをスムーズに進めるために、networkセクションで具体的なスタティックIPを指定してください。
late-commandsでエージェントを導入
私はよく late-commands を使って Zabbix Agent や Prometheus Exporter をインストールします。これにより、インストール完了と同時に監視ダッシュボードにサーバーが自動で表示され、後設定が不要になります。
late-commands:
- curtin in-target -- target apt-get update
- curtin in-target -- target apt-get install -y qemu-guest-agent
まとめると、Ubuntu Autoinstallは大規模システムのためだけのものではありません。たとえ2〜3台のサーバーであっても、標準的な設定ファイルを作成しておくことで、環境の一貫性を保ち、プロフェッショナルな運用が可能になります。繰り返しの作業は機械に任せ、自分はもっと面白い研究に時間を使いましょう。

