LoginSignup
3
5

More than 3 years have passed since last update.

Ubuntu Server 20.10の自動インストール機能でネットワークインストールする。

Posted at

はじめに

以前「Ubuntu Server 20.04の自動インストール機能でネットワークインストールする。」の記事を投稿しましたが、Ubuntu Server 20.10でも試してみました。

先に前回実施したUbuntu Server 20.04と異なる点だけ書いておくと、Ubuntu Server 20.04ではcloud-inituser-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サーバ側手順
1. Ubuntu Server 20.10のISOファイル転送
2. Ubuntu Server 20.10のカーネルイメージのコピー
3. TFTPブート構成ファイルの作成
4. Cloud-init用ファイルの作成
5. 自動インストール用ディレクトリ作成
6. meta-dataファイル作成
7. user-dataファイル作成

・自動インストール対象マシン側手順
1. 自動インストール対象マシンの設定
2. 自動インストール

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
ISOイメージマウント
sudo mount -t iso9660 -o loop ubuntu-20.10-live-server-amd64.iso /mnt
カーネルイメージコピー
sudo cp /mnt/casper/{vmlinuz,initrd} /tftpboot/Ubuntu
ISOイメージアンマウント
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に自動インストール用定義を記載します。

/tftpboot/pxelinux.cfg/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-datameta-dataファイルはPXEサーバから取得するようにしますので、PXEサーバの以下に作成します。

ファイル パス
user-dataファイル /pxeboot/autoinstall/user-data
meta-dataファイル /pxeboot/autoinstall/meta-data

自動インストール用ディレクトリ作成

前回のPXEサーバ構築で作成したPXEブート用ディレクトリの下に自動インストール用ディレクトリを作成します。

自動インストール用ディレクトリ作成
sudo mkdir /pxeboot/autoinstall

meta-dataファイル作成

前述の通り空ファイルを自動インストール用ディレクトリの下に作成します。

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に記載します。

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の場合、仮想ストレージが空の状態であれば、以下のように起動順序ネットワークにチェックされていることを確認すれば問題ありません。

01_boot.jpg

自動インストール

自動インストール対象マシンの電源を入れることでネットワークインストールが始まります。

あとは待つだけなので気長に待ちましょう。

まとめ

Ubuntu Server 20.10になって小細工しなくてもネットワーク設定が可能となったのは良かったです。

これでネットワークの部分を気にせずuser-data作成に注力することができそうです。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5