Ubuntuのサーバー版のインストーラーである
インストールの自動化
第495回でも紹介したように、
しかしながら従来のdebian-installerと比べると、
debian-installerでは第154回の
何台もの物理マシンにUbuntuをインストールするなら、
Ubuntu Weekly Topicsの2020年4月10日号でも紹介しているように、
ちなみにSubiquityはsnapパッケージとして提供されています。つまりUbuntu 18.
簡易的なYAMLファイルで自動インストールを体験
まずは簡易的なYAMLファイルで自動インストールを体験してみましょう。これには公式WikiのQuickStartの手順が参考になります。必要になるのはQEMUが動くUbuntuと開発中のUbuntu 20.
自動インストールの設定を記述するYAMLファイルはcloud-configフォーマットで記述します。また作成したファイルはcloud-initと同じ手順でインストーラーに渡します。cloud-initにおいてコンフィグデータをどこに保存するか、
- SMBIOS
(System Management BIOS) 上のシリアル番号 - カーネルのコマンドラインパラメーター
- ラベル
「cidata」 が付けられたファイルシステム
このうち1は主に仮想マシン向けの機能なので、
必要なパッケージをインストールし、
$ 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フォーマットのファイル
$ 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自動インストールの設定は
- ホスト名を
「ubuntu-server」 にする - ユーザー名を
「ubuntu」 にする - パスワードを
「ubuntu」 にする
それ以外はSubiquityの既定の設定値が使われます。ちなみに
「meta-data」
今回は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://」:cloud-configファイルの場所_gateway:3003/ (データストア) を指定するためのオプション。今回はホスト上にポート3003でHTTPサーバーを立てているため、 仮想マシンのゲストからだと設定のようなURLでアクセスすることになります。
あとはしばらく放置しておけば、qemu-system-x86_コマンドが自動終了しているはずです。
次にインストール後のサーバーを起動してみましょう。
$ qemu-system-x86_64 -enable-kvm -no-reboot -m 1024 \
-drive file=image.qcow2,format=qcow2,cache=none,if=virtioデスクトップ環境なら上記のコマンドでウィンドウが立ち上がり、
今回の設定だとopenssh-serverがインストールされないため、
より本格的なコンフィグを用意する
ConfigReferenceを参考に、
$ cat > www/user-data << 'EOF'
#cloud-config
autoinstall:
version: 1
locale: ja_JP.UTF-8
keyboard:
layout: "jp"
apt:
preserve_sources_list: false
primary:
- arches: [default]
uri: "http://archive.ubuntu.com/ubuntu"
geoip: true
storage:
layout:
name: lvm
identity:
hostname: ubuntu-server
realname: "Mitsuya Shibata"
username: ubuntu
password: "$6$/X6MRgjz4jCIK8.G$FhJbD17m9qTcMA8FHMPcFvp7v2wvgmRBdvdEdTiZXZRwuZFUVsear9.vYY01QcwPuYAMRMvSJoJKfUlaBviU3/"
ssh:
install_server: true
authorized-keys: [ "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAmhhimVNdsJLG3Sc6s3QD0nM5esEjUPQtC1k9b5M8fsp75ZaYhgoE3VUE+vXe5jD0tMlVbrzly4OnghloOgBtmrTqiuC7iUxcfWQ+11b7RI660m43ZQinafobZo7jMHOE2IwLFw5/bj6xm8LiXDn1Y2pA2d13V1f9MPKNexsYeuBfsru4AlwhKifEEjL0PS4saV1tcT1WM3na8jstI6jmdsOQ+cngj8HnpWTg8+YIFe1iqAnIIuFWSKjLqTFrJRIO4pnzNeo0naHqjxVoAytUqjxjXWT093DxW0wDvHUNxRhSwqL6S45ehcD2M7AXszOW2ZbX3i455SB2bClXZHBN2Q== shibata" ]
reporting:
hook:
type: webhook
endpoint: http://_gateway:3003/cgi-bin/done
level: INFO
user-data:
timezone: Asia/Tokyo
EOF注意すべきポイントをいくつか見ていきましょう。
apt:
preserve_sources_list: false
primary:
- arches: [default]
uri: "http://archive.ubuntu.com/ubuntu"
geoip: trueAPTのリポジトリの設定です。これはcurtinのapt関連の設定をそのまま記述します。preserve_」false」/etc/を変更することを示しています。またgeoip」true」
storage:
layout:
name: lvmストレージはケースバイケースで複雑になりがちなので、
ssh:
install_server: true
authorized-keys: [ "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAmhhimVNdsJLG3Sc6s3QD0nM5esEjUPQtC1k9b5M8fsp75ZaYhgoE3VUE+vXe5jD0tMlVbrzly4OnghloOgBtmrTqiuC7iUxcfWQ+11b7RI660m43ZQinafobZo7jMHOE2IwLFw5/bj6xm8LiXDn1Y2pA2d13V1f9MPKNexsYeuBfsru4AlwhKifEEjL0PS4saV1tcT1WM3na8jstI6jmdsOQ+cngj8HnpWTg8+YIFe1iqAnIIuFWSKjLqTFrJRIO4pnzNeo0naHqjxVoAytUqjxjXWT093DxW0wDvHUNxRhSwqL6S45ehcD2M7AXszOW2ZbX3i455SB2bClXZHBN2Q== shibata" ]サーバー用途ならOpenSSHサーバーはインストールしておきたいところでしょう。気をつけなければいけないのは、install-server」install_」
「authorized-keys」
reporting:
hook:
type: webhook
endpoint: http://_gateway:3003/cgi-bin/done
level: INFO「reporting」
前述のPython 3の組み込みサーバーでは--cgi」
$ mkdir www/cgi-bin
$ cat > www/cgi-bin/done << 'EOF'
#!/usr/bin/bash
read -n $CONTENT_LENGTH QUERY_STRING_POST
echo $QUERY_STRING_POST >> installed.json
echo "Content-type: text/plain"
echo ""
echo "OK"
EOF
$ chmod +x www/cgi-bin/done
$ curl -X POST -H "Content-Type: application/json" \
-d '{"key":"value"}' http://localhost:3003/cgi-bin/done
OKインストールの進捗を把握したり、
user-data:
timezone: Asia/Tokyo実はSubiquityにはタイムゾーンを指定するインターフェースが存在しません。そのためautoinstallキー以下でもタイムゾーンは設定できませんuser-data」
他にもearly-commandsやlate-commands、error-commandsによって、snapsやpackagesで、
インストール時に必要な設定はひととおり自動化できるようになっているはずですので、
ちなみにinteractive-sectionsに*」
interactive-sections:
- "*"ただしパスワードなどセンシティブなデータは自動入力されませんので注意してください。
USBスティックからインストールを自動化する
最後にUSBスティックから設定を流し込んでみましょう。
$ sudo apt install cloud-image-utils $ cd www $ cloud-localds ../user-data.img user-data
これで設定入りのイメージファイルを作成できました。これをUSBスティックにddで書き込めば良いのですが、
$ 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 \
-drive file=user-data.img,format=raw注意すべきなのはUSBからだと完全な自動化はできないということです。インストーラーが起動したあとに
もしどうしても自動化したいなら、