How to install Ubuntu from PXE Server

Share on Social Media

In this configuration guide, you will learn, how to install Ubuntu from PXE Server. #centlinux #linux #ubuntu #pxe

Problem Statement:

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 install Ubuntu from PXE Server.

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.

In this article, we are performing everything from CLI, therefore, it is highly recommended that, you should have Linux Pocket Guide: Essential Commands (PAID LINK) 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

Configure NFS Server in CentOS 7:

Connect to pxe-server.itlab.com using ssh as root user.

Install NFS packages using yum command.

# yum install -y nfs-utils

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
# firewall-cmd --reload
success

Adjust SELinux Permissions.

# semanage fcontext --add -t nfs_t '/nfsshare(/.*)?'
# 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.

# echo "/nfsshare *(ro)" >> /etc/exports
# exportfs -r

Copy Ubuntu ISO in NFS Share:

Attach Ubuntu 18.10 Server ISO/DVD and mount it at /mnt/iso (you can use any 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 directory to NFS server.

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

Create Kickstart File for Automated Installation:

We have to write a Kickstart file for Ubuntu 18.10 within the /nfsshare/ubuntu18/preseed/ directory, so it can be accessed by PXE clients via NFS service.

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

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

# Enable extras.ubuntu.com.
d-i     apt-setup/extras        boolean true
# Install the Ubuntu desktop.
tasksel tasksel/first   multiselect ubuntu-desktop
# 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        ubiquity/keep-installed string icedtea6-plugin openoffice.org
#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/
#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 in 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.152, 91.189.88.161, 91.189.88.162, ...
Connecting to archive.ubuntu.com (archive.ubuntu.com)|91.189.88.152|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 56245393 (54M) [application/x-gzip]
Saving to: ânetboot.tar.gz.1â

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 xf netboot.tar.gz -C netboot

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/

Add Ubuntu Entry in PXE Menu:

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.

pxe boot menu for ubuntu install

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

uefi boot menu for ubuntu install

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.

Conclusion – Install Ubuntu from PXE Server:

In this configuration guide, you have learned, how to install Ubuntu from PXE Server.