mirror of
https://github.com/CloudNebulaProject/vm-manager.git
synced 2026-04-10 21:30:41 +00:00
Unified VM management consolidating QEMU-KVM (Linux) and Propolis/bhyve (illumos) backends behind an async Hypervisor trait, with a vmctl CLI for direct use and a library API for orchestrators. - Core library: types, async Hypervisor trait, miette diagnostic errors - QEMU backend: direct process management, raw QMP client, QCOW2 overlays - Propolis backend: zone-based VMM with REST API control - Shared infra: cloud-init NoCloud ISO generation, image download/cache, SSH helpers with retry - vmctl CLI: create, start, stop, destroy, list, status, console, ssh, suspend, resume, image pull/list/inspect - nebula-vm zone brand: lifecycle scripts and platform/config XML for illumos zone integration Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
52 lines
1.5 KiB
Bash
52 lines
1.5 KiB
Bash
#!/bin/ksh
|
|
#
|
|
# nebula-vm brand: boot script
|
|
#
|
|
# Called by zoneadm(8) when the zone is booted.
|
|
# Arguments: %z = zone name, %R = zone root
|
|
#
|
|
|
|
ZONENAME="$1"
|
|
ZONEROOT="$2"
|
|
|
|
if [[ -z "$ZONENAME" || -z "$ZONEROOT" ]]; then
|
|
echo "Usage: boot.ksh <zone-name> <zone-root>" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "nebula-vm: booting zone '${ZONENAME}'"
|
|
|
|
# Read zone network configuration and create VNIC if needed
|
|
VNIC_NAME="vnic_${ZONENAME}"
|
|
PHYSICAL_LINK=$(dladm show-phys -p -o LINK 2>/dev/null | head -1)
|
|
|
|
if [[ -n "$PHYSICAL_LINK" ]]; then
|
|
# Check if VNIC already exists
|
|
if ! dladm show-vnic "$VNIC_NAME" >/dev/null 2>&1; then
|
|
echo "nebula-vm: creating VNIC ${VNIC_NAME} over ${PHYSICAL_LINK}"
|
|
dladm create-vnic -l "$PHYSICAL_LINK" "$VNIC_NAME" || {
|
|
echo "nebula-vm: WARNING - failed to create VNIC" >&2
|
|
}
|
|
fi
|
|
fi
|
|
|
|
# Start propolis-server inside the zone
|
|
PROPOLIS="${ZONEROOT}/root/opt/propolis/propolis-server"
|
|
PROPOLIS_CONFIG="${ZONEROOT}/root/opt/propolis/config.toml"
|
|
PIDFILE="${ZONEROOT}/root/var/run/propolis.pid"
|
|
LOGFILE="${ZONEROOT}/root/var/log/propolis.log"
|
|
|
|
if [[ -x "$PROPOLIS" ]]; then
|
|
echo "nebula-vm: starting propolis-server"
|
|
nohup zlogin "$ZONENAME" /opt/propolis/propolis-server \
|
|
run /opt/propolis/config.toml \
|
|
> "$LOGFILE" 2>&1 &
|
|
echo $! > "$PIDFILE"
|
|
echo "nebula-vm: propolis-server started (pid=$(cat $PIDFILE))"
|
|
else
|
|
echo "nebula-vm: ERROR - propolis-server not found at ${PROPOLIS}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "nebula-vm: zone '${ZONENAME}' booted"
|
|
exit 0
|