Difference between revisions of "Application note - UEFI PXE boot to Linux Mint"

From fit-PC wiki
Jump to: navigation, search
(Created page with "== 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 connecti...")   (change visibility)
 
 
(31 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
== Overview ==
 
== 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
+
* 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 ==
 
== TFTP server ==
Line 12: Line 19:
 
TFTP_DIRECTORY="/var/lib/tftpboot"
 
TFTP_DIRECTORY="/var/lib/tftpboot"
 
TFTP_ADDRESS=":69"
 
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --verbose"
+
TFTP_OPTIONS="--secure --ipv4 --verbose"
 
</pre>
 
</pre>
 +
 +
* Reload tftpd-hpa service and verify it's running:
 +
<pre>
 +
$ sudo service tftpd-hpa restart
 +
$ service tftpd-hpa status
 +
● tftpd-hpa.service - LSB: HPA's tftp server
 +
  Loaded: loaded (/etc/init.d/tftpd-hpa; generated)
 +
  Active: active (running) since Wed 2019-01-23 08:15:20 EST; 7s ago
 +
    Docs: man:systemd-sysv-generator(8)
 +
  Process: 2002 ExecStop=/etc/init.d/tftpd-hpa stop (code=exited, status=0/SUCCESS)
 +
  Process: 2007 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=0/SUCCESS)
 +
    Tasks: 1 (limit: 4915)
 +
  CGroup: /system.slice/tftpd-hpa.service
 +
          └─2015 /usr/sbin/in.tftpd --listen --user tftp --address :69 --secure --ipv4 --verbose /var/lib/tftpboot
 +
 +
Jan 23 08:15:20 denis-linux systemd[1]: Starting LSB: HPA's tftp server...
 +
Jan 23 08:15:20 denis-linux tftpd-hpa[2007]:  * Starting HPA's tftpd in.tftpd
 +
Jan 23 08:15:20 denis-linux tftpd-hpa[2007]:    ...done.
 +
Jan 23 08:15:20 denis-linux systemd[1]: Started LSB: HPA's tftp server.
 +
</pre>
 +
 +
== DHCP server ==
 +
<pre>
 +
$ sudo apt install isc-dhcp-server
 +
</pre>
 +
 +
* Edit configuration file: /etc/network/interfaces
 +
<pre>
 +
auto lo
 +
iface lo inet loopback
 +
 +
auto eth1
 +
iface eth1 inet static
 +
    address 10.0.0.1
 +
    netmask 255.255.255.0
 +
    network 10.0.0.0
 +
    broadcast 10.0.0.255
 +
</pre>
 +
 +
* Reload networking service and verify it's running:
 +
<pre>
 +
$ sudo service networking restart
 +
$ service networking status
 +
● networking.service - Raise network interfaces
 +
  Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)
 +
  Active: active (exited) since Wed 2019-01-23 08:16:45 EST; 9s ago
 +
    Docs: man:interfaces(5)
 +
  Process: 3376 ExecStop=/sbin/ifdown -a --read-environment --exclude=lo (code=exited, status=0/SUCCESS)
 +
  Process: 3395 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=0/SUCCESS)
 +
  Process: 3392 ExecStartPre=/bin/sh -c [ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ] && udevadm settle (code=exited, status=0/SUCCESS)
 +
Main PID: 3395 (code=exited, status=0/SUCCESS)
 +
 +
Jan 23 08:16:45 denis-linux systemd[1]: Starting Raise network interfaces...
 +
Jan 23 08:16:45 denis-linux systemd[1]: Started Raise network interfaces.
 +
</pre>
 +
 +
* Edit configuration file: /etc/default/isc-dhcp-server
 +
<pre>
 +
INTERFACESv4="eth1"
 +
</pre>
 +
 +
* Edit configuration file: /etc/dhcp/dhcpd.conf
 +
<pre>
 +
default-lease-time 600;
 +
max-lease-time 7200;
 +
 +
allow booting;
 +
allow bootp;
 +
 +
subnet 10.0.0.0 netmask 255.255.255.0 {
 +
    range 10.0.0.2 10.0.0.254;
 +
    option subnet-mask 255.255.255.0;
 +
    option domain-name-servers 10.0.0.1;
 +
    option routers 10.0.0.1;
 +
    option broadcast-address 10.0.0.255;
 +
    filename "grubx64.efi";
 +
}
 +
</pre>
 +
 +
* Reload isc-dhcp-server service and verify it's running:
 +
<pre>
 +
$ sudo service isc-dhcp-server restart
 +
$ service isc-dhcp-server status
 +
● 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 08:18:40 EST; 7s ago
 +
    Docs: man:dhcpd(8)
 +
Main PID: 3604 (dhcpd)
 +
    Tasks: 1 (limit: 4915)
 +
  CGroup: /system.slice/isc-dhcp-server.service
 +
          └─3604 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf
 +
 +
Jan 23 08:18:40 denis-linux dhcpd[3604]: Sending on  LPF/eth1/00:01:c0:1c:a8:11/10.0.0.0/24
 +
Jan 23 08:18:40 denis-linux dhcpd[3604]:
 +
Jan 23 08:18:40 denis-linux dhcpd[3604]: No subnet declaration for eth0 (192.168.84.51).
 +
Jan 23 08:18:40 denis-linux dhcpd[3604]: ** Ignoring requests on eth0.  If this is not what
 +
Jan 23 08:18:40 denis-linux dhcpd[3604]:    you want, please write a subnet declaration
 +
Jan 23 08:18:40 denis-linux dhcpd[3604]:    in your dhcpd.conf file for the network segment
 +
