LoginSignup
10
10

More than 1 year has passed since last update.

UEFIなPCをPXE BootさせてkickstartでCentOS 7をインストール

Last updated at Posted at 2018-08-01

はじめに

表題詐欺のようで恐縮ですが、事細かに書いていないので、これを見たり打ったりしただけでは表題を達成できませんのでご了承下さい。

要点

 UEFIなPCを使った結果、ざっとググった結果ではうまくいかず、ずいぶん時間がかかってしまったという話。具体的には以下の通り。

  • PCのUEFI設定にセキュアブートがある場合、設定の変更が必要
  • PXE起動に必要な情報を配信できるDHCPサーバーが必要
  • 既存のDHCPサーバーがPXE起動に必要な情報を配信できない場合でも共存できる
  • PXE起動で読み込むイメージはUEFI向けのものが必要
  • Kickstartのディスク構成にUEFI向けの記述が必要

環境

項目 内容
インストール対象PC Intel NUC7CJYH
インストール対象PCのIPアドレス 192.168.100.101
起動用、配信用サーバーIPアドレス 192.168.100.1
PXE起動用DHCPサーバー dhcp-4.2.5-68.el7.centos.1.x86_64
PXE起動用TFTPサーバー tftp-server-5.2-22.el7.x86_64
PXE起動用イメージ置き場 /var/lib/tftpboot
CentOSインストールISO配信用ftpサーバー vsftpd-3.0.2-22.el7.x86_64
CentOSインストールISOマウントポイント /var/ftp/centos7
Kickstartファイル置き場 /var/ftp/pub/kickstart

UEFIなPCに必要な設定

まず最初に出たエラーメッセージがこちら。

DSC_0069s.jpg

 IPv4でPXEブートを選択した後に表示され、Authorizationという単語が見えたので、きっとTFTPサーバー側のパーミッションか何かの問題だろう、と思っていたが、PC側のセキュアブートという機能の影響だった。

DSC_0075s.jpg

 チェックが入り有効になっていたSecure Bootという項目のチェックを外し、機能を無効化したところ、同じエラーは出ないようになった。

PXE起動に必要な情報を配信できるDHCPサーバーが必要

 ルーターがDHCPサーバーを兼ねている環境だったので、まずはルーターの設定を変更しようと思った。DHCPサーバーが配信する情報のうち、PXE起動に必要な情報は以下の通り。

項目 内容
next-server 起動イメージファイルを提供するサーバーのIPアドレス
filename 最初に読み込む起動イメージファイル

 これらの項目が指定できないDHCPサーバー(家庭向けのルーターなど)ではPXE起動に必要な情報を配信できない。このため、別途DHCPサーバーが必要となる。しかし何らかの理由で既存のDHCPサーバーを止められない場合、共存できる設定が必要になる。

既存DHCPサーバーとの共存

共存の考え方

  1. 既存DHCPサーバーはPXE起動による配信要求には応答しない
  2. 追加DHCPサーバーは特定の条件に合致する配信要求にしか応答しない
  3. 追加DHCPサーバーはすでに配信されたIPアドレスと重複するものを配信しない

 だと思うのだけど、1を実現する方法がわからなかった。1なしでうまくできてしまっている。何度やってもうまくいくので、うまくいく理由があるのだと思うけれど、今回は追求せず。

共存のための要件

  • PXE起動に使用するNICのMACアドレスがわかっていること

 MACアドレスが事前にわからないケースが想像できないが、DHCPサーバーにMACアドレスに紐づいた処理をさせることで、共存の考え方の2,3を実現した。

/etc/dhcp/dhcpd.conf(の一部)
subnet 192.168.100.0 netmask 255.255.255.0 {
        option routers          192.168.100.1;
        option subnet-mask      255.255.255.0;
        option domain-name-servers 192.168.100.1;
        deny                    unknown-clients;
}
host pc01 {
        hardware ethernet xx:xx:xx:xx:xx:xx;
        fixed-address 192.168.100.11;
}

 こうすることで、設定ファイル内でhostとして記載したMACアドレス以外からの要求をunknown-clientsからのものと解釈し、応答しないようになった。

 この例では要求元MACアドレスに対し、IPアドレスを固定して配信している。rangeを設定し、その範囲内のIPアドレスを配信することもできると思うが未検証。

