キックスタートファイルの作成から自動インストールまで
前提
このドキュメントは、Miracle Linux 8.8を使用して作成しています。また、下記の操作ができることを前提としています。
- isoイメージファイルのダウンロード
- isoイメージファイルのマウント
- RedHat系のLinuxを手動でインストールできる
また、このドキュメントではキックスタートファイルの編集は、よく使用する設定のみ紹介しています。詳細な情報は、ドキュメント末尾の参考リンクを参照してください。
対象読者
- RedHat系のLinuxを自動インストールしたいが方法がわからない
- キックスタートファイルの作成方法を知っているが、isoイメージファイルに追加する方法がわからない
- 私(元々自分のためのメモなので)
自動インストールまでの流れ
- まずは自動インストールで設定したい内容で、手動でインストールを行います。
- インストール後にキックスタートファイルが作成されますので、それを取得します。
-
/root/anaconda-ks.cfg
にキックスタートファイルが保存されます。これを保存します。
-
- キックスタートファイルを編集します。
- isoイメージファイルにキックスタートファイルを追加します。
- 作成したisoイメージファイルを使用すると、自動インストールが行われます。
キックスタートファイルの編集
手動インストール後のキックスタートファイルをベースにしていますので、基本的には大きな変更は必要ありませんが、よく使用する設定を紹介します。
インストール対象・対象外のディスクを指定する
Partition clearing information
で指定したディスクをインストール対象にするか、対象外にするかを指定します。
-
sda, sdb, sdc
だけをインストール対象にする場合ignoredisk --only-use=sda,sdb,sdc
-
sda
だけをインストール対象にする場合ignoredisk --only-use=sda`
既にパーティションが存在する場合は削除する
新しいパーティションを作成する前に、システムからパーティションを削除します。デフォルトでは、パーティションは削除されません。
clearpart
で指定したディスクのパーティションを削除します。
-
sda
のパーティションのみ削除clearpart --all --drives=sda
- すべてのパーティションを削除し、ディスクを初期化
clearpart --all --initlabel
インストール後のライセンス同意に同意する
下記のように記述することで、ライセンス同意を自動化できます。
# License agreement
eula --agreed
インストール終了後に再起動する
インストールが完了した後に自動的に再起動するように設定します。
私はインストール後に設定を行うことが多いので、再起動しています。
# Reboot after installation
reboot
インストール終了後にシャットダウンする
インストールが完了した後に自動的にシャットダウンするように設定します。
インストール後は一旦シャットダウンさせたい場合は、こちらを使用してください。
# Shutdown after installation
poweroff
インストール中にSSH接続を許可する
インストール中にユーザ名:root
、パスワード:hoge
でSSH接続を許可します。
sshpw --username=root --password=hoge
rootパスワードを設定する
インストール後にrootパスワードを設定します。
平文のパスワードを記述することもできますが、セキュリティ上の問題があるため、暗号化されたパスワードを記述することをお勧めします。
- MD5チェックサムをを使用する場合
-
password
というパスワードを暗号化する場合echo -n "password" | md5sum 5f4dcc3b5aa765d61d8327deb882cf99 -
- この場合
--iscrypted $1$
の後に5f4dcc3b5aa765d61d8327deb882cf99
を記述します。# Root password rootpw --iscrypted $1$5f4dcc3b5aa765d61d8327deb882cf99
-
- SHA-512を使用する場合
-
password
というパスワードを暗号化する場合echo -n "password" | sha512sum b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86 -
- この場合
--iscrypted $6$
の後にb109...
を記述します。# Root password rootpw --iscrypted $6$b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86
-
サービスの有効、無効を設定する
インストール後に有効、無効にするサービスを設定します。
-
libvirtd
を無効にする# Services services --disabled=libvirtd
-
chronyd
を有効にする# Services services --enabled=chronyd
- まとめて設定することも可能
# Services services --enabled=chronyd,ssh --disabled=libvirtd,cups
パッケージの選択・除外
グループ名やパッケージ名を指定して、インストールするパッケージが選択できます。また、除外するパッケージも指定できます。
指定可能なグループ名、IDの確認方法
- isoイメージファイルをマウントし、
repodata
ディレクトリにあるcompsファイル(XML)を探します。
Miracle Linux 8.8の場合、下記2つのファイルがあります。BaseOS/repodata/526b1c185400d6c72fd7466b6dc7c21efd13d2b9b86f6921862a8f2f09802d03-BaseOS.xml AppStream/repodata/f294109810686230b39d58498b0ec205eb5b364c3f23a4f4669d66b9cbefedbc-AppStream.xml
- XMLを開きます。
<group>
タグ内の<id>
がグループID、<name>
がグループ名です。<group> <id>network-file-system-client</id> <name>Network File System Client</name>
指定可能なパッケージ名の確認方法
- isoイメージファイルをマウントします。
- RHEL7以前の場合
-
Packages
ディレクトリにある*.rpm
ファイルを確認します。
-
- RHEL8以降の場合
-
BaseOS
、AppStream
ディレクトリにある*.rpm
ファイルを確認します。
-
選択・除外の記述方法
%packages
から %end
の間に記述します。
グループ名、IDは@
を先頭に付けて指定します。パッケージ名はそのまま指定します。
また、除外する場合は、-
を先頭につけます。
-
Network File System Client
をインストール%packages @network-file-system-client %end
-
openssh-server
,ipmitool
をインストール%packages openssh-server ipmitool %end
-
cvs
,doxygen
を除外%packages -cvs -doxygen %end
- まとめて設定することも可能
%packages @network-file-system-client openssh-server ipmitool -cvs -doxygen %end
インストール前にスクリプトを実行する
キックスタートファイルが解析され、インストールが開始される前にスクリプトを実行することができます。ハードウェア構成に応じて、ネットワークやストレージ設定を変更することができます。
以下は、sdaはシステム領域とし、sdb以降はSATA接続であれば、ストレージ領域として/var/storage1
から順に割り当てるスクリプトを記述しています。
%pre
#!/bin/sh
counter=1
lsblk -dpno NAME,TRAN | while read -r dev type; do
if [ "$dev" =~ ^/dev/sd && "$type" == "sata" ]; then
if [ "$dev" != "/dev/sda" ]; then
storage_num=$(printf "%03d" $counter)
echo "part /var/storage${storage_num} --fstype=\"xfs\" --grow --ondisk=${dev} --size=1" >> /tmp/part-include
counter=$((counter + 1))
fi
fi
done
%end
パーティションの設定箇所に%include /tmp/part-include
を追加します。
# Disk partitioning information
part /boot/efi --fstype=efi --maxsize=200 --size=200 --ondisk=sda
part / --asprimary --fstype="xfs" --grow --ondisk=sda --size=1
part swap --fstype="swap" --ondisk=sda --recommended
%include /tmp/part-include
こうすることで、ストレージ領域の数にかかわらず、自動的にパーティションを割り当てることができます。
isoイメージファイルにキックスタートファイルを追加
以下の手順はRedHat系のLinux上で行うことを前提としています。
isoイメージファイルをマウントし、コピーする
mkdir /root/ml/{iso,kickstart}
- デバイスの場合
mount -o loop,rw -t iso9660 /dev/sr0 /root/ml/iso
- ファイルの場合
mount -o loop,rw -t iso9660 MIRACLELINUX-8.8-rtm-x86_64.iso /root/ml/iso
- コピー
rsync -a /root/ml/iso/ /root/ml/kickstart/
isoイメージの編集
ブートメニューのカスタマイズ(BIOS)
-
isolinux/isolinux.cfg
を開く -
label linux
と書かれている場所を探す
label linux
menu label ^Install MIRACLE LINUX 8.8
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=MIRACLE-LINUX-8-8-x86_64 quiet
- これらをコピーし、1行あけて下にコピーする
-
menu label
を分かりやすい文字列に変更する - デフォルトで選択させたい場合は
menu default
を追加する。
その場合、他のmenu default
は削除する。 -
append initrd=
の末尾に下記を追加するinst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg
- 下記のようにインストール時にカーネルパラメータを設定する事も可能。(この場合、install_typeというパラメータを追加)
inst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg install_type=production
- 下記のようにインストール時にカーネルパラメータを設定する事も可能。
- 追加した項目の例
label linux menu label ^Install MIRACLE LINUX 8.8 for Production menu default kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=MIRACLE-LINUX-8-8-x86_64 quiet inst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg install_type=production
- タイムアウト時間を変更する場合は、
timeout
を変更する。- 10秒に設定する場合は、
timeout 100
に変更する。
- 10秒に設定する場合は、
ブートメニューのカスタマイズ(EFI)
-
EFI/BOOT/grub.cfg
を開く -
menuentry 'Install MIRACLE LINUX 8.8'
と書かれている場所を探すmenuentry 'Install MIRACLE LINUX 8.8' --class fedora --class gnu-linux --class gnu --class os { linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=MIRACLE-LINUX-8-8-x86_64 quiet initrdefi /images/pxeboot/initrd.img }
- これらをコピーし、menuentry の上(
### BEGIN
の下)に追加する -
menuentry
の次の文字列(ラベル)を分かりやすい文字列に変更する。 -
linuxefi
の末尾(quiet
の次)に下記を追加する。inst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg
- 下記のようにインストール時にカーネルパラメータを設定する事も可能。(この場合、install_typeというパラメータを追加)
inst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg install_type=production
- 下記のようにインストール時にカーネルパラメータを設定する事も可能。
- 追加した項目の例
menuentry 'Install MIRACLE LINUX 8.8 for Production' --class fedora --class gnu-linux --class gnu --class os { linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=MIRACLE-LINUX-8-8-x86_64 quiet inst.ks=hd:LABEL=MIRACLE-LINUX-8-8-x86_64:/ks.cfg install_type=prouction initrdefi /images/pxeboot/initrd.img }
- デフォルトで選択させたい場合は
set default="1"
を変更する。-
menuentry
は0から始まるので、set default="0"
に変更することで、最初のメニューをデフォルトにする。
-
- タイムアウト時間を変更する場合は、
set timeout=60
を変更する。- 10秒に設定する場合は、
set timeout=10
に変更する。
- 10秒に設定する場合は、
isoイメージを再構築
- iso展開の親ディレクトリに移動
cd /root/ml/kickstart
- mkisofsを実行。
mkisofs -r -J -input-charset utf-8 -o ../MIRACLELINUX-8.8-rtm-x86_64-ks.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -V "MIRACLE-LINUX-8-8-x86_64" -translation-table -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot ./
-
-V
の後の文字列(ラベル名)はisolinux.cfg
,grub.cfg
で設定している文字に合わせておくこと。 - 他のオプションはRHELのWebサイトをそのまま使用
-
Discussion