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環境であれば、virt-make-fs
コマンドによって、Kickstartファイルだけを格納した専用の記憶デバイスをrawやqcow2といった形式で簡単に作成できます。
逆に上記のようなコマンドが使えない環境では、記憶デバイスの準備が少々面倒かもしれません。
環境構築
Kickstartファイルの作成
前回記事で作成したファイルをそのまま使います。
ファイル名をks.cfg
にリネームし、作業用ディレクトリに格納しておきます。
tree tmp # tmp # └── ks.cfg
Kickstart用ディスクの作成
virt-make-fsのインストール
Kickstart用ディスクの作成にはvirt-make-fs
コマンドを使います。
RHEL系ディストリビューションであれば以下のコマンドでインストールできます。
sudo dnf install guestfs-tools
ディスク作成
Kickstart用のディスクファイルを作成します。
ディスクファイルの要件は以下のとおりです。
上記を満たすようなディスクファイルを以下のコマンドで作成します。
virt-make-fs -t fat -F qcow2 --label OEMDRV tmp/ ks_centos_stream9.qcow2 ls -lh ks_centos_stream9.qcow2 # -rw-r--r--. 1 endy endy 640K Mar 26 20:58 ks_centos_stream9.qcow2
virt-make-fs
とは、指定したディレクトリを元にディスクファイルを作成するコマンドです。
今回使用したオプションは、下表のとおりです。
オプション | 意味 |
---|---|
-t fat |
|
-F qcow2 |
|
--label OEMDRV |
ファイルシステムにOEMDRV ラベルを付与する |
tmp/ (第一引数) |
tmp/ ディレクトリ配下をディスクファイルに格納する |
ks_centos_stream9.qcow2 (第二引数) |
|
最後に、Kickstart用ディスクファイルをお好みの場所に格納します。
今回の例では、/home/shared/libvirt/images/kickstarts/ks_centos_stream9.qcow2
に格納しました。
前回記事と同様に、お好みでシンボリックリンクを作っておくとCentOS Streamのバージョン差異を抽象化できて便利になります。
よろしければ、以下のコマンドでks_centos_stream.qcow2
というファイル名のシンボリックリンクを作成しておきましょう。
ln -s ks_centos_stream9.qcow2 ks_centos_stream.qcow2
Kickstartの実行
ここまでの作業で準備は整いました。
いよいよ初期状態の仮想マシンを用意してKickstartを開始します。
(参考) 仮想マシンの作成
KVM配下に仮想マシンを作成する場合を例に、パラメータの例を示します。
詳細はKVMの基本操作集 - #VMの作成をご覧ください。
VM作成時、Kickstart用ディスクファイルもセットするのがポイントです。
(参考) Cockpitの場合
CockpitでVMを作成する場合、以下の手順で行います。
まずはKickstartファイルを含むディレクトリにStorage Poolが紐付いていない場合は、作成しておきます。
プールを作成する理由は後ほど説明します。
作成手順はKVMの基本操作集 - #ストレージプールの作成が参考になります。
続いて、VMを作成します。
VM作成はKVMの基本操作集 - #VMの作成を参考にしてください。
VM作成時のパラメータは以下を指定します。
ポイントは下図の(3)にあるとおり、「VMの起動」を一旦OFFにすることです。
続いて作成したVMの詳細画面へ移動し、Disks
セクションのAdd disks
を選択します。
ディスク追加画面で、Use existing
を選択の上Poolを指定して Kickstart用ディスクを追加します。
(※) 私のCockpit環境では、Custom pathからKickstart用ディスクのフルパスを指定して追加すると、Kickstartが開始されませんでした。virsh dumpxml test
でVMの定義情報を確認すると、Custom pathから追加したときはqcow2形式のディスクであってもraw形式と認識されてしまっていたので、これが原因と思われます。2022/3時点で最新のcockpit-machines 264で、これは予測された動作とのことでした。Issue #639で問い合わせたところ、Pull Request #646にて今後対応いただけそうです。感謝!
Kickstart用ディスクを追加後、再びこのディスクを編集するためにEdit
ボタンをクリックします。
ここでRead-only
を選択しておくことをおすすめします。
Read-only
を選択することは必須ではありません。
しかしRead-only
にしておくことで、VMを削除するときにディスク削除オプションのチェックボックスがデフォルトでOFFになります (下図を参照)。
これによって、Kickstart用ディスクを誤って削除するリスクを多少なりとも下げることができます。
(参考) virt-installの場合
以下のコマンドを実行することで、Kickstart用ディスク付きのVMを作成・起動できます。
基本的には前回記事と同じコマンドですが、以下の部分が差分です。
- 末尾に
--disk
を追加指定することでKickstart用ディスクを追加している --check path_in_use=off
により、Kickstart用ディスクを搭載したVMが他に存在してもエラーにならないようにする
virt-install \ --name test \ --memory 2048 \ --vcpus 2 \ --disk size=10 \ --graphics vnc \ --graphics spice \ --os-variant centos-stream9 \ --cdrom /home/shared/libvirt/images/isos/centos/CentOS-Stream-9-latest-x86_64-dvd1.iso \ --disk path=/home/shared/libvirt/images/kickstarts/ks_centos_stream9.qcow2,readonly=on \ --check path_in_use=off &
VMを強制終了して削除するには、以下のコマンドを実行します。
--storage vda
を指定しているので、間違えてKickstart用ディスクを一緒に消すことはありません。
virsh destroy test ; virsh undefine test --storage vda --snapshots-metadata --managed-save
もし--storage vda
の指定で本当に正しいか不安であれば、以下のコマンドで事前に確認することも可能です。
virsh domblklist test Target Source # ------------------------------------------------------------------ # vda /home/shared/libvirt/images/test.qcow2 # vdb /home/shared/libvirt/images/kickstarts/ks_centos_stream9.qcow2 # sda -
Kickstartによる自動インストール
VMを起動し、インストールを開始すれば自動的にKickstartが始まります。
前回記事とは異なり、コンソール画面からinst.ks=...
を指定する必要はありません。
これはOEMDRV
ラベルのついたファイルシステムに/ks.cfg
ファイルがあるとき、ks.cfg
ファイルを自動的にKickstartファイルとして読み込む仕様があるためです1。
(参考) Kickstartでエラーが発生したときの対処法
1つ目の記事で紹介した(参考) Kickstartでエラーが発生したときの対処法を参照してください。
参考URL
本記事に関連する参考URLをまとめて掲載します。
virt-make-fs
によるKickstart用ディスクの作成方法については、man virt-make-fsをご確認ください。
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のトリガーが自動化されたことで更に便利になりました。
しかし、virt-make-fs
コマンドが使えるLinux環境にアクセスできない場合はKickstart用ディスクの作成・変更が少々面倒かもしれません。
KVMでローカル検証環境を組んでいる方は、この構成を便利に扱えると思います。
Linuxのインストールが面倒になったら、ぜひご活用ください。