CobblerでPXEブート・ネットワークインストールの環境を整えていたけど、別にCobblerの機能を使いこなしているわけではないし、CobblerのUEFI対応が良く分からなかったので、勉強半分でCobblerを使わずにKickstartサーバを立ててみた。
参考URL
構築環境
- KVM仮想ゲスト
- CentOS7.x (2016/04/15時点)
- firewalld/SELiunx を無効化
- 最低限でインストールを実施
Kickstart環境の構築
Kickstart に必要なパッケージ郡のインストール、NFSも利用するので rpcbind と nfs-utils を追加している。
# yum -y install tftp-server dhcp httpd syslinux rpcbind nfs-utils
NFSをマウントして ISO と Kickstart 関連のデータはNFS上に置くようにする。
# mkdir /kicksatrt# mkdir /iso# mount -t nfs <nfs server>:<export path> /kickstart# mount -t nfs <nfs server>:<export path> /iso# umount /kickstart# umount /iso# vi /etc/fstab =>マウント情報の追記# mount -a# mount #<- 確認# mv /var/www /kickstart# mv /var/lib/tftpboot /kickstart# ln -s /kickstart/www /var/www# ln -s /kickstart/tftpboot /var/lib/tftpboot
ディレクトリの作成とか諸々
# mkdir /var/lib/tftpboot/pxelinux# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux/# mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg# mkdir /var/www/html/ks
CentOS6.7のISOイメージをマウントして、中身をKickstart用にコピー
# mkdir /var/www/html/CentOS67-x86_64# mkdir /tmp/iso# mount /iso/CentOS-6.7-x86_64-bin-DVD1.iso /tmp/iso# cp -af /tmp/iso/* /var/www/html/CentOS67-x86_64/# umount /tmp/iso# mount /iso/CentOS-6.7-x86_64-bin-DVD1.iso /tmp/iso# \cp -af /tmp/iso/* /var/www/html/CentOS67-x86_64/# umount /tmp/iso
続けてCentOS7.xのISOイメージをマウントして、中身をKickstart用にコピー
# mkdir /var/www/html/CentOS72-x86_64# mount /iso/CentOS-7-x86_64-DVD-1511.iso /tmp/iso# cp -af /tmp/iso/* /var/www/html/CentOS72-x86_64/# umount /tmp/iso
Anaconda起動用のカーネルと、初期RAMディスクイメージの配置
# mkdir /var/lib/tftpboot/pxelinux/CentOS67-x86_64# cp /var/www/html/CentOS67-x86_64/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/pxelinux/CentOS67-x86_64/# mkdir /var/lib/tftpboot/pxelinux/CentOS72-x86_64# cp /var/www/html/CentOS72-x86_64/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/pxelinux/CentOS72-x86_64/
DHCPの設定
# cp /etc/dhcp/dhcpd.conf{,.orig}# vi /etc/dhcp/dhcpd.conf
subnet 192.168.2.0 netmask 255.255.255.0 { option routers 192.168.2.1; option domain-name-servers 192.168.2.1; option subnet-mask 255.255.255.0; range dynamic-bootp 192.168.2.200 192.168.2.254; default-lease-time 1800; max-lease-time 3600; next-server 192.168.2.10; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; filename "pxelinux/pxelinux.0"; }}
Kickstartのブートメニューと、ブートメニューファイルを設定
# vi /var/lib/tftpboot/pxelinux/boot.msg
================= Oppai! Oppai!=================1. CentOS 6.7 (x86_64) 2. CentOS 7.2 (x86_64)> select os number.
# vi /var/lib/tftpboot/pxelinux/pxelinux.cfg/default
prompt 1 display boot.msglabel 1 kernel /CentOS67-x86_64/vmlinuz append initrd=/CentOS67-x86_64/initrd.img ks=http://192.168.2.10/ks/ks_CentOS67.cfglabel 2 kernel /CentOS72-x86_64/vmlinuz append initrd=/CentOS72-x86_64/initrd.img ks=http://192.168.2.10/ks/ks_CentOS72.cfg repo=http://210.171.5.170/CentOS72-x86_64 ip=dhcp
Kickstartファイルの設置
# vi /var/www/html/ks/ks_CentOS67.cfg
url --url=http://192.168.2.10/CentOS67-x86_64
# vi /var/www/html/ks/ks_CentOS72.cfg
url --url=http://192.168.2.10/CentOS72-x86_64
各種サービスを起動
# systemctl enable dhcpd.service# systemctl enable tftp.service# systemctl enable httpd.service# systemctl start dhcpd.service# systemctl start tftp.service# systemctl start httpd.service
この段階でKVM仮想ゲストを起動し、OSのインストールが動作する事を確認した(`・ω・\´)
UEFIの対応
参考URLではセキュアブート有効=CentOS7のみか、セキュアブート無効=CentOS6,7対応の2通りの手順が書かれていたが、一応CentOS6にも対応しておきたいので、以下ではセキュアブート無効=CentOS6,7対応の環境を試す。
PXEブートイメージの準備
# mkdir /var/lib/tftpboot/uefi/# mkdir /tmp/grub ; cd $_# rpm2cpio /var/www/html/CentOS67-x86_64/Packages/grub-0.97-94.el6.x86_64.rpm | cpio -id# cp ./boot/efi/EFI/redhat/grub.efi /var/lib/tftpboot/uefi/# cd /var/lib/tftpboot/uefi# ln -s ../pxelinux/CentOS67-x86_64 CentOS67-x86_64# ln -s ../pxelinux/CentOS72-x86_64 CentOS72-x86_64
UEFI用GRUBブートメニューの準備
# vi /var/lib/tftpboot/uefi/efidefault
default=0title CentOS 6.7 (x86_64) root (nd) kernel /CentOS67-x86_64/vmlinuz ks=http://192.168.2.10/ks/ks_CentOS67.cfg initrd /CentOS67-x86_64/initrd.imgtitle CentOS 7.2 (x86_64) root (nd) kernel /CentOS72-x86_64/vmlinuz ks=http://192.168.2.10/ks/ks_CentOS72.cfg initrd /CentOS72-x86_64/initrd.img
DHCPサーバにUEFI用のブートイメージの設定を追加
# cp /etc/dhcp/dhpcd.conf{,.`date +%Y%m%d`}# vi /etc/dhcp/dhcpd.conf
option arch code 93 = unsigned integer 16; # RFC4578subnet 192.168.2.0 netmask 255.255.255.0 { option routers 192.168.2.1; option domain-name-servers 192.168.2.1; option subnet-mask 255.255.255.0; range dynamic-bootp 192.168.2.200 192.168.2.254; default-lease-time 1800; max-lease-time 3600; next-server 192.168.2.10; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; if option arch = 00:07 { filename "uefi/grub.efi"; } else { filename "pxelinux/pxelinux.0"; } }}
DHCPのサービスを再起動
# systemctl restart dhcpd
で、UEFIでのブートとインストールの確認はVMwareの仮想ゲストで実施した。 ・・・KVM+OVMFでやったらうまくいかなかったのよ。。(ハマった。。)
以上