Changes

Jump to: navigation, search

Application note - UEFI PXE boot to Linux Mint

6,200 bytes added, 15:37, 23 January 2019
Tamir moved page [[UEFI PXE boot to Linux Mint]] to [[Application note - UEFI PXE boot to Linux Mint]]
== Overview ==
* In this tutorial you will be able to create PXE server on your PC that allows you to boot multiple distributions directly from ISO image using Ethernet connection only. * The diskless computer (or diskless node) you want to boot will be called the Client* The computer that holds the ISO images and provides DHCP, TFTP and NFS services will be called the Server.** Server is running recent Linux Mint or Ubuntu distributions** Server has 2 Ethernet ports: eth0 connects to the internet, eth1 will be connected to the separate network with diskless nodes * As example we will boot the client from the linuxmint-19.1-cinnamon-64bit.iso stored on the Server
== TFTP server ==
* Reload tftpd-hpa service and verify it's running:
<pre>
$ sudo systemctl restart service tftpd-hparestart$ systemctl status service tftpd-hpastatus
● tftpd-hpa.service - LSB: HPA's tftp server
Loaded: loaded (/etc/init.d/tftpd-hpa; generated)
Active: active (running) since Wed 2019-01-23 0508:3515:05 20 EST; 1min 13s 7s ago
Docs: man:systemd-sysv-generator(8)
Process: 2534 2002 ExecStop=/etc/init.d/tftpd-hpa stop (code=exited, status=0/SUCCESS) Process: 2539 2007 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=0/SUCCESS)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/tftpd-hpa.service
└─2547 └─2015 /usr/sbin/in.tftpd --listen --user tftp --address :69 --secure --ipv4 --verbose /var/lib/tftpboot
Jan 23 0508:3515:05 20 denis-linux systemd[1]: Starting LSB: HPA's tftp server...Jan 23 0508:3515:05 20 denis-linux tftpd-hpa[25392007]: * Starting HPA's tftpd in.tftpdJan 23 0508:3515:05 20 denis-linux tftpd-hpa[25392007]: ...done.Jan 23 0508:3515:05 20 denis-linux systemd[1]: Started LSB: HPA's tftp server.</pre> * Prepare UEFI grub bootloader:<pre>$ sudo cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /var/lib/tftpboot/grubx64.efi
</pre>
* Reload networking service and verify it's running:
<pre>
$ sudo systemctl service networking restart networking$ systemctl status service networking$ systemctl status networking
● networking.service - Raise network interfaces
Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2019-01-23 0608:0016:57 45 EST; 43min 9s ago
Docs: man:interfaces(5)
Process: 4835 3376 ExecStop=/sbin/ifdown -a --read-environment --exclude=lo (code=exited, status=0/SUCCESS) Process: 4856 3395 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=0/SUCCESS) Process: 4851 3392 ExecStartPre=/bin/sh -c [ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ] && udevadm settle (code=exited, status=0/SUCCESS) Main PID: 4856 3395 (code=exited, status=0/SUCCESS)
Jan 23 0608:0016:57 45 denis-linux systemd[1]: Starting Raise network interfaces...Jan 23 0608:0016:57 45 denis-linux systemd[1]: Started Raise network interfaces.
</pre>
}
</pre>
 
 
* Reload isc-dhcp-server service and verify it's running:
<pre>
$ sudo systemctl restart service isc-dhcp-serverrestart$ systemctl status service isc-dhcp-serverstatus
● isc-dhcp-server.service - ISC DHCP IPv4 server
Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2019-01-23 0608:0118:01 40 EST; 2s 7s ago
Docs: man:dhcpd(8)
Main PID: 4999 3604 (dhcpd)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/isc-dhcp-server.service
└─4999 └─3604 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf
Jan 23 0608:0118:01 40 denis-linux dhcpd[49993604]: Sending on LPF/eth1/00:01:c0:1c:a8:11/10.0.0.0/24Jan 23 0608:0118:01 40 denis-linux dhcpd[49993604]: Jan 23 0608:0118:01 40 denis-linux dhcpd[49993604]: No subnet declaration for eth0 (192.168.84.51).Jan 23 0608:0118:01 40 denis-linux dhcpd[49993604]: ** Ignoring requests on eth0. If this is not whatJan 23 0608:0118:01 40 denis-linux dhcpd[49993604]: you want, please write a subnet declarationJan 23 0608:0118:01 40 denis-linux dhcpd[49993604]: in your dhcpd.conf file for the network segmentJan 23 0608:0118:01 40 denis-linux dhcpd[49993604]: to which interface eth0 is attached. **Jan 23 0608:0118:01 40 denis-linux dhcpd[49993604]: Jan 23 0608:0118:01 40 denis-linux dhcpd[49993604]: Sending on Socket/fallback/fallback-netJan 23 0608:0118:01 40 denis-linux dhcpd[49993604]: Server starting service.
</pre>
 
