Вы находитесь на странице: 1из 22

Add UEFI Support to PXE Boot Server on CentOS 7

(Basic Input/Output System) andAdd UEFI Support to PXE Boot Server on CentOS 7 Firmware Interface) are two firmware interfaces

Firmware Interface) are two firmware interfaces for computer systems which work as an interpreter between the operating system and the computer firmware.

Both of these are installed at the time of manufacturing and is the first program that runs when a computer is turned on. BIOS uses the Master Boot Record (MBR) to save information about the hard drive data while UEFI uses the GUID partition table (GPT).

uses 32-bit entries in its table which limits the total physicaldrive data while UEFI uses the GUID partition table (GPT). UEFI (Unified Extensible partitions to only

UEFI
UEFI

(Unified Extensible

partitions to only 4 with maximum size of 2 TB each.

Whereas,

than 4 physical partitions with larger sizes.

In our previous article Setup a PXE Boot Server in RHEL/CentOS 7, we have configured a PXE boot server and added the RHEL 7.5 installation option in it. The configuration worked fine with BIOS based computer systems, but didn’t support UEFI based clients.

In this article, we will add UEFI support to our PXE Boot Server on CentOS 7.

GPT
GPT

uses 64-bit entries in its table which allows it use more

Note: In this article, we are performing everything from CLI, therefore, it is highly recommended that, you should have Linux Pocket Guide:

Essential Commands for quick reference.

System Specification:

We use the same CentOS 7 server that we have configured as PXE Boot Server in our previous article. The specifications have been re- mentioned below for convenience of the readers.

CPU:

2

Core (2.4 Mhz)

Memory:

2

GB

Storage:

50 GB

Operating System:

CentOS 7.5

Hostname:

pxe-server.itlab.com

IP Address:

192.168.116.41/24

Configure PXE Boot Server to support UEFI based systems:

Connect to

Adjust DHCP server configuration to support UEFI systems.

pxe - server.itlab.com

using

ssh .
ssh
.

#vi /etc/dhcp/dhcpd.conf

Search for following lines in the above file.

#PXE boot server

next-server 192.168.116.41;

filename "pxelinux.0";

Replace above lines with following configurations.

class "pxeclients" {

match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";

next-server 192.168.116.41;

if substring (option vendor-class-identifier, 15, 5) = "00009" {

}

Restart

filename "grubx64.efi";

} else {

filename "pxelinux.0";

}

dhcpd.service

to apply changes.

#systemctl restart dhcpd.service

If

possible syntax errors therein and try to restart the service again.

For more details on comparisons in the above configurations, please refer to RFC 4578 - Dynamic Host Configuration Protocol (DHCP) Options for the Intel Preboot eXecution Environment (PXE).

Now, we need a bootloader (such as

clients. This bootloader is available in CentOS 7.5 ISO.

Copy

dhcpd.service

gives error during startup, then look for any

grubx64.efi

) to support UEFI

grubx64.efi

to

/var/lib/tftpboot

directory.

#cp /var/ftp/pub/rhel7/EFI/BOOT/grubx64.efi /var/lib/tftpboot/

Our

have to create another menu for the UEFI clients.

The menu filename is

at

installation option in this file as follows:

PXELINUX

menu does not work for UEFI systems, therefore we

grub.cfg

and it is located

. Therefore, we will define RHEL 7.5

/var/lib/tftpboot

#cat >> /var/lib/tftpboot/grub.cfg << EOF

>

set timeout=60

>

>

menuentry 'Install RHEL 7.5' {

>

linuxefi /networkboot/rhel7/vmlinuz

inst.repo=ftp://192.168.116.41/pub/rhel7/

> initrdefi /networkboot/rhel7/initrd.img

> }

> EOF

Restart

tftp.service

to apply changes.

#systemctl restart tftp.service

UEFI configurations has been completed.

To test the configurations, connect a UEFI based system to network, and turn it on.

The UEFI client will fetch the above menu from PXE boot server. Add RHEL 6

The UEFI client will fetch the above menu from PXE boot server.

Add RHEL 6 installation option to PXE Server

In our previous posts, we have configured a

of RHEL 7.5 operating system that supports both

PXE BIOS
PXE
BIOS

boot server for automated installation

and

UEFI
UEFI

based clients.

Now, we will add RHEL 6 installation option in our PXE boot server. We will also create

a

Kickstart file for automated installation of RHEL 6 operating system, and ensure that

it

will support both BIOS and UEFI based clients.

The task can be broken down into following steps:

1) Copy RHEL 6 ISO/DVD contents to FTP Server 2) Create a Kickstart file for RHEL 6 automated installation 3) Copy Boot images to tftpboot directory 4) Create Menu Entries for RHEL 6 installation

