VirtualBoxにおけるPXEとKickstartによるCentOS 7の自動インストール



前の投稿では、PXEによるインストーラーの起動を行った。
本投稿では、Kickstartによるインストール作業の自動化を行った。

Kickstartによるインストールの自動化と言うが、より正確には「PXEとKickstartによる」インストールの自動化である。

PXEとKickstart

2つは別の技術。

PXE(Preboot eXecution Environment)
    - ネットワークブートを実現する仕組み

Kickstart
    - OSのサイレントインストールを実現する仕組み

ネットワーク上のインストーラーを起動するのがPXEの仕事で、インストーラーの操作を自動化するのがKickstartの仕事。

2つを組み合わせることで、下記のようにインストールを自動化できる。

普通のインストール
DVDを挿入してインストーラーを起動→GUIを操作してインストールを進める

PXEとKickstartによるインストール
マシンの電源を入れる → PXEがネットワーク上のインストーラーを起動 → Kickstartがインストールを自動的に進める

Kickstartの設定

Red Hatの公式ドキュメントを参考。

以下、下記のサイトの通りPXEサーバーが構築されていることを前提とする。
PXEにより、VirtualBoxでCentOS 7のインストーラーを起動した(図で解説あり)

PXEサーバーが設定されていれば、Kickstartの設定は比較的簡単。
下記を行えば良い。

  • キックスタートファイルの作成
  • キックスタートファイルの配置
  • PXE設定にキックスタートファイルの場所を記載

キックスタートファイルの作成

キックスタートファイルの構文は、下記の公式ドキュメントに詳しい。

キックスタートファイルの作成26.3. キックスタート構文の参考資料 
26.2. キックスタートを使ったインストールの実行方法 

ここでは、1からキックスタートファイルを作成せず、手動でインストールしたマシンに自動的に保存されるキックスタートファイルを用いた。

手動でインストールしたマシンでは、インストール中に選択された選択肢がすべて下記のファイルに保存される。

/root/anaconda-ks.cfg 

これをコピーして流用することで、1からキックスタートファイルを作成せずに済む。

以下では、このanaconda-ks.cfgをコピーして用いた。

なお、キックスタートファイルは、ksvalidatorコマンドで検証できる。 
ksvalidatorは、pykickstartパッケージに含まれる。

yum -y install pykickstart
ksvalidator /var/share/kickstart_files/CentOS7.6.1810.cfg

キックスタートファイルの配置

前の投稿でインストールソースを配置するために作ったnfsサーバー上に、キックスタートファイルを置くことにする。

キックスタートファイルを置くためのディレクトリー/var/share/kickstart_filesを作成し、この中にanaconda-ks.cfgをコピーし、リード権限を与えた。
そして、/etc/exportsを編集し、NFSサーバーを再起動することで、/var/share/kickstart_filesを公開した。

mkdir /var/share/kickstart_files
cp anaconda-ks.cfg /var/share/kickstart_files/CentOS7.6.1810.cfg
chmod o+r /var/share/kickstart_files/CentOS7.6.1810.cfg
vi /etc/exports
systemctl restart nfs-server

/etc/exportsには、前の投稿で設定した内容に加えて、下記を追記した。

/var/share/kickstart_files 192.168.11.0/24

PXE設定にキックスタートファイルの場所を記載

キックスタートを使ったインストールを開始するには、インストールシステムの起動時に起動オプション (inst.ks=location) を使用する。
起動オプションの詳細は、公式ドキュメントの第22章 起動オプションに記載がある。
PXE サーバーの設定時に、ブートローダー設定ファイルに起動オプションを追加することができる。

よって、PXEの設定ファイルに、上で配置したキックスタートファイルをinst.ksで指定すればよい。

vi /var/lib/tftpboot/pxelinux/pxelinux.cfg/default

下記の通り編集。

default centos7.6.1810
prompt 1
timeout 600

display boot.msg

label centos7.6.1810
  menu label ^Install system
  menu default
  kernel images/CentOS7.6.1810/vmlinuz
  append inst.ks=nfs4:192.168.11.77:/var/share/kickstart_files/CentOS7.6.1810.cfg initrd=images/CentOS7.6.1810/initrd.img ip=dhcp inst.repo=nfs:192.168.11.77:/var/share/installation_source

192.168.11.77は、前の投稿で作成したPXEサーバーのIPアドレス。
赤字以外の設定についても、前の投稿を参照。

インストール実行

VirtualBoxで、仮想マシンを作成した。
仮想マシンの設定、システム > マザーボードから、起動順序でネットワークにチェックを入れ、優先度を一番上にした。
内部ネットワークのネットワークアダプターを追加した。

これで、仮想マシンを起動すると、インストールが進み、下図のようにインストールが完了した。

補足

以下、試行錯誤時や調査時のメモ。

エラー

上のchmod o+r /var/share/kickstart_files/CentOS7.6.1810.cfgの部分でやったように、キックスタートファイルに適切な権限を与えないと、下記のようなエラーで失敗した。

failed to fetch kickstart from

Kickstart file /run/install/ks.cfg is missing
Pane is dead

キックスタートによるシステムのアップグレード

過去のバージョンでは、システムのアップグレードもキックスタートでできた様子。
現在は専用のツールを使うらしい。
第29章 現在のシステムのアップグレード

ログファイル

公式ドキュメントによると、「キックスタートスクリプトおよびそのスクリプト実行によって生成されるログファイルは、インストールに失敗した場合の原因究明のデバッグの手助けとなるよう、すべて /tmp ディレクトリーに保存されます。」そうだ。

インストールがある程度まで進めば、Alt+Tab(Macではoption+tab)でshellに切り替えることができ、/tmp/anaconda.logを確認できた。


コメント

このブログの人気の投稿

PowerShell 6で、Shift_JISのCSVをImport-Csvで読み込んだら文字化けした

Windowsで、特定のユーザーに特定のサービスの再起動を許可する

PowerShellでイベントログを取得する時、「指定した選択条件に一致するイベントが見つかりませんでした。」が煩わしいのでcatchする