Commit Graph

90 Commits

Author SHA1 Message Date
MickLesk 7b7d5c4fdc refactor: enhance error handling and messaging in all-templates script 2026-08-01 23:08:54 +02:00
MickLesk e028f3eb1b refactor: harmonize error handling and messaging in add-netbird-lxc and add-tailscale-lxc scripts 2026-08-01 23:04:53 +02:00
MickLesk 308ef17283 refactor: harmonize architecture detection and improve installation scripts for addons 2026-08-01 22:54:09 +02:00
MickLesk 0fb07d03e7 filebrowser-quantum: generate TMP_BIN via mktemp at use, not fixed PID-based path 2026-08-01 22:37:50 +02:00
MickLesk 084706a3d5 use create_backup und restore_backup 2026-08-01 22:35:32 +02:00
MickLesk cb58c616f7 refactor: coder-code-server GH-release binary install + multiline apt installs
- coder-code-server.sh: use fetch_and_deploy_gh_release (binary mode) + check_for_gh_release, add uninstall/update functions, update script + type=update handling
- copyparty.sh, filebrowser.sh, filebrowser-quantum.sh: format multi-package installs multiline
2026-08-01 22:29:20 +02:00
MickLesk 89e43f2753 add updater for olivetin 2026-08-01 22:26:05 +02:00
MickLesk 63434d9a0f refactor olivetin 2026-08-01 22:24:43 +02:00
MickLesk 7373c26b7f refactor olivethin 2026-08-01 22:21:45 +02:00
MickLesk d5d336698e switch to apt from apt-get 2026-08-01 22:20:27 +02:00
MickLesk a686666abd adguard use ip function 2026-08-01 22:16:10 +02:00
MickLesk bedc73a049 switch to apt in coder 2026-08-01 22:15:29 +02:00
MickLesk 92b7155ff9 refactor: complete addon harmonization (filebrowser-quantum, glances, olivetin, phpmyadmin, coder-code-server polish)
- Remove local get_lxc_ip() shadow in glances.sh, use core.func version
- Fix double header_info() call in olivetin.sh with _HEADER_SHOWN reset
- Add core.func/tools.func/error_handler.func sourcing to phpmyadmin.sh
- Replace unsafe hostname -I fallback with get_lxc_ip everywhere
- Use $STD for command execution and shared msg_info/msg_ok/msg_error/msg_warn
- All files verified clean via shellcheck (only expected SC1090 noise)
2026-08-01 22:06:30 +02:00
MickLesk 5356ce7dcc refactor coder-code crowdsec filebrowser 2026-08-01 21:59:28 +02:00
MickLesk 566cbf736d harmonize headers 2026-08-01 21:53:45 +02:00
Tobias 645f6a2d9a fix: prometheus-paperless-exporter incompatibility with paperless v3 (#16119)
* fix: compatibility in paperless v3 (https://github.com/hansmi/prometheus-paperless-exporter/issues/134)

* rm: comments

* fix: revert func
2026-07-29 09:29:16 +10:00
push-app-to-main[bot] db18c72bd8 Add actual-budget-prometheus-exporter (addon) (#16109)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
2026-07-28 12:29:40 +02:00
Ángel Oreste 6ad04d8b19 Removed deprecated parameter in Filebrowser Quantum configuration (#15573) 2026-07-03 18:09:41 +02:00
CanbiZ (MickLesk) 5169c61968 immich public proxy: replace npm install with npm ci for consistent dependency installation (#15166) 2026-06-17 15:34:27 +02:00
CanbiZ (MickLesk) 9aa76e8ea4 fix(netdata): extend PVE version support to 9.x (#14714) 2026-05-26 08:03:43 +02:00
CanbiZ (MickLesk) b15e84e2ba Cronmaster: fix unexpected EOF in update_cronmaster script (#14420)
The heredoc used <<EOF (unquoted), causing the \ inside it
to be executed during installation. This embedded the entire cronmaster.sh
source (~250 lines) into the update script, which contained backtick-style
constructs that caused 'unexpected EOF while looking for matching backtick'
at line 44 when the update script was later run.

Use <<'EOF' so the literal \ text is written to the file.
2026-05-11 22:03:46 +02:00
Tobias e05f2d94b4 fix: qbittorrent-exporter for 5.2 (#14403)
* fix: qbittorrent-exporter for 5.2

* Adjust API key input prompt indentation

* fix: tabs
2026-05-11 20:25:20 +02:00
CanbiZ (MickLesk) 50b3c3ae7f fix(adguardhome-sync): replace ifconfig with hostname -I for IP detection (#14273)
ifconfig is not available on modern Debian systems (net-tools not
installed by default). Replace with hostname -I which is available
everywhere, with ip addr as fallback.

Fixes: #14257
2026-05-06 13:10:58 +02:00
CanbiZ (MickLesk) c9da2daec2 alpine-docker: install openssl as core dependency | alpine-komodo: check & install openssl if missing (#14134)
* fix(alpine-docker): install openssl as core dependency

* fix(komodo): ensure openssl is available on Alpine before generating secrets
2026-04-30 19:16:52 +02:00
Tom Frenzel 4fd80e3e60 fix(sparkyfitness-garmin): recreate venv on update (#13824) 2026-04-18 17:39:48 +02:00
Tobias 8a243d2a2f Revert "Remove low-install-count CT scripts and installers (#13570)" (#13752) 2026-04-15 12:52:45 +02:00
CanbiZ (MickLesk) 5e865278e9 addons: Filebrowser & Filebrowser-Quantum get warning if host install (#13639)
* fix(filebrowser-quantum): warn when addon is run directly on Proxmox host

Detect /etc/pve and show a clear warning with link to the recommended
LXC installer. User must explicitly confirm to continue on the host,
addressing the size calculation and indexing issues reported in
gtsteffaniak/filebrowser#1893.

Closes #13636

* fix(filebrowser): improve host warning text and add to filebrowser addon

- Clarify that passthrough drives are not visible on the Proxmox host
- Mention incorrect disk usage stats and incomplete file browsing
- Add same warning to filebrowser (non-quantum) addon which also serves from /
- Reduce verbosity, remove redundant phrasing

* fix(filebrowser): fix misleading host warning wording

Remove reference to a non-existent dedicated LXC installer.
The addons should simply be run inside an LXC or VM instead.
2026-04-10 11:29:31 +02:00
Andrey Viktorov 0b24786695 komodo: set PERIPHERY_CORE_PUBLIC_KEYS to default value if absent (#13519) 2026-04-04 22:05:10 +02:00
CanbiZ (MickLesk) 59eed2646c Filebrowser: make noauth setup use correct database (#13457) 2026-04-01 22:44:05 +02:00
Tom Frenzel 81516991a8 SparkyFitness-Garmin: fix app name (#13325) 2026-03-26 22:08:45 +01:00
Tom Frenzel ee66508879 SparkyFitness: add garmin microservice (#12642)
* feat(sparkyfitness): add garmin microservice

* chore(sparkyfitness): add note to json

* chore(sparkyfitness): set garmin url

* feat(sparkyfitness): add garmin install option to update menu

* fix(sparkyfitness): typo

* chore(sparkyfitness): streamline naming and refactor menu

* feat: add sparlkyfitness garmin addon

* fix: remove EOF

* fix: update uninstall

* chore: update telemetry

* fix: app name

* chore: update env vars

* fix: typo

* chore: update default port

* fix: message format

* fix: update uninstall

* fix: rename functions

* fix: remove custom header_info

* fix: add header file

* chore: revert function naming
2026-03-26 12:34:28 +01:00
CanbiZ (MickLesk) 97bf744e96 fix typo (org instead of com) 2026-03-25 17:48:03 +01:00
CanbiZ (MickLesk) 7c4882384f komodo: migrate env vars to v2 and update source (#13262)
Update Komodo addon script: switch source GitHub URL to moghtech, create a timestamped backup of the compose env before updating, and add migrations for Komodo v2. Migrate image tag from 'latest' to ':2', rename DB credential variables (KOMODO_DB_* -> KOMODO_DATABASE_*), remove the deprecated KOMODO_PASSKEY, and ensure COMPOSE_KOMODO_BACKUPS_PATH is set. Adjust install routine to stop generating/setting PASSKEY and to use the new DATABASE variable names.
2026-03-25 07:59:27 +01:00
CanbiZ (MickLesk) caf03fe274 chore: replace helper-scripts.com with community-scripts.com (#13244) 2026-03-24 20:50:40 +01:00
push-app-to-main[bot] c62e1ba882 Homebrew (Addon) (#13249)
Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
2026-03-24 11:51:35 +01:00
CanbiZ (MickLesk) c8606e9fcc core: harden shell scripts against injection and insecure permissions (#13239) 2026-03-23 22:22:23 +01:00
CanbiZ (MickLesk) 8512144bb6 Harden code-server addon install script (#13116) 2026-03-20 14:16:06 +01:00
CanbiZ (MickLesk) 24a15d2c12 fix: Init telemetry in addon scripts (#12777)
* Init telemetry in addon scripts

Add a guarded call to init_tool_telemetry at the top of multiple tools/addon scripts (if the function is defined) and remove the previous placeholder init_tool_telemetry "" "addon" calls later in the files. This initializes telemetry earlier with the proper tool name and avoids invoking the initializer with an empty name. Affected files include: adguardhome-sync, arcane, coolify, copyparty, cronmaster, dockge, dokploy, immich-public-proxy, jellystat, komodo, nextcloud-exporter, pihole-exporter, prometheus-paperless-ngx-exporter, qbittorrent-exporter, and runtipi.

* Update umbrel-os-vm.sh
2026-03-11 23:18:35 +01:00
Michel Roegl-Brunner b6805bb845 HotFix variable assignment syntax in coder-code-server.sh 2026-03-11 09:29:22 +01:00
Michel Roegl-Brunner c144915a74 Coder-Code-Server: Check if config file exists (#12758)
* Check if config file exists

* Apply suggestion from @tremor021

---------

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2026-03-11 08:43:42 +01:00
CanbiZ (MickLesk) 5dc244a8c1 core: standardize exit codes and add mappings (#12467)
* Standardize exit codes and add mappings

Replace generic exit 1 usages with specific numeric exit codes and add corresponding explanations to the error lookup. This commit updates multiple misc/* scripts to return distinct codes for validation, Proxmox/LXC, networking, download and curl errors (e.g. 103-123, 64, 107-120, 206, 0 for explicit user cancels). It also updates curl error handling to propagate the original curl exit code and adds new entries in explain_exit_code and the error handler to improve diagnostics.

* Set exit code 115 for update_os errors

Change exit status from 6 to 115 in misc/alpine-install.func's update_os() error handlers when failing to download tools.func or when the expected functions are missing. This gives a distinct exit code for these specific failure cases.

* Add tools/addon exit codes and use them

Introduce exit codes 232-238 for Tools & Addon scripts in misc/api.func and misc/error_handler.func. Update addon scripts (tools/addon/adguardhome-sync.sh, tools/addon/copyparty.sh, tools/addon/cronmaster.sh) to return specific codes instead of generic exit 1: 238 for unsupported OS and 233 when the application is not installed/upgrade prerequisites are missing. This makes failures more descriptive and aligns scripts with the central error explanations.

* Standardize exit codes in exporter addons

Unify exit codes across exporter addon scripts: return 238 for unsupported OS detections and 233 when an update is requested but the exporter is not installed. Applied to nextcloud-exporter.sh, pihole-exporter.sh, prometheus-paperless-ngx-exporter.sh, and qbittorrent-exporter.sh to make failure modes distinguishable for callers/automation.

* Use specific exit codes in addon scripts

Replace generic exit 1 with distinct exit codes across multiple addon scripts to enable finer-grained error handling in automation. Exit codes introduced: 10 for Docker/Compose missing or user-declined Docker install, 233 for "nothing to update" cases, and 238 for unsupported OS cases. Affected files: tools/addon/arcane.sh, coolify.sh, dockge.sh, dokploy.sh, filebrowser-quantum.sh, filebrowser.sh, immich-public-proxy.sh, jellystat.sh, runtipi.sh.

* Use specific exit codes in addon scripts

Replace generic exit 1 with specific exit codes across multiple addon scripts to improve error signaling and handling. Files updated: tools/addon/add-netbird-lxc.sh (exit 238 on unsupported distro), tools/addon/add-tailscale-lxc.sh (treat user cancel as exit 0), tools/addon/glances.sh (exit 233 when not installed), tools/addon/komodo.sh (distinct exits for missing compose, legacy DB, backup/download failures, docker checks), tools/addon/netdata.sh (distinct exits for unsupported PVE versions, OS/codename detection, repo lookups), and tools/addon/phpmyadmin.sh (distinct exits for unsupported OS, network/download issues, package install/start failures, and invalid input). These changes make failures easier to identify and automate recovery or reporting.

* Use specific exit codes in PVE scripts

Replace generic exit 1 with distinct exit codes across tools/pve scripts to provide clearer failure signals for callers. post-pve-install.sh now returns 105 for unsupported Proxmox versions; pve-privilege-converter.sh uses 104 for non-root, 234 when no containers, and 235 for backup/conversion failures; update-apps.sh maps backup failures to 235, missing containers/selections to 234 (and UI cancellations to 0), missing backup storage to 119, and returns the actual container update exit code on failure. These changes improve diagnostics and allow external tooling to react to specific error conditions.

* Standardize exit codes and behaviors

Adjust exit codes and abort handling across multiple PVE helper scripts to provide clearer outcomes for automation and interactive flows. Changes include:

- container-restore-from-backup.sh, core-restore-from-backup.sh: return 235 when no backups found (was 1).
- fstrim.sh: treat user cancellation of non-ext4 warning as non-error (exit 0 instead of 1).
- kernel-clean.sh: treat no selection or user abort as non-error (exit 0 instead of 1).
- lxc-delete.sh: return 234 when no containers are present; treat no selection as non-error (exit 0).
- nic-offloading-fix.sh: use specific non-zero codes for root check and tool install failures (exit 104, 237) and 236 when no matching interfaces (was 1).
- pbs_microcode.sh, post-pmg-install.sh, post-pbs-install.sh: use distinct exit codes (232 and 105) for detected VM/PVE/unsupported distro conditions instead of generic 1.

These modifications make scripts return distinct codes for different failure modes and ensure user-initiated aborts or benign conditions exit with 0 where appropriate.

* Use exit 105 for unsupported PVE versions

Standardize error handling by replacing generic exit 1 with exit 105 in pve_check() across multiple VM template scripts to indicate unsupported Proxmox VE versions. Also add API exit code 226 message for "Proxmox: VM disk import or post-creation setup failed" in misc/api.func. Affected files include misc/api.func and various vm/*-vm.sh scripts.

* Use specific exit codes in VM scripts

Replace generic exit 1 with distinct exit codes across vm/*.sh to make failures more actionable for callers. Changes include: use 226 for missing imported-disk references, 237 for pv installation failures, 115 for download/extract/ISO-related failures, 214 for insufficient disk space during FreeBSD decompression, and 119 for missing storage detection. Updated scripts: archlinux-vm.sh, docker-vm.sh, haos-vm.sh, openwrt-vm.sh, opnsense-vm.sh, truenas-vm.sh, umbrel-os-vm.sh.
2026-03-02 10:55:20 +01:00
CanbiZ (MickLesk) fd67210906 Migrate: DokPloy, Komodo, Coolify, Dockge, Runtipi to Addons (#12275)
* feat: add Docker-based tool addons for dockge, komodo, dokploy, npmplus

Create addon scripts following the arcane.sh pattern for Docker-based
tools that can be installed on any existing Docker LXC:

- dockge: Docker Compose stack manager (port 5001)
- komodo: Build/deployment system with MongoDB/FerretDB (port 9120)
- dokploy: PaaS via external installer with Redis (port 3000)
- npmplus: Nginx Proxy Manager Plus via Compose (port 81)

Each addon includes:
- Docker availability check
- Install with full configuration
- Update via docker compose pull
- Uninstall with container cleanup
- ASCII header files

Original ct/ and install/ scripts are preserved for now.

* refactor: convert Docker tools to addons, remove old scripts

Convert dockge, komodo, dokploy, coolify from standalone ct/install
scripts to addon pattern (like arcane.sh).

Added:
- tools/addon/dockge.sh (port 5001)
- tools/addon/komodo.sh (port 9120, MongoDB/FerretDB choice)
- tools/addon/dokploy.sh (port 3000, external installer)
- tools/addon/coolify.sh (port 8000, external installer)
- tools/headers/ for all 4

Removed:
- ct/dockge.sh, ct/komodo.sh, ct/alpine-komodo.sh, ct/dokploy.sh, ct/coolify.sh
- install/dockge-install.sh, install/komodo-install.sh, install/alpine-komodo-install.sh
- install/dokploy-install.sh, install/coolify-install.sh
- frontend/public/json/ for dockge, komodo, dokploy, coolify
- tools/addon/npmplus.sh (not an addon candidate)

These tools are Docker-only and fit the addon pattern: they require
an existing Docker LXC and manage containers via docker compose.

* feat: add addon JSON configs for dockge, komodo, dokploy, coolify

Recreate JSON configs with type=addon, script paths pointing to
tools/addon/*.sh, null resources (addon runs on existing Docker LXC),
and update instructions in notes.

* feat: add Runtipi addon + upgrade all addons with Proxmox host check, optional Docker install, Alpine support

- New: tools/addon/runtipi.sh with full Alpine support (gcompat for musl)
- New: tools/headers/runtipi ASCII header
- Updated: runtipi.json to addon type with null resources
- Removed: ct/runtipi.sh, install/runtipi-install.sh (migrated to addon)
- All addons (dockge, komodo, dokploy, coolify, runtipi) now have:
  - check_proxmox_host(): warns when running on PVE host, default N
  - check_or_install_docker(): optional Docker install (Debian+Alpine)
  - Alpine-aware curl bootstrap and dependency installation

* readd ct, update information

* Create runtipi.sh

* refactor: remove inline header_info from addons, use core.func get_header()

- get_header() in core.func now maps APP_TYPE=addon to tools/headers/ path
- Removed 5 duplicate ASCII art header_info functions from addon scripts
- Addons now use the shared header_info() from core.func + tools/headers/ files

* chore(tools): add Github source links to dockge, komodo, dokploy, coolify, runtipi addons

* fix(runtipi): drop Alpine support; add OS compat notes to docker addon JSONs
2026-03-02 08:44:49 +01:00
Darkangeel_hd c0fde54d73 Improves adguardhome-sync addon when running on alpine LXCs (#12362)
* Update adguardhome-sync.sh

Better handle edge case of `curl` not being installed on Alpine.
Install `jq`, required by `fetch_and_deploy_gh_release()`, which if not installed makes the script error out with confusing stuff
Rewritten `get_ip()` to make it also work on busybox environments (Alpine).

* Update adguardhome-sync.sh

`jq` is installed by some code inside of `fetch_and_deploy_gh_release` for debian
So it doesn't make much sense to install it here.
We only do so for alpine, as if its not installed it breaks the script
2026-02-26 22:28:22 +01:00
CanbiZ (MickLesk) 06e81e1077 Add Alpine support and improve Tailscale install (#12370)
Detect Alpine inside the LXC container and install Tailscale via apk (add community repo if missing), enable/start the service. Preserve Debian/Ubuntu install path but improve DNS resolution checks, temporarily override /etc/resolv.conf if DNS appears blocked, and restore it afterwards. Switch pct exec to use sh -c, tighten command existence checks and redirections, ensure curl and keyring directory are present, add Tailscale apt source and install package. Overall robustness and error-handling improvements for installing Tailscale in containers.
2026-02-26 22:27:06 +01:00
CanbiZ (MickLesk) 340d999b2b force gitea sync 2026-02-25 14:25:37 +01:00
CanbiZ (MickLesk) dbdd891a99 several scripts: add additional github link in source (#12282)
* fix(error-handler): prevent silent() from re-enabling error handling during recovery

Root cause: silent() (core.func) unconditionally calls set -Eeuo pipefail
and trap 'error_handler' ERR after every command. When build_container()
intentionally disables error handling for its recovery section, any
intermediate call through silent()/ re-enables it. This causes the
grep/sed pipeline for missing_cmd extraction to trigger error_handler
(grep returns exit code 1 on no match + pipefail = fatal).

Fixes:
1. silent(): Save errexit state before disabling, only restore if it was
   active. Callers that intentionally disabled error handling (e.g.
   build_container recovery) are no longer silently re-enabled.

2. build.func: Add || true to missing_cmd grep pipeline as defense-in-depth
   against pipeline failure propagation.

3. build.func: Add explicit set +Eeuo pipefail / trap - ERR after
   post_update_to_api() call, before error classification grep/sed section.

4. build.func: Remove stale global combined_log variable from variables()
   that used a different path format (/tmp/install-SESSION-combined.log)
   than the actual local variable (/tmp/NSAPP-CTID-SESSION.log). The global
   was never written to and caused confusion when error_handler displayed it.

* Update build.func

* chore(install): add Github source links to all setup_nodejs scripts

52 install scripts had a project website in '# Source:' but no GitHub
link. Merged the GitHub repo URL into the Source header as:
  # Source: https://website.com/ | Github: https://github.com/OWNER/REPO

Repos sourced from fetch_and_deploy_gh_release calls, get_latest_github_release
calls, or known project repos for npm/pip installed apps.

Two scripts (fumadocs, pve-scripts-local) had no Source line at all —
added one. Shinobi skipped (GitLab-only, no GitHub repo).

* chore(install): add Github source links to all fetch_and_deploy scripts

77 additional install scripts had fetch_and_deploy_gh_release calls but
no GitHub link in the Source header. Merged the primary app repo into
the Source header as:
  # Source: https://website.com/ | Github: https://github.com/OWNER/REPO

Where multiple fetch_and_deploy calls existed (app + dependency), the
primary app repo was selected:
- ersatztv: ErsatzTV/ErsatzTV (not ffmpeg)
- firefly: firefly-iii/firefly-iii (not data-importer)
- komga: gotson/komga (not kepubify dep)
- sabnzbd: sabnzbd/sabnzbd (not par2cmdline-turbo dep)
- signoz: SigNoz/signoz (not otel-collector)
- tunarr: chrisbenincasa/tunarr (not ffmpeg dep)

Also fixed cosmos-install.sh double https:// in Source URL.

Skipped: autocaliweb (source already on codeberg, GitHub repos are deps only)

* revert: restore misc/build.func and misc/core.func to main state

These error-handler fixes belong to fix/error-handler-recovery, not to
this sources-only branch.

* chore(ct,tools): sync Source headers with install/ and add Github links to addon scripts
2026-02-24 15:11:53 +01:00
push-app-to-main[bot] ffa1a26b5e Arcane (#12263)
* Add arcane (addon)

* Update tools/addon/arcane.sh

Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: CanbiZ (MickLesk) <47820557+MickLesk@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2026-02-24 11:34:33 +01:00
push-app-to-main[bot] 2e32ea3c52 CR*NMASTER (#12065)
* Add cronmaster (addon)

* minor fixes

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: MickLesk <mickey.leskowitz@gmail.com>
2026-02-22 11:32:18 +01:00
CanbiZ (MickLesk) b439960222 core: Execution ID & Telemetry Improvements (#12041)
* 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
2026-02-18 10:24:06 +01:00
CanbiZ (MickLesk) 3ce3c6f613 tools/pve: add data analytics / formatting / linting (#12034)
* 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.
2026-02-17 16:36:20 +01:00