Kickstartシリーズ
Kickstartとは、Linuxのインストールを自動化する機能です。
本シリーズではRHEL, Fedora, CentOS Streamをモデルに紹介します。
一連の記事でKickstartの構成を3パターン紹介します。
今回の記事では、2つ目の構成を紹介します。
私が普段Linuxをインストールするとき、この方法を使うことが一番多いです。
- KickstartによるLinuxインストール自動化 (手動トリガー・HTTP連携)
- KickstartによるLinuxインストール自動化 (自動トリガー・ローカルディスク接続) ← 今ココ
- KickstartによるLinuxインストール自動化 (自動トリガー・PXEブート連携)
構成概要
今回の構成は、Kickstartファイルを格納した専用の記憶デバイスをセットするだけでインストールを自動化します。
前回記事の構成と比較すると、初回起動時にinst.ks=...
とKickstartファイルのURLを手動入力しなくて良い点がメリットとして挙げられます。
一方でKickstart用ディスクを最初に接続し、インストール完了後に必要に応じて接続解除するという一手間が発生する点はデメリットとも言えます。
しかしながらコンソール上の文字入力が不要となるため、シェルスクリプトやAnsibleなどの外部ツールと連携して完全自動化したい場合は、今回の構成の方が実現が容易になります。
環境構築は以下の手順で行います。
詳細は#環境構築にて説明します。
Kickstartは以下の手順で開始します。
詳細は#Kickstartの実行にて説明します。
- ISOファイル、インストール先ディスク、上記のキックスタート用ディスクをセットする
- ISOファイルから起動する
- 自動的にインストールが完了する
この構成は、特にLinuxを扱える環境においては採用しやすいと思います。
Linux環境であれば、mkisofs
コマンドによって、Kickstartファイルだけを格納した専用のKickstartトリガー用ファイルをISO形式で簡単に作成できます。
(※) 本ブログでは、このKickstartトリガー用ファイルを「Kickstartイメージファイル」と呼びます
Windows環境でKickstartイメージファイルを作成するには、恐らくフリーソフトに頼る必要があります。
Macの場合はわかりません。
環境構築
Kickstartファイルの作成
前回記事で作成したファイルをそのまま使います。
ファイル名をks.cfg
にリネームし、作業用ディレクトリに格納しておきます。
tree tmp # tmp # └── ks.cfg
Kickstart用ディスクの作成
mkisofsのインストール
Kickstart用ディスクの作成にはmkisofs
コマンドを使います。
RHEL系ディストリビューションであれば以下のコマンドでインストールできます。
sudo dnf install xorriso
Kickstartイメージファイルの作成
Kickstartイメージファイルの要件は以下のとおりです。
では、Kickstartイメージファイルを作成します。
まず、事前にks.cfg
という名前のKickstartファイルをディレクトリに配置します。
サブディレクトリなどに含めず、必ずディレクトリ直下に配置するようにしてください。
ls tmp/ # ks.cfg
続いて、tmp/
ディレクトリを引数にmkisofs
によってISOファイルを作成します。
mkisofs -V OEMDRV -o ks_centos_stream9.iso tmp/
今回使用したmkisofs
のコマンドラインオプション、及び引数を下表に示します。
オプション / 引数 | 意味 |
---|---|
-V OEMDRV |
|
-o ks_centos_stream9.iso |
出力ファイルパスをks_centos_stream9.iso と指定 |
tmp/ |
tmp/ ディレクトリの中身をISOファイルシステムに含める |
最後に、Kickstart用ディスクファイルをお好みの場所に格納します。
今回の例では、/home/shared/libvirt/kickstarts/ks_centos_stream9.iso
に格納しました。
前回記事と同様に、お好みでシンボリックリンクを作っておくとCentOS Streamのバージョン差異を抽象化できて便利になります。
よろしければ、以下のコマンドでks_centos_stream.iso
というファイル名のシンボリックリンクを作成しておきましょう。
ln -s ks_centos_stream9.iso ks_centos_stream.iso
Kickstartの実行
ここまでの作業で準備は整いました。
いよいよ初期状態の仮想マシンを用意してKickstartを開始します。
(参考) 仮想マシンの作成
KVM配下に仮想マシンを作成する場合を例に、パラメータの例を示します。
詳細はKVMの基本操作集 - #VMの作成をご覧ください。
VM作成時、Kickstart用ディスクファイルもセットするのがポイントです。
(参考) virt-installの場合
以下のコマンドを実行することで、Kickstartイメージファイルを搭載したVMを作成・起動できます。
基本的には前回記事と同じコマンドですが、以下の部分が差分です。
- 末尾に
--disk
を追加指定することでKickstartイメージファイルを追加。format=iso
(デフォルトqcow2
) とreadonly=on
(デフォルトoff
) を追加指定 --check path_in_use=off
により、Kickstartイメージファイルを搭載したVMが他に存在してもエラーにならないようにする- Cockpit MachineでVMを作ったときと同様に
spice
とvnc
コンソール接続用のデバイスも指定- ただし指定順序はCockpitと逆 (
spice > vnc
) - その理由は、
virt-viewer
で接続したときにspice
に接続させるため spice
はクリップボードの共有に対応しているのでなにかと便利
- ただし指定順序はCockpitと逆 (
virt-install \ --name test \ --memory 2048 \ --vcpus 2 \ --disk size=10 \ --graphics spice \ --graphics vnc \ --os-variant centos-stream9 \ --cdrom /home/shared/libvirt/isos/centos/CentOS-Stream-9-latest-x86_64-dvd1.iso \ --disk path=/home/shared/libvirt/kickstarts/ks_centos_stream9.iso,format=iso,readonly=on \ --check path_in_use=off &
VMを強制終了して削除するには、以下のコマンドを実行します。
virsh destroy test ; virsh undefine test --storage vda --snapshots-metadata --managed-save
Kickstartによる自動インストール
VMを起動し、インストールを開始すれば自動的にKickstartが始まります。
前回記事とは異なり、コンソール画面からinst.ks=...
を指定する必要はありません。
これはOEMDRV
ラベルのついたファイルシステムに/ks.cfg
ファイルがあるとき、ks.cfg
ファイルを自動的にKickstartファイルとして読み込む仕様があるためです1。
(参考) Kickstartでエラーが発生したときの対処法
1つ目の記事で紹介した(参考) Kickstartでエラーが発生したときの対処法を参照してください。
(参考) ISO以外の形式でKickstartイメージファイルを作成する
本セクションで紹介する手順は非推奨です。
KickstartイメージファイルはISOファイルで作成するべきです。
Kickstartイメージファイルは、ISO以外のファイルシステムでも作成できます。
例えば、軽量なファイルシステムであるFATやEXT2でフォーマットすることも技術的には可能です。
例えば、以下のような手順でFATファイルシステムでフォーマットされたqcow2形式のディスクファイルを作成できます。
sudo dnf install guestfs-tools virt-make-fs -t fat -F qcow2 --label OEMDRV tmp/ ks_centos_stream9.qcow2
しかしqcow2でKickstartイメージファイルを作成すると、紐づくVMを削除するときに巻き添えでKickstartイメージファイルも誤って削除するリスクが上がります。
したがって、冒頭のとおりKickstartイメージファイルをqcow2で作成することは推奨しません。
具体的なメカニズムを以下に補足します。
- qcow2ディスクファイルは、デフォルトで読み書き可能ディスクとして
/dev/vdX
にマウントされる- (一方で、ISOファイルはデフォルトで読み取り専用かつ
/dev/sdX
にマウントされる)
- (一方で、ISOファイルはデフォルトで読み取り専用かつ
- CockpitでVMを削除するとき、読み取り専用ではないディスクはデフォルトで削除対象のチェックボックスにチェックが入る
virsh undefine --storage vda
を指定したとき、Kickstartイメージファイルが読み書き可能ディスクだった場合一緒に削除されてしまう- Cockpitや
virsh
による誤削除を防止するには、qcow2形式のKickstartイメージファイル追加時に、明示的に読み取り専用オプションを指定する必要がある
ISO形式でKickstartイメージファイルを作成すれば、上記一連の面倒な仕様すべてから開放されます。
上述の理由から、KickstartイメージファイルはISOイメージファイルで作成すべきです。
参考URL
本記事に関連する参考URLをまとめて掲載します。
Kickstart用ディスクによるKickstartの自動開始については、Red Hat社のマニュアルが参考になります。
RHEL8 - Performing an advanced RHEL installation - 7.3. Starting a Kickstart installation automatically using a local volume
その他、Kickstart自体の概要やKickstartファイルの書き方については、前回記事で紹介した内容を前提としております。
まとめ
Kickstart用ディスクをセットしたマシンを起動するだけで、Kickstartを自動トリガーしてLinuxのインストールを自動化する方法を紹介しました。
前回記事と比較して、Kickstartのトリガーが自動化されたことで更に便利になりました。
しかし、mkisofs
コマンドが使えるLinux環境にアクセスできない場合はKickstart用ディスクの作成・変更が少々面倒かもしれません。
KVMでローカル検証環境を組んでいる方は、この構成を便利に扱えると思います。
Linuxのインストールが面倒になったら、ぜひご活用ください。