Note: In this article, we are performing everything from CLI, therefore, it is highly recommended that, you should have Linux Pocket Guide: Essential Commands for quick reference.

System Specification:

We use the same Linux server that we have configured as PXE Boot Server in our previous article. These specifications have been re-mentioned below for convenience of the readers.

CPU:

2

Core (2.4 Mhz)

Memory:

2

GB

Storage:

50 GB

Operating System:

RHEL 7.5

Hostname:

pxe-server.itlab.com

IP Address:

192.168.116.41/24

Copy RHEL 6 ISO/DVD contents to FTP Server:

Connect to

pxe-server.itlab.com

using

ssh .
ssh
.

Attach RHEL 6 ISO/DVD and mount it at

according to your choice).

# mount -t iso9660 /dev/cdrom /mnt/iso

mount: /dev/sr0 is write-protected, mounting read-only

Copy contents of

/mnt/iso
/mnt/iso

(you can use any mountpoint,

/mnt/iso

directory to FTP server.

# cp -rf /mnt/iso /var/ftp/pub/rhel6

Create a Kickstart file for automated installation of RHEL 6:

We have to write a Kickstart file for RHEL 6 within

the

service.

/var/ftp/pub/rhel6

directory, so it can be accessed by PXE clients via FTP

# vi /var/ftp/pub/rhel6/rhel6.cfg

A sample kickstart file is given below, you can modify it according to your requirements.

Read Also:

Read Also:

#platform=x86, AMD64, or Intel EM64T #version=DEVEL

# Install OS instead of upgrade install

# Keyboard layouts keyboard 'us'

# Root password

rootpw --iscrypted $1$vyNMLtgd$VmtByshddZSBK uuFhoH0

# Use network installation

url --url="ftp://192.168.116.41/pub/rhel6"

# System language

lang en_US

# System authorization information

auth --useshadow --passalgo=sha512

# Use graphical install graphical firstboot --disable

# SELinux configuration

selinux --enforcing

# Firewall configuration

firewall --enabled --ssh

# Network information

network --bootproto=dhcp --device=eth0

# Reboot after installation reboot

# System timezone

timezone Asia/Karachi

# System bootloader configuration bootloader --location=mbr autopart

# Partition clearing information clearpart --none --initlabel

# Packages to be installed %packages @core %end

Copy boot images to tftpboot directory:

We need to copy

to

referenced in the menu entry of PXE boot menu.

initrd.img

and

vmlinuz

files from RHEL 6 ISO

/var/lib/tftpboot/networkboot/rhel6

directory. These files will be later

# mkdir /var/lib/tftpboot/networkboot/rhel6

# cp /var/ftp/pub/rhel6/images/pxeboot/vmlinuz

/var/lib/tftpboot/networkboot/rhel6/

# cp /var/ftp/pub/rhel6/images/pxeboot/initrd.img

/var/lib/tftpboot/networkboot/rhel6/

Create Menu Entries for RHEL 6 installation:

Edit PXE boot menu for BIOS based clients.

# vi /var/lib/tftpboot/pxelinux.cfg/default

add a menu entry for RHEL 6 installation therein.

default menu.c32

prompt 0

timeout 30

menu title Ahmer's PXE Menu

label Install RHEL 7.5

kernel /networkboot/rhel7/vmlinuz

append initrd=/networkboot/rhel7/initrd.img

inst.repo=ftp://192.168.116.41/pub/rhel7

ks=ftp://192.168.116.41/pub/rhel7/rhel7.cfg

label Install RHEL 6.0 (64-bit)

kernel /networkboot/rhel6/vmlinuz

append initrd=/networkboot/rhel6/initrd.img

inst.repo=ftp://192.168.116.41/pub/rhel6

ks=ftp://192.168.116.41/pub/rhel6/rhel6.cfg

Edit PXE boot menu for UEFI based clients.

# vi /var/lib/tftpboot/grub.cfg

add a menu entry for RHEL 6 installation therein.

set timeout=60

menuentry 'Install RHEL 7.5' {

linuxefi /networkboot/rhel7/vmlinuz

inst.repo=ftp://192.168.116.41/pub/rhel7/

inst.ks=ftp://192.168.116.41/pub/rhel7/rhel7.cfg

initrdefi /networkboot/rhel7/initrd.img

}

menuentry 'Install RHEL 6.0' {

linuxefi /networkboot/rhel6/vmlinuz

inst.repo=ftp://192.168.116.41/pub/rhel6/

inst.ks=ftp://192.168.116.41/pub/rhel6/rhel6.cfg

initrdefi /networkboot/rhel6/initrd.img

}

Now, connect a BIOS based PXE client to network and boot it. It will display the following PXE boot menu.

and boot it. It will display the following PXE boot menu. Similarly, connect a UEFI based

Similarly, connect a UEFI based PXE client to network and boot it. It will display the following PXE boot menu.

and boot it. It will display the following PXE boot menu. We have successfully added the

We have successfully added the RHEL 6 installation option to our PXE boot server. You can add other versions of RHEL or CentOS in similar manner.

Configure CentOS 7 PXE Server to Install Windows 10

In our previous posts, we have configured a

of RHEL 7.5 operating system that supports both

PXE BIOS
PXE
BIOS

boot server for automated installation

and

UEFI
UEFI

based clients.

Later on, we added RHEL 6 and Ubuntu 18.10 installation options in our PXE boot server. We have also writed Kickstart files for automated installations of both operating systems.

Before concluding our PXE server configuration series, we decided to write an article to add the installation option of a Microsoft’s operating system. Therefore, we have selected the Microsoft Windows 10 (the latest OS at the time of this writeup) as the candidate for our PXE boot server.

In this article, we will add the installation option of MS Windows 10 to our PXE server.

Note: In this article, we are performing everything from CLI, therefore, it is highly recommended that, you should have Linux Pocket Guide: Essential Commands for quick reference.

System Specification:

We use the same Linux server that we have configured as PXE Boot Server in our previous article. These specifications have been re-mentioned below for convenience of the readers.

CPU:

2

Core (2.4 Mhz)

Memory:

2

GB

Storage:

50 GB

Operating System:

RHEL 7.5

Hostname:

pxe-server.itlab.com

IP Address:

192.168.116.41/24

Furthermore, we need a client system to create Windows PE iso file. Here, we are using a MS Windows 8.1 machine for this purpose, however, you can use other versions of MS Windows as well (be noted that configurations are slightly different in MS Windows versions prior to 8.1).

Install and Configure Samba Server:

We used Samba server to share installation media of MS Windows 10 Operating System with PXE clients.

Connect to

pxe-server.itlab.com

using

ssh
ssh

and install Samba server.

#yum install -y samba

Create a directory to share Windows 10 installation media.

#mkdir /smbshare

Adjust SELinux permissions.

#semanage fcontext -a '/smbshare(/.*)?' -t samba_share_t

#restorecon -Rv /smbshare

Create an user to control access to Samba share.

#useradd -s /sbin/nologin ahmer

#smbpasswd -a ahmer

Change owner of the shared directory with user

ahmer .
ahmer
.

# chown ahmer:ahmer /smbshare/

Allow Samba service in Linux Firewall.

#firewall-cmd --permanent --add-service=samba

success

#firewall-cmd --reload

success

Add directives in clients.

#cat >> /etc/samba/smb.conf << EOF

/etc/samba/smb.conf

to share the directory

> [install]

>

comment = Installation Media

>

path = /smbshare

>

public = yes

>

writable = no

>

printable = no

>

browseable = yes

> EOF

Start and enable Samba services.

#systemctl start smb nmb

#systemctl enable smb nmb

/smbshare

with

Attach MS Windows 10 ISO/DVD and mount it at

mountpoint, according to your choice).

