Network Boot Raspberry Pi
This is a post is meant for myself.
Prepare tftp boot folder
$ sudo mkdir /mnt/<tftpboot>
$ sudo mount -t nfs <ip_of_NAS>:/volume1/<tftpboot> /mnt/<tftpboot>
$ sudo cp /boot/firmware/bootcode.bin /mnt
Get Raspberry Pi Serial Number
$ grep Serial /proc/cpuinfo
$ sudo mkdir /mnt/<tftpboot>/<rpi_serial>
$ sudo rsync -avhP /boot/firmware/ /mnt/<tftpboot>/<rpi_serial>
Prepare pxe share folder
$ sudo mkdir /mnt/pxeshare
$ sudo mount -t nfs <ip_of_NAS>:/volume1/pxeshare /mnt/pxeshare
$ sudo mkdir /mnt/pxeshare/<rpi_folder>
$ sudo rsync -avhP --exclude /boot --exclude /proc --exclude /sys --exclude /dev --exclude /mnt / /mnt/pxeshare/<rpi_folder>/
$ sudo mkdir /mnt/pxeshare/<rpi_folder>/{dev,proc,sys,boot,mnt}
Edit /boot/firmware/cmdline.txt
$ mv cmdline.txt cmdline.bak.txt
$ console=serial0,115200 console=tty1 root=/dev/nfs nfsroot=<ip_of_NAS>:/volume1/pxeshare/<rpi_folder> rw ip=dhcp elevator=deadline rootwait cfg80211.ieee80211_regdom=SG > /mnt/tftpboot/cmdline.txt
Edit /etc/fstab
$ sudo sed -i "2i <ip_of_NAS>:/volume1/tftpboot/<rpi_serial> /boot/firmware nfs _netdev 0 0" /mnt/pxeshare/<rpi_folder>/etc/fstab
Enable zram and disable swap
$ sudo dphys-swapfile swapoff
$ sudo dphys-swapfile uninstall
$ sudo systemctl stop dphys-swapfile.service
$ sudo systemctl disable dphys-swapfile.service
$ sudo systemctl mask dphys-swapfile.service
$ sudo apt-get install zram-tools
References
https://warmestrobot.com/blog/2024/06/27/raspberry-pi-network-boot-guide-2/
https://rob-ferguson.me/how-to-pxe-boot-your-rpi/