Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

In this tutorial I will be sharing step by step instructions to configure IPv6 UEFI PXE Boot with Kickstart using RHEL/CentOS 8 Linux server.

 

Sequential order to configure IPv6 UEFI PXE Boot with Kickstart

Advertisement
    • Setup Installation Repo
    • Install and Configure TFTP
    • Install and Configure DHCPv6
  • Install and Configure HTTP
  • Prepare kickstart file
  • Perform UEFI PXE Boot

 

Lab Environment

I have two physical hardware running on HPE Proliant blades with UEFI BIOS. Now the source server can be any Linux server actually, although the steps to configure DHCPv6, TFTP and other services would vary if you choose to use any other Linx variant such as Ubuntu, Debian. In my case, the source server is running on Legacy BIOS while the target server where I intend to do the automated installation is with UEFI BIOS.

Here are my server details:

Hostname: server.example.com
Release: CentOS Linux release 8.2.2004 (Core)
IP Address: 10.43.138.7/27, 2001:1:1:1442::407/122

Below is the output of my primary interface. I have a dual stack server so I have configured both IPv4 and IPv6 but I will be using IPv6 for the network boot.

[root@server ~]# ip a
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: eno49: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:17:a4:77:00:26 brd ff:ff:ff:ff:ff:ff
    inet 10.43.138.7/27 brd 10.43.138.31 scope global noprefixroute eno49
       valid_lft forever preferred_lft forever
    inet6 2001:1:1:1442::407/122 scope global noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::d478:91c3:ecd7:4ff9/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

[root@server ~]# ip -6 route
::1 dev lo proto kernel metric 256 pref medium
2001:1:1:1442::400/122 dev eno49 proto kernel metric 100 pref medium
fe80::/64 dev eno49 proto kernel metric 100 pref medium
default via 2001:1:1:1442::43f dev eno49 proto static metric 100 pref medium

 

Pre-requisite

  • You must have RHEL/CentOS 8 installed OS on a server. Now this server may or may not have UEFI BIOS.
  • The interface used for PXE must have an IPv6 address
  • If you are using RHEL 8 then you must have an active RHN subscription
  • If you are using CentOS 8 then you must have an active internet connection to download and install package. Although you may also configure offline repository if your server doesn't have active internet connection
  • It is recommended to have umask set as 022 as the kickstart installation over network would need world readable access for all required files and directories

 

Steps to configure IPv6 UEFI PXE Boot Server using Kickstart

Step-1: Setup Installation Repository

We would need an installation repository with all the rpms from the RHEL/CentOS 8 image which will be used to install our target server. I have downloaded the CentOS 8.2 image which I will mount on /mnt and then copy the content to my local directory.

# mount /tmp/CentOS-8.2.2004-x86_64-dvd1.iso /mnt
# cd /mnt
# mkdir -p /home/images/centos82

I have created /home/images/centos82 directory where I will copy all the files from /mnt:

Advertisement
# cp -rvf /mnt* /home/images/centos82/

In some cases thee hidden file from the base image i.e. .treeinfo and .discinfo is not copied by default so copy them manually

IMPORTANT NOTE:
It is important to copy .treeinfo and .discinfo from the image or else your installation is expected to fail. These are referred during the installation over the network using PXE to validate the integrity of the repository.
cp /mnt/.discinfo /home/images/centos82/
cp /mnt/.treeinfo /home/images/centos82/

After copying all the files:

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

 

Step-2: Install and Configure TFTP Server

Next we will use TFTP server to transfer the UEFI PXE Boot files required for installing the target nodes over network. Use the following command to install tftp packages:

~]# dnf install tftp-server -y

Once the package is installed, you can check for the path of systemd unit file using following command:

~]# rpm -ql tftp-server | grep -E "service|socket"

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

Next you can check the content of the service unit file:

~]# cat /usr/lib/systemd/system/tftp.service

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

Here you see that by default the tftp service will search for TFTP files inside /var/lib/tftpboot. So we will place all our UEFI PXE Boot files under this location. If you plan to use a different path then you can modify this service file and execute following command to update your changes:

]# systemctl daemon-reload
]# systemctl restart tftp.service

