Differences
This shows you the differences between two versions of the page.
en:linux:diskless_pxe_nfs [2020/05/06 04:00] alex created |
en:linux:diskless_pxe_nfs [2020/05/06 04:08] (current) alex |
||
---|---|---|---|
Line 11: | Line 11: | ||
Install necessary packages | Install necessary packages | ||
+ | <code> | ||
# apt install isc-dhcp-server tftpd-hpa pxelinux nfs-kernel-server debootstrap | # apt install isc-dhcp-server tftpd-hpa pxelinux nfs-kernel-server debootstrap | ||
+ | </code> | ||
Configure network interface (ref: [[https://help.ubuntu.com/lts/serverguide/network-configuration.html.en]]). In this case, eno1 is the external interface (facing the internet) and eno2 is the internal interface (facing the PXE booted hosts). | Configure network interface (ref: [[https://help.ubuntu.com/lts/serverguide/network-configuration.html.en]]). In this case, eno1 is the external interface (facing the internet) and eno2 is the internal interface (facing the PXE booted hosts). | ||
- | # vim /etc/netplan/99_config.yaml | + | Edit ''/etc/netplan/99_config.yaml'' |
<code> | <code> | ||
Line 31: | Line 33: | ||
Configure DHCP (ref: [[https://help.ubuntu.com/community/isc-dhcp-server]]) | Configure DHCP (ref: [[https://help.ubuntu.com/community/isc-dhcp-server]]) | ||
- | # vim /etc/dhcp/dhcpd.conf | + | Edit ''/etc/dhcp/dhcpd.conf'' |
<code> | <code> | ||
Line 50: | Line 52: | ||
</code> | </code> | ||
- | # vim /etc/dhcp/reactor-host-dhcp.conf | + | Edit ''/etc/dhcp/reactor-host-dhcp.conf'' |
<code> | <code> | ||
Line 64: | Line 66: | ||
</code> | </code> | ||
- | # vim /etc/dhcp/reactor-ilo-dhcp.conf | + | Edit ''/etc/dhcp/reactor-ilo-dhcp.conf'' |
<code> | <code> | ||
Line 76: | Line 78: | ||
</code> | </code> | ||
- | # vim /etc/default/isc-dhcp-server | + | Edit ''/etc/default/isc-dhcp-server'' |
<code> | <code> | ||
Line 84: | Line 86: | ||
Start DHCP server | Start DHCP server | ||
- | # systemctl enable --now isc-dhcp-server | + | Run ''systemctl enable --now isc-dhcp-server'' |
Configure TFTP | Configure TFTP | ||
Line 92: | Line 94: | ||
Configure PXE | Configure PXE | ||
+ | <code> | ||
# mkdir /srv/nfs/ubuntu | # mkdir /srv/nfs/ubuntu | ||
# cd /var/lib/tftpboot | # cd /var/lib/tftpboot | ||
Line 97: | Line 100: | ||
# cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot | # cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot | ||
# cp -r /usr/lib/syslinux/modules/bios /var/lib/tftpboot/boot/isolinux | # cp -r /usr/lib/syslinux/modules/bios /var/lib/tftpboot/boot/isolinux | ||
- | # vim pxelinux.cfg/default | + | </code> |
+ | |||
+ | Edit ''/var/lib/tftpboot/pxelinux.cfg/default'' | ||
<code> | <code> | ||
Line 120: | Line 125: | ||
</code> | </code> | ||
+ | <code> | ||
# mkdir ubuntu | # mkdir ubuntu | ||
# mount --bind /srv/nfs/ubuntu ubuntu | # mount --bind /srv/nfs/ubuntu ubuntu | ||
+ | </code> | ||
- | # vim /etc/fstab | + | Edit ''/etc/fstab'' to append |
- | + | ||
- | append | + | |
<code> | <code> | ||
Line 138: | Line 143: | ||
Export install and required mounts | Export install and required mounts | ||
- | # vim /etc/exports | + | Edit ''/etc/exports'' |
<code> | <code> | ||
Line 146: | Line 151: | ||
</code> | </code> | ||
- | # exportfs -rv | + | Run ''exportfs -rv'' |
===== Client hosts ===== | ===== Client hosts ===== | ||
Line 152: | Line 157: | ||
Install ubuntu for net boot clients (ref: [[https://help.ubuntu.com/community/Installation/OnNFSDrive]]) | Install ubuntu for net boot clients (ref: [[https://help.ubuntu.com/community/Installation/OnNFSDrive]]) | ||
+ | <code> | ||
# mkdir /srv/nfs | # mkdir /srv/nfs | ||
# cd /srv/nfs | # cd /srv/nfs | ||
- | # vim run_debootstrap.sh | + | </code> |
+ | |||
+ | Edit ''run_debootstrap.sh'' | ||
<code> | <code> | ||
Line 162: | Line 170: | ||
</code> | </code> | ||
- | # bash run_debootstrap.sh | + | Run ''bash run_debootstrap.sh'' |
Do not set /srv/nfs/ubuntu/etc/hostname, hostname will come from DHCP | Do not set /srv/nfs/ubuntu/etc/hostname, hostname will come from DHCP | ||
+ | <code> | ||
# mount --bind /proc ubuntu/proc | # mount --bind /proc ubuntu/proc | ||
# chroot ubuntu | # chroot ubuntu | ||
+ | </code> | ||
Set up locales | Set up locales | ||
- | # vi /etc/locale.gen | + | Edit ''/etc/locale.gen'', uncomment locale (en_US.UTF-8) |
- | uncomment locale (en_US.UTF-8) | + | Run ''locale-gen'' |
- | + | ||
- | # locale-gen | + | |
Install kernel, nfs-common, and SSH server | Install kernel, nfs-common, and SSH server | ||
Do not install grub if prompted to do so | Do not install grub if prompted to do so | ||
+ | <code> | ||
# apt install linux-image-generic nfs-common openssh-server | # apt install linux-image-generic nfs-common openssh-server | ||
# chmod a+r /boot/vmlinuz* | # chmod a+r /boot/vmlinuz* | ||
# systemctl enable ssh | # systemctl enable ssh | ||
+ | </code> | ||
- | Enable serial console | + | Enable serial console by running ''systemctl enable getty@ttyS1'' |
- | + | ||
- | # systemctl enable getty@ttyS1 | + | |
Set up fstab | Set up fstab | ||
- | # vi /etc/fstab | + | Edit ''/etc/fstab'' |
<code> | <code> | ||
Line 206: | Line 214: | ||
Workaround for unreadable kernel image | Workaround for unreadable kernel image | ||
- | # vi /etc/kernel/postinst.d/chmod-vmlinuz | + | Edit ''/etc/kernel/postinst.d/chmod-vmlinuz'' |
<code> | <code> | ||
Line 214: | Line 222: | ||
</code> | </code> | ||
- | # chmod a+x /etc/kernel/postinst.d/chmod-vmlinuz | + | Run ''chmod a+x /etc/kernel/postinst.d/chmod-vmlinuz'' |
Edit initramfs settings for NFS boot | Edit initramfs settings for NFS boot | ||
- | # vi /etc/initramfs-tools/initramfs.conf | + | Edit ''/etc/initramfs-tools/initramfs.conf'' |
<code> | <code> | ||
Line 224: | Line 232: | ||
</code> | </code> | ||
- | Regenerate initramfs | + | Regenerate initramfs by running ''update-initramfs -u'' |
- | # update-initramfs -u | + | Set root password and/or add users, install packages, etc. Then: |
- | + | ||
- | Set root password and/or add users, install packages, etc. | + | |
+ | <code> | ||
# exit | # exit | ||
# umount ubuntu/proc | # umount ubuntu/proc | ||
+ | </code> | ||
At this point, it should be possible to boot a system over the network. | At this point, it should be possible to boot a system over the network. | ||
Line 241: | Line 249: | ||
Note: make sure console is accessable over iLO just in case networking gets broken | Note: make sure console is accessable over iLO just in case networking gets broken | ||
- | # vim /etc/default/ufw | + | Edit ''/etc/default/ufw'' |
<code> | <code> | ||
Line 247: | Line 255: | ||
</code> | </code> | ||
- | # vim /etc/ufw/sysctl.conf | + | Edit ''/etc/ufw/sysctl.conf'' |
<code> | <code> | ||
Line 253: | Line 261: | ||
</code> | </code> | ||
- | # vim /etc/ufw/before.rules | + | Edit ''/etc/ufw/before.rules'' |
[place immediately after header comment] | [place immediately after header comment] | ||
Line 268: | Line 276: | ||
</code> | </code> | ||
+ | <code> | ||
# ufw allow ssh | # ufw allow ssh | ||
# ufw allow in on eno2 | # ufw allow in on eno2 | ||
# ufw enable | # ufw enable | ||
+ | </code> | ||