| In `/etc/initramfs-tools/hooks/` create an executable script with the name of your choice. Here's the content: | In `/etc/initramfs-tools/hooks/` create an executable script with the name of your choice. Here's the content: | ||||
| ```` | |||||
| ``` | |||||
| #!/bin/bash | #!/bin/bash | ||||
| . /usr/share/initramfs-tools/hook-functions | . /usr/share/initramfs-tools/hook-functions | ||||
| exit 1; | exit 1; | ||||
| fi | fi | ||||
| done | done | ||||
| ```` | |||||
| ``` | |||||
| After that you'll need to `update-initramfs -u` | After that you'll need to `update-initramfs -u` | ||||
| # Boot | # Boot | ||||
| **Boot and it should just work! Happy IPv6!** | **Boot and it should just work! Happy IPv6!** | ||||
| # Final notes | |||||
| ## iPXE & NFS | |||||
| Due to incompatible limiting requirements of iPXE and initramfs, both must be run on separate subnets. You will need one interface for iPXE and one for NFS. | |||||
| ### radvd.conf | |||||
| ``` | |||||
| # iPXE needs SLAAC and DHCPv6 options | |||||
| interface bridge0 { | |||||
| IgnoreIfMissing on; | |||||
| AdvSendAdvert on; | |||||
| AdvOtherConfigFlag on; | |||||
| AdvDefaultLifetime 0; | |||||
| AdvLinkMTU 9000; | |||||
| AdvCurHopLimit 64; | |||||
| AdvReachableTime 0; | |||||
| MaxRtrAdvInterval 600; | |||||
| MinRtrAdvInterval 198; | |||||
| AdvDefaultPreference low; | |||||
| AdvRetransTimer 0; | |||||
| AdvManagedFlag off; | |||||
| prefix <your PXE /64>::/64 { }; | |||||
| RDNSS <your dnsmasq server (yourself) IP, must be in the same subnet>:: { }; | |||||
| }; | |||||
| # busybox/initramfs needs DHCPv6 | |||||
| interface bridge2 { | |||||
| IgnoreIfMissing on; | |||||
| AdvSendAdvert on; | |||||
| AdvOtherConfigFlag off; | |||||
| AdvDefaultLifetime 0; | |||||
| AdvLinkMTU 9000; | |||||
| AdvCurHopLimit 64; | |||||
| AdvReachableTime 0; | |||||
| MaxRtrAdvInterval 600; | |||||
| MinRtrAdvInterval 198; | |||||
| AdvDefaultPreference low; | |||||
| AdvRetransTimer 0; | |||||
| AdvManagedFlag off; | |||||
| prefix <your NFS /64>::/64 { | |||||
| AdvAutonomous off; | |||||
| }; | |||||
| }; | |||||
| ``` | |||||
| ### isc-dhcp-server6 dhcpd6.conf | |||||
| ``` | |||||
| # PXE | |||||
| subnet6 <your PXE /64>::/64 { | |||||
| option dhcp6.bootfile-url "http://<pxe server hostname>?uuid=${uuid}&op=ipxe"; | |||||
| } | |||||
| # NFS | |||||
| subnet6 <your NFS /64>::/64 { | |||||
| range6 <your NFS /64>::1 <your NFS /64>::ffff; | |||||
| option dhcp6.name-servers <your NFS server>::; | |||||
| } | |||||
| ``` | |||||
| ### dnsmasq | |||||
| ``` | |||||
| # leave everything to defaults except | |||||
| interface=bridge1 | |||||
| interface=bridge2 | |||||
| no-dhcp-interface=bridge1 | |||||
| no-dhcp-interface=bridge2 | |||||
| ``` | |||||
| ### /etc/hosts | |||||
| DO NOT MAKE YOUR VMs depend on VMs to boot !!! | |||||
| If your DNS server is a VM, make sure that the hostnames used to boot (pxe server hostname, nfs server hostname) can be resolved by dnsmasq, the easiest way to ensure this is to add them to /etc/hosts which dnsmasq will use by default. |