- Remove unused send_line_to_vm function (replaced by virt-customize)
- Quote $VMID and add guard in cleanup_vmid
- Guard cleanup() against unset TEMP_DIR and quote variable
- Remove unused CLOUDINIT_PASSWORD variable
- Separate local declaration from assignment in get_image_url()
- Add retry loop for apt-get install (matches apt-get update pattern)
- Fix timeout message to match actual loop duration (~5-6 min)
Bug fixes:
- Add ~20 missing fi statements throughout advanced_settings(), check_root(),
arch_check(), ssh_check(), select_os(), start_script(), etc.
- Fix pve_check() missing elif/else/fi structure
- Fix DISK_SIZE unbound variable, initialized before machine type dialog
- Fix error_handler() with ${VMID:-} guard to prevent unbound variable error
Architecture improvement:
- Migrate from send_line_to_vm serial console approach to virt-customize with
a first-boot systemd service, consistent with other VM scripts
- First-boot service handles: clock sync (NTP + HTTP fallback), package
installation, swap setup, and UniFi OS installer execution
New features:
- Root password prompt with confirmation
- SSH public key support
- SSH enabled by default
- Cloud-init password override with user-set password
- Port 11443 readiness check after VM boot
- Elapsed time counter during wait loops
Switch the Go build invocation to target the cmd/gluetun package directory (./cmd/gluetun/) in both ct/gluetun.sh and install/gluetun-install.sh, and ensure modules are downloaded during install (go mod download). In the installer, create /opt/gluetun-data and add a symlink /gluetun -> /opt/gluetun-data, update STORAGE/PUBLICIP/PORT file paths to use /gluetun, add PPROF_ENABLED=no to the default .env, and add UnsetEnvironment=USER to the systemd unit to avoid inheriting the USER environment. These changes standardize build behavior and relocate runtime data to a consistent /gluetun path.