Commit graph

58 commits

Author SHA1 Message Date
509eb97b57 fix: large-file support + user-defined VM name
Large-file handling:
- Set TMPDIR=/mnt/converter/in in service to spool uploads to
  shared storage instead of 24 GB LXC rootfs (critical for >24GB)
- Chunked upload streaming (8 MiB) with progress logging every 1 GiB
- Pre-flight disk space check via Content-Length header
- Clean up partial files on upload/download failure
- Download timeout extended to 7200s (2 hours) for 88 GB images
- Switched wget from --show-progress to --progress=dot:giga
  (compact output, won't fill memory on large transfers)
- uvicorn --timeout-keep-alive 300 on both frontend and backend

VM name:
- Added vm_name field to initial session form (step 1)
- Falls back to auto-generated 'os_type-vmid' if left blank
- Pre-filled & editable in confirm form (step 2)
2026-07-21 17:59:31 +00:00
4b50b185fa feat: full deployment scripts — backend + LXC creation, frontend installer
backend/install.sh (run on srv2):
- Creates /mnt/converter directory tree, clones/updates git repo
- Installs 10 system packages (qemu-img, guestfish, archive tools)
- Installs Python deps + vm-bench-backend systemd service
- Interactive LXC creation: prompts for container ID, IP, gateway,
  bridge, MAC (all with defaults)
- Creates vm-bench LXC: 3 cores, 6GB RAM, 24GB rootfs, nesting,
  AppArmor unconfined, cgroup access, bind mount /mnt/converter

frontend/install.sh (run inside LXC):
- Installs python3, pip3, wget, curl
- Installs Python deps (fastapi, uvicorn, jinja2, etc.)
- Verifies backend connectivity, installs vm-bench systemd service

frontend/vm-bench.service: systemd unit bundled in repo

README: replaced Prerequisites/Installation with full Deployment
section covering both steps, container config table, and re-deploy
2026-07-21 17:51:53 +00:00
c887ccd5a3 fix: uniform /api/v1/ prefix, real EFI detection, spec alignment
Backend:
- All routes now consistently under /api/v1/ (health, analyze, jobs)
- Replace dummy EFI heuristic with actual guestfish-based detect_efi()
- Add path traversal validation on analyze source_filename
- Use typed response models (HealthResponse, CleanupResponse) everywhere
- Clean up unused imports (Path, ErrorResponse)

Models:
- Align AnalyzeResponse with open-api.yaml (add vmid, remove bootable/error,
  make efi_detectable nullable, deduplicate CleanupResponse)

Converter:
- Add detect_efi(disk_path) using guestfish list-filesystems

Frontend:
- Update api_client paths to /api/v1/health and /api/v1/analyze
- Remove unsupported 'network' field from job payload

Spec:
- Promote inline HealthResponse/CleanupResponse to named schemas
- Move /analyze and /health under /api/v1/ prefix

Docs:
- Add README.md with architecture, install, API reference, usage flow
2026-07-21 17:40:08 +00:00
ab61878fbc chore: restore open-api.yaml 2026-07-21 16:50:49 +00:00
6bcb68c552 chore: VM ID range 21000-21100, network default vmbr0, target_storage default local-lvm 2026-07-21 16:50:40 +00:00
be756e33bf chore: add install.sh for backend systemd setup 2026-07-21 15:01:02 +00:00
439b0c51a1 chore: add systemd service file for backend deployment 2026-07-21 14:56:02 +00:00
a8099f504c chore: initial commit — vm-bench frontend + backend 2026-07-21 14:53:29 +00:00