Next enable and start this service to make sure the service is started automatically post reboot.

]# systemctl enable tftp.service --now
Created symlink /etc/systemd/system/sockets.target.wants/tftp.socket → /usr/lib/systemd/system/tftp.socket.

Since the tftp service is managed by tftp socket, it is important that the socket is up and running. As and when there is an incoming TFTP request, the socket will start the service automatically.

Check the status of the socket to make sure it was started successfully.

 ~]# systemctl status tftp.service

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

 

Step-3: Configure UEFI PXE Boot Server

Next to perform UEFI {XE Boot installation, we will need PXE boot files. Normally for Legacy BIOS PXE boot we needed pxelinux.0 and ldlinux.c32 part of syslinux-tftpboot rpm.

But for UEFI BIOS we need following files:

  • grubx64.efi provided by grub2-efi-x64 rpm
  • shimx64.efi provided by shim-x64 rpm
  • BOOTX64.EFI provided by shim-x64 rpm

You can copy the mentioned rpms from the image to some temporary location such as /tmp and extract the rpm to get the required files:

]# cp /home/images/centos82/BaseOS/Packages/grub2-efi-x64-2.02-81.el8.x86_64.rpm /tmp/

]# cp /home/images/centos82/BaseOS/Packages/shim-x64-15-11.el8.x86_64.rpm /tmp/

Next extract these rpms using rpm2cpio command.

]# cd /tmp

]# rpm2cpio shim-x64-15-11.el8.x86_64.rpm | cpio -idm

]# rpm2cpio grub2-efi-x64-2.02-81.el8.x86_64.rpm | cpio -idm

We will store all our PXE files inside /var/lib/tftpboot/pxelinux. Now if you recall, by default TFTP will look into /var/lib/tftpboot so we must handle the extra pxelinux directory while setting up our UEFI PXE Boot server.

]# mkdir /var/lib/tftpboot/pxelinux

Copy the PXE boot files from /tmp where we extracted the rpm to this location:

]# cp /tmp/boot/efi/EFI/BOOT/BOOTX64.EFI /var/lib/tftpboot/pxelinux/

]# cp /tmp/boot/efi/EFI/centos/shimx64.efi /var/lib/tftpboot/pxelinux/

]# cp /tmp/boot/efi/EFI/centos/grubx64.efi /var/lib/tftpboot/pxelinux/

Next we need initrd and vmlinuz file to load the Operating System until hard disk and other interfaces are detected. I hope you are familiar with the steps of Linux Boot Process. These files can again be copied from the image, so we will copy and place them also inside /var/lib/tftpboot/pxelinux/

]# cp /home/images/centos82/isolinux/vmlinuz/var/lib/tftpboot/pxelinux/

]# cp /home/images/centos82/isolinux/initrd.img /var/lib/tftpboot/pxelinux/

Following is the content of my /var/lib/tftpboot/pxelinux at this stage:

~]# ls -l /var/lib/tftpboot/pxelinux/
total 78460
-rwx------. 1 root root  1877384 Jan  2 11:02 ,
-rwxr-xr-x. 1 root root  1211224 Jan  2 11:00 BOOTX64.EFI
-rwxr-xr-x. 1 root root  1877384 Jan  2 11:02 grubx64.efi
-r--r--r--. 1 root root 65114456 Jan  2 11:01 initrd.img
-rwxr-xr-x. 1 root root  1211224 Jan  2 11:02 shimx64.efi
-r-xr-xr-x. 1 root root  8913656 Jan  1 22:17 vmlinuz

 

Step-4: Configure DHCPv6 for IPv6 UEFI PXE Boot

Next we need to install and configure DHCP to support UEFI PXE Boot installation.

]# dnf -y install dhcp-server

You can check a sample dhcpd6.conf file under /usr/share/doc/dhcp-server/dhcpd6.conf.example. Here is my sample dhcpd6.conf file:

~]# vim /etc/dhcp/dhcpd6.conf
#
# DHCPv6 Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd6.conf.example
#   see dhcpd.conf(5) man page
#
default-lease-time 2592000;
preferred-lifetime 604800;
option dhcp-renewal-time 360;
option dhcp-rebinding-time 720;
allow leasequery;
dhcpv6-lease-file-name "/var/lib/dhcpd/dhcpd6.leases";
option dhcp6.info-refresh-time 21600;
option dhcp6.bootfile-url code 59 = string;
option dhcp6.vendor-class code 16 = {integer 32, integer 16, string};

subnet6 2001:0001:0001:1442::0400/122
{
    range6 2001:0001:0001:1442::0405 2001:0001:0001:1442::0420;
    option dhcp6.bootfile-url "tftp://[2001:0001:0001:1442::0407]/pxelinux/BOOTX64.EFI";
}

You can follow the official documentation to understand about the different options used in dhcpd6.conf file. Although let me explain the subnet6 declaration part i.e.:

subnet6 2001:0001:0001:1442::0400/122
{
    range6 2001:0001:0001:1442::0405 2001:0001:0001:1442::0420;
    option dhcp6.bootfile-url "tftp://[2001:0001:0001:1442::0407]/pxelinux/BOOTX64.EFI";
}

Here we have basically defined our IPv6 subnet and netmask. You can get this using route -n command as shown below:

 ~]# route -6 -n
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
::1/128                        ::                         U    256 2     0 lo
2001:1:1:1442::400/122         ::                         U    100 16     0 eno49

Here eno49 is our primary interface using the same subnet i.e. 2001:1:1:1442::400/122. Now the start and end IP Address provided in the range is something which you will have to add based on your environment. The IP address will be assigned from this range for the target server.

With DHCPv6 we don't use next-server and filename any more, instead we have to use dhcp6.bootfile-url which will contain the path of PXE file which we extracted in previous step.

Next enable and start the DHCP server service:

# systemctl enable dhcpd6 --now

Check the status of the dhcpd6 service:

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

 

Step-5: Configure Kickstart file for automated installation

Next we will create our kickstart file to have an un-attended automated installation. Now I have already explained different syntax and parameters used in kickstart file so I will not repeat the same here.

By default, when we install CentOS or RHEL server, we will have /root/anaconda.cfg file available which will contain the parameters used for the current installation. You can always take this file as your base and further modify it based on your requirement.

I will create a new directory to store our kickstart file for the UEFI PXE Boot purpose:

~]# mkdir /ks

~]# cp /root/anaconda-ks.cfg /ks/kickstart.conf

Make sure the file is world readable and permission of /ks directory is 755

[root@server ~]# ls -dl /ks/kickstart.conf
-rw-r--r--. 1 root root 1601 Jan  2 12:50 /ks/kickstart.conf

[root@server ~]# ls -dl /ks
drwxr-xr-x. 2 root root 28 Jan  2 12:50 /ks

We will update our kickstart.conf at later part of this tutorial once we have configured HTTPD service

 

Step-6: Configure HTTP Server

Now we also need a service to host our image repository, we can use FTP or HTTP or NFS to host our image repository which we created in Step-1 of this tutorial. In my previous example where I had setup kickstart server using Legacy BIOS, I had used NFS so this time I decided to use HTTP server.

~]# dnf -y install httpd

Next we will configure Virtual Hosting to host our image repo path. I have created a new file ks-server.conf under /etc/httpd/conf.d/ with the following content:

<VirtualHost [2001:1:1:1442::407]:80>
    ServerAdmin root@server1.example.com
    DocumentRoot /
    ServerName server.example.com
    ErrorLog logs/ks-server.example.com-error_log
    CustomLog logs/ks-server.example.com-access_log common
    <Directory /ks>
       Options Indexes MultiViews
        AllowOverride All
        Require all granted
    </Directory>
    <Directory /home/images/centos82>
        Options Indexes MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

So here I am basically serving two different PATH over my HTTP server i.e. my kickstart configuration file and my image repository. I have also provided the required permission to access these path, you may check Apache DirectoryListings for more information.

The next important thing we must do is to allow visibility of hidden files in the HTTP server as I mentioned earlier, installation over network requires validation of the repository using .treeinfo file which is basically a hidden file in Linux. So by default this file will not be visible on the web server.

So to fix this we must remove .??* from IndexIgnore parameter of /etc/httpd/conf.d/autoindex.conf file.

