PXEブート+kickstartサーバの構築手順(CentOS8.2 UEFI版)

大量のインストール作業をすることになったので、
CentOS8.2でPXEブート+kickstartを使用して自動インストールの準備をしてみました。
インストール対象のサーバ毎に異なるkickstartファイルを使用するようにもしています。

1.環境:
PXEブートサーバ:CentOS8.2 192.168.0.33
pxeブートconfigファイル:
/var/lib/tftpboot/grub.cfg-C0A80023
/var/lib/tftpboot/grub.cfg-C0A80024
kickstartファイル
/var/www/html/ks/client1.cfg
/var/www/html/ks/client2.cfg
ISOイメージ置き場
/home/iso/CentOS-8.2.2004-x86_64-dvd1.iso
ISOのマウントポイント
/var/pxe/centos8

インストール対象サーバ1(client1): CentOS8.2 192.168.0.35 MACアドレス:00:0c:29:ae:e3:0a
インストール対象サーバ2(clietn2): CentOS8.2 192.168.0.36 MACアドレス:00:0c:29:51:e5:c2

DHCPサーバで指定のMACアドレス毎に指定のIPを割り振る
指定のIP毎に異なるkickstartファイルを読み込んでUEFI自動インストールを実施します。

2.OS基本セットアップ
最小インストールでインストール

SELINUXの無効化
vi /etc/selinux/config
SELINUX=enforcing
↓
SELINUX=disabled

IPv6の無効化
vi /etc/sysctl.conf

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

sysctl -p

ip addr show

