使用 iPXE 网络启动 Alpine Linux
复制 iPXE 需要的文件到 Web 服务器
- 在本指南中,我们将从 Web 服务器上的目录
/var/www/ixpe-boot.example.com/
提供 http://ipxe-boot.example.com/ 的文件,该目录可由您的非 root 管理员用户写入。我们还假设 Web 服务器遵循/var/www/ipxe-boot.example.com
内(但不在此目录树之外)的符号链接。 - 将网络启动 tarball(例如 Alpine 针对 x86_64 的网络启动镜像的 3.16.0 稳定版本)复制到您的 Web 服务器上的非 root 管理员用户。
- 将网络启动 tarball 解压到您的 Web 服务器目录。例如
tar -C /var/www/ipxe-boot.example.com -xzf alpine-netboot-3.16.0-x86_64.tar.gz
- 这将创建一个目录结构,例如
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
创建 iPXE 启动脚本
例如,创建一个名为 boot.ipxe 的脚本,内容如下
内容 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
使用 iPXE 启动脚本启动
使用 QEMU (用于测试)
假设您的系统上安装了二进制文件 qemu-system-x86_64
qemu-system-x86_64 -boot n -m 512M -enable-kvm -device virtio-net,netdev=n1 -netdev user,id=n1,tftp=$(pwd),bootfile=/boot.ipxe
使用 Libvirt
- 将 boot.ipxe 脚本复制到您的 Web 服务器上的 /var/www/ipxe-boot.example.com/boot.ipxe(当然要替换为您实际的目录)。
- 使用如下 XML 创建新的 NAT 网络
<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>
- 使用
virt-install
,例如
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=https://alpinelinux.cn/alpinelinux/3.13
在 Vultr.com 上
注意:其他云提供商也有类似的功能,但我没有使用过它们。iPXE Boot Feature - Vultr.com