PXE boot over http
This commit is contained in:
@@ -1,2 +1,3 @@
|
|||||||
dhcp:
|
server:
|
||||||
tftpIp: 10.0.0.3
|
tftpIp: 10.0.0.3
|
||||||
|
httpUrl: http://10.0.0.3:8000
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#!ipxe
|
#!ipxe
|
||||||
|
|
||||||
dhcp
|
dhcp
|
||||||
|
|
||||||
echo Starting ${serial}
|
echo Starting ${serial}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{% set tftpIp = config.dhcp.tftpIp -%}
|
{% set tftpIp = config.server.tftpIp -%}
|
||||||
|
|
||||||
enable-tftp
|
enable-tftp
|
||||||
tftp-root=/tftproot
|
tftp-root=/tftproot
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ IPXE_VERSION=b41bda4413bf286d7b7a449bc05e1531da1eec2e
|
|||||||
IPXE_BIN=(bin/ipxe.pxe bin-x86_64-efi/ipxe.efi)
|
IPXE_BIN=(bin/ipxe.pxe bin-x86_64-efi/ipxe.efi)
|
||||||
|
|
||||||
IPXE_DIR=${ROOT}/.ipxe/ipxe-${IPXE_VERSION}
|
IPXE_DIR=${ROOT}/.ipxe/ipxe-${IPXE_VERSION}
|
||||||
|
HTTP_URL=$(cat ${ROOT}/config.yaml | yq .server.httpUrl)
|
||||||
|
|
||||||
function download_ipxe() {
|
function download_ipxe() {
|
||||||
base_dir=$(dirname ${IPXE_DIR})
|
base_dir=$(dirname ${IPXE_DIR})
|
||||||
@@ -25,7 +26,8 @@ function patch_ipxe() {
|
|||||||
#!ipxe
|
#!ipxe
|
||||||
|
|
||||||
dhcp
|
dhcp
|
||||||
chain boot.ipxe || shell
|
chain ${HTTP_URL}/boot.ipxe || shell
|
||||||
|
# chain boot.ipxe || shell
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cd - > /dev/null
|
cd - > /dev/null
|
||||||
@@ -44,6 +46,7 @@ function build_ipxe() {
|
|||||||
|
|
||||||
function render() {
|
function render() {
|
||||||
${ROOT}/tools/render
|
${ROOT}/tools/render
|
||||||
|
${ROOT}/rendered/generate_configs.sh
|
||||||
}
|
}
|
||||||
|
|
||||||
function host_tftp() {
|
function host_tftp() {
|
||||||
@@ -64,8 +67,30 @@ function host_tftp() {
|
|||||||
sudo in.tftpd --verbosity 100 --permissive -L --secure ${TFTP_DIR}
|
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
|
download_ipxe
|
||||||
patch_ipxe
|
patch_ipxe
|
||||||
build_ipxe
|
build_ipxe
|
||||||
render
|
render
|
||||||
host_tftp
|
host_http
|
||||||
2
tools/vm
2
tools/vm
@@ -21,7 +21,7 @@ function define_network() {
|
|||||||
<ip address="192.168.1.1" netmask="255.255.255.0">
|
<ip address="192.168.1.1" netmask="255.255.255.0">
|
||||||
<dhcp>
|
<dhcp>
|
||||||
<range start="192.168.1.2" end="192.168.1.254"/>
|
<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>
|
</dhcp>
|
||||||
</ip>
|
</ip>
|
||||||
</network>
|
</network>
|
||||||
|
|||||||
Reference in New Issue
Block a user