Change

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

To

IndexIgnore *~ *# HEADER* README* RCS CVS *,v *,t

Next enable and start the httpd service:

# systemctl enable httpd --now

Make sure the service has started successfully:

~]# systemctl status httpd

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

Next try to access the image repository path over the web server:

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

Similarly try to access the kickstart config file on the web browser:

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

For any issues you can check the log file which you have added in your virtual hosting configuration file:

[root@server ~]# ls -l /etc/httpd/logs/*
-rw-r--r--. 1 root root     0 Jan  2 12:32 /etc/httpd/logs/access_log
-rw-r--r--. 1 root root  6638 Jan  2 12:57 /etc/httpd/logs/error_log
-rw-r--r--. 1 root root 12646 Jan  2 14:19 /etc/httpd/logs/ks-server.example.com-access_log
-rw-r--r--. 1 root root  6750 Jan  2 12:45 /etc/httpd/logs/ks-server.example.com-error_log

 

Step-7: Update kickstart configuration file

Now we had taken kicksrart template from anaconda which was created for an installation performed using CDROM in my case, so I have to do some changes to use HTTP server for the installation instead of CDROM

So replace cdrom with the following entry

url --url=http://[2001:1:1:1442::407]/home/images/centos82/AppStream

Update the AppStream repo url, as with CDROM by default file:// handler is used but since we place to use HTTP so we will have to use following path, additionally also mention the path of BaseOS repository.

# Create APPStream Repo
repo --name="AppStream" --baseurl=http://[2001:1:1:1442::407]/home/images/centos82/AppStream
repo --name="BaseOS" --baseurl=http://[2001:1:1:1442::407]/home/images/centos82/BaseOS

Now you can choose to modify other configurations as well, let me add a static IPv6 address for my interface:

# Network information
network  --bootproto=dhcp --device=eno49 --noipv4 --ipv6=2001:1:1:1442::409/122 --activate --ipv6gateway=2001:1:1:1442::43f
network  --hostname=myhost.example.com

You can use python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())' command to generate an encrypted password which can be used in the kickstart file for any user.

rootpw --iscrypted $6$w7El/FYx9mbTG6x9$Te.Yg6dq0TsQwGpdSjeDGSw4J9ZBAkLXzT9ODMV7I7lHvX3n5.9PCS4jIkS2GbVLZOpVRLvrua3wwbwA.cfWX.

Here is my sample kickstart configuration file:

#version=RHEL8
ignoredisk --only-use=sda,sdb
autopart --type=lvm

# Partition clearing information
clearpart --all --initlabel --drives=sda,sdb

# Use graphical install
graphical

# Use CDROM installation media
url --url=http://[2001:1:1:1442::407]/home/images/centos82/AppStream

# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'

# System language
lang en_US.UTF-8

# Create APPStream Repo
repo --name="AppStream" --baseurl=http://[2001:1:1:1442::407]/home/images/centos82/AppStream
repo --name="BaseOS" --baseurl=http://[2001:1:1:1442::407]/home/images/centos82/BaseOS

# Network information
network --bootproto=dhcp --device=eno49 --noipv4 --ipv6=2001:1:1:1442::409/122 --activate --ipv6gateway=2001:1:1:1442::43f
network  --bootproto=dhcp --device=eno50 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eno51 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eno52 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eno53 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eno54 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eno55 --onboot=off --ipv6=auto
network  --bootproto=dhcp --device=eno56 --onboot=off --ipv6=auto
network  --hostname=myhost.example.com

# Root password
rootpw --iscrypted $6$E1ogwDVio48x2y7K$ZX1EPw78y8gc7BXqcvpSAx16DzHmvA8cnNULjPBRq8zd/aj7FmfgXS1u/0Z5/Zp76nHO9InF4G.DXUYwc9AKd0

# X Window System configuration information
xconfig  --startxonboot

# Run the Setup Agent on first boot
firstboot --enable

# System services
services --disabled="chronyd"

# Reboot after installation
reboot
# System timezone
timezone Asia/Kolkata --isUtc --nontp

