はじめに
以前「Ubuntu Server 20.04の自動インストール機能でネットワークインストールする。」の記事を投稿しましたが、Ubuntu Server 20.10
でも試してみました。
先に前回実施したUbuntu Server 20.04
と異なる点だけ書いておくと、Ubuntu Server 20.04
ではcloud-init
のuser-data
にアドレス設定を記載しても反映されず、late-commands
で無理やり対応させていましたが、Ubuntu Server 20.10
ではuser-data
に記載したアドレス情報が反映されるようになり、ようやく本来あるべき姿になりました。
アドレス設定以外は、ほぼ前回の記事の転載となりますのでご了承下さい。
この記事は以下記事の続きとなります。
PXEサーバの構築は前回の記事をご確認下さい。
CentOS8をKickstartでネットワークインストールする場合は以下の記事をご確認下さい。
注意点
- Ubuntu Desktop版は今回の方法では自動インストールできません。
構成
VirtualBoxに以下構成の仮想マシンを作成しました。
PXEサーバは以前の記事で作成したPXEサーバを使用しているため、以下PXEサーバ側の操作はVirtualBox上CentOS8での操作となります。
なお、メモリは3GB以上、できれば4GB以上のメモリを割り当てて下さい。
・自動インストール対象マシン構成
構成 | 種別 |
---|---|
CPU | 1 vCPU |
メモリサイズ | 4096 MB |
ストレージ | 20.00 GB |
ネットワーク1 | ホストオンリーアダプター |
ネットワーク2 | NAT |
・PXEサーバディレクトリ構成
ディレクトリ | パス |
---|---|
TFTPディレクトリ | /tftpboot |
HTTPディレクトリ | /pxeboot |
・アドレス構成
対象 | アドレス |
---|---|
PXEサーバ | 192.168.56.105 |
自動インストール対象マシン | 192.168.56.130 |
※自動インストール対象マシンのアドレスは自動インストール後のアドレスです。
構築の流れ
PXEサーバは構築済みの前提となります。
・PXEサーバ側手順
- Ubuntu Server 20.10のISOファイル転送
- Ubuntu Server 20.10のカーネルイメージのコピー
- TFTPブート構成ファイルの作成
- Cloud-init用ファイルの作成
- 自動インストール用ディレクトリ作成
- meta-dataファイル作成
- user-dataファイル作成
・自動インストール対象マシン側手順
- 自動インストール対象マシンの設定
- 自動インストール
Ubuntu Server 20.10の自動インストール機能について
Ubuntu Server 20.10
の自動インストールでは、前述の通りcloud-init
を使用するため、user-data
ファイルとmeta-data
ファイルが必要となります。
Ubuntu Server 20.10のISOファイル転送
CANONICALのサイトよりUbuntu Server 20.10
をダウンロードし、ダウンロードしたISOファイル(ubuntu-20.10-live-server-amd64.iso)をPXEサーバ以下のディレクトリに転送します。
ファイル | パス |
---|---|
ISOファイル | /pxeboot/ubuntu-20.10-live-server-amd64.iso |
Ubuntu Server 20.10のカーネルイメージのコピー
先ほど転送したISOファイルをマウントしてUbuntu Server 20.10
のカーネルイメージを取得します。
sudo mkdir /tftpboot/Ubuntu
sudo mount -t iso9660 -o loop ubuntu-20.10-live-server-amd64.iso /mnt
sudo cp /mnt/casper/{vmlinuz,initrd} /tftpboot/Ubuntu
sudo umount /mnt
TFTPブート構成ファイルについて
PXEブートする際に取得するブート構成ファイルの名前は決められており、以下の様な規則になります。
※参考:BIOSベースのPXEクライアントのブート・ローダー構成
- UUID (例: a8943708-c6f6-51b9-611e-74e6ac80b93d)
- 01-MAC_address (例: 01-80-00-27-c6-a1-16)
- IPアドレスの完全32ビット (例: 0A0000FD)
- IPアドレスの最上位28ビット (例: 0A0000F)
- IPアドレスの最上位24ビット (例: 0A0000)
- IPアドレスの最上位20ビット (例: 0A000)
- IPアドレスの最上位16ビット (例: 0A00)
- IPアドレスの最上位12ビット (例: 0A0)
- IPアドレスの最上位8ビット (例: 0A)
- IPアドレスの最上位4ビット (例: 0)
- default (デフォルト構成ファイル)
例えばMACアドレスのファイルを格納した場合、ホストごとにブート構成ファイルを固定できるため、それぞれのホスト専用の定義を指定することができます。
また、ブート構成ファイルの設定の書き方によっては、起動時に読み込むOSファイルやOSイメージをユーザに選択させることもできるので、default
に複数の起動定義を記載して選択することも可能です。
TFTPブート構成ファイルの作成
今回はdefault
に自動インストール用定義を記載します。
sudo cat << _EOF_ | sudo tee /tftpboot/pxelinux.cfg/default
default autoinstall
label autoinstall
kernel Ubuntu/vmlinuz
initrd Ubuntu/initrd
append autoinstall ip=dhcp url=http://192.168.56.105/pxeboot/ubuntu-20.10-live-server-amd64.iso ds=nocloud-net;s=http://192.168.56.105/pxeboot/autoinstall/
_EOF_
Cloud-init用ファイルの作成
cloud-init
で自動インストールするために必要となる、user-data
ファイルとmeta-data
ファイルを作成します。
meta-data
ファイルはAWS等で使用する場合はmeta-data
からインスタンスID等を取得するために利用しますが、今回は空ファイルを作成しておくだけで問題ありません。
user-data
、meta-data
ファイルはPXEサーバから取得するようにしますので、PXEサーバの以下に作成します。
ファイル | パス |
---|---|
user-dataファイル | /pxeboot/autoinstall/user-data |
meta-dataファイル | /pxeboot/autoinstall/meta-data |
自動インストール用ディレクトリ作成
前回のPXEサーバ構築で作成したPXEブート用ディレクトリの下に自動インストール用ディレクトリを作成します。
sudo mkdir /pxeboot/autoinstall
meta-dataファイル作成
前述の通り空ファイルを自動インストール用ディレクトリの下に作成します。
sudo touch /pxeboot/autoinstall/meta-data
user-dataファイル作成前準備
user-data
ファイルはcloud-init
の書式で作成しますが、自動インストール時に使えるコマンドは限られているため、以下公式ドキュメント等を参照し、user-data
ファイルを作成して下さい。
また、user-data
ファイル内に記載されているパスワードは以下の様な方法でハッシュ値を生成しておきます。
※今回はパスワードubuntu
で生成します。
sudo openssl passwd -6 ubuntu
user-dataファイル作成
OSの設定はインストール完了後、Ansible
等で設定する前提で、user-data
ファイルは作りすぎず、Ansible
実行に必要となる設定の追加程度に止めておきます。
Ubuntu Server 20.04
の場合は、user-data
にアドレス設定を記載しても思った通りに反映されませんでしたが、Ubuntu Server 20.10
では反映されるようになったため、user-data
に記載します。
sudo cat << _EOF_ | sudo tee /pxeboot/autoinstall/user-data
#cloud-config
autoinstall:
version: 1
locale: ja_JP.UTF-8
keyboard:
layout: "jp"
storage:
layout:
name: lvm
identity:
hostname: ubuntu-server
username: ubuntu
password: "$6$nFV7aBiOVRpPF8Qq$l0KnHQehyWsyGRzXvQnnriXxSUbrhPrWtkhOm4lZh1wSdzz4Ga9QN3eBcf9POKo8YFF0pztU9oIwx8oyNrNsf."
network:
network:
version: 2
ethernets:
enp0s3:
dhcp4: false
dhcp6: false
addresses: [192.168.56.130/24]
enp0s8:
dhcp4: true
dhcp6: false
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
ssh:
install-server: yes
user-data:
timezone: Asia/Tokyo
_EOF_
自動インストール対象マシンの設定
自動インストール対象マシンはPXEブート
できるようにしておけば基本的には設定は必要ありません。
但し、インストールディスクに既にOSがインストールされているような場合は各種BIOSの起動デバイス選択からPXEブート
が先になるように変更します。
VirtualBox
の場合、仮想ストレージが空の状態であれば、以下のように起動順序
でネットワーク
にチェックされていることを確認すれば問題ありません。
自動インストール
自動インストール対象マシンの電源を入れることでネットワークインストール
が始まります。
あとは待つだけなので気長に待ちましょう。
まとめ
Ubuntu Server 20.10
になって小細工しなくてもネットワーク設定が可能となったのは良かったです。
これでネットワークの部分を気にせずuser-data
作成に注力することができそうです。