PXE起動で読み込むイメージはUEFI向けのものが必要

 よくある情報は、pxelinux.0を起動イメージとして用いるものだったが、これはUEFIに対応していない。UEFIに対応したイメージ(BOOTX64.EFI)を用いる必要がある。従来のBIOSとの混在環境に適応した設定は以下のようになった。

/etc/dhcp/dhcpd.conf
option space PXE;
option PXE.mtftp-ip    code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option arch code 93 = unsigned integer 16;

subnet 192.168.100.0 netmask 255.255.255.0 {
        option routers          192.168.100.1;
        option subnet-mask      255.255.255.0;
        option domain-name-servers 192.168.100.1;
        deny                    unknown-clients;
        class "pxeclients" {
                match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
                next-server 192.168.100.1;

                if option arch = 00:06 {
                        filename "BOOTIA32.EFI";
                } else if option arch = 00:07 {
                        filename "BOOTX64.EFI";
                } else {
                        filename "pxelinux.0";
                }
        }
}
host pc01 {
        hardware ethernet xx:xx:xx:xx:xx:xx;
        fixed-address 192.168.100.101;
}

 BOOTX64.EFIは、インストールイメージISOをマウントした場合、./EFI/BOOTにあった。そのほかにもいくつかのファイルがあったので、TFTPで配信するためのディレクトリにまるっとコピーした。

なおgrub.cfgはこうした。

/var/lib/tftpboot/grub.cfg
set timeout=60
menuentry 'CentOS 7' {
 echo 'Network status:'
 net_ls_cards
 net_ls_addr
 
 linuxefi /centos7/vmlinuz inst.repo=ftp://192.168.100.1/centos7 devfs=nomount ks=ftp://192.168.100.1/pub/kickstart/centos7.cfg
 initrdefi /centos7/initrd.img
}

Kickstartのディスク構成にUEFI向けの記述が必要

 諸々の設定を済ませ、無事インストール画面が出るようになったので、Kickstartの応答ファイルをネットを調べつつ作ったところ、ディスクの構成でエラーとなった。

 UEFIのPCの場合、/boot/efiというパーティションが必要なようだった。これを反映し、最終的にはこうなった。

/var/ftp/pub/kickstart/centos7.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use network installation
url --url="ftp://ftp.riken.jp/Linux/centos/7/os/x86_64"
# Use graphical install
graphical
# Use text mode install
#text
# Run the Setup Agent on first boot
firstboot --disable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=jp --xlayouts='jp'
# System language
lang ja_JP.UTF-8
# SELinux configuration
selinux disabled

# Network information
network  --bootproto=dhcp --device=enp0s3 --ipv6=auto --activate

# Root password
rootpw --iscrypted 暗号化したルートのパスワード
# System timezone
timezone Asia/Tokyo --isUtc
user --groups=wheel --name=同時に作るユーザー名 --password=暗号化したパスワード --iscrypted --gecos="username"
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --all --initlabel --drives=sda
# Disk partitioning information
ignoredisk --only-use=sda
clearpart --all --initlabel --drives sda
part /boot --fstype="xfs" --ondisk=sda --size=1024 --label=boot
#UEFI環境で必要な部分はじまり
part /boot/efi --fstype="xfs" --ondisk=sda --size=1024 --label=bootefi
#UEFI環境で必要な部分おわり
part pv.01 --fstype="lvmpv" --ondisk=sda --size=1024 --grow
volgroup vg_root --pesize=4096 pv.01
logvol swap  --fstype="swap" --size=8192 --name=lv_swap --vgname=vg_root
logvol /  --fstype="xfs" --grow --size=1024 --name=lv_root --vgname=vg_root

%packages
@^virtualization-host-environment
@gnome-desktop
@debugging
@network-file-system-client
vim
virt-manager
kexec-tools

%end

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

%end

参考リンク

adsaria mood 2008-01-21 PXEサーバの設定
http://d.hatena.ne.jp/adsaria/20080121/1200878022

のぴぴのメモ KickStartその2(ks.cfg設定ファイルの説明)
http://nopipi.hatenablog.com/?page=1470147625

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10