== ISO images ==
* Download desired ISO image, for example:
<pre>
$ mkdir -p ~/iso/linuxmint/
$ wget http://mirrors.seas.harvard.edu/linuxmint/stable/19.1/linuxmint-19.1-cinnamon-64bit.iso -P ~/iso/linuxmint/
</pre>
 
* Copy downloaded ISO image content to the TFTP directory
<pre>
$ sudo mkdir -p /mnt/loop
$ sudo mkdir -p /var/lib/tftpboot/iso/linuxmint-19.1-cinnamon-64bit.iso
$ sudo mount -o loop ~/iso/linuxmint/linuxmint-19.1-cinnamon-64bit.iso /mnt/loop
 
$ sudo cp -r /mnt/loop/* /var/lib/tftpboot/iso/linuxmint-19.1-cinnamon-64bit.iso
$ ls /var/lib/tftpboot/iso/linuxmint-19.1-cinnamon-64bit.iso
boot casper dists EFI isolinux MD5SUMS pool preseed README.diskdefines
</pre>
 
== UEFI grub bootloader ==
* Prepare UEFI grub bootloader and configuration file grub.cfg:
<pre>
$ sudo cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /var/lib/tftpboot/grubx64.efi
$ sudo mkdir -p /var/lib/tftpboot/grub
</pre>
* Edit configuration file: /var/lib/tftpboot/grub/grub.cfg
<pre>
menuentry "linuxmint-19.1-cinnamon-64bit.iso" {
linux iso/linuxmint-19.1-cinnamon-64bit.iso/casper/vmlinuz nfsroot=10.0.0.1:/var/lib/tftpboot/iso/linuxmint-19.1-cinnamon-64bit.iso boot=casper netboot=nfs toram
initrd iso/linuxmint-19.1-cinnamon-64bit.iso/casper/initrd.lz
}
</pre>
 
== NFS server ==
<pre>
$ sudo apt install nfs-kernel-server
</pre>
 
* Edit configuration file: /etc/exports
<pre>
/var/lib/tftpboot/iso 10.0.0.0/255.255.0.0(ro,sync,no_subtree_check)
</pre>
 
* Reload nfs-kernel-server service and verify it's running:
<pre>
$ sudo service nfs-kernel-server restart
$ service nfs-kernel-server status
● nfs-server.service - NFS server and services
Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2019-01-23 08:27:05 EST; 6s ago
Process: 4635 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
Process: 4634 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
Process: 4633 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
Process: 4643 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
Process: 4642 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Main PID: 4643 (code=exited, status=0/SUCCESS)
 
Jan 23 08:27:05 denis-linux systemd[1]: Starting NFS server and services...
Jan 23 08:27:05 denis-linux systemd[1]: Started NFS server and services.
</pre>
 
== Prepare the client ==
* Power-on the client
* Enter the BIOS Settings by pressing [Delete] number of times
* Set Advanced -> Network Stack Configuration -> Ipv4 PXE Support to [Enabled]
* Save & Exit
* Thats all, after 1-2 minutes you should see the Linux Mint 19 desktop on your client's display
 
== Enable debug (optional) ==
* /var/log/syslog will represent debug info on the server side:
<pre>
$ tail -f /var/log/syslog
...
Jan 23 08:40:01 denis-linux dhcpd[1244]: DHCPDISCOVER from 00:01:c0:12:34:57 via eth1
Jan 23 08:40:02 denis-linux dhcpd[1244]: DHCPOFFER on 10.0.0.2 to 00:01:c0:12:34:57 via eth1
Jan 23 08:40:05 denis-linux dhcpd[1244]: DHCPREQUEST for 10.0.0.2 (10.0.0.1) from 00:01:c0:12:34:57 via eth1
Jan 23 08:40:05 denis-linux dhcpd[1244]: DHCPACK on 10.0.0.2 to 00:01:c0:12:34:57 via eth1
Jan 23 08:40:05 denis-linux in.tftpd[1633]: RRQ from 10.0.0.2 filename grubx64.efi
Jan 23 08:40:05 denis-linux in.tftpd[1633]: tftp: client does not accept options
Jan 23 08:40:05 denis-linux in.tftpd[1634]: RRQ from 10.0.0.2 filename grubx64.efi
Jan 23 08:40:06 denis-linux in.tftpd[1635]: RRQ from 10.0.0.2 filename /grub/x86_64-efi/command.lst
Jan 23 08:40:06 denis-linux in.tftpd[1636]: RRQ from 10.0.0.2 filename /grub/x86_64-efi/fs.lst
Jan 23 08:40:06 denis-linux in.tftpd[1637]: RRQ from 10.0.0.2 filename /grub/x86_64-efi/crypto.lst
Jan 23 08:40:06 denis-linux in.tftpd[1638]: RRQ from 10.0.0.2 filename /grub/x86_64-efi/terminal.lst
Jan 23 08:40:06 denis-linux in.tftpd[1639]: RRQ from 10.0.0.2 filename /grub/grub.cfg
Jan 23 08:40:15 denis-linux in.tftpd[1640]: RRQ from 10.0.0.2 filename iso/linuxmint-19.1-cinnamon-64bit.iso/casper/vmlinuz
Jan 23 08:40:15 denis-linux in.tftpd[1641]: RRQ from 10.0.0.2 filename iso/linuxmint-19.1-cinnamon-64bit.iso/casper/initrd.lz
Jan 23 08:40:35 denis-linux kernel: [ 725.823235] igb 0000:02:00.0 eth1: igb: eth1 NIC Link is Down
Jan 23 08:40:39 denis-linux NetworkManager[674]: <info> [1548250839.2887] device (eth1): carrier: link connected
Jan 23 08:40:39 denis-linux kernel: [ 729.511874] igb 0000:02:00.0 eth1: igb: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX
Jan 23 08:40:40 denis-linux dhcpd[1244]: reuse_lease: lease age 35 (secs) under 25% threshold, reply with unaltered, existing lease for 10.0.0.2
Jan 23 08:40:40 denis-linux dhcpd[1244]: DHCPDISCOVER from 00:01:c0:12:34:57 via eth1
Jan 23 08:40:40 denis-linux dhcpd[1244]: DHCPOFFER on 10.0.0.2 to 00:01:c0:12:34:57 via eth1
Jan 23 08:40:40 denis-linux dhcpd[1244]: reuse_lease: lease age 35 (secs) under 25% threshold, reply with unaltered, existing lease for 10.0.0.2
Jan 23 08:40:40 denis-linux dhcpd[1244]: DHCPREQUEST for 10.0.0.2 (10.0.0.1) from 00:01:c0:12:34:57 via eth1
Jan 23 08:40:40 denis-linux dhcpd[1244]: DHCPACK on 10.0.0.2 to 00:01:c0:12:34:57 via eth1
Jan 23 08:40:40 denis-linux rpc.mountd[850]: authenticated mount request from 10.0.0.2:836 for /var/lib/tftpboot/iso/linuxmint-19.1-cinnamon-64bit.iso (/var/lib/tftpboot/iso)
Jan 23 08:41:06 denis-linux dhcpd[1244]: DHCPDISCOVER from 00:01:c0:12:34:57 via eth1
Jan 23 08:41:06 denis-linux dhcpd[1244]: DHCPOFFER on 10.0.0.2 to 00:01:c0:12:34:57 (mint) via eth1
Jan 23 08:41:06 denis-linux dhcpd[1244]: DHCPREQUEST for 10.0.0.2 (10.0.0.1) from 00:01:c0:12:34:57 (mint) via eth1
Jan 23 08:41:06 denis-linux dhcpd[1244]: DHCPACK on 10.0.0.2 to 00:01:c0:12:34:57 (mint) via eth1
</pre>
 
[[category: Application note]]
[[category: Linux]]
1,586
edits