Some checks failed
Test / test (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
173 lines
5.2 KiB
Bash
Executable File
173 lines
5.2 KiB
Bash
Executable File
#!/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 "$@"
|
|
|