user --groups=wheel --name=deepak --password=$6$aJ53Yzqx8A1gBbfE$TgZ3dkZXi7nmCBCdhSbDxdP4aXxlpV0XsuMdQ7M0LR6TdwiXfYAXLDLdACqluWsWjWPrKGIqOnqPrQxoxYzGk. --iscrypted --gecos="deepak"

%packages
@^graphical-server-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

 

Step-8: Configure grub.cfg (Dracut Kernel Menu)

For UEFI PXE Boot we need a grub.cfg file with the details of PXE boot files required for installation over network. Following is the content from my grub.cfg file:

 ~]# cat /var/lib/tftpboot/pxelinux/grub.cfg
set timeout=30
menuentry 'Install CentOS 8' {
    linuxefi pxelinux/vmlinuz inst.ks=http://[2001:1:1:1442::407]/ks/kickstart.conf inst.stage2=http://[2001:1:1:1442::407]/home/images/centos82/ ip=[2001:1:1:1442::409]::[2001:1:1:1442::43F]:122::eno49:none
    initrdefi pxelinux/initrd.img
}

Here we have created a single menu entry with the location of our kickstart configuration file. The inst.stage2= boot option specifies the location of the installation program’s runtime image. This option expects the path to a directory that contains a valid .treeinfo file and reads the runtime image location from the .treeinfo file.

Additionally I am assigning a static IP Address to my client because by default DHCPv6 will assign /128 subnet to all the clients. This has been discussed at multiple forums and looks like something which needs to be fixed at the router side.

The syntax to assign static IP address via dracut command line is as below:

ip=<client-IP-number>:[<server-id>]:<gateway-IP-number>:<netmask>:<client-hostname>:<interface>:{dhcp|dhcp6|auto6|on|any|none|off}

In our case, 2001:1:1:1442::409 will be the client's IP Address with 122 subnet and gateway 2001:1:1:1442::43F assigned to eno49 interface.

Alternatively, if you have MAC address of your client, then you can create different grub.cfg file for individual MAC address and assign static IP Address but again this is something which I have not tested with IPv6 and UEFI yet, I have previously explained this with IPv4 and Legacy BIOS. You can give it a try and share your experience.

 

Step-9: Configure Firewall

We have three services which must be allowed in the firewall i.e. DHCP, TFTP and HTTP. Since we are using firewalld, we will use firewall-cmd to enable these service/ports:

~]# firewall-cmd --add-service=http --add-service=tftp --add-service=dhcpv6 --permanent
~]# firewall-cmd --reload
success

Verify the rules are added properly

~]# firewall-cmd --list-service
cockpit dhcpv6 dhcpv6-client http ssh tftp

 

Step-10: Configure SELinux

I have kept my SELinux into Permissive mode for the sake of this tutorial.

~]# getenforce
Permissive

You can also set it to permissive mode using following command

~]# setenforce 0

or you may also choose to completely disable it.

 

Step-11: Verify TFTP Access

It is a good practice to verify if your TFTP server is working properly and if you are able to access the files via tftp client. As if there is any problem then during PXE boot, it would be very hard to troubleshoot as there won't be much logs to debug such issues.

I will use the same server to verify this, you may choose a different client node as well. Go ahead and nstall tftp package:

~]# dnf -y install tftp

Next navigate into temporary folder, connect to your TFTP server using the IPv6 address as you have provided in grub.cfg file and attempt to download any file:

[root@server ~]# cd /tmp/
[root@server tmp]# tftp [2001:0001:0001:1442::0407]
tftp> get pxelinux/grub.cfg
tftp> quit

[root@server tmp]# ls -l grub.cfg
-rw-r--r--. 1 root root 291 Jan  2 15:15 grub.cfg

As you can see, I was successfully able to download grub.cfg file. If you want, you can repeat the same for other files which are served over TFTP or just make sure, all of them have world readable permission

 

Step-12: Perform IPv6 UEFI PXE Boot

Now we are all setup to perform IPv6 UEFI PXE Boot of our target client blades to install them over the network.

Boot your client node and perform a network based installation. Now the shortcut button to boot over network may vary for different hardware but on most cases we are expected to press F12 to boot from network:

