先日、USBフラッシュメモリに格納したRHEL10のISOイメージから、通常のGUIインストールでRHEL10をインストールすることができた(記事はコチラ)ので、今度はPXEブート+kickstartで自動インストールしてみたいと思います。
PXEブート環境の準備
今回のkickstartインストールでは、既に構築済のPXEサーバを使います。PXEサーバの構築方法については、犬でも分かるPXEブートシリーズの(3)~(5)をご覧下さい。
(1)RHEL10のリポジトリの作成
PXEサーバ上に、RHEL10をHTTPでインストールするためのリポジトリを作成します。
ディレクトリのパスは /var/www/html/repositories/rhel-10.0-x86_64/ とします。
このディレクトリに、RHEL10のインストールメディア rhel-10.0-x86_64-dvd.iso を iso9660 でマウントします。
# mkdir -p /var/www/html/repositories/rhel-10.0-x86_64
# mount -t iso9660 -o loop /usb/IMAGES/ISO/rhel-10.0-x86_64-dvd.iso /var/www/html/repositories/rhel-10.0-x86_64
(2)RHEL10のPXEブートに必要なファイルの配備
RHEL10をPXEブートするために必要となるカーネルファイルとRAMイメージを配備します。この2つのファイルは、RHEL10のISOイメージの中に含まれており、(1)で/var/www/html/repositories/rhel-10.0-x86_64/ にマウントしているので、/var/www/html/repositories/rhel-10.0-x86_64/images/pxeboot/ の下から取り出すことかできます。
# ls -l /var/www/html/repositories/rhel-10.0-x86_64/images/pxeboot/
合計 164021
-rw-r--r--. 1 root root 152090164 4月 11 04:13 initrd.img
-rwxr-xr-x. 1 root root 15865976 3月 25 09:00 vmlinuz
この2つのファイルをTFTPでダウンロード可能なディレクトリ /var/lib/tftpboot/pxeboot/rhel-10.0-x86_64/ 配下にコピーします。
# ls -l /var/lib/tftpboot/pxeboot/rhel-10.0-x86_64
合計 164024
-rw-r--r--. 1 root root 152090164 4月 11 04:13 initrd.img
-rwxr-xr-x. 1 root root 15865976 3月 25 09:00 vmlinuz
(3) grub.cfgファイルの作成
/var/lib/tftpboot/ 配下に grub.cfgファイルを作成します。ファイル名は、
grub.cfg
または
grub.cfg-01-<Macアドレス>
のいずれかで作成します。
今回テストするマシンのPXEboot対象NICのMacアドレスがc8:ff:bf:01:db:25 なので、
grub.cfg-01-c8-ff-bf-01-db-25 というファイル名で作成することにしました(ファイル名では「:」を「-」に置換します)。
内容は以下の通りに記述します。
set timeout=10
default=0
menuentry 'RHEL 10.0 x86_64 (kickstart)' {
linuxefi /pxeboot/rhel-10.0-x86_64/vmlinuz ip=dhcp vga=normal inst.graphical inst.resolution=1024x768 inst.repo=http://192.168.2.203/repositories/rhel-10.0-x86_64/ inst.ks=http://192.168.2.203/repositories/kickstarts/rhel-10.0.base2.cfg
initrdefi /pxeboot/rhel-10.0-x86_64/initrd.img
}
vmlinuz, initrd.img のパスは、(2)で設置したパスを記述するのですが、/var/lib/tftpboot/ をtopディレクトリとした場合のパスで記述することに注意して下さい。
inst.repo= のURLは、(1)で作成したリポジトリのURLを記述します。
inst.ks= のURLは、(4)で作成するkickstartファイルのURLを記述します。
これらは、/var/www/htmlをtopディレクトリとした場合のパスで記述することに注意です。
(4) kickstartファイルの作成
(3)のgrub.cfg-01-c8-ff-bf-01-db-25に記述した、kickstartファイルのURLが
inst.ks=http://192.168.2.203/repositories/kickstarts/rhel-10.0.base2.cfg
なので、作成するファイルのパスは、
/var/www/html/repositories/kickstarts/rhel-10.0.base2.cfg
です。
kickstartファイルは、手作業でOSインストールしたときに作成された、/root/anaconda-ks.cfg をベースに作成するのが最も良い方法です。なぜなら、NICやストレージのデバイス名を確認できますし、ストレージのパーティションの数値も正確に分かるからです
今回使用したkickstartファイルを以下に示します。
(こちらからもダウンロード可能です)
# Generated by Anaconda 40.22.3.26
# Generated by pykickstart v3.52.8
# version=RHEL10
# Use graphical install
graphical ★1
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
# Keyboard layouts
keyboard --vckeymap=jp --xlayouts='jp'
# System language
lang ja_JP.UTF-8
# Network information
# network --bootproto=dhcp --device=enp1s0 --noipv6 --nameserver=192.168.1.1 --gateway=192.168.2.200 --activate ★2
network --bootproto=static --device=enp1s0 --gateway=192.168.2.200 --ip=192.168.2.211 --nameserver=192.168.1.1 --netmask=255.255.255.0 --activate ★3
network --hostname=base2 ★4
# repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream ★5
repo --name="AppStream" --baseurl=http://192.168.2.203/repositories/rhel-10.0-x86_64/AppStream ★5
%packages ★6
@^minimal-environment
@ Development Tools
@ Virtualization Host
rear
nfs-utils
virt-install
%end
# Run the Setup Agent on first boot
firstboot --enable
# Generated using Blivet version 3.10.0
ignoredisk --only-use=nvme0n1
# Partition clearing information
#clearpart --none --initlabel ★7
zerombr ★8
clearpart --all --initlabel ★8
# Disk partitioning information
part swap --fstype="swap" --ondisk=nvme0n1 --size=8192
part /boot/efi --fstype="efi" --ondisk=nvme0n1 --size=600 --fsoptions="umask=0077,shortname=winnt"
part /boot --fstype="xfs" --ondisk=nvme0n1 --size=1024
part / --fstype="xfs" --ondisk=nvme0n1 --size=478569
# System timezone
timezone Asia/Tokyo --utc
# Root password
rootpw --iscrypted --allow-ssh $y$j9T$P3WL2f4p6F888s3u67BBWcc6$8Jnp6MSexbhiCAZ6lnMC9t4BeGIk7NSOwMDDsgDxxxx
selinux --disabled ★9
eula --agreed ★10
# Reboot after installation
reboot ★11
# Postscript
%post --log=/root/postscript.log ★12
set -x
date
# disable firewall
systemctl stop firewalld ★13
systemctl disable firewalld ★13
# mount NFS directory to use setup scritps ★14
NFSHOST="192.168.2.200"
mkdir -p /export/
mount -t nfs $NFSHOST:/export/ /export/
# copy scripts
cp -rp /export/base2/subscription_mng.sh /root/
# regist subscription
/root/subscription_mng.sh ★15
date
%end
★1: graphicalを指定した場合は、GUIモードでインストーラが起動します。
textにしたほうが処理は早いらしいのですが、kickstartインストールが成功するまでは、
graphicalを指定しておいて、ディスプレイで経過を観察するほうがデバッグしやすいです。
★2: ネットワーク設定をDHCPとする場合はこのように記述します。nameserverとgatewayは環境に合わせて設定します。
★3: ネットワーク設定を静的にする場合はこのように記述します。今回インストールするホストのIPアドレスを 192.168.2.211 とします。
★4: 今回インストールするホストのホスト名を base2 とします。
★5: USBメディアからインストールしたときのbaseurlを、今回使用するリポジトリに修正します。
★6: %packagesと%endの間に、必要なパッケージグループ、またはパッケージを追加します。
★7: USBメディアからインストールしたときのclearpart文はコメントアウトします。
★8: 上記の代わりに、kickstartインストールでディスクを初期化する処理を入れます。
★9: SElinuxを無効化します。
★10: eulaに同意します。
★11: インストールが完了した後に自動的に再起動します。
★12: %postから%endまでの間に、インストールが完了した後に、実行する処理(コマンド)を記述することができます。この処理をpostscriptと言います。インストール直後の状態なので、全てのコマンドを実行できる訳ではありません。例えば、ネットワークマネージャはこの時点で稼働していていので、nmcliコマンドは使用できません。
postscriptの出力をログファイルに残すために、--log=/root/postscript.log を指定しています。
★13: NFSを利用するために、firewallを無効化します。
★14: NFSサーバ(今回の環境では192.168.2.200)の/exportをNFSマウントしています。
ここでNFSを利用するために、★6でnfs-utilsを指定して事前にインストールしています。
インストール時に自動に処理したいことを、スクリプトで準備しておき、postscriptの中でNFSを経由してインストール対象ホストにコピーすると便利です。
★15: コピーした /root/subscription_mng.sh を実行しています。このスクリプトでは、以下のようにサブスクリプションの登録を行っています。
subscription-manager register --username "xxx@xxxx.com" --password "xxxxxxxxxxxx" --proxy 192.168.2.200:3128
–usernameと–passwordはトライアルを申請したRedHatアカウントのユーザ名とパスワードです。
–proxyは、RedHatのサイトに接続するのにプロキシサーバが必要なら指定します。
kickstartでインストールを開始
今回のインストール対象のマシンは、GMKtec Nucbox M7 です。
Nucbox M7のBIOSのBootメニューでブート順序の1番目をPXEブートに設定し、再起動すると、PXEブートの後に、kickstartによるインストールが始まります(Nucbox M7でPXEブートを有効にする方法はコチラ)。
kickstartによるインストールのデバッグのために、Nucbox M7にディスプレイ装置とキーボードを接続しておき、経過を観察します。GUIインストールで見慣れたインストーラの処理を画面で見ることができます。kickstartファイルにエラーがあれば処理が止まり、メッセージが表示されるので、kickstartファイルを修正します。
kickstartインストールは成功したが、ブート順序が変わっていない
RHEL10をkickstartインストールすることができたのですが、インストールの後、自動的にBoot Option #1が「NVME:RedHat Boot Manager」に変わりませんでした。
テストのために、kickstartファイルの★11のrebootを削除して、再度kickstartインストールを試みます(rebootを記述しなければ、インストール後に再起動はかかりません)。
インストール完了後、ホストbase2にログインして、efibootmgrコマンドを実行して、ブート順序を確認すると、以下のようになっていました。
# efibootmgr -v
BootCurrent: 0000
Timeout: 2 seconds
BootOrder: 0004,0005,0000,0003
Boot0000* Red Hat Enterprise Linux HD(1,GPT,b14b99cf-86e6-4d65-b3ec-b412fdf8ca59,0x800,0x12c000)/\EFI\REDHAT\SHIMX64.EFI dp: 04 01 2a 00 01 00 00 00 00 08 00 00 00 00 00 00 00 c0 12 00 00 00 00 00 cf 99 4b b1 e6 86 65 4d b3 ec b4 12 fd f8 ca 59 02 02 / 04 04 34 00 5c 00 45 00 46 00 49 00 5c 00 52 00 45 00 44 00 48 00 41 00 54 00 5c 00 53 00 48 00 49 00 4d 00 58 00 36 00 34 00 2e 00 45 00 46 00 49 00 00 00 / 7f ff 04 00
Boot0003 Windows Boot Manager VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)57494e444f5753000100000088000000780000004200430044004f0042004a004500430054003d007b00390064006500610038003600320063002d0035006300640064002d0034006500370030002d0061006300630031002d006600330032006200330034003400640034003700390035007d00000000000100000010000000040000007fff0400
dp: 01 04 14 00 e7 75 e2 99 a0 75 37 4b a2 e6 c5 38 5e 6c 00 cb / 7f ff 04 00
data: 57 49 4e 44 4f 57 53 00 01 00 00 00 88 00 00 00 78 00 00 00 42 00 43 00 44 00 4f 00 42 00 4a 00 45 00 43 00 54 00 3d 00 7b 00 39 00 64 00 65 00 61 00 38 00 36 00 32 00 63 00 2d 00 35 00 63 00 64 00 64 00 2d 00 34 00 65 00 37 00 30 00 2d 00 61 00 63 00 63 00 31 00 2d 00 66 00 33 00 32 00 62 00 33 00 34 00 34 00 64 00 34 00 37 00 39 00 35 00 7d 00 00 00 00 00 01 00 00 00 10 00 00 00 04 00 00 00 7f ff 04 00
Boot0004* UEFI: PXE IPv4 Intel(R) Ethernet Controller I226-V
PciRoot(0x0)/Pci(0x1,0x3)/Pci(0x0,0x0)/MAC(c8ffbf01db25,1)/IPv4(0.0.0.0,0,DHCP,0.0.0.0,0.0.0.0,0.0.0.0)0000424f
dp: 02 01 0c 00 d0 41 03 0a 00 00 00 00 / 01 01 06 00 03 01 / 01 01 06 00 00 00 / 03 0b 25 00 c8 ff bf 01 db 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 / 03 0c 1b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 / 7f ff 04 00
data: 00 00 42 4f
Boot0005* UEFI: PXE IPv4 Intel(R) Ethernet Controller I226-V
PciRoot(0x0)/Pci(0x2,0x1)/Pci(0x0,0x0)/MAC(c8ffbf01db26,1)/IPv4(0.0.0.0,0,DHCP,0.0.0.0,0.0.0.0,0.0.0.0)0000424f
dp: 02 01 0c 00 d0 41 03 0a 00 00 00 00 / 01 01 06 00 01 02 / 01 01 06 00 00 00 / 03 0b 25 00 c8 ff bf 01 db 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 / 03 0c 1b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 / 7f ff 04 00
data: 00 00 42 4f
BootOrder: 0004,0005,0000,0003 なので、ブート順序の1番目は「UEFI: PXE IPv4」となっています。
ここで明示的にブート順序を変更してみましょう。
# efibootmgr -o 0000,0004,0005,0003
BootCurrent: 0000
Timeout: 2 seconds
BootOrder: 0000,0004,0005,0003
Boot0000* Red Hat Enterprise Linux HD(1,GPT,b14b99cf-86e6-4d65-b3ec-b412fdf8ca59,0x800,0x12c000)/\EFI\REDHAT\SHIMX64.EFI
Boot0003 Windows Boot Manager VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)57494e444f5753000100000088000000780000004200430044004f0042004a004500430054003d007b00390064006500610038003600320063002d0035006300640064002d0034006500370030002d0061006300630031002d006600330032006200330034003400640034003700390035007d00000000000100000010000000040000007fff0400
Boot0004* UEFI: PXE IPv4 Intel(R) Ethernet Controller I226-V
PciRoot(0x0)/Pci(0x1,0x3)/Pci(0x0,0x0)/MAC(c8ffbf01db25,1)/IPv4(0.0.0.0,0,DHCP,0.0.0.0,0.0.0.0,0.0.0.0)0000424f
Boot0005* UEFI: PXE IPv4 Intel(R) Ethernet Controller I226-V
PciRoot(0x0)/Pci(0x2,0x1)/Pci(0x0,0x0)/MAC(c8ffbf01db26,1)/IPv4(0.0.0.0,0,DHCP,0.0.0.0,0.0.0.0,0.0.0.0)0000424f
ブート順序が、BootOrder: 0000,0004,0005,0003 となって、「Red Hat Enterprise Linux」が先頭になったかと思ったのですが、再起動すると、再度PXEブートが優先して実行されてしまいました。
この原因が、Nucbox M7のBIOS側にあるのかOSのほうにあるのかは分からないままですが、BIOS設計でブート順序の先頭を「Red Hat Enterprise Linux」に変更して使用しています。
このブログにおける関連リンク
・RHEL10の無料トライアルを試す
・RHEL10がインストールできない
・RHEL10がインストールできた(GUIインストール)



コメント