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:
Contents of boot.ipxe
#!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-installsuch 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. iPXE Boot Feature - Vultr.com