Initial commit
This commit is contained in:
13
vm/cluster-vm.xml
Normal file
13
vm/cluster-vm.xml
Normal 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
15
vm/create.sh
Executable 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
8
vm/destroy.sh
Executable 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
10
vm/helper.sh
Normal 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
7
vm/start.sh
Executable 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
26
vm/tftp.sh
Executable 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
|
||||
Reference in New Issue
Block a user