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 10.0.0.1 , 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;
authoritative;
default-lease-time 259200;
max-lease-time 518400;
option routers 10.0.0.1;
option broadcast-address 192.168.1.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 168.95.1.1,8.8.8.8;
ddns-update-style interim;
ignore client-updates;
allow booting;
allow bootp;
allow unknown-clients;
server-name pxis;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.200;
option ip-forwarding off;
option subnet-mask 255.255.255.0;
next-server 10.0.0.1;
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_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS=":69"
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 http://mirror.centos.org/centos/8/BaseOS/aarch64/os/Packages/shim-aa64-15-8.el8.aarch64.rpm
$ wget http://mirror.centos.org/centos/8/BaseOS/aarch64/os/Packages/grub2-efi-aa64-2.02-78.el8.aarch64.rpm
$ 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=http://10.0.0.1/centos8/
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 http://mirrors.oit.uci.edu/centos/8.1.1911/isos/aarch64/CentOS-8.1.1911-aarch64-dvd1.iso
$ 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 http://10.0.0.1/centos8/ to check whether file exist or not.
NAT
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 .
Debug
Wireshark is your good friend, use it.
Ubuntu PXE Environment
It can download Ubuntu Netboot images from this url.
http://cdimage.ubuntu.com/netboot/
Choice what you want, for example, url below is Ubuntu 18.04 for ARM64 image
http://ports.ubuntu.com/ubuntu-ports/dists/bionic-updates/main/installer-arm64/current/images/netboot/
Download netboot image to tftp directory, I prefer to put different version to different directory.
$ cd /tftpboot
$ wget http://ports.ubuntu.com/ubuntu-ports/dists/bionic-updates/main/installer-arm64/current/images/netboot/netboot.tar.gz
$ 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=http://10.0.0.1/centos8/
initrd images/pxeboot/initrd.img
}
menuentry 'Ubuntu18.04 Install' {
linux ubuntu1804/ubuntu-installer/arm64/linux ip=dhcp
initrd ubuntu1804/ubuntu-installer/arm64/initrd.gz
}
Ref.
https://docs.centos.org/en-US/centos/install-guide/pxe-server/#sect-network-boot-setup-uefi
https://docs.centos.org/en-US/8-docs/advanced-install/assembly_preparing-for-a-network-install/
https://forums.opensuse.org/showthread.php/501075-error-cannot-find-commands-linuxefi-or-initrdefi
On this day..
- Linux Kernel 不支援 Floating Pointer - 2010
- ARM11 BE8 and BE32 - 2010
0 Comments.