#!/bin/bash source ~/.bashrc # Fix Corrupted Proxmox Cloud Image # This script removes corrupted images and helps re-upload a fresh copy 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="${PROXMOX_ML110_URL#https://}" PROXMOX_HOST="${PROXMOX_HOST%%:*}" IMAGE_NAME="ubuntu-24.04-server-cloudimg-amd64.img" LOCAL_IMAGE="${1:-./downloads/${IMAGE_NAME}}" REMOTE_PATH="/var/lib/vz/template/iso/${IMAGE_NAME}" REMOTE_IMPORT_PATH="/var/lib/vz/import/${IMAGE_NAME}.raw" PVE_USERNAME="${PVE_USERNAME:-root@pam}" PVE_PASSWORD="${PVE_ROOT_PASS:-}" main() { echo "=========================================" echo "Fix Corrupted Proxmox Cloud Image" echo "=========================================" echo "" if [ -z "$PVE_PASSWORD" ]; then log_error "PVE_ROOT_PASS not set in .env" exit 1 fi if [ -z "$PROXMOX_HOST" ]; then log_error "PROXMOX_ML110_URL not set in .env" exit 1 fi log_step "Target Proxmox host: $PROXMOX_HOST" log_info "Image name: $IMAGE_NAME" echo "" # Check if local image exists if [ ! -f "$LOCAL_IMAGE" ]; then log_warn "Local image not found: $LOCAL_IMAGE" log_info "Downloading image..." ./scripts/download-ubuntu-cloud-image.sh 24.04 LOCAL_IMAGE="./downloads/${IMAGE_NAME}" if [ ! -f "$LOCAL_IMAGE" ]; then log_error "Failed to download image" exit 1 fi fi # Verify local image log_step "1. Verifying local image..." if qemu-img info "$LOCAL_IMAGE" > /dev/null 2>&1; then IMAGE_SIZE=$(du -h "$LOCAL_IMAGE" | cut -f1) log_info "✓ Local image is valid (Size: $IMAGE_SIZE)" else log_error "✗ Local image appears corrupted" log_info "Re-downloading..." rm -f "$LOCAL_IMAGE" ./scripts/download-ubuntu-cloud-image.sh 24.04 fi # Check SSH access log_step "2. Testing SSH access to Proxmox host..." if ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@$PROXMOX_HOST "echo 'Connected'" > /dev/null 2>&1; then log_info "✓ SSH access confirmed" else log_error "✗ Cannot connect to Proxmox host via SSH" log_info "Make sure:" log_info " 1. SSH is enabled on Proxmox host" log_info " 2. Root login is allowed (or use SSH keys)" log_info " 3. Host is reachable from this machine" exit 1 fi # Remove corrupted remote files log_step "3. Removing corrupted image files on Proxmox host..." ssh root@$PROXMOX_HOST " if [ -f '$REMOTE_PATH' ]; then echo 'Removing: $REMOTE_PATH' rm -f '$REMOTE_PATH' fi if [ -f '$REMOTE_IMPORT_PATH' ]; then echo 'Removing: $REMOTE_IMPORT_PATH' rm -f '$REMOTE_IMPORT_PATH' fi echo 'Cleanup complete' " # Upload fresh image log_step "4. Uploading fresh image to Proxmox host..." log_info "This may take several minutes depending on your network speed..." log_info "Uploading: $LOCAL_IMAGE" log_info "To: root@$PROXMOX_HOST:$REMOTE_PATH" echo "" # Create directory if it doesn't exist ssh root@$PROXMOX_HOST "mkdir -p /var/lib/vz/template/iso" # Upload with progress if command -v rsync &> /dev/null; then log_info "Using rsync (with progress)..." rsync -avz --progress "$LOCAL_IMAGE" root@$PROXMOX_HOST:"$REMOTE_PATH" else log_info "Using scp..." scp "$LOCAL_IMAGE" root@$PROXMOX_HOST:"$REMOTE_PATH" fi # Verify uploaded image log_step "5. Verifying uploaded image on Proxmox host..." if ssh root@$PROXMOX_HOST "qemu-img info '$REMOTE_PATH' > /dev/null 2>&1"; then REMOTE_SIZE=$(ssh root@$PROXMOX_HOST "du -h '$REMOTE_PATH' | cut -f1") log_info "✓ Image uploaded successfully (Size: $REMOTE_SIZE)" else log_error "✗ Uploaded image verification failed" log_warn "The file may still be uploading or there may be storage issues" exit 1 fi # Set proper permissions log_step "6. Setting file permissions..." ssh root@$PROXMOX_HOST "chmod 644 '$REMOTE_PATH'" log_info "✓ Permissions set" echo "" log_info "=========================================" log_info "Image Fix Complete!" log_info "=========================================" log_info "" log_info "The image has been successfully uploaded to:" log_info " $REMOTE_PATH" log_info "" log_info "Next steps:" log_info " 1. Verify the image in Proxmox Web UI:" log_info " Storage → local → Content" log_info " 2. Follow CREATE_VM_9000_STEPS.md to create VM 9000" log_info " 3. Or run: ./scripts/verify-proxmox-image.sh" echo "" } main "$@"