before
[root@centos82 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:ae:9a:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.33/24 brd 192.168.0.255 scope global noprefixroute ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feae:9a9e/64 scope link
       valid_lft forever preferred_lft forever
[root@centos82 ~]#

after
[root@centos82 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:ae:9a:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.33/24 brd 192.168.0.255 scope global noprefixroute ens192
       valid_lft forever preferred_lft forever
[root@centos82 ~]#

firealldの停止・無効化
systemctl stop firewalld
systemctl disable firewalld

再起動
shutdown -r now

/root/anaconda-ks.cfgを取得しておく。
(このファイルを元にkickstartファイルを作成します)

3.TFTPサーバのインストールと起動

dnf -y install tftp-server
systemctl enable --now tftp.socket

4.DHCPサーバの設定

# ドメイン名指定
option domain-name     "test.local";
# ネームサーバーのホスト名, または IP アドレス指定
option domain-name-servers     192.168.0.1;
# デフォルト貸出期間
default-lease-time 600;
# 最大貸出期間
max-lease-time 7200;
# 正当な DHCP サーバーであることの宣言
authoritative;

option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;
option architecture-type code 93 = unsigned integer 16;


# ネットワークアドレスとサブネットマスク指定

subnet 192.168.0.0 netmask 255.255.255.0 {
    # 貸し出す IP アドレスの範囲指定
#    range dynamic-bootp 192.168.0.35 192.168.0.37;
    # ブロードキャストアドレス指定
    option broadcast-address 192.168.0.255;
    # ゲートウェイアドレス指定
    option routers 192.168.0.1;

    class "pxeclients" {
        match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
        # PXE サーバーのホスト名 または IP アドレス
        next-server 192.168.0.33;

        if option architecture-type = 00:07 {
            filename "BOOTX64.EFI";
        }
        else {
            filename "pxelinux.0";
        }
    }

}

host client1 {
hardware ethernet 00:0c:29:ae:e3:0a;
fixed-address 192.168.0.35;
option host-name "client1";
}

host client2 {
hardware ethernet 00:0c:29:51:e5:c2;
fixed-address 192.168.0.36;
option host-name "client2";
}
systemctl enable --now dhcpd

5.UEFIブートの準備

mkdir /home/iso
/home/isoにCentOS-8.2.2004-x86_64-dvd1.iso を配置

cd /root

mkdir rpm

dnf -y install --downloadonly --downloaddir=/root/rpm shim grub2-efi-x64

cd rpm

rpm2cpio shim-x64-*.rpm | cpio -dimv

rpm2cpio grub2-efi-x64-*.rpm | cpio -dimv

cp ./boot/efi/EFI/BOOT/BOOTX64.EFI /var/lib/tftpboot/
cp ./boot/efi/EFI/centos/grubx64.efi /var/lib/tftpboot/

chmod 755 /var/lib/tftpboot/BOOTX64.EFI
chmod 755 /var/lib/tftpboot/grubx64.efi


cd

mkdir -p /var/pxe/centos8
mkdir /var/lib/tftpboot/centos8

mount -t iso9660 -o loop,ro /home/iso/CentOS-8.2.2004-x86_64-dvd1.iso /var/pxe/centos8
cp /var/pxe/centos8/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos8/

PXEブートconfigをサーバ毎に作成する。
UEFIブートの場合は、grub.cfg-C0A80023 のようにIPアドレスを大文字16進数に変換したファイル名とする。

vi /var/lib/tftpboot/grub.cfg-C0A80023   (192.168.0.35)

set timeout=30
menuentry 'PXE Install CentOS 8' {
    linuxefi centos8/vmlinuz ip=dhcp inst.ks=http://192.168.0.33/ks/client1.cfg inst.repo=http://192.168.0.33/centos8
    initrdefi centos8/initrd.img
}

vi /var/lib/tftpboot/grub.cfg-C0A80024   (192.168.0.36)

set timeout=30
menuentry 'PXE Install CentOS 8' {
    linuxefi centos8/vmlinuz ip=dhcp inst.ks=http://192.168.0.33/ks/client2.cfg inst.repo=http://192.168.0.33/centos8
    initrdefi centos8/initrd.img
}

6.apacheのインストールと設定

dnf -y install httpd

mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.org

vi /etc/httpd/conf/httpd.conf

ServerAdmin root@test.local

ServerName 192.168.0.33:80

# 147行目:変更 (Indexes は削除)
Options FollowSymLinks

# 154行目:変更
AllowOverride All

# 167行目:必要に応じて追記 (ディレクトリ名のみでアクセスできるファイル名)
DirectoryIndex index.html index.php index.cgi

# 167行目:必要に応じて追記 (ディレクトリ名のみでアクセスできるファイル名)
DirectoryIndex index.html index.php index.cgi

# 最終行に追記
# サーバーの応答ヘッダ
ServerTokens Prod
# キープアライブオン
KeepAlive On


vi /etc/httpd/conf.d/pxeboot.conf

Alias /centos8 /var/pxe/centos8
<Directory /var/pxe/centos8>
    Options Indexes FollowSymLinks
    # アクセス許可範囲
    Require ip 127.0.0.1 192.168.0.0/24
</Directory>
systemctl enable --now httpd

7.キックスタートの準備

mkdir /var/www/html/ks

/var/www/html/ks に client1.cfg,client2.cfg を配置する。

http://192.168.0.33/ks/client1.cfg
http://192.168.0.33/ks/client2.cfg
にアクセスできることを確認する。


client1.cfg,clisent2.cfgは最小インストール時にできる、
/root/anaconda-ks.cfg をコピー元として作成する。

view /var/www/html/ks/client1.cfg

#version=RHEL8
ignoredisk --only-use=sda
# パーティションテーブルは全て初期化
zerombr
clearpart --all --initlabel
# Reboot after installation
reboot
# Use graphical install
graphical
autostep

# Keyboard layouts
keyboard --vckeymap=jp --xlayouts='jp'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=static --device=ens192 --gateway=192.168.0.1 --ip=192.168.0.35 --nameserver=192.168.0.1 --netmask=255.255.255.0 --noipv6 --activate
network  --hostname=centos82-02
# Use network installation
url --url="http://192.168.0.33/centos8/"
# Root password
rootpw --iscrypted $6$VN4OxRtymSvQj2AR$DBvqbjsbw6pisN6VsWp8u8tIgLiVluezCkgkUd2.IZoDY5duHec6M5sMiKE04jQya0MqXUvkRgrGeStI2B68R/
# Run the Setup Agent on first boot
firstboot --enable
# Do not configure the X Window System
skipx
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Tokyo --isUtc --nontp
user --name=sasaki --password=$6$mxDRyxqxJ1j4S19o$k8S99N9ExysJN/iYFh4q25oh5TA0Tgbvn7nGSuejyiYlGWvRd7YzrdB/poyxB10bfJX.oZ4l.BJD7E9EFdtG7. --iscrypted


# Disk partitioning information
part /boot/efi --fstype="efi" --ondisk=sda --size=300 --fsoptions="umask=0077,shortname=winnt"
part pv.631 --fstype="lvmpv" --ondisk=sda --size=15058
part /boot --fstype="ext4" --ondisk=sda --size=1024
part swap --fstype="swap" --ondisk=sda --size=4096
volgroup cl --pesize=4096 pv.631
logvol / --fstype="xfs" --size=15056 --name=root --vgname=cl

%packages
@^minimal-environment
kexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end



view /var/www/html/ks/client2.cfg

#version=RHEL8
ignoredisk --only-use=sda
# パーティションテーブルは全て初期化
zerombr
clearpart --all --initlabel
# Reboot after installation
reboot
# Use graphical install
graphical
autostep

# Keyboard layouts
keyboard --vckeymap=jp --xlayouts='jp'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=static --device=ens192 --gateway=192.168.0.1 --ip=192.168.0.36 --nameserver=192.168.0.1 --netmask=255.255.255.0 --noipv6 --activate
network  --hostname=centos82-03
# Use network installation
url --url="http://192.168.0.33/centos8/"
# Root password
rootpw --iscrypted $6$VN4OxRtymSvQj2AR$DBvqbjsbw6pisN6VsWp8u8tIgLiVluezCkgkUd2.IZoDY5duHec6M5sMiKE04jQya0MqXUvkRgrGeStI2B68R/
# Run the Setup Agent on first boot
firstboot --enable
# Do not configure the X Window System
skipx
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Tokyo --isUtc --nontp
user --name=sasaki --password=$6$mxDRyxqxJ1j4S19o$k8S99N9ExysJN/iYFh4q25oh5TA0Tgbvn7nGSuejyiYlGWvRd7YzrdB/poyxB10bfJX.oZ4l.BJD7E9EFdtG7. --iscrypted


# Disk partitioning information
part /boot/efi --fstype="efi" --ondisk=sda --size=300 --fsoptions="umask=0077,shortname=winnt"
part pv.631 --fstype="lvmpv" --ondisk=sda --size=15058
part /boot --fstype="ext4" --ondisk=sda --size=1024
part swap --fstype="swap" --ondisk=sda --size=4096
volgroup cl --pesize=4096 pv.631
logvol / --fstype="xfs" --size=15056 --name=root --vgname=cl

%packages
@^minimal-environment
kexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

これでPXEブートとkickstartでの自動インストールの準備は完了です。
インストール対象サーバを起動すると自動的にインストールが始まり、
再起動まで完了します。

Comments are closed.