Jan 23 08:18:40 denis-linux dhcpd[3604]:    to which interface eth0 is attached. **
 +
Jan 23 08:18:40 denis-linux dhcpd[3604]:
 +
Jan 23 08:18:40 denis-linux dhcpd[3604]: Sending on  Socket/fallback/fallback-net
 +
Jan 23 08:18:40 denis-linux dhcpd[3604]: 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]]

Latest revision as of 15:37, 23 January 2019

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

$ sudo apt install tftpd-hpa
  • Edit configuration file: /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --ipv4 --verbose"
  • Reload tftpd-hpa service and verify it's running:
$ sudo service tftpd-hpa restart
$ service tftpd-hpa status
● tftpd-hpa.service - LSB: HPA's tftp server
   Loaded: loaded (/etc/init.d/tftpd-hpa; generated)
   Active: active (running) since Wed 2019-01-23 08:15:20 EST; 7s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 2002 ExecStop=/etc/init.d/tftpd-hpa stop (code=exited, status=0/SUCCESS)
  Process: 2007 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=0/SUCCESS)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/tftpd-hpa.service
           └─2015 /usr/sbin/in.tftpd --listen --user tftp --address :69 --secure --ipv4 --verbose /var/lib/tftpboot

Jan 23 08:15:20 denis-linux systemd[1]: Starting LSB: HPA's tftp server...
Jan 23 08:15:20 denis-linux tftpd-hpa[2007]:  * Starting HPA's tftpd in.tftpd
Jan 23 08:15:20 denis-linux tftpd-hpa[2007]:    ...done.
Jan 23 08:15:20 denis-linux systemd[1]: Started LSB: HPA's tftp server.

DHCP server

$ sudo apt install isc-dhcp-server
  • Edit configuration file: /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth1
iface eth1 inet static
    address 10.0.0.1
    netmask 255.255.255.0
    network 10.0.0.0
    broadcast 10.0.0.255
  • Reload networking service and verify it's running:
$ sudo service networking restart
$ service networking status
● networking.service - Raise network interfaces
   Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)
   Active: active (exited) since Wed 2019-01-23 08:16:45 EST; 9s ago
     Docs: man:interfaces(5)
  Process: 3376 ExecStop=/sbin/ifdown -a --read-environment --exclude=lo (code=exited, status=0/SUCCESS)
  Process: 3395 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=0/SUCCESS)
  Process: 3392 ExecStartPre=/bin/sh -c [ "$CONFIGURE_INTERFACES" != "no" ] && [ -n "$(ifquery --read-environment --list --exclude=lo)" ] && udevadm settle (code=exited, status=0/SUCCESS)
 Main PID: 3395 (code=exited, status=0/SUCCESS)

Jan 23 08:16:45 denis-linux systemd[1]: Starting Raise network interfaces...
Jan 23 08:16:45 denis-linux systemd[1]: Started Raise network interfaces.
  • Edit configuration file: /etc/default/isc-dhcp-server
INTERFACESv4="eth1"
  • Edit configuration file: /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;

allow booting;
allow bootp;

subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.2 10.0.0.254;
    option subnet-mask 255.255.255.0;
    option domain-name-servers 10.0.0.1;
    option routers 10.0.0.1;
    option broadcast-address 10.0.0.255;
    filename "grubx64.efi";
}
  • Reload isc-dhcp-server service and verify it's running:
$ sudo service isc-dhcp-server restart
$ service isc-dhcp-server status
● 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 08:18:40 EST; 7s ago
     Docs: man:dhcpd(8)
 Main PID: 3604 (dhcpd)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/isc-dhcp-server.service
           └─3604 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf

Jan 23 08:18:40 denis-linux dhcpd[3604]: Sending on   LPF/eth1/00:01:c0:1c:a8:11/10.0.0.0/24
Jan 23 08:18:40 denis-linux dhcpd[3604]: 
Jan 23 08:18:40 denis-linux dhcpd[3604]: No subnet declaration for eth0 (192.168.84.51).
Jan 23 08:18:40 denis-linux dhcpd[3604]: ** Ignoring requests on eth0.  If this is not what
Jan 23 08:18:40 denis-linux dhcpd[3604]:    you want, please write a subnet declaration
Jan 23 08:18:40 denis-linux dhcpd[3604]:    in your dhcpd.conf file for the network segment
Jan 23 08:18:40 denis-linux dhcpd[3604]:    to which interface eth0 is attached. **
Jan 23 08:18:40 denis-linux dhcpd[3604]: 
Jan 23 08:18:40 denis-linux dhcpd[3604]: Sending on   Socket/fallback/fallback-net
Jan 23 08:18:40 denis-linux dhcpd[3604]: Server starting service.

ISO images

  • Download desired ISO image, for example:
$ mkdir -p ~/iso/linuxmint/
$ wget http://mirrors.seas.harvard.edu/linuxmint/stable/19.1/linuxmint-19.1-cinnamon-64bit.iso -P ~/iso/linuxmint/
  • Copy downloaded ISO image content to the TFTP directory
$ 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

UEFI grub bootloader

  • Prepare UEFI grub bootloader and configuration file grub.cfg:
$ sudo cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /var/lib/tftpboot/grubx64.efi
$ sudo mkdir -p /var/lib/tftpboot/grub
  • Edit configuration file: /var/lib/tftpboot/grub/grub.cfg
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
}

NFS server

$ sudo apt install nfs-kernel-server
  • Edit configuration file: /etc/exports
/var/lib/tftpboot/iso 10.0.0.0/255.255.0.0(ro,sync,no_subtree_check)
  • Reload nfs-kernel-server service and verify it's running:
$ 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.

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:
$ 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