52 lines
1.6 KiB
Bash
Executable File
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"
|