#mount -t iso9660 /dev/cdrom /mnt/iso

mount: /dev/sr0 is write-protected, mounting read-only

Copy contents of

/mnt/iso

(you can use any

/mnt/iso
/mnt/iso

to

/smbshare/windows10

directory.

#cp -rf /mnt/iso /smbshare/windows10

Create a Customized Windows PE ISO:

Connect to MS Windows 8.1 client.

We required

PE iso. Therefore, we have downloaded it from Microsoft's website and installed it on our Windows 8.1 client.

After installation, run

Administrator.

Run the following command to create working directories for Win PE. (Command output has been trimmed to show only success status)

C:\Program Files (x86)\Windows Kits\8.0\Assessment and Deployment Kit\Windows Pr einstallation Environment> copype x86 c:\WinPE_x86

Windows ADK

(Assessment and Deployment Kit) to create our Windows

Deployment and Imaging Tools Environment

as

---

186 File(s) copied

1 file(s) copied.

1 file(s) copied.

1 file(s) copied.

Success

c:\WinPE_x86>

We will customize the startup script

start automatically. Therefore, mount the image file and customize it accordingly.

c:\WinPE_x86> Dism /Mount-Image /ImageFile:"c:\WinPE_x86\media\sources\boot.wim" /index:1 /MountDir:"c:\WinPE_x86\mount"

startcmd.net

, so MS Windows 10 setup will

Deployment Image Servicing and Management tool Version: 6.2.9200.16384

Mounting image

[==========================100.0%==========================]

The operation completed successfully.

c:\WinPE_x86>

Now, edit startnet.cmd.

c:\WinPE_x86> notepad c:\WinPE_x86\mount\Windows\System32\Startnet.cmd

And add following lines therein.

wpeinit net use z: \\192.168.116.41\install\windows10 /user:ahmer 123 z:\setup.exe

Save and unmount the image file.

c:\WinPE_x86> Dism /Unmount-Image /MountDir:"c:\WinPE_x86\mount" /commit

Deployment Image Servicing and Management tool Version: 6.2.9200.16384

Saving image

[==========================100.0%==========================]

Unmounting image

[==========================100.0%==========================]

The operation completed successfully.

c:\WinPE_x86>

Generate

winpe.iso

file.

c:\WinPE_x86> MakeWinPEMedia /ISO c:\WinPE_x86 c:\winpe.iso Creating c:\winpe.iso

100% complete

Success

c:\WinPE_x86>

Transfer

to

winpe.iso

file to

pxe-server-itlab.com

and copy it

directory.

/var/lib/tftpboot/networkboot/windows10/

Add MS Windows 10 installation option to PXE boot menu:

Now, connect to

pxe-server.itlab.com

again using

ssh .
ssh
.

Edit PXE boot menu for BIOS based clients.

#vi /var/lib/tftpboot/pxelinux.cfg/default

And add following menu option at the end of file.

label Install MS Windows 10 menu label Install MS Windows 10 kernel memdisk initrd /networkboot/windows10/winpe.iso append iso raw

Connect a new client to your network and turn it on. It should get the IP address from DHCP server and display our PXE boot Menu as follows:

from DHCP server and display our PXE boot Menu as follows: Select Install MS Windows 10

Select Install MS Windows 10 option and press <ENTER>.

We have successfully added the MS Windows 10 installation option in our Linux based PXE

We have successfully added the MS Windows 10 installation option in our Linux based PXE server.

Configure CentOS 7 PXE Server to Install Ubuntu 18.10

In our previous posts, we have configured a PXE boot server that supports both

BIOS

and

UEFI

 

based clients. We

have also configured our CentOS 7 PXE server to install RHEL 6 and RHEL 7 operating systems using Kickstart. Now, we will configure our CentOS 7 PXE server to install Ubuntu 18.10.

We will also create a Kickstart file for automated installation of Ubuntu 18.10 operating system, and ensure that it will support both BIOS and UEFI based clients.

This task can be broken down into following steps:

1) Share Ubuntu 18.10 ISO/DVD contents via NFS Server 2) Create a Kickstart file for Ubuntu 18.10 automated installation 3) Copy Boot images to tftpboot directory 4) Create Menu Entries for Ubuntu 18.10 installation

