diff options
Diffstat (limited to 'scripts/testing/setup-testing-env.sh')
| -rwxr-xr-x | scripts/testing/setup-testing-env.sh | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/scripts/testing/setup-testing-env.sh b/scripts/testing/setup-testing-env.sh new file mode 100755 index 0000000..e682553 --- /dev/null +++ b/scripts/testing/setup-testing-env.sh @@ -0,0 +1,191 @@ +#!/bin/bash +# Setup testing environment for archsetup +# Author: Craig Jennings <craigmartinjennings@gmail.com> +# License: GNU GPLv3 +# +# This script performs one-time setup of the testing infrastructure: +# - Installs QEMU/KVM and libvirt +# - Configures libvirt networking +# - Adds user to libvirt group +# - Verifies KVM support +# - Creates directories for test artifacts + +set -e + +# Get script directory +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" + +# Source utilities +source "$SCRIPT_DIR/lib/logging.sh" + +# Initialize logging +LOGFILE="$PROJECT_ROOT/test-results/setup-$(date +'%Y%m%d-%H%M%S').log" +init_logging "$LOGFILE" + +section "ArchSetup Testing Environment Setup" + +# Check if running on Arch Linux +if [ ! -f /etc/arch-release ]; then + fatal "This script is designed for Arch Linux" +fi + +# Check if user has sudo +if ! sudo -n true 2>/dev/null; then + warn "This script requires sudo access" + info "You may be prompted for your password" +fi + +# Install required packages +section "Installing Required Packages" + +PACKAGES=( + qemu-full + libvirt + virt-manager + dnsmasq + bridge-utils + iptables + virt-install + libguestfs +) + +for pkg in "${PACKAGES[@]}"; do + if pacman -Qi "$pkg" &>/dev/null; then + info "$pkg is already installed" + else + step "Installing $pkg" + if sudo pacman -S --noconfirm "$pkg" >> "$LOGFILE" 2>&1; then + success "$pkg installed" + else + error "Failed to install $pkg" + fatal "Package installation failed" + fi + fi +done + +# Enable and start libvirt service +section "Configuring libvirt Service" + +step "Enabling libvirtd service" +if sudo systemctl enable libvirtd.service >> "$LOGFILE" 2>&1; then + success "libvirtd service enabled" +else + warn "Failed to enable libvirtd service (may already be enabled)" +fi + +step "Starting libvirtd service" +if sudo systemctl start libvirtd.service >> "$LOGFILE" 2>&1; then + success "libvirtd service started" +else + if sudo systemctl is-active --quiet libvirtd.service; then + info "libvirtd service is already running" + else + error "Failed to start libvirtd service" + fatal "Service startup failed" + fi +fi + +# Add user to libvirt group +section "Configuring User Permissions" + +if groups | grep -q libvirt; then + success "User $USER is already in libvirt group" +else + step "Adding user $USER to libvirt group" + if sudo usermod -a -G libvirt "$USER" >> "$LOGFILE" 2>&1; then + success "User added to libvirt group" + warn "You must log out and back in for group membership to take effect" + warn "After logging back in, re-run this script to continue" + exit 0 + else + error "Failed to add user to libvirt group" + fatal "User configuration failed" + fi +fi + +# Verify KVM support +section "Verifying KVM Support" + +if [ -e /dev/kvm ]; then + success "KVM is available" +else + error "KVM is not available" + info "Check if virtualization is enabled in BIOS" + info "Load kvm module: sudo modprobe kvm-intel (or kvm-amd)" + fatal "KVM not available" +fi + +# Check which KVM module is loaded +if lsmod | grep -q kvm_intel; then + info "Using Intel KVM" +elif lsmod | grep -q kvm_amd; then + info "Using AMD KVM" +else + warn "No KVM module detected" + info "Load with: sudo modprobe kvm-intel (or kvm-amd)" +fi + +# Create directory structure +section "Creating Directory Structure" + +DIRS=( + "$PROJECT_ROOT/vm-images" + "$PROJECT_ROOT/test-results" +) + +for dir in "${DIRS[@]}"; do + if [ -d "$dir" ]; then + info "Directory exists: $dir" + else + step "Creating directory: $dir" + if mkdir -p "$dir" 2>> "$LOGFILE"; then + success "Directory created: $dir" + else + error "Failed to create directory: $dir" + fi + fi +done + +# Configure default libvirt network +section "Configuring libvirt Network" + +if virsh net-info default &>/dev/null; then + info "Default network exists" + + if virsh net-info default | grep -q "Active:.*yes"; then + success "Default network is active" + else + step "Starting default network" + if virsh net-start default >> "$LOGFILE" 2>&1; then + success "Default network started" + else + error "Failed to start default network" + fi + fi + + if virsh net-info default | grep -q "Autostart:.*yes"; then + info "Default network autostart is enabled" + else + step "Enabling default network autostart" + if virsh net-autostart default >> "$LOGFILE" 2>&1; then + success "Default network autostart enabled" + else + warn "Failed to enable default network autostart" + fi + fi +else + error "Default network not found" + info "This is unusual - libvirt should create it automatically" +fi + +# Summary +section "Setup Complete" + +success "Testing environment is ready" +info "" +info "Next steps:" +info " 1. Create base VM: ./scripts/testing/create-base-vm.sh" +info " 2. Run a test: ./scripts/testing/run-test.sh" +info "" +info "Log file: $LOGFILE" |
