* fix: send telemetry BEFORE log collection in signal handlers
- Swap ensure_log_on_host/post_update_to_api order in on_interrupt, on_terminate, api_exit_script, and inline SIGHUP/SIGINT/SIGTERM traps
- For signal exits (>128): send telemetry immediately, then best-effort log collection
- Add 2>/dev/null || true to all I/O in signal handlers to prevent SIGPIPE
- Fix on_exit: exit_code=0 now reports 'done' instead of 'failed 1'
- Root cause: pct pull hangs on dying containers blocked telemetry updates, leaving 595+ records stuck in 'installing' daily
* feat: add execution_id to all telemetry payloads
- Generate EXECUTION_ID from RANDOM_UUID in variables()
- Export EXECUTION_ID to container environment
- Add execution_id field to all 8 API payloads in api.func
- Add execution_id to post_progress_to_api in install.func and alpine-install.func
- Fallback to RANDOM_UUID when EXECUTION_ID not set (backward compat)
* fix: correct telemetry type values for PVE and addon scripts
- PVE scripts (tools/pve/*): change type 'tool' -> 'pve'
- Addon scripts (tools/addon/*): fix 4 scripts that wrongly used 'tool' -> 'addon'
(netdata, add-tailscale-lxc, add-netbird-lxc, all-templates)
- api.func: post_tool_to_api sends type='pve', default fallback 'pve'
- Aligns with PocketBase categories: lxc, vm, pve, addon
* fix: persist diagnostics opt-in inside containers for addon telemetry
- install.func + alpine-install.func: create /usr/local/community-scripts/diagnostics
inside the container when DIAGNOSTICS=yes (from build.func export)
- Enables addon scripts running later inside containers to find the opt-in
- Update init_tool_telemetry default type from 'tool' to 'pve'
* refactor: clean up diagnostics/telemetry opt-in system
- diagnostics_check(): deduplicate heredoc (was 2x 22 lines), improve whiptail
text with clear what/what-not collected, add telemetry + privacy links
- diagnostics_menu(): better UX with current status, clear enable/disable
buttons, note about existing containers
- variables(): change DIAGNOSTICS default from 'yes' to 'no' (safe: no
telemetry before user consents via diagnostics_check)
- install.func + alpine-install.func: persist BOTH yes AND no in container
so opt-out is explicit (not just missing file = no)
- Fix typo 'menue' -> 'menu' in config file comments
* fix: no pre-selection in telemetry dialog, link to telemetry-service README
- Add --defaultno so 'No, opt out' is focused by default (user must Tab to Yes)
- Change privacy link from discussions/1836 to telemetry-service#privacy--compliance
* fix: use radiolist for telemetry dialog (no pre-selection)
- Replace --yesno with --radiolist: user must actively SPACE-select an option
- Both options start as OFF (no pre-selection)
- Cancel/Exit defaults to 'no' (opt-out)
* simplify: inline telemetry dialog text like other whiptail dialogs
* improve: telemetry dialog with more detail, link to PRIVACY.md
- Add what we collect / don't collect sections back to dialog
- Link to telemetry-service/docs/PRIVACY.md instead of README anchor
- Update config file comment with same link
* core: add progress; fix exit status
Introduce post_progress_to_api() in alpine-install.func and install.func to send a lightweight, fire-and-forget telemetry ping (HTTP POST) that updates an existing telemetry record to "configuring" when DIAGNOSTICS=yes and RANDOM_UUID is set. The function is non-blocking (curl -m 5, errors ignored) and is invoked during container setup and after OS updates to signal active progress. Also adjust api_exit_script() in build.func to report success (post_update_to_api "done" "0") for cases where the script exited normally but a completion status wasn't posted, instead of reporting failure.
* Safer tools.func load and improved error handling
Replace process-substitution sourcing of tools.func with an explicit curl -> variable -> source via /dev/stdin, adding failure messages and a check that expected functions (e.g. fetch_and_deploy_gh_release) are present (misc/alpine-install.func, misc/install.func). Add categorize_error mapping for exit code 10 -> "config" (misc/api.func). Tweak build.func: minor pipeline formatting and change the ERR trap to capture the actual exit code and only call ensure_log_on_host/post_update on non-zero exits, preventing erroneous failure reporting.
* tools: add data init and auto-reporting to tools and pve section
Introduce telemetry helpers in misc/api.func: _telemetry_report_exit (reports success/failure via post_tool_to_api/post_addon_to_api) and init_tool_telemetry (reads DIAGNOSTICS, starts install timer and installs an EXIT trap to auto-report). Integrate telemetry into many tools/addon and tools/pve scripts by sourcing the remote api.func and calling init_tool_telemetry (guarded with declare -f). Also apply a minor arithmetic formatting tweak in misc/build.func for RECOVERY_ATTEMPT.
* update-lxcs.sh ist now patchmon-agent aware: if patchmon agent is detected inside LXC,
then it is called after updating the container
it is called with the argument "report" to relay the current update situation back to the patchmon system
* Added status message if patchmon agent is found
* whitespace added
* Update tools/pve/update-lxcs.sh
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
* Update tools/pve/update-lxcs.sh
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
* removed os differentiation, removed use of explicit shell during call of patchmon-agent
* removed os differentiation
removed use of explicit shell during call of patchmon-agent
fixed whitespace
* Delete .git-setup-info
not needed
---------
Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
* Add PVE LXC Apps Updater script and metadata
Add a new Proxmox LXC Apps Updater: frontend/public/json/update-apps.json registers the app for the UI (install script points to tools/pve/update-apps.sh) and provides documentation/notes for usage and environment variables. Add tools/pve/update-apps.sh (MIT, authors noted) — a full-featured updater for community-scripts managed LXC containers that supports interactive Whiptail selection or environment-driven automation (var_backup, var_backup_storage, var_container, var_unattended, var_skip_confirm, var_auto_reboot). Features include exportable JSON config, optional vzdump backups, detection of service/update script from the community repo, temporary CPU/RAM adjustments for build requirements, unattended update mode, restore-from-backup on failure, and reporting/optional reboot of containers that require it.
* Fix source command syntax in update-apps.sh
* Update tools/pve/update-apps.sh
Co-authored-by: Chris <punk.sand7393@fastmail.com>
* Update tools/pve/update-apps.sh
Co-authored-by: Chris <punk.sand7393@fastmail.com>
* Update tools/pve/update-apps.sh
Co-authored-by: Chris <punk.sand7393@fastmail.com>
* Update tools/pve/update-apps.sh
Co-authored-by: Chris <punk.sand7393@fastmail.com>
* Update tools/pve/update-apps.sh
Co-authored-by: Chris <punk.sand7393@fastmail.com>
* Update tools/pve/update-apps.sh
Co-authored-by: Chris <punk.sand7393@fastmail.com>
* Update tools/pve/update-apps.sh
Co-authored-by: Chris <punk.sand7393@fastmail.com>
* Update tools/pve/update-apps.sh
Co-authored-by: Chris <punk.sand7393@fastmail.com>
---------
Co-authored-by: Chris <punk.sand7393@fastmail.com>
* fix(iptag): Fix syntax error in VM config file parsing
The array assignment was using an invalid pipe construct inside the loop:
vmids+=("${conf##*/}" | sed 's/\.conf$//')
This caused a bash syntax error:
syntax error near unexpected token '2'
Fixed by using:
- shopt -s nullglob to handle empty directories gracefully
- Parameter expansion ${filename%.conf} instead of sed pipe
Fixes#10595
* fix(iptag): Fix syntax error in VM config file parsing
The array assignment was using an invalid pipe construct inside the loop:
vmids+=("${conf##*/}" | sed 's/\.conf$//')
This caused a bash syntax error:
syntax error near unexpected token '2'
Fixed by using parameter expansion ${basename%.conf} instead of sed pipe.
Fixes#10595
Corrected references from 'ProxmoxVED' to 'ProxmoxVE' in sourced URLs across livebook.sh, glances.sh, and pve-privilege-converter.sh to ensure scripts use the correct repository.
* Update host-backup.sh
added an "all" button to include all folders instead of clicking every folder by itself
* Update host-backup.sh
added a timestamp in the filename incase the user wants to make several backups on the same time.
Otherweise the newest backup will overwrite the earlier one.
- **Interactive Configuration**: Added setup wizard for `TAG_FORMAT` (last_two_octets/last_octet/full) and `LOOP_INTERVAL` (30-7200 seconds) during installation/update
- **Unified Installation Menu**: Replaced conditional service detection with unified menu offering install-with-service, install-command-only, and update options
- **Post-Installation Guidance**: Added comprehensive information display about configuration file location (`/opt/iptag/iptag.conf`) and required CIDR_LIST setup
- **Improved VM IP Detection**: Enhanced IP discovery with QM guest agent priority, ARP table validation via ping, and automatic removal of stale ARP entries
- **Visual Indicators**: Replaced emoji symbols with standard ASCII characters (✓/✗) with proper colors for better terminal compatibility
- **Simplified Update Process**: Removed complex service detection logic and provided direct update option in main menu
These changes address user feedback about complex installation requirements, VM IP detection issues, and provide clearer guidance for network subnet configuration.
* Fix: exclude all thin-pools dynamically instead of only 'data'
* Fix: dynamically exclude all thin pools (not just 'data') from orphan check
* Fix: dynamically exclude all thin pools (not just 'data') from orphan check