Initial commit

This commit is contained in:
2025-11-07 05:29:32 +01:00
commit 6cb1c7d48b
22 changed files with 335 additions and 0 deletions

13
vm/cluster-vm.xml Normal file
View File

@@ -0,0 +1,13 @@
<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0'>
<name>cluster-vm</name>
<bridge name="cluster0" stp="on" delay="0"/>
<forward mode='nat'>
<nat/>
</forward>
<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='boot.ipxe'/>
</dhcp>
</ip>
</network>

15
vm/create.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/usr/bin/env bash
SCRIPT_DIR=$(dirname -- "$(readlink -f -- "$BASH_SOURCE")")
source ${SCRIPT_DIR}/helper.sh
if [[ $(virsh --connect="${CONNECTION}" net-list --all | grep -c "${NETWORK}") == "0" ]]; then
virsh --connect="${CONNECTION}" net-define "${SCRIPT_DIR}/${NETWORK}.xml"
virsh --connect="${CONNECTION}" net-start "${NETWORK}"
virsh --connect="${CONNECTION}" net-autostart "${NETWORK}"
fi
virt-install --connect="${CONNECTION}" --name="${VM_NAME}" --vcpus="${VCPUS}" --memory="${RAM_MB}" \
--os-variant="linux2022" \
--disk="size=${DISK_GB}" \
--pxe \
--network network="${NETWORK}"

8
vm/destroy.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/usr/bin/env bash
SCRIPT_DIR=$(dirname -- "$(readlink -f -- "$BASH_SOURCE")")
source ${SCRIPT_DIR}/helper.sh
virsh --connect="${CONNECTION}" destroy "${VM_NAME}"
virsh --connect="${CONNECTION}" undefine "${VM_NAME}" --remove-all-storage
virsh --connect="${CONNECTION}" net-destroy "${NETWORK}"
virsh --connect="${CONNECTION}" net-undefine "${NETWORK}"

10
vm/helper.sh Normal file
View File

@@ -0,0 +1,10 @@
set -euxo pipefail
VM_NAME="test"
VCPUS="2"
RAM_MB="2048"
DISK_GB="10"
NETWORK=cluster-vm
CONNECTION="qemu:///system"
IPXE_VERSION=b41bda4413bf286d7b7a449bc05e1531da1eec2e
IPXE_BIN=bin/ipxe.pxe

7
vm/start.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/usr/bin/env bash
SCRIPT_DIR=$(dirname -- "$(readlink -f -- "$BASH_SOURCE")")
source ${SCRIPT_DIR}/helper.sh
virsh --connect="${CONNECTION}" start ${VM_NAME}
virt-viewer --connect="${CONNECTION}" ${VM_NAME}
virsh --connect="${CONNECTION}" shutdown ${VM_NAME}

26
vm/tftp.sh Executable file
View File

@@ -0,0 +1,26 @@
#!/usr/bin/env bash
SCRIPT_DIR=$(dirname -- "$(readlink -f -- "$BASH_SOURCE")")
source ${SCRIPT_DIR}/helper.sh
TFTP_DIR=${SCRIPT_DIR}/../tftp
rm -rf "${TFTP_DIR}"
mkdir -p "${TFTP_DIR}"
IPXE_DIR=${SCRIPT_DIR}/../ipxe
IPXE_FILE=${IPXE_DIR}/ipxe-${IPXE_VERSION}/src/${IPXE_BIN}
if [ ! -f "${IPXE_FILE}" ]; then
mkdir -p "${IPXE_DIR}"
rm -rf "${IPXE_DIR}/ipxe-${IPXE_VERSION}"
curl -L https://github.com/ipxe/ipxe/archive/${IPXE_VERSION}.tar.gz | tar -xz -C "${IPXE_DIR}"
cd "${IPXE_DIR}/ipxe-${IPXE_VERSION}/src"
sed -i 's/^#undef[\t ]DOWNLOAD_PROTO_HTTPS.*$/#define DOWNLOAD_PROTO_HTTPS/g' config/general.h
make -j$(nproc) ${IPXE_BIN}
cd -
fi
${SCRIPT_DIR}/../generate.sh
cp ${SCRIPT_DIR}/../rendered/boot.ipxe ${TFTP_DIR}
cp ${IPXE_FILE} ${TFTP_DIR}
sudo in.tftpd -L --secure ./tftp