blob: fb0628b1c667d6ad50c9794d8400e045d27f4b98 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
#!/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, sshpass, OVMF firmware, and socat
# - 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
mkdir -p "$PROJECT_ROOT/test-results"
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
sshpass
edk2-ovmf
socat
)
to_install=()
for pkg in "${PACKAGES[@]}"; do
if pacman -Qi "$pkg" &>/dev/null; then
info "$pkg is already installed"
else
to_install+=("$pkg")
fi
done
if [ "${#to_install[@]}" -gt 0 ]; then
step "Installing in one transaction: ${to_install[*]}"
if sudo pacman -S --needed --noconfirm "${to_install[@]}" >> "$LOGFILE" 2>&1; then
success "All required packages installed"
else
fatal "Package installation failed"
fi
fi
# Verify KVM support
section "Verifying KVM Support"
if [ -e /dev/kvm ]; then
if [ -r /dev/kvm ] && [ -w /dev/kvm ]; then
success "KVM is available and accessible"
else
warn "KVM exists but is not readable/writable by user $(id -un)"
info "Add the user to the kvm group: sudo gpasswd -a $(id -un) kvm"
info "Then log out and back in so the new group takes effect"
fi
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
# Verify OVMF firmware
section "Verifying OVMF Firmware"
OVMF_CODE="/usr/share/edk2/x64/OVMF_CODE.4m.fd"
OVMF_VARS="/usr/share/edk2/x64/OVMF_VARS.4m.fd"
if [ -f "$OVMF_CODE" ] && [ -f "$OVMF_VARS" ]; then
success "OVMF firmware files present"
else
fatal "OVMF firmware files not found (expected at $OVMF_CODE)"
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
# Summary
section "Setup Complete"
success "Testing environment is ready"
info ""
info "Next steps:"
info " 1. Copy an archangel ISO to: $PROJECT_ROOT/vm-images/"
info " 2. Create base VM: ./scripts/testing/create-base-vm.sh"
info " 3. Run a test: ./scripts/testing/run-test.sh"
info ""
info "Log file: $LOGFILE"
|