Compare commits

..

15 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
6be09caf5e Increase OPNsense VM disk size from 10GB to 20GB
- Provides more space for system updates, logs, and package installations
- 20GB is a more appropriate size for OPNsense production use
2026-02-18 10:19:31 +01:00
CanbiZ (MickLesk)
7389d49f57 Fix: Add disk space checking for OPNsense VM FreeBSD image decompression
- Add check_disk_space() function to verify available storage
- Check for 20GB before download and 15GB before decompression
- Provide clear error messages showing available vs required space
- Add proper error handling for unxz decompression failures
- Clean up compressed .xz file after decompression to save space
- Add progress messages for download and decompression steps

Fixes issue where script fails at line 611 with 'No space left on device'
when /tmp directory lacks sufficient space for ~10-15GB decompressed image.
2026-02-18 10:06:23 +01:00
community-scripts-pr-app[bot]
b4a5d28957 chore: update github-versions.json (#12054)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-18 06:25:12 +00:00
community-scripts-pr-app[bot]
eaa69d58be Update CHANGELOG.md (#12052)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-18 00:22:33 +00:00
community-scripts-pr-app[bot]
3ffff334a0 chore: update github-versions.json (#12051)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-18 00:22:12 +00:00
community-scripts-pr-app[bot]
38f04f4dcc Update CHANGELOG.md (#12048)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-17 20:14:36 +00:00
Andreas Abeck
fdbcee3a93 fix according to issue #12045 (#12047) 2026-02-17 21:14:12 +01:00
community-scripts-pr-app[bot]
ce11ba8f27 Update CHANGELOG.md (#12046)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-17 19:18:03 +00:00
Chris
43a0a078f5 [Hotfix] Cleanuparr: backup config before update (#12039) 2026-02-17 20:17:22 +01:00
community-scripts-pr-app[bot]
646dabf0f0 chore: update github-versions.json (#12043)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-17 18:20:21 +00:00
community-scripts-pr-app[bot]
2582c1f63b Update CHANGELOG.md (#12040)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-17 15:36:48 +00: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
community-scripts-pr-app[bot]
97652792be Update CHANGELOG.md (#12031)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-17 12:25:42 +00:00
CanbiZ (MickLesk)
f07f2cb04e core: error-handler improvements | better exit_code handling | better tools.func source check (#12019)
* 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.
2026-02-17 13:25:17 +01:00
community-scripts-pr-app[bot]
5f73f9d5e6 chore: update github-versions.json (#12030)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-17 12:14:28 +00:00
5 changed files with 107 additions and 38 deletions

View File

@@ -404,6 +404,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
</details>
## 2026-02-18
## 2026-02-17
### 🆕 New Scripts
@@ -414,6 +416,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### 🐞 Bug Fixes
- [Hotfix] Cleanuparr: backup config before update [@vhsdream](https://github.com/vhsdream) ([#12039](https://github.com/community-scripts/ProxmoxVE/pull/12039))
- fix: pterodactyl-panel add symlink [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11997](https://github.com/community-scripts/ProxmoxVE/pull/11997))
### 💾 Core
@@ -424,14 +427,23 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
- #### ✨ New Features
- tools/pve: add data analytics / formatting / linting [@MickLesk](https://github.com/MickLesk) ([#12034](https://github.com/community-scripts/ProxmoxVE/pull/12034))
- core: smart recovery for failed installs | extend exit_codes [@MickLesk](https://github.com/MickLesk) ([#11221](https://github.com/community-scripts/ProxmoxVE/pull/11221))
- #### 🔧 Refactor
- core: error-handler improvements | better exit_code handling | better tools.func source check [@MickLesk](https://github.com/MickLesk) ([#12019](https://github.com/community-scripts/ProxmoxVE/pull/12019))
### 🧰 Tools
- #### 🔧 Refactor
- Immich Public Proxy: centralize and fix systemd service creation [@MickLesk](https://github.com/MickLesk) ([#12025](https://github.com/community-scripts/ProxmoxVE/pull/12025))
### 📚 Documentation
- fix contribution/setup-fork [@andreasabeck](https://github.com/andreasabeck) ([#12047](https://github.com/community-scripts/ProxmoxVE/pull/12047))
## 2026-02-16
### 🆕 New Scripts

View File

@@ -32,8 +32,17 @@ function update_script() {
systemctl stop cleanuparr
msg_ok "Stopped Service"
msg_info "Backing up config"
cp -r /opt/cleanuparr/config /opt/cleanuparr_config_backup
msg_ok "Backed up config"
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-amd64.zip"
msg_info "Restoring config"
[[ -d /opt/cleanuparr/config ]] && rm -rf /opt/cleanuparr/config
mv /opt/cleanuparr_config_backup /opt/cleanuparr/config
msg_ok "Restored config"
msg_info "Starting Service"
systemctl start cleanuparr
msg_ok "Started Service"

View File

@@ -134,7 +134,7 @@ update_links() {
# Find all files containing the old repo reference
while IFS= read -r file; do
# Count occurrences
local count=$(grep -c "github.com/$old_repo/$old_name" "$file" 2>/dev/null || echo 0)
local count=$(grep -E -c "(github.com|githubusercontent.com)/$old_repo/$old_name" "$file" 2>/dev/null || echo 0)
if [[ $count -gt 0 ]]; then
# Backup original
@@ -143,16 +143,16 @@ update_links() {
# Replace links - use different sed syntax for BSD/macOS vs GNU sed
if sed --version &>/dev/null 2>&1; then
# GNU sed
sed -i "s|github.com/$old_repo/$old_name|github.com/$new_owner/$new_repo|g" "$file"
sed -E -i "s@(github.com|githubusercontent.com)/$old_repo/$old_name@\\1/$new_owner/$new_repo@g" "$file"
else
# BSD sed (macOS)
sed -i '' "s|github.com/$old_repo/$old_name|github.com/$new_owner/$new_repo|g" "$file"
sed -E -i '' "s@(github.com|githubusercontent.com)/$old_repo/$old_name@\\1/$new_owner/$new_repo@g" "$file"
fi
((files_updated++))
print_success "Updated $file ($count links)"
fi
done < <(find "$search_path" -type f \( -name "*.md" -o -name "*.sh" -o -name "*.func" -o -name "*.json" \) -not -path "*/.git/*" 2>/dev/null | xargs grep -l "github.com/$old_repo/$old_name" 2>/dev/null)
done < <(find "$search_path" -type f \( -name "*.md" -o -name "*.sh" -o -name "*.func" -o -name "*.json" \) -not -path "*/.git/*" 2>/dev/null | xargs grep -E -l "(github.com|githubusercontent.com)/$old_repo/$old_name" 2>/dev/null)
return $files_updated
}

View File

@@ -1,5 +1,5 @@
{
"generated": "2026-02-17T06:22:06Z",
"generated": "2026-02-18T06:25:03Z",
"versions": [
{
"slug": "2fauth",
@@ -158,9 +158,9 @@
{
"slug": "bookstack",
"repo": "BookStackApp/BookStack",
"version": "v25.12.3",
"version": "v25.12.5",
"pinned": false,
"date": "2026-01-29T15:29:25Z"
"date": "2026-02-17T18:42:47Z"
},
{
"slug": "byparr",
@@ -207,9 +207,9 @@
{
"slug": "comfyui",
"repo": "comfyanonymous/ComfyUI",
"version": "v0.13.0",
"version": "v0.14.2",
"pinned": false,
"date": "2026-02-10T20:27:38Z"
"date": "2026-02-18T06:12:02Z"
},
{
"slug": "commafeed",
@@ -221,9 +221,9 @@
{
"slug": "configarr",
"repo": "raydak-labs/configarr",
"version": "v1.20.0",
"version": "v1.21.0",
"pinned": false,
"date": "2026-01-10T21:25:47Z"
"date": "2026-02-17T22:59:07Z"
},
{
"slug": "convertx",
@@ -253,6 +253,13 @@
"pinned": false,
"date": "2026-02-11T15:39:05Z"
},
{
"slug": "databasus",
"repo": "databasus/databasus",
"version": "v3.14.0",
"pinned": false,
"date": "2026-02-17T17:18:34Z"
},
{
"slug": "dawarich",
"repo": "Freika/dawarich",
@@ -550,9 +557,9 @@
{
"slug": "huntarr",
"repo": "plexguide/Huntarr.io",
"version": "9.2.4.1",
"version": "9.3.3",
"pinned": false,
"date": "2026-02-12T22:17:47Z"
"date": "2026-02-18T02:35:29Z"
},
{
"slug": "immich-public-proxy",
@@ -578,16 +585,16 @@
{
"slug": "invoiceninja",
"repo": "invoiceninja/invoiceninja",
"version": "v5.12.62",
"version": "v5.12.63",
"pinned": false,
"date": "2026-02-17T03:23:48Z"
"date": "2026-02-18T00:32:09Z"
},
{
"slug": "jackett",
"repo": "Jackett/Jackett",
"version": "v0.24.1140",
"version": "v0.24.1147",
"pinned": false,
"date": "2026-02-17T05:54:25Z"
"date": "2026-02-18T05:54:19Z"
},
{
"slug": "jellystat",
@@ -697,9 +704,9 @@
{
"slug": "leantime",
"repo": "Leantime/leantime",
"version": "v3.6.2",
"version": "v3.7.0",
"pinned": false,
"date": "2026-01-29T16:37:00Z"
"date": "2026-02-18T00:02:31Z"
},
{
"slug": "librenms",
@@ -739,9 +746,9 @@
{
"slug": "linkstack",
"repo": "linkstackorg/linkstack",
"version": "v4.8.4",
"version": "v4.8.6",
"pinned": false,
"date": "2024-12-10T15:14:34Z"
"date": "2026-02-17T16:53:47Z"
},
{
"slug": "linkwarden",
@@ -781,9 +788,9 @@
{
"slug": "mail-archiver",
"repo": "s1t5/mail-archiver",
"version": "2602.1",
"version": "2602.2",
"pinned": false,
"date": "2026-02-11T06:23:11Z"
"date": "2026-02-17T09:46:52Z"
},
{
"slug": "managemydamnlife",
@@ -886,9 +893,9 @@
{
"slug": "netbox",
"repo": "netbox-community/netbox",
"version": "v4.5.2",
"version": "v4.5.3",
"pinned": false,
"date": "2026-02-03T13:54:26Z"
"date": "2026-02-17T15:39:18Z"
},
{
"slug": "nextcloud-exporter",
@@ -1089,9 +1096,9 @@
{
"slug": "planka",
"repo": "plankanban/planka",
"version": "v2.0.0",
"version": "v2.0.1",
"pinned": false,
"date": "2026-02-11T13:50:10Z"
"date": "2026-02-17T15:26:55Z"
},
{
"slug": "plant-it",
@@ -1103,9 +1110,9 @@
{
"slug": "pocketbase",
"repo": "pocketbase/pocketbase",
"version": "v0.36.3",
"version": "v0.36.4",
"pinned": false,
"date": "2026-02-13T18:38:58Z"
"date": "2026-02-17T08:02:51Z"
},
{
"slug": "pocketid",
@@ -1236,9 +1243,9 @@
{
"slug": "rclone",
"repo": "rclone/rclone",
"version": "v1.73.0",
"version": "v1.73.1",
"pinned": false,
"date": "2026-01-30T22:12:03Z"
"date": "2026-02-17T18:27:21Z"
},
{
"slug": "rdtclient",
@@ -1334,9 +1341,9 @@
{
"slug": "semaphore",
"repo": "semaphoreui/semaphore",
"version": "v2.17.2",
"version": "v2.17.5",
"pinned": false,
"date": "2026-02-16T10:27:40Z"
"date": "2026-02-17T18:20:38Z"
},
{
"slug": "shelfmark",
@@ -1544,9 +1551,9 @@
{
"slug": "tunarr",
"repo": "chrisbenincasa/tunarr",
"version": "v1.1.13",
"version": "v1.1.14",
"pinned": false,
"date": "2026-02-16T16:16:17Z"
"date": "2026-02-17T18:26:17Z"
},
{
"slug": "uhf",

View File

@@ -91,6 +91,17 @@ function cleanup() {
rm -rf $TEMP_DIR
}
function check_disk_space() {
local path="$1"
local required_gb="$2"
local available_kb=$(df -k "$path" | awk 'NR==2 {print $4}')
local available_gb=$((available_kb / 1024 / 1024))
if [ $available_gb -lt $required_gb ]; then
return 1
fi
return 0
}
TEMP_DIR=$(mktemp -d)
pushd $TEMP_DIR >/dev/null
function send_line_to_vm() {
@@ -605,11 +616,41 @@ if [ -z "$URL" ]; then
exit 1
fi
msg_ok "Download URL: ${CL}${BL}${URL}${CL}"
# Check available disk space (require at least 20GB for safety)
if ! check_disk_space "$TEMP_DIR" 20; then
AVAILABLE_GB=$(df -h "$TEMP_DIR" | awk 'NR==2 {print $4}')
msg_error "Insufficient disk space in temporary directory ($TEMP_DIR)."
msg_error "Available: ${AVAILABLE_GB}, Required: ~20GB for FreeBSD image decompression."
msg_error "Please free up space or ensure /tmp has sufficient storage."
exit 1
fi
msg_info "Downloading FreeBSD Image"
curl -f#SL -o "$(basename "$URL")" "$URL"
echo -en "\e[1A\e[0K"
msg_ok "Downloaded ${CL}${BL}$(basename "$URL")${CL}"
# Check disk space again before decompression
if ! check_disk_space "$TEMP_DIR" 15; then
AVAILABLE_GB=$(df -h "$TEMP_DIR" | awk 'NR==2 {print $4}')
msg_error "Insufficient disk space for decompression."
msg_error "Available: ${AVAILABLE_GB}, Required: ~15GB for decompressed image."
exit 1
fi
msg_info "Decompressing FreeBSD Image (this may take a few minutes)"
FILE=FreeBSD.qcow2
unxz -cv $(basename $URL) >${FILE}
msg_ok "Downloaded ${CL}${BL}${FILE}${CL}"
if ! unxz -cv $(basename $URL) >${FILE}; then
msg_error "Failed to decompress FreeBSD image."
msg_error "This is usually caused by insufficient disk space."
df -h "$TEMP_DIR"
exit 1
fi
# Remove the compressed file to save space
rm -f "$(basename "$URL")"
msg_ok "Decompressed ${CL}${BL}${FILE}${CL}"
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
case $STORAGE_TYPE in
@@ -649,7 +690,7 @@ qm set $VMID \
-boot order=scsi0 \
-serial0 socket \
-tags community-script >/dev/null
qm resize $VMID scsi0 10G >/dev/null
qm resize $VMID scsi0 20G >/dev/null
DESCRIPTION=$(
cat <<EOF
<div align='center'>