If your UEFI PXE Boot Server configuration is proper, then the TFTP files should get successfully downloaded as shown below

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

 

Next we should be able to see our boot menu as per grub.cfg configuration. Hit Enter or the default option would be selected after the provided timeout value:

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

 

You can also check the server logs using journalctl -f:

Jan 02 14:53:18 server.example.com dhcpd[6050]: Solicit message from fe80::217:a4ff:fe77:32 port 546, transaction ID 0x5740AE00
Jan 02 14:53:18 server.example.com dhcpd[6050]: Picking pool address 2001:1:1:1442::410
Jan 02 14:53:18 server.example.com dhcpd[6050]: Advertise NA: address 2001:1:1:1442::410 to client with duid 00:04:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 iaid = -559186 valid for 2592000 seconds
Jan 02 14:53:18 server.example.com dhcpd[6050]: Sending Advertise to fe80::217:a4ff:fe77:32 port 546
Jan 02 14:53:22 server.example.com dhcpd[6050]: Request message from fe80::217:a4ff:fe77:32 port 546, transaction ID 0x5740AF00
Jan 02 14:53:22 server.example.com dhcpd[6050]: Reply NA: address 2001:1:1:1442::410 to client with duid 00:04:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 iaid = -559186 valid for 2592000 seconds
Jan 02 14:53:22 server.example.com dhcpd[6050]: Sending Reply to fe80::217:a4ff:fe77:32 port 546
Jan 02 14:53:33 server.example.com in.tftpd[6520]: tftp: client does not accept options
Jan 02 14:53:34 server.example.com in.tftpd[6521]: Client 2001:1:1:1442::410 finished pxelinux/BOOTX64.EFI
Jan 02 14:53:34 server.example.com in.tftpd[6522]: Client 2001:1:1:1442::410 finished /pxelinux/grubx64.efi
Jan 02 14:53:34 server.example.com dhcpd[6050]: Release message from fe80::217:a4ff:fe77:32 port 546, transaction ID 0x5740B000
Jan 02 14:53:34 server.example.com dhcpd[6050]: Client 00:04:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 releases address 2001:1:1:1442::410
Jan 02 14:53:34 server.example.com dhcpd[6050]: Sending Reply to fe80::217:a4ff:fe77:32 port 546
Jan 02 14:53:35 server.example.com in.tftpd[6525]: Client 2001:1:1:1442::410 finished /pxelinux/grub.cfg
Jan 02 14:53:35 server.example.com in.tftpd[6530]: Client 2001:1:1:1442::410 finished /pxelinux/grub.cfg
Jan 02 14:53:42 server.example.com in.tftpd[6531]: Client 2001:1:1:1442::410 finished pxelinux/vmlinuz
Jan 02 14:53:48 server.example.com in.tftpd[6532]: Client 2001:1:1:1442::410 finished pxelinux/initrd.img

 

Next if everything is good, then your installation should start, so looks like all the boxes are checked successfully and now the installation should start, you can go prepare your coffee.

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

 

Sit back and relax..

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

 

So our client is successfully installed using IPv6 UEFI PXE Boot:

Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]

 

Summary

In this tutorial I shared step by step instructions to configure IPv6 UEFI PXE Boot server using DHCPv6. There were some hicups during the testing phase, mostly related to DHCPv6 as the configuration is quiet different for dpcpd6 compared to dhcpd when it comes to the usage for network installation. But the one thing which still remains open is the handling of /128 subnet which is assigned by DHCPv6 to all the clients. Due to which the connection over network doesn't happen because we may not be always using /128 subnet as in my case I was using /122 subnet.

I hope someone can come up with a solution or I will try to come up with one in future when we go for production with such environment. For now, let's settle with assigning static IP address and go ahead.

 

Further Reading

Setting up a UEFI HTTP Boot server

 

Didn't find what you were looking for? Perform a quick search across GoLinuxCloud

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

Buy GoLinuxCloud a Coffee

For any other feedbacks or questions you can either use the comments section or contact me form.

Thank You for your support!!

1 thought on “Configure IPv6 UEFI PXE Boot with Kickstart [RHEL/CentOS 8]”

Leave a Comment

X