Some checks failed
Test / test (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
119 lines
3.4 KiB
Bash
Executable File
119 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
source ~/.bashrc
|
|
# Verify Proxmox Cloud Image Integrity
|
|
# Usage: ./scripts/verify-proxmox-image.sh [proxmox-host] [image-path]
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
|
|
log_info() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_step() {
|
|
echo -e "${BLUE}[STEP]${NC} $1"
|
|
}
|
|
|
|
# Load environment variables
|
|
if [ -f .env ]; then
|
|
set -a
|
|
source <(grep -v '^#' .env | grep -v '^$' | sed 's/#.*$//' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//' | grep '=')
|
|
set +a
|
|
fi
|
|
|
|
PROXMOX_HOST="${1:-${PROXMOX_ML110_URL#https://}}"
|
|
PROXMOX_HOST="${PROXMOX_HOST%%:*}"
|
|
IMAGE_PATH="${2:-/var/lib/vz/template/iso/ubuntu-24.04-server-cloudimg-amd64.img}"
|
|
|
|
PVE_USERNAME="${PVE_USERNAME:-root@pam}"
|
|
PVE_PASSWORD="${PVE_ROOT_PASS:-}"
|
|
|
|
main() {
|
|
echo "========================================="
|
|
echo "Verify Proxmox Cloud Image Integrity"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
if [ -z "$PVE_PASSWORD" ]; then
|
|
log_error "PVE_ROOT_PASS not set in .env"
|
|
log_info "Set PVE_ROOT_PASS in .env file or pass as argument"
|
|
exit 1
|
|
fi
|
|
|
|
log_step "Connecting to Proxmox host: $PROXMOX_HOST"
|
|
log_info "Checking image: $IMAGE_PATH"
|
|
echo ""
|
|
|
|
# Check if file exists
|
|
log_step "1. Checking if file exists..."
|
|
if ssh -o StrictHostKeyChecking=no root@$PROXMOX_HOST "[ -f '$IMAGE_PATH' ]"; then
|
|
log_info "✓ File exists"
|
|
else
|
|
log_error "✗ File not found: $IMAGE_PATH"
|
|
log_info "Alternative locations to check:"
|
|
log_info " - /var/lib/vz/import/ubuntu-24.04-server-cloudimg-amd64.img.raw"
|
|
log_info " - /var/lib/vz/template/iso/ubuntu-24.04-server-cloudimg-amd64.img"
|
|
exit 1
|
|
fi
|
|
|
|
# Get file size
|
|
log_step "2. Checking file size..."
|
|
FILE_SIZE=$(ssh root@$PROXMOX_HOST "ls -lh '$IMAGE_PATH' | awk '{print \$5}'")
|
|
log_info "File size: $FILE_SIZE"
|
|
|
|
# Check file type
|
|
log_step "3. Checking file type..."
|
|
FILE_TYPE=$(ssh root@$PROXMOX_HOST "file '$IMAGE_PATH'")
|
|
log_info "$FILE_TYPE"
|
|
|
|
# Verify with qemu-img
|
|
log_step "4. Verifying image with qemu-img..."
|
|
if ssh root@$PROXMOX_HOST "qemu-img info '$IMAGE_PATH' 2>&1"; then
|
|
log_info "✓ Image appears valid"
|
|
else
|
|
log_error "✗ Image verification failed"
|
|
log_warn "Image may be corrupted. See TROUBLESHOOTING_VM_9000.md"
|
|
exit 1
|
|
fi
|
|
|
|
# Check disk space
|
|
log_step "5. Checking available disk space..."
|
|
ssh root@$PROXMOX_HOST "df -h /var/lib/vz | tail -1"
|
|
|
|
# Check for I/O errors in dmesg
|
|
log_step "6. Checking for recent I/O errors..."
|
|
IO_ERRORS=$(ssh root@$PROXMOX_HOST "dmesg | grep -i 'i/o error' | tail -5")
|
|
if [ -z "$IO_ERRORS" ]; then
|
|
log_info "✓ No recent I/O errors found"
|
|
else
|
|
log_warn "Recent I/O errors detected:"
|
|
echo "$IO_ERRORS"
|
|
log_warn "This may indicate storage issues"
|
|
fi
|
|
|
|
echo ""
|
|
log_info "========================================="
|
|
log_info "Verification Complete"
|
|
log_info "========================================="
|
|
log_info ""
|
|
log_info "If all checks passed, you can proceed with VM creation."
|
|
log_info "If errors were found, see TROUBLESHOOTING_VM_9000.md"
|
|
}
|
|
|
|
main "$@"
|
|
|