Ubuntu Weekly Recipe

第615回 サーバー版インストーラーに導入された自動インストール機能

この記事を読むのに必要な時間:およそ 5.5 分

簡易的なYAMLファイルで自動インストールを体験

まずは簡易的なYAMLファイルで自動インストールを体験してみましょう。これには公式WikiのQuickStartの手順が参考になります。必要になるのはQEMUが動くUbuntuと開発中のUbuntu 20.04 LTSのインストールイメージだけです。

自動インストールの設定を記述するYAMLファイルはcloud-configフォーマットで記述します。また作成したファイルはcloud-initと同じ手順でインストーラーに渡します。cloud-initにおいてコンフィグデータをどこに保存するか,つまりどのデータストアを選択するかは,第561回「ローカルインストール時もcloud-initを活用する」にて解説してるとおり,主に次の3種類です。

  1. SMBIOS(System Management BIOS)上のシリアル番号
  2. カーネルのコマンドラインパラメーター
  3. ラベル「cidata」が付けられたファイルシステム

このうち1は主に仮想マシン向けの機能なので,実機で使うとすれば2か3になるでしょう。2の場合はローカルのファイルシステムだけでなく,ネットワークの先のサーバーも指定可能です。まずは2の方法で試してみましょう。

必要なパッケージをインストールし,ファイルをダウンロードしておきます。

$ mkdir autoinstall && cd $_
$ sudo apt install qemu-system-x86 qemu-utils
$ wget http://cdimage.ubuntu.com/ubuntu-server/daily-live/current/focal-live-server-amd64.iso

cloud-configフォーマットのファイル(user-data)とuser-dataの情報を記述するmeta-dataファイルを作りましょう。

$ mkdir www

$ openssl passwd -6 ubuntu
$6$/X6MRgjz4jCIK8.G$FhJbD17m9qTcMA8FHMPcFvp7v2wvgmRBdvdEdTiZXZRwuZFUVsear9.vYY01QcwPuYAMRMvSJoJKfUlaBviU3/

$ cat > www/user-data << 'EOF'
#cloud-config
autoinstall:
  version: 1
  identity:
    hostname: ubuntu-server
    username: ubuntu
    password: "$6$/X6MRgjz4jCIK8.G$FhJbD17m9qTcMA8FHMPcFvp7v2wvgmRBdvdEdTiZXZRwuZFUVsear9.vYY01QcwPuYAMRMvSJoJKfUlaBviU3/"
EOF

$ touch www/meta-data

自動インストールの設定は「autoinstall」キーに対する値として記述します。Subiquityはこの「autoinstall」キーの有無で自動インストールモードに移行するかどうかを判断しています。個別の設定値の説明は公式WikiのConfigReferenceを参照してください。今回は次のような設定を行っています。

  • ホスト名を「ubuntu-server」にする
  • ユーザー名を「ubuntu」にする
  • パスワードを「ubuntu」にする

それ以外はSubiquityの既定の設定値が使われます。ちなみに「interactive-sections」キーを使うと,⁠cloud-configの設定値を設定した上で,通常のインストールと同じようにユーザーが選択できるようにする」ことも可能です。

「meta-data」はcloud-configファイルのバージョンなどの元になるデータですが,今回は空で作成しておくことにします。

今回はHTTP経由でこれらの設定ファイルを提供することにします。よってPython 3の組み込みHTTPサーバーを起動しておきましょう。

$ cd www
$ python3 -m http.server --cgi 3003

$ curl http://localhost:3003/user-data
(中略)
<li><a href="meta-data">meta-data</a></li>
<li><a href="user-data">user-data</a></li>
(後略)

user-dataが見えていることを確認できました。ちなみに--cgiを付けているのは,後述のレポート機能を使うためです。今のところはあってもなくてもかまいません。

$ sudo mount -r focal-live-server-amd64.iso /mnt
$ qemu-img create -f qcow2 image.qcow2 10G

$ qemu-system-x86_64 -enable-kvm -no-reboot -m 1024 \
    -drive file=image.qcow2,format=qcow2,cache=none,if=virtio \
    -cdrom focal-live-server-amd64.iso \
    -kernel /mnt/casper/vmlinuz \
    -initrd /mnt/casper/initrd \
    -append 'autoinstall ds=nocloud-net;s=http://_gateway:3003/' \
    -nographic
$ sudo umount /mnt

ポイントは-appendで起動パラメーターを指定している部分です。自動インストールのためにふたつパラメーターを追加する必要があります。

  • autoinstall⁠:cloud-configファイルの中にautoinstallキーが存在しているとき,ユーザーの操作なしに自動インストールを開始するためのオプション。言い換えるとこのオプションがないと,画面に「Continue with autoinstall?」と表示されて「yes」と入力しない限り自動インストールが開始しません※2⁠。
  • ds=nocloud-net;s=http://_gateway:3003/⁠:cloud-configファイルの場所(データストア)を指定するためのオプション。今回はホスト上にポート3003でHTTPサーバーを立てているため,仮想マシンのゲストからだと設定のようなURLでアクセスすることになります。
※2
これは自動インストールの設定が入っているUSBスティックを接続した状態で起動してしまうと,意図せず上書きインストールしてしまう危険性があるためです。仮想マシンではなく物理マシンで完全な自動化を目指すなら,ネットブートなどカーネルオプションを変更可能な仕組みから利用することになるでしょう。

あとはしばらく放置しておけば,qemu-system-x86_64コマンドが自動終了しているはずです。

次にインストール後のサーバーを起動してみましょう。

$ qemu-system-x86_64 -enable-kvm -no-reboot -m 1024 \
    -drive file=image.qcow2,format=qcow2,cache=none,if=virtio

デスクトップ環境なら上記のコマンドでウィンドウが立ち上がり,アカウント名がubuntu,パスワードがubuntuでログインできるはずです。

今回の設定だとopenssh-serverがインストールされないため,QEMUのディスプレイウィンドウを立ち上げる必要があります。もしデスクトップ環境のないサーバー上で実行するなら,第595回「リモートデスクトップのためのSPICEクライアントあれこれ」で紹介しているようなSPICE関連のオプションを付けて,リモートデスクトップからアクセスすると良いでしょう。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。