Note: In this article, we are performing everything from CLI, therefore, it is highly recommended that, you should have Linux Pocket Guide: Essential Commands for quick reference.

System Specification:

We use the same CentOS 7 machine that we have configured as PXE Boot Server in our previous article. These specifications have been re-mentioned below for convenience of the readers.

CPU:

2

Core (2.4 Mhz)

Memory:

2

GB

Storage:

50 GB

Operating System:

CentOS 7.5

Hostname:

pxe-server.itlab.com

IP Address:

192.168.116.41/24

Share Ubuntu 18.10 ISO/DVD contents via NFS Server:

Connect to

pxe-server.itlab.com

using ssh as root user.

Install NFS packages using yum command.

#yum install -y nfs-utils

Loaded plugins: product-id, search-disabled-repos, subscription-manager

This system is not registered with an entitlement server. You can use subscription- manager to register.

localyum

Resolving Dependencies

--> Running transaction check

---> Package nfs-utils.x86_64 1:1.3.0-0.54.el7 will be installed

--> Finished Dependency Resolution

| 4.3 kB

00:00

Dependencies Resolved

================================================================================

Package

Arch

Version

Repository

Size

================================================================================

Installing:

1:1.3.0-0.54.el7

nfs-utils

x86_64

localyum

407 k

Transaction Summary

