Files
resf-testing-repo/scripts/build-golden.sh
Stephen Simpson bb829c9b63 updates
2025-11-26 08:15:00 -06:00

52 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
BASE_IMAGE="$1"
GOLDEN_IMAGE="$2"
SSH_PUB_KEY="${3:-$HOME/.ssh/id_rsa.pub}"
if [ -z "$BASE_IMAGE" ] || [ -z "$GOLDEN_IMAGE" ]; then
echo "Usage: $0 <base_image> <golden_image> [ssh_pub_key]"
exit 1
fi
echo "Creating golden image: $GOLDEN_IMAGE"
cp "$BASE_IMAGE" "$GOLDEN_IMAGE"
export LIBGUESTFS_BACKEND=direct
sudo virt-customize -a "$GOLDEN_IMAGE" \
--install rakudo,rakudo-zef,perl,git,openssh-server \
--run-command 'useradd -m rocky && echo "rocky:rockypass" | chpasswd' \
--run-command 'echo "rocky ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/rocky && chmod 0440 /etc/sudoers.d/rocky' \
--ssh-inject root:file:"$SSH_PUB_KEY" \
--ssh-inject rocky:file:"$SSH_PUB_KEY" \
--root-password password:rockytesting \
--run-command 'systemctl enable sshd' \
--selinux-relabel
echo "Bootstrapping Sparrowdo..."
BOOTSTRAP_VM="bootstrap-$$"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VM_IP=$("$SCRIPT_DIR/provision_vm.sh" "$BOOTSTRAP_VM" "$GOLDEN_IMAGE" 60 | tail -1)
if [ -z "$VM_IP" ] || [ "$VM_IP" = "ERROR" ]; then
echo "ERROR: Failed to provision bootstrap VM"
exit 1
fi
sleep 5
SSH_KEY="${SSH_PUB_KEY%.pub}"
sparrowdo --host="$VM_IP" --ssh_user=rocky --ssh_private_key="$SSH_KEY" \
--ssh_args="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
--bootstrap --color
ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
rocky@"$VM_IP" 'sudo shutdown -h now' 2>/dev/null || true
sleep 10
"$SCRIPT_DIR/cleanup_vm.sh" "$BOOTSTRAP_VM"
echo "Golden image ready: $GOLDEN_IMAGE"