Netboot Alpine Linux using iPXE
Copy the files needed by iPXE to a web server
For this guide we will provide the files at
http://ipxe-boot.example.com/
from the directory/var/www/ixpe-boot.example.com/
on the web server, which is writable by your non-root admin user. We also assume the web server follows symlinks within/var/www/ipxe-boot.example.com
(but not outside that directory tree).Copy the netboot tarball (for example the 3.16.0 stable release of Alpine’s netboot image for x86_64) to your non-root admin user on your web server.
Extract the netboot tarball to your webserver directory. For example:
tar -C /var/www/ipxe-boot.example.com -xzf alpine-netboot-3.16.0-x86_64.tar.gz
This will create a directory structure such as:
boot/ boot/initramfs-lts boot/config-virt boot/dtbs-virt/ boot/System.map-lts boot/vmlinuz-virt boot/System.map-virt boot/config-lts boot/initramfs-virt boot/modloop-lts boot/modloop-virt boot/dtbs-lts/ boot/vmlinuz-lts
Create an iPXE boot script
For example, create a script called boot.ipxe
with contents:
#!ipxe
set base-url http://ipxe-boot.example.com
kernel ${base-url}/boot/vmlinuz-virt console=tty0 modules=loop,squashfs quiet nomodeset alpine_repo=https://dl-cdn.alpinelinux.org/alpine/v3.16/main modloop=http://ipxe-boot.example.com/boot/modloop-virt
initrd ${base-url}/boot/initramfs-virt
boot
Boot using the iPXE boot script
Using QEMU (for testing)
Assuming you have the binary qemu-system-x86_64
on your system:
qemu-system-x86_64 -boot n -m 512M -enable-kvm -device virtio-net,netdev=n1 -netdev user,id=n1,tftp=$(pwd),bootfile=/boot.ipxe
Using Libvirt
Copy the
boot.ipxe
script to your webserver at/var/www/ipxe-boot.example.com/boot.ipxe
(substituting for your actual directory, of course).Create a new NAT network with XML such:
<network> <name>ipxeboot</name> <forward mode="nat"> <nat> <port start="1024" end="65535"/> </nat> </forward> <bridge name="virbr1" stp="on" delay="0"/> <mac address="52:54:00:a4:10:b3"/> <domain name="ipxeboot"/> <ip address="192.168.129.1" netmask="255.255.255.0"> <dhcp> <range start="192.168.129.128" end="192.168.129.254"/> <bootp file="http://ipxe-boot.example.com/boot.ipxe"/> </dhcp> </ip> </network>
Use
virt-install
such as:virt-install -n vm-name --memory 512 --vcpus 1 --pxe --disk size=5,bus=virtio --network network=ipxeboot,model=virtio --input tablet --video virtio --os-variant id=http://alpinelinux.org/alpinelinux/3.13
On Vultr.com
NOTE: Other cloud providers have similar features, but I haven’t used them.