================================================================================

Install 1 Package

Total download size: 407 k

Installed size: 1.0 M

Downloading packages:

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

Installing : 1:nfs-utils-1.3.0-0.54.el7.x86_64

1/1

Installed:

nfs-utils.x86_64 1:1.3.0-0.54.el7

Complete!

Start and Enable NFS service.

#systemctl start nfs-server

#systemctl enable nfs-server

Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

Create a directory for sharing Ubuntu 18.10 ISO.

#mkdir /nfsshare

#chown nfsnobody:nfsnobody /nfsshare

Allow NFS and relevant ports in CentOS 7.5 Firewall.

#firewall-cmd --permanent --add-service={nfs,mountd,rpc-bind}

success

[root@pxe-server /]# firewall-cmd --reload

success

Adjust SELinux Permissions.

[root@pxe-server /]# semanage fcontext --add -t nfs_t '/nfsshare(/.*)?'

[root@pxe-server /]# restorecon -Rv /nfsshare/

restorecon reset /nfsshare context unconfined_u:object_r:var_t:s0-

>unconfined_u:object_r:nfs_t:s0

Export

/nfsshare

directory for all clients.

[root@pxe-server /]# echo "/nfsshare *(ro)" >> /etc/exports

[root@pxe-server /]# exportfs -r

Attach Ubuntu 18.10 Server ISO/DVD and mount it at choice).

#mount -t iso9660 /dev/cdrom /mnt/iso

mount: /dev/sr0 is write-protected, mounting read-only

/mnt/iso

