PXE boot over http

This commit is contained in:
2025-11-11 02:20:23 +01:00
parent cc421f69de
commit 3328fb053c
5 changed files with 31 additions and 6 deletions

View File

@@ -1,2 +1,3 @@
dhcp:
server:
tftpIp: 10.0.0.3
httpUrl: http://10.0.0.3:8000

View File

@@ -1,5 +1,4 @@
#!ipxe
dhcp
echo Starting ${serial}

View File

@@ -1,4 +1,4 @@
{% set tftpIp = config.dhcp.tftpIp -%}
{% set tftpIp = config.server.tftpIp -%}
enable-tftp
tftp-root=/tftproot

View File

@@ -6,6 +6,7 @@ IPXE_VERSION=b41bda4413bf286d7b7a449bc05e1531da1eec2e
IPXE_BIN=(bin/ipxe.pxe bin-x86_64-efi/ipxe.efi)
IPXE_DIR=${ROOT}/.ipxe/ipxe-${IPXE_VERSION}
HTTP_URL=$(cat ${ROOT}/config.yaml | yq .server.httpUrl)
function download_ipxe() {
base_dir=$(dirname ${IPXE_DIR})
@@ -25,7 +26,8 @@ function patch_ipxe() {
#!ipxe
dhcp
chain boot.ipxe || shell
chain ${HTTP_URL}/boot.ipxe || shell
# chain boot.ipxe || shell
EOF
cd - > /dev/null
@@ -44,6 +46,7 @@ function build_ipxe() {
function render() {
${ROOT}/tools/render
${ROOT}/rendered/generate_configs.sh
}
function host_tftp() {
@@ -64,8 +67,30 @@ function host_tftp() {
sudo in.tftpd --verbosity 100 --permissive -L --secure ${TFTP_DIR}
}
function host_http() {
HTTP_DIR=$(mktemp --tmpdir -d http.XXX)
chmod 755 ${HTTP_DIR}
function cleanup() {
rm -rf ${HTTP_DIR}
}
trap cleanup EXIT
ln -s ${ROOT}/rendered/boot.ipxe ${HTTP_DIR}
for bin in "${IPXE_BIN[@]}"; do
path=${IPXE_DIR}/src/${bin}
ln -s ${path} ${HTTP_DIR}
done
ln -s ${ROOT}/configs ${HTTP_DIR}
echo "Starting http"
cd ${HTTP_DIR}
python -m http.server 8000
cd -
}
download_ipxe
patch_ipxe
build_ipxe
render
host_tftp
host_http

View File

@@ -21,7 +21,7 @@ function define_network() {
<ip address="192.168.1.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.1.2" end="192.168.1.254"/>
<bootp file='ipxe.pxe'/>
<bootp file='http://192.168.1.1:8000/ipxe.pxe'/>
</dhcp>
</ip>
</network>