それなりに適当にやってます

なんとなくそれっぽいメモとか備忘録とか適当に。 2018年5月にブログ移転しました。 古い記事は未整理です。

UEFI対応Kickstart環境の構築

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でやったらうまくいかなかったのよ。。(ハマった。。)

以上