(you can use any mountpoint, according to your

Copy contents of

/mnt/iso
/mnt/iso

directory to NFS server.

#cp -rf /mnt/iso /nfsshare/ubuntu18

We have to write a Kickstart file for Ubuntu 18.10 within the can be accessed by PXE clients via NFS service.

#vi /nfsshare/ubuntu18/preseed/ubuntu.seed

/nfsshare/ubuntu18/preseed/

A sample kickstart file is given below, you can modify it according to your requirements.

# Enable extras.ubuntu.com.

d-i

# Install the Ubuntu desktop.

tasksel tasksel/first

# On live DVDs, don't spend huge amounts of time removing substantial

# application packages pulled in by language packs. Given that we clearly

# have the space to include them on the DVD, they're useful and we might as

# well keep them installed.

ubiquity

#System language lang en_US #Language modules to install langsupport en_US #System keyboard keyboard us #System mouse mouse #System timezone timezone Asia/Karachi #Root password rootpw --disabled #Initial user (user with sudo capabilities) user ubuntu --fullname "ahmer" --password ahmer1234 #Reboot after installation reboot #Use text mode install text #Install OS instead of upgrade install #Installation media nfs --server=192.168.116.41 --dir=/nfsshare/ubuntu18/

apt-setup/extras

boolean true

multiselect ubuntu-desktop

ubiquity/keep-installed string icedtea6-plugin openoffice.org

directory, so it

#System bootloader configuration

bootloader --location=mbr

#Clear the Master Boot Record

zerombr yes

#Partition clearing information

clearpart --all --initlabel

#Basic disk partition

part / --fstype ext4 --size 1 --grow --asprimary

part swap --size 1024

part /boot --fstype ext4 --size 256 --asprimary

#System authorization infomation

auth --useshadow --enablemd5

#Network information

network --bootproto=dhcp --device=eth0

#Firewall configuration

firewall --disabled --trust=eth0 --ssh

Copy boot images to tftpboot directory:

The Boot images in the Ubuntu ISO won’t work for network boot Therefore, we downloaded netboot images from Ubuntu website.

#wget http://archive.ubuntu.com/ubuntu/dists/cosmic/main/installer-

amd64/current/images/netboot/netboot.tar.gz

--2018-11-17 11:09:13-- http://archive.ubuntu.com/ubuntu/dists/cosmic/main/installer-

amd64/current/images/netboot/netboot.tar.gz

Resolving archive.ubuntu.com (archive.ubuntu.com)

91.189.88.162,

Connecting to archive.ubuntu.com (archive.ubuntu.com)|91.189.88.152|:80

200 OK

Length: 56245393 (54M) [application/x-gzip]

Saving to: ânetboot.tar.gz.1â

HTTP request sent, awaiting response

91.189.88.152, 91.189.88.161,

connected.

100%[======================================>] 56,245,393

179KB/s

in 7m 23s

2018-11-17 11:16:40 (124 KB/s) - ânetboot.tar.gz.1â saved [56245393/56245393]

Extract download TARBall.

#mkdir netboot

#tar xvf netboot.tar.gz -C netboot ./

./ldlinux.c32

./pxelinux.cfg ./ubuntu-installer/

./ubuntu-installer/amd64/

./ubuntu-installer/amd64/linux

./ubuntu-installer/amd64/boot-screens/

./ubuntu-installer/amd64/boot-screens/txt.cfg

./ubuntu-installer/amd64/boot-screens/f2.txt

./ubuntu-installer/amd64/boot-screens/ldlinux.c32

./ubuntu-installer/amd64/boot-screens/f8.txt

./ubuntu-installer/amd64/boot-screens/libcom32.c32

./ubuntu-installer/amd64/boot-screens/f10.txt

./ubuntu-installer/amd64/boot-screens/prompt.cfg

./ubuntu-installer/amd64/boot-screens/f3.txt

./ubuntu-installer/amd64/boot-screens/rqtxt.cfg

./ubuntu-installer/amd64/boot-screens/syslinux.cfg

./ubuntu-installer/amd64/boot-screens/f1.txt

./ubuntu-installer/amd64/boot-screens/f5.txt

./ubuntu-installer/amd64/boot-screens/f4.txt

./ubuntu-installer/amd64/boot-screens/menu.cfg

./ubuntu-installer/amd64/boot-screens/adtxt.cfg

./ubuntu-installer/amd64/boot-screens/f7.txt

./ubuntu-installer/amd64/boot-screens/stdmenu.cfg

./ubuntu-installer/amd64/boot-screens/libutil.c32

./ubuntu-installer/amd64/boot-screens/splash.png

./ubuntu-installer/amd64/boot-screens/exithelp.cfg

./ubuntu-installer/amd64/boot-screens/f9.txt

./ubuntu-installer/amd64/boot-screens/vesamenu.c32

./ubuntu-installer/amd64/boot-screens/f6.txt

./ubuntu-installer/amd64/pxelinux.cfg/

./ubuntu-installer/amd64/pxelinux.cfg/default

./ubuntu-installer/amd64/initrd.gz

./ubuntu-installer/amd64/pxelinux.0

./version.info

./pxelinux.0

We need to copy

initrd.gz

and

linux

files from netboot directory

~/netboot/ubuntu-

installer/amd64/

to

/var/lib/tftpboot/networkboot/ubuntu18

 

directory. These files will be

referenced in the menu entry of PXE boot menu.

#mkdir /var/lib/tftpboot/networkboot/ubuntu18

#cp ~/netboot/ubuntu-installer/amd64/{linux,initrd.gz}

/var/lib/tftpboot/networkboot/ubuntu18/

Create Menu Entries for Ubuntu 18.10 installation:

Edit PXE boot menu for BIOS based clients.

#vi /var/lib/tftpboot/pxelinux.cfg/default

Add a menu entry for Ubuntu 18.10 installation therein.

default vesamenu.c32

prompt 0

timeout 30

menu title Ahmer's PXE Menu

label Install RHEL 7.5

kernel /networkboot/rhel7/vmlinuz

append initrd=/networkboot/rhel7/initrd.img inst.repo=ftp://192.168.116.41/pub/rhel7

ks=ftp://192.168.116.41/pub/rhel7/rhel7.cfg

label Install RHEL 6.0 (64-bit)

kernel /networkboot/rhel6/vmlinuz

append initrd=/networkboot/rhel6/initrd.img inst.repo=ftp://192.168.116.41/pub/rhel6

ks=ftp://192.168.116.41/pub/rhel6/rhel6.cfg

label Install Ubuntu 18.10 Server

menu label Install Ubuntu 18.10 Server

kernel networkboot/ubuntu18/linux

append vga=788 initrd=networkboot/ubuntu18/initrd.gz ks=nfs:192.168.116.41:/nfsshare/ubuntu18/preseed/ubuntu.seed --- quiet

Edit PXE boot menu for UEFI based clients. For more information on UEFI, please refer to Add UEFI Support to PXE Server in CentOS 7.

#vi /var/lib/tftpboot/grub.cfg

Add a menu entry for Ubuntu 18.10 installation in this file.

set timeout=60

menuentry 'Install RHEL 7.5' {

linuxefi /networkboot/rhel7/vmlinuz inst.repo=ftp://192.168.116.41/pub/rhel7/

inst.ks=ftp://192.168.116.41/pub/rhel7/rhel7.cfg

initrdefi /networkboot/rhel7/initrd.img

}

menuentry 'Install RHEL 6.0' {

linuxefi /networkboot/rhel6/vmlinuz inst.repo=ftp://192.168.116.41/pub/rhel6/

inst.ks=ftp://192.168.116.41/pub/rhel6/rhel6.cfg

initrdefi /networkboot/rhel6/initrd.img

}

menuentry "Install Ubuntu 18.10 Server" {

set gfxpayload=keep

linuxefi

/networkboot/ubuntu18/linux

inst.repo=nfs:192.168.116.41:/nfsshare/ubuntu18

inst.ks=nfs:192.168.116.41:/nfsshare/ubuntu18/preseed/ubuntu.seed

}

initrdefi

/networkboot/ubuntu18/initrd.gz

Now, connect a BIOS based PXE client to network and boot it. It will display the following PXE boot menu.

and boot it. It will display the following PXE boot menu. Similarly, connect a UEFI based

Similarly, connect a UEFI based PXE client to network and boot it. It will display the following PXE boot menu.

and boot it. It will display the following PXE boot menu. We have successfully configured our

We have successfully configured our CentOS 7 PXE boot server to install Ubuntu 18.10. You can also add other versions of Ubuntu in similar manner.