ARM64 Centos8 Ubuntu PXE Boot Install

This document will introduce how to setup a centos PXE boot environment on ubuntu 18.04 for install centos8 to your ARM64 machine.

In this document, it uses CentOS 8 version is 8.1.1911, it might also work on later version if you change file name accordingly . 

all command in this document we assume you already run with root permission. 

Hardware topology 

[ARM64 CLIENT] <——-> [Server]  <——-> Internet 

SERVER ethernet ip is , another interface connect to internet. 

Install necessary packages 

Install TFTP, HTTP and DHCPD Server and rpm2cpio 

$ apt install tftpd-hpa apache2 isc-dhcp-server rpm2cpio

Modify dhcpd server configuration 

$ vim /etc/dhcp/dhcpd.conf

following is example configuration,it can be changed to fit your environment 

 ddns-update-style none;

default-lease-time                      259200;
max-lease-time                          518400;
option routers                ;
option broadcast-address      ;
option subnet-mask            ;
option domain-name-servers    ,;
ddns-update-style                       interim;
ignore client-updates;
allow booting;
allow bootp;
allow unknown-clients;
server-name                             pxis;

subnet netmask {
    option ip-forwarding off;
    option subnet-mask        ;
    filename "shim.efi";


Modify tftpd setting 

$ vim /etc/default/tftpd-hpa

Add –create to TFTP_OPTIONS and change tftp directory to /tftpboot 

following is example configuration file 

TFTP_OPTIONS="--secure  --create"

Restart Service 

$ mkdir /tftpboot 
$ /etc/init.d/tftpd-hpa restart
$ /etc/init.d/apache2 restart
$ /etc/init.d/isc-dhcp-server restart

Get ARM64 pxeboot file 

$ cd /tftpboot 
$ wget
$ wget
$ rpm2cpio shim-aa64-15-8.el8.aarch64.rpm | cpio -dimv
$ rpm2cpio grub2-efi-aa64-2.02-78.el8.aarch64.rpm | cpio -dimv
$ cp ./boot/efi/EFI/centos/shim.efi .
$ cp ./boot/efi/EFI/centos/grubaa64.efi .
$ chmod +rx *.efi

Configure grub.conf 

$ vim /tftpboot/grub.cfg

Following is grub.conf example 

set timeout=60
menuentry 'CentOS' {
 linux images/pxeboot/vmlinuz ip=dhcp inst.repo=
  initrd images/pxeboot/initrd.img

If your system support secure boot and you want to do it, please replace linux with linuxefi and replace initrd with initrdefi. 

Get CentOS 8 image and copy it to web server 

$ cd /var/www/html 
$ wget
$ mkdir disk 
$ mount -o loop CentOS-8.1.1911-aarch64-dvd1.iso disk
$ cp -a disk centos8 
$ umount disk 
$ rmdir disk

After copy all file into http file directory, it can visit via browser on server with URL to check whether file exist or not. 


Server should support NAT function to forward packet. 

assume interface connect to internet is wls3
Following is a sample command to enable Linux NAT function which can make client to access internet or intranet . 

$ echo 1 > /proc/sys/net/ipv4/ip_forward ==> enable it immediately 
$ iptables -t nat -A POSTROUTING -o wls3 -j MASQUERADE

Now, you can choose pxeboot on your ARM64 machine. if everything successful, you can see CentOS on your console if everything is ok . 


Wireshark is your good friend, use it. 

Ubuntu PXE Environment

It can download Ubuntu Netboot images from this url.

Choice what you want, for example, url below is Ubuntu 18.04 for ARM64 image

Download netboot image to tftp directory, I prefer to put different version to different directory.

$ cd /tftpboot
$ wget
$ mkdir ubuntu1804
$ cd ubuntu1804
$ tar xvf ../netboot.tar.gz

Modify grub.cfg and add Ubuntu option to grub.cfg, save it, now, this server can also provide ubuntu net install

set timeout=60
menuentry 'CentOS8 Install' {
  linux images/pxeboot/vmlinuz ip=dhcp inst.repo=
  initrd images/pxeboot/initrd.img
menuentry 'Ubuntu18.04 Install' {
  linux ubuntu1804/ubuntu-installer/arm64/linux ip=dhcp
  initrd ubuntu1804/ubuntu-installer/arm64/initrd.gz


On this day..



Related Posts

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>