mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-03-15 14:33:01 +01:00
Compare commits
31 Commits
remove_jso
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e35b6dd65 | ||
|
|
00ecf00685 | ||
|
|
7ba3e9fe5e | ||
|
|
73f36b6218 | ||
|
|
915ba410a2 | ||
|
|
66e1a3a322 | ||
|
|
4a9de4d6cd | ||
|
|
165b9e7f01 | ||
|
|
d8810d8d85 | ||
|
|
7c0c153691 | ||
|
|
77db9cef1e | ||
|
|
bbd09b40ff | ||
|
|
afb91988bd | ||
|
|
005260df87 | ||
|
|
813b11bb4f | ||
|
|
2e8203a64e | ||
|
|
1441f4c324 | ||
|
|
56fa0d0aad | ||
|
|
749da403fb | ||
|
|
de6cb110e2 | ||
|
|
40d487282a | ||
|
|
32a30edcea | ||
|
|
655a66dd34 | ||
|
|
48fb024ae8 | ||
|
|
e727c584ba | ||
|
|
b57879afc5 | ||
|
|
070f1120e6 | ||
|
|
2c27f8d457 | ||
|
|
926f1f0f4a | ||
|
|
fd8de10365 | ||
|
|
9066e318a6 |
161
.github/changelogs/2026/03.md
generated
vendored
161
.github/changelogs/2026/03.md
generated
vendored
@@ -1,3 +1,164 @@
|
|||||||
|
## 2026-03-14
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Patchmon: remove v prefix from pinned version [@MickLesk](https://github.com/MickLesk) ([#12891](https://github.com/community-scripts/ProxmoxVE/pull/12891))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: don't abort on AMD repo apt update failure [@MickLesk](https://github.com/MickLesk) ([#12890](https://github.com/community-scripts/ProxmoxVE/pull/12890))
|
||||||
|
|
||||||
|
## 2026-03-13
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Hotfix: Removed clean install usage from original script. [@nickheyer](https://github.com/nickheyer) ([#12870](https://github.com/community-scripts/ProxmoxVE/pull/12870))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Discopanel: V2 Support + Script rewrite [@nickheyer](https://github.com/nickheyer) ([#12763](https://github.com/community-scripts/ProxmoxVE/pull/12763))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- update-apps: fix restore path, add PBS support and improve restore messages [@omertahaoztop](https://github.com/omertahaoztop) ([#12528](https://github.com/community-scripts/ProxmoxVE/pull/12528))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix(pve-privilege-converter): handle already stopped container in manage_states [@liuqitoday](https://github.com/liuqitoday) ([#12765](https://github.com/community-scripts/ProxmoxVE/pull/12765))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- Update: Docs/website metadata workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12858](https://github.com/community-scripts/ProxmoxVE/pull/12858))
|
||||||
|
|
||||||
|
## 2026-03-12
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- manyfold: fix incorrect port in upstream requests by forwarding original host [@anlopo](https://github.com/anlopo) ([#12812](https://github.com/community-scripts/ProxmoxVE/pull/12812))
|
||||||
|
- SparkyFitness: install pnpm dependencies from workspace root [@MickLesk](https://github.com/MickLesk) ([#12792](https://github.com/community-scripts/ProxmoxVE/pull/12792))
|
||||||
|
- n8n: add build-essential to update dependencies [@MickLesk](https://github.com/MickLesk) ([#12795](https://github.com/community-scripts/ProxmoxVE/pull/12795))
|
||||||
|
- Frigate openvino labelmap patch [@semtex1987](https://github.com/semtex1987) ([#12751](https://github.com/community-scripts/ProxmoxVE/pull/12751))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Pin Patchmon to 1.4.2 [@vhsdream](https://github.com/vhsdream) ([#12789](https://github.com/community-scripts/ProxmoxVE/pull/12789))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: correct PATH escaping in ROCm profile script [@MickLesk](https://github.com/MickLesk) ([#12793](https://github.com/community-scripts/ProxmoxVE/pull/12793))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: add mode=generated for unattended frontend installs [@MickLesk](https://github.com/MickLesk) ([#12807](https://github.com/community-scripts/ProxmoxVE/pull/12807))
|
||||||
|
- core: validate storage availability when loading defaults [@MickLesk](https://github.com/MickLesk) ([#12794](https://github.com/community-scripts/ProxmoxVE/pull/12794))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- tools.func: support older NVIDIA driver versions with 2 segments (xxx.xxx) [@MickLesk](https://github.com/MickLesk) ([#12796](https://github.com/community-scripts/ProxmoxVE/pull/12796))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix PBS microcode naming [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12834](https://github.com/community-scripts/ProxmoxVE/pull/12834))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- Cleanup: remove old workflow files [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12818](https://github.com/community-scripts/ProxmoxVE/pull/12818))
|
||||||
|
- Cleanup: remove frontend, move JSONs to json/ top-level [@MickLesk](https://github.com/MickLesk) ([#12813](https://github.com/community-scripts/ProxmoxVE/pull/12813))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- Remove json files [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12830](https://github.com/community-scripts/ProxmoxVE/pull/12830))
|
||||||
|
|
||||||
|
## 2026-03-11
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: Init telemetry in addon scripts [@MickLesk](https://github.com/MickLesk) ([#12777](https://github.com/community-scripts/ProxmoxVE/pull/12777))
|
||||||
|
- Tracearr: Increase default disk variable from 5 to 10 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12762](https://github.com/community-scripts/ProxmoxVE/pull/12762))
|
||||||
|
- Fix Wireguard Dashboard update [@odin568](https://github.com/odin568) ([#12767](https://github.com/community-scripts/ProxmoxVE/pull/12767))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Coder-Code-Server: Check if config file exists [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12758](https://github.com/community-scripts/ProxmoxVE/pull/12758))
|
||||||
|
|
||||||
|
## 2026-03-10
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Fix] Immich: Pin libvips to 8.17.3 [@vhsdream](https://github.com/vhsdream) ([#12744](https://github.com/community-scripts/ProxmoxVE/pull/12744))
|
||||||
|
|
||||||
|
## 2026-03-09
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Pin Opencloud to 5.2.0 [@vhsdream](https://github.com/vhsdream) ([#12721](https://github.com/community-scripts/ProxmoxVE/pull/12721))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Hotfix] qBittorrent: Disable UPnP port forwarding by default [@vhsdream](https://github.com/vhsdream) ([#12728](https://github.com/community-scripts/ProxmoxVE/pull/12728))
|
||||||
|
- [Quickfix] Opencloud: ensure correct case for binary [@vhsdream](https://github.com/vhsdream) ([#12729](https://github.com/community-scripts/ProxmoxVE/pull/12729))
|
||||||
|
- Omada: Bump libssl [@MickLesk](https://github.com/MickLesk) ([#12724](https://github.com/community-scripts/ProxmoxVE/pull/12724))
|
||||||
|
- openwebui: Ensure required dependencies [@MickLesk](https://github.com/MickLesk) ([#12717](https://github.com/community-scripts/ProxmoxVE/pull/12717))
|
||||||
|
- Frigate: try an OpenVino model build fallback [@MickLesk](https://github.com/MickLesk) ([#12704](https://github.com/community-scripts/ProxmoxVE/pull/12704))
|
||||||
|
- Change cronjob setup to use www-data user [@opastorello](https://github.com/opastorello) ([#12695](https://github.com/community-scripts/ProxmoxVE/pull/12695))
|
||||||
|
- RustDesk Server: Fix check_for_gh_release function call [@tremor021](https://github.com/tremor021) ([#12694](https://github.com/community-scripts/ProxmoxVE/pull/12694))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- feat: improve zigbee2mqtt backup handler [@MickLesk](https://github.com/MickLesk) ([#12714](https://github.com/community-scripts/ProxmoxVE/pull/12714))
|
||||||
|
|
||||||
|
- #### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Reactive Resume: rewrite for v5 using original repo amruthpilla/reactive-resume [@MickLesk](https://github.com/MickLesk) ([#12705](https://github.com/community-scripts/ProxmoxVE/pull/12705))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- tools: add Alpine (apk) support to ensure_dependencies and is_package_installed [@MickLesk](https://github.com/MickLesk) ([#12703](https://github.com/community-scripts/ProxmoxVE/pull/12703))
|
||||||
|
- tools.func: extend hwaccel with ROCm [@MickLesk](https://github.com/MickLesk) ([#12707](https://github.com/community-scripts/ProxmoxVE/pull/12707))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- feat: add CopycatWarningToast component for user warnings [@BramSuurdje](https://github.com/BramSuurdje) ([#12733](https://github.com/community-scripts/ProxmoxVE/pull/12733))
|
||||||
|
|
||||||
|
## 2026-03-08
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [Fix] Immich: chown install dir before machine-learning update [@vhsdream](https://github.com/vhsdream) ([#12684](https://github.com/community-scripts/ProxmoxVE/pull/12684))
|
||||||
|
- [Fix] Scanopy: Build generate-fixtures [@vhsdream](https://github.com/vhsdream) ([#12686](https://github.com/community-scripts/ProxmoxVE/pull/12686))
|
||||||
|
- fix: rustdeskserver: use correct repo string [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12682](https://github.com/community-scripts/ProxmoxVE/pull/12682))
|
||||||
|
- NZBGet: Fixes for RAR5 handling [@tremor021](https://github.com/tremor021) ([#12675](https://github.com/community-scripts/ProxmoxVE/pull/12675))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- LXC-Execute: Fix slug [@tremor021](https://github.com/tremor021) ([#12681](https://github.com/community-scripts/ProxmoxVE/pull/12681))
|
||||||
|
|
||||||
## 2026-03-07
|
## 2026-03-07
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
23
.github/workflows/delete-pocketbase-entry-on-removal.yml
generated
vendored
23
.github/workflows/delete-pocketbase-entry-on-removal.yml
generated
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: Delete PocketBase entry on script/JSON removal
|
name: Set state to is_deleted in pocketbase
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -52,15 +52,15 @@ jobs:
|
|||||||
|
|
||||||
slugs=$(echo $slugs | xargs -n1 | sort -u | tr '\n' ' ')
|
slugs=$(echo $slugs | xargs -n1 | sort -u | tr '\n' ' ')
|
||||||
if [[ -z "$slugs" ]]; then
|
if [[ -z "$slugs" ]]; then
|
||||||
echo "No deleted JSON or script files to remove from PocketBase."
|
echo "No deleted JSON or script files to mark as deleted in PocketBase."
|
||||||
echo "count=0" >> "$GITHUB_OUTPUT"
|
echo "count=0" >> "$GITHUB_OUTPUT"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
echo "$slugs" > slugs_to_delete.txt
|
echo "$slugs" > slugs_to_delete.txt
|
||||||
echo "count=$(echo $slugs | wc -w)" >> "$GITHUB_OUTPUT"
|
echo "count=$(echo $slugs | wc -w)" >> "$GITHUB_OUTPUT"
|
||||||
echo "Slugs to delete: $slugs"
|
echo "Slugs to mark as deleted: $slugs"
|
||||||
|
|
||||||
- name: Delete from PocketBase
|
- name: Mark as deleted in PocketBase
|
||||||
if: steps.slugs.outputs.count != '0'
|
if: steps.slugs.outputs.count != '0'
|
||||||
env:
|
env:
|
||||||
POCKETBASE_URL: ${{ secrets.POCKETBASE_URL }}
|
POCKETBASE_URL: ${{ secrets.POCKETBASE_URL }}
|
||||||
@@ -123,6 +123,8 @@ jobs:
|
|||||||
const token = JSON.parse(authRes.body).token;
|
const token = JSON.parse(authRes.body).token;
|
||||||
const recordsUrl = apiBase + '/collections/' + encodeURIComponent(coll) + '/records';
|
const recordsUrl = apiBase + '/collections/' + encodeURIComponent(coll) + '/records';
|
||||||
|
|
||||||
|
const patchBody = JSON.stringify({ is_deleted: true });
|
||||||
|
|
||||||
for (const slug of slugs) {
|
for (const slug of slugs) {
|
||||||
const filter = "(slug='" + slug + "')";
|
const filter = "(slug='" + slug + "')";
|
||||||
const listRes = await request(recordsUrl + '?filter=' + encodeURIComponent(filter) + '&perPage=1', {
|
const listRes = await request(recordsUrl + '?filter=' + encodeURIComponent(filter) + '&perPage=1', {
|
||||||
@@ -134,14 +136,15 @@ jobs:
|
|||||||
console.log('No PocketBase record for slug "' + slug + '", skipping.');
|
console.log('No PocketBase record for slug "' + slug + '", skipping.');
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const delRes = await request(recordsUrl + '/' + existingId, {
|
const patchRes = await request(recordsUrl + '/' + existingId, {
|
||||||
method: 'DELETE',
|
method: 'PATCH',
|
||||||
headers: { 'Authorization': token }
|
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||||
|
body: patchBody
|
||||||
});
|
});
|
||||||
if (delRes.ok) {
|
if (patchRes.ok) {
|
||||||
console.log('Deleted PocketBase record for slug "' + slug + '" (id=' + existingId + ').');
|
console.log('Set is_deleted=true for slug "' + slug + '" (id=' + existingId + ').');
|
||||||
} else {
|
} else {
|
||||||
console.warn('DELETE failed for slug "' + slug + '": ' + delRes.statusCode + ' ' + delRes.body);
|
console.warn('PATCH failed for slug "' + slug + '": ' + patchRes.statusCode + ' ' + patchRes.body);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log('Done.');
|
console.log('Done.');
|
||||||
|
|||||||
301
CHANGELOG.md
301
CHANGELOG.md
@@ -26,6 +26,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><h2>📜 History</h2></summary>
|
<summary><h2>📜 History</h2></summary>
|
||||||
@@ -36,7 +39,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><h4>March (7 entries)</h4></summary>
|
<summary><h4>March (14 entries)</h4></summary>
|
||||||
|
|
||||||
[View March 2026 Changelog](.github/changelogs/2026/03.md)
|
[View March 2026 Changelog](.github/changelogs/2026/03.md)
|
||||||
|
|
||||||
@@ -420,6 +423,60 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
## 2026-03-15
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- SparkyFitness: use --legacy-peer-deps for npm install [@MickLesk](https://github.com/MickLesk) ([#12888](https://github.com/community-scripts/ProxmoxVE/pull/12888))
|
||||||
|
- Wishlist: use --frozen-lockfile for pnpm install [@MickLesk](https://github.com/MickLesk) ([#12892](https://github.com/community-scripts/ProxmoxVE/pull/12892))
|
||||||
|
- Frigate: add fallback for OpenVino labelmap file [@MickLesk](https://github.com/MickLesk) ([#12889](https://github.com/community-scripts/ProxmoxVE/pull/12889))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- core: retry downloads with exponential backoff [@MickLesk](https://github.com/MickLesk) ([#12896](https://github.com/community-scripts/ProxmoxVE/pull/12896))
|
||||||
|
|
||||||
|
## 2026-03-14
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Patchmon: remove v prefix from pinned version [@MickLesk](https://github.com/MickLesk) ([#12891](https://github.com/community-scripts/ProxmoxVE/pull/12891))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tools.func: don't abort on AMD repo apt update failure [@MickLesk](https://github.com/MickLesk) ([#12890](https://github.com/community-scripts/ProxmoxVE/pull/12890))
|
||||||
|
|
||||||
|
## 2026-03-13
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Hotfix: Removed clean install usage from original script. [@nickheyer](https://github.com/nickheyer) ([#12870](https://github.com/community-scripts/ProxmoxVE/pull/12870))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Discopanel: V2 Support + Script rewrite [@nickheyer](https://github.com/nickheyer) ([#12763](https://github.com/community-scripts/ProxmoxVE/pull/12763))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- update-apps: fix restore path, add PBS support and improve restore messages [@omertahaoztop](https://github.com/omertahaoztop) ([#12528](https://github.com/community-scripts/ProxmoxVE/pull/12528))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix(pve-privilege-converter): handle already stopped container in manage_states [@liuqitoday](https://github.com/liuqitoday) ([#12765](https://github.com/community-scripts/ProxmoxVE/pull/12765))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- Update: Docs/website metadata workflow [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12858](https://github.com/community-scripts/ProxmoxVE/pull/12858))
|
||||||
|
|
||||||
## 2026-03-12
|
## 2026-03-12
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
@@ -450,11 +507,21 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
- tools.func: support older NVIDIA driver versions with 2 segments (xxx.xxx) [@MickLesk](https://github.com/MickLesk) ([#12796](https://github.com/community-scripts/ProxmoxVE/pull/12796))
|
- tools.func: support older NVIDIA driver versions with 2 segments (xxx.xxx) [@MickLesk](https://github.com/MickLesk) ([#12796](https://github.com/community-scripts/ProxmoxVE/pull/12796))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Fix PBS microcode naming [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12834](https://github.com/community-scripts/ProxmoxVE/pull/12834))
|
||||||
|
|
||||||
### 📂 Github
|
### 📂 Github
|
||||||
|
|
||||||
- Cleanup: remove old workflow files [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12818](https://github.com/community-scripts/ProxmoxVE/pull/12818))
|
- Cleanup: remove old workflow files [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12818](https://github.com/community-scripts/ProxmoxVE/pull/12818))
|
||||||
- Cleanup: remove frontend, move JSONs to json/ top-level [@MickLesk](https://github.com/MickLesk) ([#12813](https://github.com/community-scripts/ProxmoxVE/pull/12813))
|
- Cleanup: remove frontend, move JSONs to json/ top-level [@MickLesk](https://github.com/MickLesk) ([#12813](https://github.com/community-scripts/ProxmoxVE/pull/12813))
|
||||||
|
|
||||||
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
- Remove json files [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#12830](https://github.com/community-scripts/ProxmoxVE/pull/12830))
|
||||||
|
|
||||||
## 2026-03-11
|
## 2026-03-11
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
@@ -1210,235 +1277,3 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
- #### 📝 Script Information
|
- #### 📝 Script Information
|
||||||
|
|
||||||
- SQLServer-2025: add PVE9/Kernel 6.x incompatibility warning [@MickLesk](https://github.com/MickLesk) ([#11829](https://github.com/community-scripts/ProxmoxVE/pull/11829))
|
- SQLServer-2025: add PVE9/Kernel 6.x incompatibility warning [@MickLesk](https://github.com/MickLesk) ([#11829](https://github.com/community-scripts/ProxmoxVE/pull/11829))
|
||||||
|
|
||||||
## 2026-02-12
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- EMQX: increase disk to 6GB and add optional MQ disable prompt [@MickLesk](https://github.com/MickLesk) ([#11844](https://github.com/community-scripts/ProxmoxVE/pull/11844))
|
|
||||||
- Increased the Grafana container default disk size. [@shtefko](https://github.com/shtefko) ([#11840](https://github.com/community-scripts/ProxmoxVE/pull/11840))
|
|
||||||
- Pangolin: Update database generation command in install script [@tremor021](https://github.com/tremor021) ([#11825](https://github.com/community-scripts/ProxmoxVE/pull/11825))
|
|
||||||
- Deluge: add python3-setuptools as dep [@MickLesk](https://github.com/MickLesk) ([#11833](https://github.com/community-scripts/ProxmoxVE/pull/11833))
|
|
||||||
- Dispatcharr: migrate to uv sync [@MickLesk](https://github.com/MickLesk) ([#11831](https://github.com/community-scripts/ProxmoxVE/pull/11831))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Archlinux-VM: fix LVM/LVM-thin storage and improve error reporting | VM's add correct exit_code for analytics [@MickLesk](https://github.com/MickLesk) ([#11842](https://github.com/community-scripts/ProxmoxVE/pull/11842))
|
|
||||||
- Debian13-VM: Optimize First Boot & add noCloud/Cloud Selection [@MickLesk](https://github.com/MickLesk) ([#11810](https://github.com/community-scripts/ProxmoxVE/pull/11810))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- tools.func: auto-detect binary vs armored GPG keys in setup_deb822_repo [@MickLesk](https://github.com/MickLesk) ([#11841](https://github.com/community-scripts/ProxmoxVE/pull/11841))
|
|
||||||
- core: remove old Go API and extend misc/api.func with new backend [@MickLesk](https://github.com/MickLesk) ([#11822](https://github.com/community-scripts/ProxmoxVE/pull/11822))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- error_handler: prevent stuck 'installing' status [@MickLesk](https://github.com/MickLesk) ([#11845](https://github.com/community-scripts/ProxmoxVE/pull/11845))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Tailscale: fix DNS check and keyrings directory issues [@MickLesk](https://github.com/MickLesk) ([#11837](https://github.com/community-scripts/ProxmoxVE/pull/11837))
|
|
||||||
|
|
||||||
## 2026-02-11
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Draw.io ([#11788](https://github.com/community-scripts/ProxmoxVE/pull/11788))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- dispatcharr: include port 9191 in success-message [@MickLesk](https://github.com/MickLesk) ([#11808](https://github.com/community-scripts/ProxmoxVE/pull/11808))
|
|
||||||
- fix: make donetick 0.1.71 compatible [@tomfrenzel](https://github.com/tomfrenzel) ([#11804](https://github.com/community-scripts/ProxmoxVE/pull/11804))
|
|
||||||
- Kasm: Support new version URL format without hash suffix [@MickLesk](https://github.com/MickLesk) ([#11787](https://github.com/community-scripts/ProxmoxVE/pull/11787))
|
|
||||||
- LibreTranslate: Remove Torch [@tremor021](https://github.com/tremor021) ([#11783](https://github.com/community-scripts/ProxmoxVE/pull/11783))
|
|
||||||
- Snowshare: fix update script [@TuroYT](https://github.com/TuroYT) ([#11726](https://github.com/community-scripts/ProxmoxVE/pull/11726))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- [Feature] OpenCloud: support PosixFS Collaborative Mode [@vhsdream](https://github.com/vhsdream) ([#11806](https://github.com/community-scripts/ProxmoxVE/pull/11806))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- core: respect EDITOR variable for config editing [@ls-root](https://github.com/ls-root) ([#11693](https://github.com/community-scripts/ProxmoxVE/pull/11693))
|
|
||||||
|
|
||||||
### 📚 Documentation
|
|
||||||
|
|
||||||
- Fix formatting in kutt.json notes section [@tiagodenoronha](https://github.com/tiagodenoronha) ([#11774](https://github.com/community-scripts/ProxmoxVE/pull/11774))
|
|
||||||
|
|
||||||
## 2026-02-10
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Immich: Pin version to 2.5.6 [@vhsdream](https://github.com/vhsdream) ([#11775](https://github.com/community-scripts/ProxmoxVE/pull/11775))
|
|
||||||
- Libretranslate: Fix setuptools [@tremor021](https://github.com/tremor021) ([#11772](https://github.com/community-scripts/ProxmoxVE/pull/11772))
|
|
||||||
- Element Synapse: prevent systemd invoke failure during apt install [@MickLesk](https://github.com/MickLesk) ([#11758](https://github.com/community-scripts/ProxmoxVE/pull/11758))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Refactor: Slskd & Soularr [@vhsdream](https://github.com/vhsdream) ([#11674](https://github.com/community-scripts/ProxmoxVE/pull/11674))
|
|
||||||
|
|
||||||
### 🗑️ Deleted Scripts
|
|
||||||
|
|
||||||
- move paperless-exporter from LXC to addon ([#11737](https://github.com/community-scripts/ProxmoxVE/pull/11737))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- feat: improve storage parsing & add guestname [@carlosmaroot](https://github.com/carlosmaroot) ([#11752](https://github.com/community-scripts/ProxmoxVE/pull/11752))
|
|
||||||
|
|
||||||
### 📂 Github
|
|
||||||
|
|
||||||
- Github-Version Workflow: include addon scripts in extraction [@MickLesk](https://github.com/MickLesk) ([#11757](https://github.com/community-scripts/ProxmoxVE/pull/11757))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 📝 Script Information
|
|
||||||
|
|
||||||
- Snowshare: fix typo in config file path on website [@BirdMakingStuff](https://github.com/BirdMakingStuff) ([#11754](https://github.com/community-scripts/ProxmoxVE/pull/11754))
|
|
||||||
|
|
||||||
## 2026-02-09
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- several scripts: add --clear to uv venv calls for uv 0.10 compatibility [@MickLesk](https://github.com/MickLesk) ([#11723](https://github.com/community-scripts/ProxmoxVE/pull/11723))
|
|
||||||
- Koillection: ensure setup_composer is in update script [@MickLesk](https://github.com/MickLesk) ([#11734](https://github.com/community-scripts/ProxmoxVE/pull/11734))
|
|
||||||
- PeaNUT: symlink server.js after update [@vhsdream](https://github.com/vhsdream) ([#11696](https://github.com/community-scripts/ProxmoxVE/pull/11696))
|
|
||||||
- Umlautadaptarr: use release appsettings.json instead of hardcoded copy [@MickLesk](https://github.com/MickLesk) ([#11725](https://github.com/community-scripts/ProxmoxVE/pull/11725))
|
|
||||||
- tracearr: prepare for next stable release [@durzo](https://github.com/durzo) ([#11673](https://github.com/community-scripts/ProxmoxVE/pull/11673))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- remove whiptail from update scripts for unattended update support [@MickLesk](https://github.com/MickLesk) ([#11712](https://github.com/community-scripts/ProxmoxVE/pull/11712))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- Refactor: FileFlows [@tremor021](https://github.com/tremor021) ([#11108](https://github.com/community-scripts/ProxmoxVE/pull/11108))
|
|
||||||
- Refactor: wger [@MickLesk](https://github.com/MickLesk) ([#11722](https://github.com/community-scripts/ProxmoxVE/pull/11722))
|
|
||||||
- Nginx-UI: better User Handling | ACME [@MickLesk](https://github.com/MickLesk) ([#11715](https://github.com/community-scripts/ProxmoxVE/pull/11715))
|
|
||||||
- NginxProxymanager: use better-sqlite3 [@MickLesk](https://github.com/MickLesk) ([#11708](https://github.com/community-scripts/ProxmoxVE/pull/11708))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- hwaccel: add libmfx-gen1.2 to Intel Arc setup for QSV support [@MickLesk](https://github.com/MickLesk) ([#11707](https://github.com/community-scripts/ProxmoxVE/pull/11707))
|
|
||||||
|
|
||||||
### 🧰 Tools
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- addons: ensure curl is installed before use [@MickLesk](https://github.com/MickLesk) ([#11718](https://github.com/community-scripts/ProxmoxVE/pull/11718))
|
|
||||||
- Netbird (addon): add systemd ordering to start after Docker [@MickLesk](https://github.com/MickLesk) ([#11716](https://github.com/community-scripts/ProxmoxVE/pull/11716))
|
|
||||||
|
|
||||||
### ❔ Uncategorized
|
|
||||||
|
|
||||||
- Bichon: Update website [@tremor021](https://github.com/tremor021) ([#11711](https://github.com/community-scripts/ProxmoxVE/pull/11711))
|
|
||||||
|
|
||||||
## 2026-02-08
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- feat(healthchecks): add sendalerts service [@Mika56](https://github.com/Mika56) ([#11694](https://github.com/community-scripts/ProxmoxVE/pull/11694))
|
|
||||||
- ComfyUI: Dynamic Fetch PyTorch Versions [@MickLesk](https://github.com/MickLesk) ([#11657](https://github.com/community-scripts/ProxmoxVE/pull/11657))
|
|
||||||
|
|
||||||
- #### 💥 Breaking Changes
|
|
||||||
|
|
||||||
- Semaphore: switch from Debian to Ubuntu 24.04 [@MickLesk](https://github.com/MickLesk) ([#11670](https://github.com/community-scripts/ProxmoxVE/pull/11670))
|
|
||||||
|
|
||||||
## 2026-02-07
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Checkmate ([#11672](https://github.com/community-scripts/ProxmoxVE/pull/11672))
|
|
||||||
- Bichon ([#11671](https://github.com/community-scripts/ProxmoxVE/pull/11671))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- NocoDB: pin to v0.301.1 [@MickLesk](https://github.com/MickLesk) ([#11655](https://github.com/community-scripts/ProxmoxVE/pull/11655))
|
|
||||||
- Pin Memos to v0.25.3 - last version with release binaries [@MickLesk](https://github.com/MickLesk) ([#11658](https://github.com/community-scripts/ProxmoxVE/pull/11658))
|
|
||||||
- Downgrade: OpenProject | NginxProxyManager | Semaphore to Debian 12 due to persistent SHA1 issues [@MickLesk](https://github.com/MickLesk) ([#11654](https://github.com/community-scripts/ProxmoxVE/pull/11654))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- tools: fallback to previous release when asset is missing [@MickLesk](https://github.com/MickLesk) ([#11660](https://github.com/community-scripts/ProxmoxVE/pull/11660))
|
|
||||||
|
|
||||||
### 📚 Documentation
|
|
||||||
|
|
||||||
- fix(setup): correctly auto-detect username when using --full [@ls-root](https://github.com/ls-root) ([#11650](https://github.com/community-scripts/ProxmoxVE/pull/11650))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- feat(frontend): add JSON script import functionality [@ls-root](https://github.com/ls-root) ([#11563](https://github.com/community-scripts/ProxmoxVE/pull/11563))
|
|
||||||
|
|
||||||
## 2026-02-06
|
|
||||||
|
|
||||||
### 🆕 New Scripts
|
|
||||||
|
|
||||||
- Nightscout ([#11621](https://github.com/community-scripts/ProxmoxVE/pull/11621))
|
|
||||||
- PVE LXC Apps Updater [@MickLesk](https://github.com/MickLesk) ([#11533](https://github.com/community-scripts/ProxmoxVE/pull/11533))
|
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- Immich: supress startup messages for immich-admin [@vhsdream](https://github.com/vhsdream) ([#11635](https://github.com/community-scripts/ProxmoxVE/pull/11635))
|
|
||||||
- Semaphore: Change Ubuntu release from 'jammy' to 'noble' [@MickLesk](https://github.com/MickLesk) ([#11625](https://github.com/community-scripts/ProxmoxVE/pull/11625))
|
|
||||||
- Pangolin: replace build:sqlite with db:generate + build [@MickLesk](https://github.com/MickLesk) ([#11616](https://github.com/community-scripts/ProxmoxVE/pull/11616))
|
|
||||||
- [FIX] OpenCloud: path issues [@vhsdream](https://github.com/vhsdream) ([#11593](https://github.com/community-scripts/ProxmoxVE/pull/11593))
|
|
||||||
- [FIX] Homepage: preserve public/images & public/icons if they exist [@vhsdream](https://github.com/vhsdream) ([#11594](https://github.com/community-scripts/ProxmoxVE/pull/11594))
|
|
||||||
|
|
||||||
- #### ✨ New Features
|
|
||||||
|
|
||||||
- Shelfmark: remove Chromedriver dep, add URL_BASE env [@vhsdream](https://github.com/vhsdream) ([#11619](https://github.com/community-scripts/ProxmoxVE/pull/11619))
|
|
||||||
- Immich: pin to v2.5.5 [@vhsdream](https://github.com/vhsdream) ([#11598](https://github.com/community-scripts/ProxmoxVE/pull/11598))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- refactor: homepage [@CrazyWolf13](https://github.com/CrazyWolf13) ([#11605](https://github.com/community-scripts/ProxmoxVE/pull/11605))
|
|
||||||
|
|
||||||
### 💾 Core
|
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
|
||||||
|
|
||||||
- fix(core): spinner misalignment [@ls-root](https://github.com/ls-root) ([#11627](https://github.com/community-scripts/ProxmoxVE/pull/11627))
|
|
||||||
|
|
||||||
- #### 🔧 Refactor
|
|
||||||
|
|
||||||
- [Fix] build.func: QOL grammar adjustment for Creating LXC message [@vhsdream](https://github.com/vhsdream) ([#11633](https://github.com/community-scripts/ProxmoxVE/pull/11633))
|
|
||||||
|
|
||||||
### 📚 Documentation
|
|
||||||
|
|
||||||
- [gh] Update to the New Script request template [@tremor021](https://github.com/tremor021) ([#11612](https://github.com/community-scripts/ProxmoxVE/pull/11612))
|
|
||||||
|
|
||||||
### 🌐 Website
|
|
||||||
|
|
||||||
- #### 📝 Script Information
|
|
||||||
|
|
||||||
- Update LXC App Updater JSON to reflect tag override option [@vhsdream](https://github.com/vhsdream) ([#11626](https://github.com/community-scripts/ProxmoxVE/pull/11626))
|
|
||||||
|
|
||||||
### ❔ Uncategorized
|
|
||||||
|
|
||||||
- Opencloud: fix JSON [@vhsdream](https://github.com/vhsdream) ([#11617](https://github.com/community-scripts/ProxmoxVE/pull/11617))
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: DragoQC
|
# Author: DragoQC | Co-Author: nickheyer
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://discopanel.app/ | Github: https://github.com/nickheyer/discopanel
|
# Source: https://discopanel.app/ | Github: https://github.com/nickheyer/discopanel
|
||||||
|
|
||||||
@@ -38,34 +38,15 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Creating Backup"
|
msg_info "Creating Backup"
|
||||||
mkdir -p /opt/discopanel_backup_temp
|
mkdir -p /opt/discopanel_backup_temp
|
||||||
cp -r /opt/discopanel/data/discopanel.db \
|
cp /opt/discopanel/data/discopanel.db /opt/discopanel_backup_temp/discopanel.db
|
||||||
/opt/discopanel/data/.recovery_key \
|
|
||||||
/opt/discopanel_backup_temp/
|
|
||||||
if [[ -d /opt/discopanel/data/servers ]]; then
|
|
||||||
cp -r /opt/discopanel/data/servers /opt/discopanel_backup_temp/
|
|
||||||
fi
|
|
||||||
msg_ok "Created Backup"
|
msg_ok "Created Backup"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "tarball" "latest" "/opt/discopanel"
|
fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "prebuild" "latest" "/opt/discopanel" "discopanel-linux-amd64.tar.gz"
|
||||||
|
ln -sf /opt/discopanel/discopanel-linux-amd64 /opt/discopanel/discopanel
|
||||||
msg_info "Setting up DiscoPanel"
|
|
||||||
cd /opt/discopanel
|
|
||||||
$STD make gen
|
|
||||||
cd /opt/discopanel/web/discopanel
|
|
||||||
$STD npm install
|
|
||||||
$STD npm run build
|
|
||||||
msg_ok "Built Web Interface"
|
|
||||||
|
|
||||||
setup_go
|
|
||||||
|
|
||||||
msg_info "Building DiscoPanel"
|
|
||||||
cd /opt/discopanel
|
|
||||||
$STD go build -o discopanel cmd/discopanel/main.go
|
|
||||||
msg_ok "Built DiscoPanel"
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
msg_info "Restoring Data"
|
||||||
mkdir -p /opt/discopanel/data
|
mkdir -p /opt/discopanel/data
|
||||||
cp -a /opt/discopanel_backup_temp/. /opt/discopanel/data/
|
mv /opt/discopanel_backup_temp/discopanel.db /opt/discopanel/data/discopanel.db
|
||||||
rm -rf /opt/discopanel_backup_temp
|
rm -rf /opt/discopanel_backup_temp
|
||||||
msg_ok "Restored Data"
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
NODE_VERSION="24" setup_nodejs
|
NODE_VERSION="24" setup_nodejs
|
||||||
if check_for_gh_release "PatchMon" "PatchMon/PatchMon" "v1.4.2"; then
|
if check_for_gh_release "PatchMon" "PatchMon/PatchMon" "1.4.2"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop patchmon-server
|
systemctl stop patchmon-server
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|||||||
15
ct/plex.sh
15
ct/plex.sh
@@ -46,11 +46,11 @@ function update_script() {
|
|||||||
"main"
|
"main"
|
||||||
msg_ok "Migrated to new Plex repository"
|
msg_ok "Migrated to new Plex repository"
|
||||||
fi
|
fi
|
||||||
elif [[ -f /etc/apt/sources.list.d/plexmediaserver.list ]]; then
|
elif compgen -G "/etc/apt/sources.list.d/plex*.list" >/dev/null; then
|
||||||
msg_info "Migrating to new Plex repository (deb822)"
|
msg_info "Migrating to new Plex repository (deb822)"
|
||||||
rm -f /etc/apt/sources.list.d/plexmediaserver.list
|
rm -f /etc/apt/sources.list.d/plex*.list
|
||||||
rm -f /etc/apt/sources.list.d/plex*
|
|
||||||
rm -f /usr/share/keyrings/PlexSign.asc
|
rm -f /usr/share/keyrings/PlexSign.asc
|
||||||
|
rm -f /usr/share/keyrings/plexmediaserver.v2.gpg
|
||||||
setup_deb822_repo \
|
setup_deb822_repo \
|
||||||
"plexmediaserver" \
|
"plexmediaserver" \
|
||||||
"https://downloads.plex.tv/plex-keys/PlexSign.v2.key" \
|
"https://downloads.plex.tv/plex-keys/PlexSign.v2.key" \
|
||||||
@@ -58,6 +58,15 @@ function update_script() {
|
|||||||
"public" \
|
"public" \
|
||||||
"main"
|
"main"
|
||||||
msg_ok "Migrated to new Plex repository (deb822)"
|
msg_ok "Migrated to new Plex repository (deb822)"
|
||||||
|
elif [[ ! -f /etc/apt/sources.list.d/plexmediaserver.sources ]]; then
|
||||||
|
msg_info "Setting up Plex repository"
|
||||||
|
setup_deb822_repo \
|
||||||
|
"plexmediaserver" \
|
||||||
|
"https://downloads.plex.tv/plex-keys/PlexSign.v2.key" \
|
||||||
|
"https://repo.plex.tv/deb/" \
|
||||||
|
"public" \
|
||||||
|
"main"
|
||||||
|
msg_ok "Set up Plex repository"
|
||||||
fi
|
fi
|
||||||
if [[ -f /usr/local/bin/plexupdate ]] || [[ -d /opt/plexupdate ]]; then
|
if [[ -f /usr/local/bin/plexupdate ]] || [[ -d /opt/plexupdate ]]; then
|
||||||
msg_info "Removing legacy plexupdate"
|
msg_info "Removing legacy plexupdate"
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating Sparky Fitness Backend"
|
msg_info "Updating Sparky Fitness Backend"
|
||||||
cd /opt/sparkyfitness/SparkyFitnessServer
|
cd /opt/sparkyfitness/SparkyFitnessServer
|
||||||
$STD npm install
|
$STD npm install --legacy-peer-deps
|
||||||
msg_ok "Updated Sparky Fitness Backend"
|
msg_ok "Updated Sparky Fitness Backend"
|
||||||
|
|
||||||
msg_info "Updating Sparky Fitness Frontend (Patience)"
|
msg_info "Updating Sparky Fitness Frontend (Patience)"
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating Wishlist"
|
msg_info "Updating Wishlist"
|
||||||
cd /opt/wishlist
|
cd /opt/wishlist
|
||||||
$STD pnpm install
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm svelte-kit sync
|
$STD pnpm svelte-kit sync
|
||||||
$STD pnpm prisma generate
|
$STD pnpm prisma generate
|
||||||
sed -i 's|/usr/src/app/|/opt/wishlist/|g' $(grep -rl '/usr/src/app/' /opt/wishlist)
|
sed -i 's|/usr/src/app/|/opt/wishlist/|g' $(grep -rl '/usr/src/app/' /opt/wishlist)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# 🤖 AI Contribution Guidelines for ProxmoxVE
|
# 🤖 AI Contribution Guidelines for ProxmoxVE
|
||||||
|
|
||||||
> **This documentation is intended for all AI assistants (GitHub Copilot, Claude, ChatGPT, etc.) contributing to this project.**
|
> **This documentation is intended for all AI assistants (GitHub Copilot, Claude, ChatGPT, etc.) contributing to this project.**
|
||||||
|
|
||||||
@@ -653,15 +653,15 @@ Look at these recent well-implemented applications as reference:
|
|||||||
- Use of `check_for_gh_release` and `fetch_and_deploy_gh_release`
|
- Use of `check_for_gh_release` and `fetch_and_deploy_gh_release`
|
||||||
- Correct backup/restore patterns in `update_script`
|
- Correct backup/restore patterns in `update_script`
|
||||||
- Footer always ends with `motd_ssh`, `customize`, `cleanup_lxc`
|
- Footer always ends with `motd_ssh`, `customize`, `cleanup_lxc`
|
||||||
- JSON metadata files created for each app
|
- Website metadata requested via the website (Report issue on script page) if needed
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## <EFBFBD> JSON Metadata Files
|
## Website Metadata (Reference)
|
||||||
|
|
||||||
Every application requires a JSON metadata file in `frontend/public/json/<appname>.json`.
|
Website metadata (name, slug, description, logo, categories, etc.) is **not** added as files in the repo. Contributors request or update it via the **website**: go to the script's page and use the **Report issue** button; the flow will guide you. The structure below is a **reference** for what metadata exists (e.g. for the form or when describing what you need).
|
||||||
|
|
||||||
### JSON Structure
|
### JSON Structure (Reference)
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -804,7 +804,7 @@ Or no credentials:
|
|||||||
- [ ] `motd_ssh`, `customize`, `cleanup_lxc` at the end of install scripts
|
- [ ] `motd_ssh`, `customize`, `cleanup_lxc` at the end of install scripts
|
||||||
- [ ] No custom download/version-check logic
|
- [ ] No custom download/version-check logic
|
||||||
- [ ] All links point to `community-scripts/ProxmoxVE` (not `ProxmoxVED`!)
|
- [ ] All links point to `community-scripts/ProxmoxVE` (not `ProxmoxVED`!)
|
||||||
- [ ] JSON metadata file created in `frontend/public/json/<appname>.json`
|
- [ ] Website metadata requested via the website (Report issue) if needed
|
||||||
- [ ] Category IDs are valid (0-25)
|
- [ ] Category IDs are valid (0-25)
|
||||||
- [ ] Default OS version is Debian 13 or newer (unless special requirement)
|
- [ ] Default OS version is Debian 13 or newer (unless special requirement)
|
||||||
- [ ] Default resources are reasonable for the application
|
- [ ] Default resources are reasonable for the application
|
||||||
@@ -832,15 +832,15 @@ Or no credentials:
|
|||||||
|
|
||||||
## 🍒 Important: Cherry-Picking Your Files for PR Submission
|
## 🍒 Important: Cherry-Picking Your Files for PR Submission
|
||||||
|
|
||||||
⚠️ **CRITICAL**: When you submit your PR, you must use git cherry-pick to send ONLY your 3-4 files!
|
⚠️ **CRITICAL**: When you submit your PR, you must use git cherry-pick to send ONLY your 2 files!
|
||||||
|
|
||||||
Why? Because `setup-fork.sh` modifies 600+ files to update links. If you commit all changes, your PR will be impossible to merge.
|
Why? Because `setup-fork.sh` modifies 600+ files to update links. If you commit all changes, your PR will be impossible to merge.
|
||||||
|
|
||||||
**See**: [README.md - Cherry-Pick Section](README.md#-cherry-pick-submitting-only-your-changes) for complete instructions on:
|
**See**: [README.md - Cherry-Pick Section](README.md#-cherry-pick-submitting-only-your-changes) for complete instructions on:
|
||||||
|
|
||||||
- Creating a clean submission branch
|
- Creating a clean submission branch
|
||||||
- Cherry-picking only your files (ct/myapp.sh, install/myapp-install.sh, frontend/public/json/myapp.json)
|
- Cherry-picking only your files (ct/myapp.sh, install/myapp-install.sh)
|
||||||
- Verifying your PR has only 3 file changes (not 600+)
|
- Verifying your PR has only 2 file changes (not 600+)
|
||||||
|
|
||||||
**Quick reference**:
|
**Quick reference**:
|
||||||
|
|
||||||
@@ -849,7 +849,7 @@ Why? Because `setup-fork.sh` modifies 600+ files to update links. If you commit
|
|||||||
git fetch upstream
|
git fetch upstream
|
||||||
git checkout -b submit/myapp upstream/main
|
git checkout -b submit/myapp upstream/main
|
||||||
|
|
||||||
# Cherry-pick your commit(s) or manually add your 3-4 files
|
# Cherry-pick your commit(s) or manually add your 2 files
|
||||||
# Then push to your fork and create PR
|
# Then push to your fork and create PR
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -865,4 +865,4 @@ git checkout -b submit/myapp upstream/main
|
|||||||
- [../EXIT_CODES.md](../EXIT_CODES.md) - Exit code reference
|
- [../EXIT_CODES.md](../EXIT_CODES.md) - Exit code reference
|
||||||
- [templates_ct/](templates_ct/) - CT script templates
|
- [templates_ct/](templates_ct/) - CT script templates
|
||||||
- [templates_install/](templates_install/) - Install script templates
|
- [templates_install/](templates_install/) - Install script templates
|
||||||
- [templates_json/](templates_json/) - JSON metadata templates
|
- [templates_json/](templates_json/) - Metadata structure reference; submit via website
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ This guide explains the current execution flow and what to verify during reviews
|
|||||||
- Uses `tools.func` helpers (setup\_\*).
|
- Uses `tools.func` helpers (setup\_\*).
|
||||||
- Ends with `motd_ssh`, `customize`, `cleanup_lxc`.
|
- Ends with `motd_ssh`, `customize`, `cleanup_lxc`.
|
||||||
|
|
||||||
### JSON Metadata
|
### Website Metadata
|
||||||
|
|
||||||
- File in `frontend/public/json/<appname>.json` matches template schema.
|
- Website metadata for new/updated scripts is requested via the website (Report issue on script page) where applicable.
|
||||||
|
|
||||||
### Testing
|
### Testing
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ These documents cover the coding standards for the following types of files in o
|
|||||||
|
|
||||||
- **`install/$AppName-install.sh` Scripts**: These scripts are responsible for the installation of applications.
|
- **`install/$AppName-install.sh` Scripts**: These scripts are responsible for the installation of applications.
|
||||||
- **`ct/$AppName.sh` Scripts**: These scripts handle the creation and updating of containers.
|
- **`ct/$AppName.sh` Scripts**: These scripts handle the creation and updating of containers.
|
||||||
- **`json/$AppName.json`**: These files store structured data and are used for the website.
|
- **Website metadata**: Display data (name, description, logo, etc.) is requested via the website (Report issue on the script page), not via files in the repo.
|
||||||
|
|
||||||
Each section provides detailed guidelines on various aspects of coding, including shebang usage, comments, variable naming, function naming, indentation, error handling, command substitution, quoting, script structure, and logging. Additionally, examples are provided to illustrate the application of these standards.
|
Each section provides detailed guidelines on various aspects of coding, including shebang usage, comments, variable naming, function naming, indentation, error handling, command substitution, quoting, script structure, and logging. Additionally, examples are provided to illustrate the application of these standards.
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ git push origin your-feature-branch
|
|||||||
|
|
||||||
### 6. Cherry-Pick: Submit Only Your Files for PR
|
### 6. Cherry-Pick: Submit Only Your Files for PR
|
||||||
|
|
||||||
⚠️ **IMPORTANT**: setup-fork.sh modified 600+ files. You MUST only submit your 3 new files!
|
⚠️ **IMPORTANT**: setup-fork.sh modified 600+ files. You MUST only submit your 2 new files!
|
||||||
|
|
||||||
See [README.md - Cherry-Pick Guide](README.md#-cherry-pick-submitting-only-your-changes) for step-by-step instructions.
|
See [README.md - Cherry-Pick Guide](README.md#-cherry-pick-submitting-only-your-changes) for step-by-step instructions.
|
||||||
|
|
||||||
@@ -124,12 +124,11 @@ git checkout -b submit/myapp upstream/main
|
|||||||
# Copy only your files
|
# Copy only your files
|
||||||
cp ../your-work-branch/ct/myapp.sh ct/myapp.sh
|
cp ../your-work-branch/ct/myapp.sh ct/myapp.sh
|
||||||
cp ../your-work-branch/install/myapp-install.sh install/myapp-install.sh
|
cp ../your-work-branch/install/myapp-install.sh install/myapp-install.sh
|
||||||
cp ../your-work-branch/frontend/public/json/myapp.json frontend/public/json/myapp.json
|
|
||||||
|
|
||||||
# Commit and verify
|
# Commit and verify
|
||||||
git add ct/myapp.sh install/myapp-install.sh frontend/public/json/myapp.json
|
git add ct/myapp.sh install/myapp-install.sh
|
||||||
git commit -m "feat: add MyApp"
|
git commit -m "feat: add MyApp"
|
||||||
git diff upstream/main --name-only # Should show ONLY your 3 files
|
git diff upstream/main --name-only # Should show ONLY your 2 files
|
||||||
|
|
||||||
# Push and create PR
|
# Push and create PR
|
||||||
git push origin submit/myapp
|
git push origin submit/myapp
|
||||||
@@ -139,11 +138,10 @@ git push origin submit/myapp
|
|||||||
|
|
||||||
Open a Pull Request from `submit/myapp` → `community-scripts/ProxmoxVE/main`.
|
Open a Pull Request from `submit/myapp` → `community-scripts/ProxmoxVE/main`.
|
||||||
|
|
||||||
Verify the PR shows ONLY these 3 files:
|
Verify the PR shows ONLY these 2 files:
|
||||||
|
|
||||||
- `ct/myapp.sh`
|
- `ct/myapp.sh`
|
||||||
- `install/myapp-install.sh`
|
- `install/myapp-install.sh`
|
||||||
- `frontend/public/json/myapp.json`
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -175,4 +173,4 @@ dev_mode="trace,keep" bash -c "$(curl -fsSL https://raw.githubusercontent.com/co
|
|||||||
|
|
||||||
- [CT Template: AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_ct/AppName.sh)
|
- [CT Template: AppName.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_ct/AppName.sh)
|
||||||
- [Install Template: AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_install/AppName-install.sh)
|
- [Install Template: AppName-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_install/AppName-install.sh)
|
||||||
- [JSON Template: AppName.json](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_json/AppName.json)
|
- [JSON Template: AppName.json](https://github.com/community-scripts/ProxmoxVE/blob/main/docs/contribution/templates_json/AppName.json) — metadata structure reference; submit via the website (Report issue on script page)
|
||||||
|
|||||||
@@ -54,15 +54,13 @@ git checkout -b add/my-awesome-app
|
|||||||
# 2. Create application scripts from templates
|
# 2. Create application scripts from templates
|
||||||
cp docs/contribution/templates_ct/AppName.sh ct/myapp.sh
|
cp docs/contribution/templates_ct/AppName.sh ct/myapp.sh
|
||||||
cp docs/contribution/templates_install/AppName-install.sh install/myapp-install.sh
|
cp docs/contribution/templates_install/AppName-install.sh install/myapp-install.sh
|
||||||
cp docs/contribution/templates_json/AppName.json frontend/public/json/myapp.json
|
|
||||||
|
|
||||||
# 3. Edit your scripts
|
# 3. Edit your scripts
|
||||||
nano ct/myapp.sh
|
nano ct/myapp.sh
|
||||||
nano install/myapp-install.sh
|
nano install/myapp-install.sh
|
||||||
nano frontend/public/json/myapp.json
|
|
||||||
|
|
||||||
# 4. Commit and push to your fork
|
# 4. Commit and push to your fork
|
||||||
git add ct/myapp.sh install/myapp-install.sh frontend/public/json/myapp.json
|
git add ct/myapp.sh install/myapp-install.sh
|
||||||
git commit -m "feat: add MyApp container and install scripts"
|
git commit -m "feat: add MyApp container and install scripts"
|
||||||
git push origin add/my-awesome-app
|
git push origin add/my-awesome-app
|
||||||
|
|
||||||
@@ -74,6 +72,8 @@ bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/
|
|||||||
|
|
||||||
# 7. Open Pull Request on GitHub
|
# 7. Open Pull Request on GitHub
|
||||||
# Create PR from: your-fork/add/my-awesome-app → community-scripts/ProxmoxVE/main
|
# Create PR from: your-fork/add/my-awesome-app → community-scripts/ProxmoxVE/main
|
||||||
|
|
||||||
|
# To add or change website metadata (description, logo, etc.), use the Report issue button on the script's page on the website.
|
||||||
```
|
```
|
||||||
|
|
||||||
**💡 Tip**: See `../FORK_SETUP.md` for detailed fork setup and troubleshooting
|
**💡 Tip**: See `../FORK_SETUP.md` for detailed fork setup and troubleshooting
|
||||||
|
|||||||
@@ -50,15 +50,14 @@ git push origin feature/my-awesome-app
|
|||||||
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/myapp.sh)"
|
||||||
# ⏱️ GitHub may take 10-30 seconds to update files - be patient!
|
# ⏱️ GitHub may take 10-30 seconds to update files - be patient!
|
||||||
|
|
||||||
# 8. Create your JSON metadata file
|
# 8. Request website metadata via the website
|
||||||
cp docs/contribution/templates_json/AppName.json frontend/public/json/myapp.json
|
# Go to the script's page on the website, use the "Report issue" button — it will guide you.
|
||||||
# Edit metadata: name, slug, categories, description, resources, etc.
|
|
||||||
|
|
||||||
# 9. No direct install-script test
|
# 9. No direct install-script test
|
||||||
# Install scripts are executed by the CT script inside the container
|
# Install scripts are executed by the CT script inside the container
|
||||||
|
|
||||||
# 10. Commit ONLY your new files (see Cherry-Pick section below!)
|
# 10. Commit ONLY your new files (see Cherry-Pick section below!)
|
||||||
git add ct/myapp.sh install/myapp-install.sh frontend/public/json/myapp.json
|
git add ct/myapp.sh install/myapp-install.sh
|
||||||
git commit -m "feat: add MyApp container and install scripts"
|
git commit -m "feat: add MyApp container and install scripts"
|
||||||
git push origin feature/my-awesome-app
|
git push origin feature/my-awesome-app
|
||||||
|
|
||||||
@@ -67,7 +66,7 @@ git push origin feature/my-awesome-app
|
|||||||
|
|
||||||
⚠️ **IMPORTANT: After setup-fork.sh, many files are modified!**
|
⚠️ **IMPORTANT: After setup-fork.sh, many files are modified!**
|
||||||
|
|
||||||
See the **Cherry-Pick: Submitting Only Your Changes** section below to learn how to push ONLY your 3-4 files instead of 600+ modified files!
|
See the **Cherry-Pick: Submitting Only Your Changes** section below to learn how to push ONLY your 2 files instead of 600+ modified files!
|
||||||
|
|
||||||
### How Users Run Scripts (After Merged)
|
### How Users Run Scripts (After Merged)
|
||||||
|
|
||||||
@@ -180,7 +179,7 @@ All scripts and configurations must follow our coding standards to ensure consis
|
|||||||
- **[HELPER_FUNCTIONS.md](HELPER_FUNCTIONS.md)** - Reference for all tools.func helper functions
|
- **[HELPER_FUNCTIONS.md](HELPER_FUNCTIONS.md)** - Reference for all tools.func helper functions
|
||||||
- **Container Scripts** - `/ct/` templates and guidelines
|
- **Container Scripts** - `/ct/` templates and guidelines
|
||||||
- **Install Scripts** - `/install/` templates and guidelines
|
- **Install Scripts** - `/install/` templates and guidelines
|
||||||
- **JSON Configurations** - `frontend/public/json/` structure and format
|
- **Website metadata** – Request via the website (Report issue on the script page); see [templates_json/AppName.md](templates_json/AppName.md)
|
||||||
|
|
||||||
### Quick Checklist
|
### Quick Checklist
|
||||||
|
|
||||||
@@ -213,7 +212,7 @@ Key points:
|
|||||||
|
|
||||||
## 🍒 Cherry-Pick: Submitting Only Your Changes
|
## 🍒 Cherry-Pick: Submitting Only Your Changes
|
||||||
|
|
||||||
**Problem**: `setup-fork.sh` modifies 600+ files to update links. You don't want to submit all of those changes - only your new 3-4 files!
|
**Problem**: `setup-fork.sh` modifies 600+ files to update links. You don't want to submit all of those changes - only your new 2 files!
|
||||||
|
|
||||||
**Solution**: Use git cherry-pick to select only YOUR files.
|
**Solution**: Use git cherry-pick to select only YOUR files.
|
||||||
|
|
||||||
@@ -226,7 +225,7 @@ Key points:
|
|||||||
git status
|
git status
|
||||||
|
|
||||||
# Verify your files are there
|
# Verify your files are there
|
||||||
git status | grep -E "ct/myapp|install/myapp|json/myapp"
|
git status | grep -E "ct/myapp|install/myapp"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 2. Create a clean feature branch for submission
|
#### 2. Create a clean feature branch for submission
|
||||||
@@ -252,15 +251,13 @@ git cherry-pick <commit-hash-of-your-files>
|
|||||||
# From your work branch, get the file contents
|
# From your work branch, get the file contents
|
||||||
git show feature/my-awesome-app:ct/myapp.sh > /tmp/myapp.sh
|
git show feature/my-awesome-app:ct/myapp.sh > /tmp/myapp.sh
|
||||||
git show feature/my-awesome-app:install/myapp-install.sh > /tmp/myapp-install.sh
|
git show feature/my-awesome-app:install/myapp-install.sh > /tmp/myapp-install.sh
|
||||||
git show feature/my-awesome-app:frontend/public/json/myapp.json > /tmp/myapp.json
|
|
||||||
|
|
||||||
# Add them to the clean branch
|
# Add them to the clean branch
|
||||||
cp /tmp/myapp.sh ct/myapp.sh
|
cp /tmp/myapp.sh ct/myapp.sh
|
||||||
cp /tmp/myapp-install.sh install/myapp-install.sh
|
cp /tmp/myapp-install.sh install/myapp-install.sh
|
||||||
cp /tmp/myapp.json frontend/public/json/myapp.json
|
|
||||||
|
|
||||||
# Commit
|
# Commit
|
||||||
git add ct/myapp.sh install/myapp-install.sh frontend/public/json/myapp.json
|
git add ct/myapp.sh install/myapp-install.sh
|
||||||
git commit -m "feat: add MyApp"
|
git commit -m "feat: add MyApp"
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -272,7 +269,6 @@ git diff upstream/main --name-only
|
|||||||
# Should show ONLY:
|
# Should show ONLY:
|
||||||
# ct/myapp.sh
|
# ct/myapp.sh
|
||||||
# install/myapp-install.sh
|
# install/myapp-install.sh
|
||||||
# frontend/public/json/myapp.json
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 5. Push and create PR
|
#### 5. Push and create PR
|
||||||
@@ -345,7 +341,8 @@ If you're using **Visual Studio Code** with an AI assistant, you can leverage ou
|
|||||||
Please follow the guidelines in docs/contribution/AI.md to create:
|
Please follow the guidelines in docs/contribution/AI.md to create:
|
||||||
1. ct/myapp.sh (container script)
|
1. ct/myapp.sh (container script)
|
||||||
2. install/myapp-install.sh (installation script)
|
2. install/myapp-install.sh (installation script)
|
||||||
3. frontend/public/json/myapp.json (metadata)
|
|
||||||
|
Website listing/metadata is requested separately via the website (Report issue on the script page).
|
||||||
```
|
```
|
||||||
|
|
||||||
4. **AI Will Generate**
|
4. **AI Will Generate**
|
||||||
@@ -357,6 +354,8 @@ If you're using **Visual Studio Code** with an AI assistant, you can leverage ou
|
|||||||
- Have correct update mechanisms
|
- Have correct update mechanisms
|
||||||
- Are ready to submit as a PR
|
- Are ready to submit as a PR
|
||||||
|
|
||||||
|
Website listing/metadata is requested separately via the website (Report issue on the script page).
|
||||||
|
|
||||||
### Key Points for AI Assistants
|
### Key Points for AI Assistants
|
||||||
|
|
||||||
- **Templates Location**: `docs/contribution/templates_ct/AppName.sh`, `templates_install/`, `templates_json/`
|
- **Templates Location**: `docs/contribution/templates_ct/AppName.sh`, `templates_install/`, `templates_json/`
|
||||||
@@ -409,11 +408,10 @@ cp docs/contribution/templates_ct/AppName.sh ct/my-app.sh
|
|||||||
|
|
||||||
# Installation script template
|
# Installation script template
|
||||||
cp docs/contribution/templates_install/AppName-install.sh install/my-app-install.sh
|
cp docs/contribution/templates_install/AppName-install.sh install/my-app-install.sh
|
||||||
|
|
||||||
# JSON configuration template
|
|
||||||
cp docs/contribution/templates_json/AppName.json frontend/public/json/my-app.json
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For website metadata (description, logo, etc.), use the Report issue button on the script's page on the website.
|
||||||
|
|
||||||
**Template Features:**
|
**Template Features:**
|
||||||
|
|
||||||
- Updated to match current codebase patterns
|
- Updated to match current codebase patterns
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ fetch_and_deploy_gh_release "myapp" "owner/repo"
|
|||||||
2. **Only add app-specific dependencies** - Don't add ca-certificates, curl, gnupg (handled by build.func)
|
2. **Only add app-specific dependencies** - Don't add ca-certificates, curl, gnupg (handled by build.func)
|
||||||
3. **Test via curl from your fork** - Push first, then: `bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/MyApp.sh)"`
|
3. **Test via curl from your fork** - Push first, then: `bash -c "$(curl -fsSL https://raw.githubusercontent.com/YOUR_USERNAME/ProxmoxVE/main/ct/MyApp.sh)"`
|
||||||
4. **Wait for GitHub to update** - Takes 10-30 seconds after git push
|
4. **Wait for GitHub to update** - Takes 10-30 seconds after git push
|
||||||
5. **Cherry-pick only YOUR files** - Submit only ct/MyApp.sh, install/MyApp-install.sh, frontend/public/json/myapp.json (3 files)
|
5. **Cherry-pick only YOUR files** - Submit only ct/MyApp.sh, install/MyApp-install.sh (2 files). Website metadata: use Report issue on the script's page on the website.
|
||||||
6. **Verify before PR** - Run `git diff upstream/main --name-only` to confirm only your files changed
|
6. **Verify before PR** - Run `git diff upstream/main --name-only` to confirm only your files changed
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,21 +1,20 @@
|
|||||||
# JSON Metadata Files - Quick Reference
|
# Website Metadata - Quick Reference
|
||||||
|
|
||||||
The metadata file (`frontend/public/json/myapp.json`) tells the web interface how to display your application.
|
Metadata (name, slug, description, logo, categories, etc.) controls how your application appears on the website. You do **not** add JSON files to the repo — you request changes via the website.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Quick Start
|
## How to Request or Update Metadata
|
||||||
|
|
||||||
**Use the JSON Generator Tool:**
|
1. **Go to the script on the website** — Open the [ProxmoxVE website](https://community-scripts.github.io/ProxmoxVE/), find your script (or the script you want to update).
|
||||||
[https://community-scripts.github.io/ProxmoxVE/json-editor](https://community-scripts.github.io/ProxmoxVE/json-editor)
|
2. **Press the "Report issue" button** on that script’s page.
|
||||||
|
3. **Follow the guide** — The flow will walk you through submitting or updating metadata.
|
||||||
1. Enter application details
|
|
||||||
2. Generator creates `frontend/public/json/myapp.json`
|
|
||||||
3. Copy the output to your contribution
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## File Structure
|
## Metadata Structure (Reference)
|
||||||
|
|
||||||
|
The following describes the structure of script metadata used by the website. Use it as reference when filling out the form or describing what you need.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@@ -148,18 +147,14 @@ Each installation method specifies resource requirements:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Reference Examples
|
## See Examples on the Website
|
||||||
|
|
||||||
See actual examples in the repo:
|
View script pages on the [ProxmoxVE website](https://community-scripts.github.io/ProxmoxVE/) to see how metadata is displayed for existing scripts.
|
||||||
|
|
||||||
- [frontend/public/json/trip.json](https://github.com/community-scripts/ProxmoxVE/blob/main/frontend/public/json/trip.json)
|
|
||||||
- [frontend/public/json/thingsboard.json](https://github.com/community-scripts/ProxmoxVE/blob/main/frontend/public/json/thingsboard.json)
|
|
||||||
- [frontend/public/json/unifi.json](https://github.com/community-scripts/ProxmoxVE/blob/main/frontend/public/json/unifi.json)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Need Help?
|
## Need Help?
|
||||||
|
|
||||||
- **[JSON Generator](https://community-scripts.github.io/ProxmoxVE/json-editor)** - Interactive tool
|
- **Request metadata** — Use the Report issue button on the script’s page on the website (see [How to Request or Update Metadata](#how-to-request-or-update-metadata) above).
|
||||||
|
- **[JSON Generator](https://community-scripts.github.io/ProxmoxVE/json-editor)** - Reference only; structure validation
|
||||||
- **[README.md](../README.md)** - Full contribution workflow
|
- **[README.md](../README.md)** - Full contribution workflow
|
||||||
- **[Quick Start](../README.md)** - Step-by-step guide
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ To understand how to create a container script:
|
|||||||
|
|
||||||
## Common Tasks
|
## Common Tasks
|
||||||
|
|
||||||
- **Add new container application** → [CONTRIBUTION_GUIDE.md](../CONTRIBUTION_GUIDE.md)
|
- **Add new container application** → [contribution/README.md](../contribution/README.md)
|
||||||
- **Debug container creation** → [EXIT_CODES.md](../EXIT_CODES.md)
|
- **Debug container creation** → [EXIT_CODES.md](../EXIT_CODES.md)
|
||||||
- **Understand build.func** → [misc/build.func/](../misc/build.func/)
|
- **Understand build.func** → [misc/build.func/](../misc/build.func/)
|
||||||
- **Development mode debugging** → [DEV_MODE.md](../DEV_MODE.md)
|
- **Development mode debugging** → [DEV_MODE.md](../DEV_MODE.md)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: DragoQC
|
# Author: DragoQC | Co-Author: nickheyer
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://discopanel.app/ | Github: https://github.com/nickheyer/discopanel
|
# Source: https://discopanel.app/ | Github: https://github.com/nickheyer/discopanel
|
||||||
|
|
||||||
@@ -12,25 +12,9 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "prebuild" "latest" "/opt/discopanel" "discopanel-linux-amd64.tar.gz"
|
||||||
$STD apt install -y build-essential
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
setup_go
|
|
||||||
fetch_and_deploy_gh_release "discopanel" "nickheyer/discopanel" "tarball" "latest" "/opt/discopanel"
|
|
||||||
setup_docker
|
setup_docker
|
||||||
|
|
||||||
msg_info "Setting up DiscoPanel"
|
|
||||||
cd /opt/discopanel
|
|
||||||
$STD make gen
|
|
||||||
cd /opt/discopanel/web/discopanel
|
|
||||||
$STD npm install
|
|
||||||
$STD npm run build
|
|
||||||
cd /opt/discopanel
|
|
||||||
$STD go build -o discopanel cmd/discopanel/main.go
|
|
||||||
msg_ok "Setup DiscoPanel"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/discopanel.service
|
cat <<EOF >/etc/systemd/system/discopanel.service
|
||||||
[Unit]
|
[Unit]
|
||||||
@@ -39,7 +23,7 @@ After=network.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/discopanel
|
WorkingDirectory=/opt/discopanel
|
||||||
ExecStart=/opt/discopanel/discopanel
|
ExecStart=/opt/discopanel/discopanel-linux-amd64
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
|||||||
@@ -211,7 +211,17 @@ if python3 /opt/frigate/docker/main/build_ov_model.py &>/dev/null; then
|
|||||||
mkdir -p /openvino-model
|
mkdir -p /openvino-model
|
||||||
cp /models/ssdlite_mobilenet_v2.xml /openvino-model/
|
cp /models/ssdlite_mobilenet_v2.xml /openvino-model/
|
||||||
cp /models/ssdlite_mobilenet_v2.bin /openvino-model/
|
cp /models/ssdlite_mobilenet_v2.bin /openvino-model/
|
||||||
$STD ln -sf $(python3 -c "import omz_tools; import os; print(os.path.join(omz_tools.__path__[0], 'data/dataset_classes/coco_91cl_bkgr.txt'))") /openvino-model/coco_91cl_bkgr.txt
|
OV_LABELS=$(python3 -c "import omz_tools; import os; print(os.path.join(omz_tools.__path__[0], 'data/dataset_classes/coco_91cl_bkgr.txt'))" 2>/dev/null)
|
||||||
|
if [[ -n "$OV_LABELS" && -f "$OV_LABELS" ]]; then
|
||||||
|
ln -sf "$OV_LABELS" /openvino-model/coco_91cl_bkgr.txt
|
||||||
|
else
|
||||||
|
OV_LABELS=$(find /usr/local/lib -name "coco_91cl_bkgr.txt" 2>/dev/null | head -1)
|
||||||
|
if [[ -n "$OV_LABELS" ]]; then
|
||||||
|
ln -sf "$OV_LABELS" /openvino-model/coco_91cl_bkgr.txt
|
||||||
|
else
|
||||||
|
wget -q "https://raw.githubusercontent.com/openvinotoolkit/open_model_zoo/master/data/dataset_classes/coco_91cl_bkgr.txt" -O /openvino-model/coco_91cl_bkgr.txt
|
||||||
|
fi
|
||||||
|
fi
|
||||||
sed -i 's/truck/car/g' /openvino-model/coco_91cl_bkgr.txt
|
sed -i 's/truck/car/g' /openvino-model/coco_91cl_bkgr.txt
|
||||||
msg_ok "Built OpenVino Model"
|
msg_ok "Built OpenVino Model"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ msg_ok "Configured Sparky Fitness"
|
|||||||
|
|
||||||
msg_info "Building Backend"
|
msg_info "Building Backend"
|
||||||
cd /opt/sparkyfitness/SparkyFitnessServer
|
cd /opt/sparkyfitness/SparkyFitnessServer
|
||||||
$STD npm install
|
$STD npm install --legacy-peer-deps
|
||||||
msg_ok "Built Backend"
|
msg_ok "Built Backend"
|
||||||
|
|
||||||
msg_info "Building Frontend (Patience)"
|
msg_info "Building Frontend (Patience)"
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ cp .env.example .env
|
|||||||
sed -i "s|^ORIGIN=.*|ORIGIN=http://${LOCAL_IP}:3280|" /opt/wishlist/.env
|
sed -i "s|^ORIGIN=.*|ORIGIN=http://${LOCAL_IP}:3280|" /opt/wishlist/.env
|
||||||
echo "" >>/opt/wishlist/.env
|
echo "" >>/opt/wishlist/.env
|
||||||
echo "NODE_ENV=production" >>/opt/wishlist/.env
|
echo "NODE_ENV=production" >>/opt/wishlist/.env
|
||||||
$STD pnpm install
|
$STD pnpm install --frozen-lockfile
|
||||||
$STD pnpm svelte-kit sync
|
$STD pnpm svelte-kit sync
|
||||||
$STD pnpm prisma generate
|
$STD pnpm prisma generate
|
||||||
sed -i 's|/usr/src/app/|/opt/wishlist/|g' $(grep -rl '/usr/src/app/' /opt/wishlist)
|
sed -i 's|/usr/src/app/|/opt/wishlist/|g' $(grep -rl '/usr/src/app/' /opt/wishlist)
|
||||||
|
|||||||
@@ -105,11 +105,13 @@ curl_with_retry() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
debug_log "curl attempt $attempt failed, waiting ${backoff}s before retry..."
|
debug_log "curl attempt $attempt failed (timeout=${timeout}s), waiting ${backoff}s before retry..."
|
||||||
sleep "$backoff"
|
sleep "$backoff"
|
||||||
# Exponential backoff: 1, 2, 4, 8... capped at 30s
|
# Exponential backoff: 1, 2, 4, 8... capped at 30s
|
||||||
backoff=$((backoff * 2))
|
backoff=$((backoff * 2))
|
||||||
((backoff > 30)) && backoff=30
|
((backoff > 30)) && backoff=30
|
||||||
|
# Double --max-time on each retry so slow connections can finish
|
||||||
|
timeout=$((timeout * 2))
|
||||||
((attempt++))
|
((attempt++))
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -172,8 +174,10 @@ curl_api_with_retry() {
|
|||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
debug_log "curl API attempt $attempt failed (HTTP $http_code), waiting ${attempt}s..."
|
debug_log "curl API attempt $attempt failed (HTTP $http_code, timeout=${timeout}s), waiting ${attempt}s..."
|
||||||
sleep "$attempt"
|
sleep "$attempt"
|
||||||
|
# Double --max-time on each retry so slow connections can finish
|
||||||
|
timeout=$((timeout * 2))
|
||||||
((attempt++))
|
((attempt++))
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -2574,6 +2578,30 @@ function ensure_usr_local_bin_persist() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# curl_download - Downloads a file with automatic retry and exponential backoff.
|
||||||
|
#
|
||||||
|
# Usage: curl_download <output_file> <url>
|
||||||
|
#
|
||||||
|
# Retries up to 5 times with increasing --max-time (60/120/240/480/960s).
|
||||||
|
# Returns 0 on success, 1 if all attempts fail.
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
function curl_download() {
|
||||||
|
local output="$1"
|
||||||
|
local url="$2"
|
||||||
|
local timeouts=(60 120 240 480 960)
|
||||||
|
|
||||||
|
for i in "${!timeouts[@]}"; do
|
||||||
|
if curl --connect-timeout 15 --max-time "${timeouts[$i]}" -fsSL -o "$output" "$url"; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if ((i < ${#timeouts[@]} - 1)); then
|
||||||
|
msg_warn "Download timed out after ${timeouts[$i]}s, retrying... (attempt $((i + 2))/${#timeouts[@]})"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# Downloads and deploys latest Codeberg release (source, binary, tarball, asset).
|
# Downloads and deploys latest Codeberg release (source, binary, tarball, asset).
|
||||||
#
|
#
|
||||||
@@ -2631,8 +2659,7 @@ function fetch_and_deploy_codeberg_release() {
|
|||||||
local app_lc=$(echo "${app,,}" | tr -d ' ')
|
local app_lc=$(echo "${app,,}" | tr -d ' ')
|
||||||
local version_file="$HOME/.${app_lc}"
|
local version_file="$HOME/.${app_lc}"
|
||||||
|
|
||||||
local api_timeout="--connect-timeout 10 --max-time 60"
|
local api_timeouts=(60 120 240)
|
||||||
local download_timeout="--connect-timeout 15 --max-time 900"
|
|
||||||
|
|
||||||
local current_version=""
|
local current_version=""
|
||||||
[[ -f "$version_file" ]] && current_version=$(<"$version_file")
|
[[ -f "$version_file" ]] && current_version=$(<"$version_file")
|
||||||
@@ -2672,7 +2699,7 @@ function fetch_and_deploy_codeberg_release() {
|
|||||||
|
|
||||||
# Codeberg archive URL format: https://codeberg.org/{owner}/{repo}/archive/{tag}.tar.gz
|
# Codeberg archive URL format: https://codeberg.org/{owner}/{repo}/archive/{tag}.tar.gz
|
||||||
local archive_url="https://codeberg.org/$repo/archive/${tag_name}.tar.gz"
|
local archive_url="https://codeberg.org/$repo/archive/${tag_name}.tar.gz"
|
||||||
if curl $download_timeout -fsSL -o "$tmpdir/$filename" "$archive_url"; then
|
if curl_download "$tmpdir/$filename" "$archive_url"; then
|
||||||
download_success=true
|
download_success=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2719,16 +2746,18 @@ function fetch_and_deploy_codeberg_release() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local max_retries=3 retry_delay=2 attempt=1 success=false resp http_code
|
local attempt=0 success=false resp http_code
|
||||||
|
|
||||||
while ((attempt <= max_retries)); do
|
while ((attempt < ${#api_timeouts[@]})); do
|
||||||
resp=$(curl $api_timeout -fsSL -w "%{http_code}" -o /tmp/codeberg_rel.json "$api_url") && success=true && break
|
resp=$(curl --connect-timeout 10 --max-time "${api_timeouts[$attempt]}" -fsSL -w "%{http_code}" -o /tmp/codeberg_rel.json "$api_url") && success=true && break
|
||||||
sleep "$retry_delay"
|
|
||||||
((attempt++))
|
((attempt++))
|
||||||
|
if ((attempt < ${#api_timeouts[@]})); then
|
||||||
|
msg_warn "API request timed out after ${api_timeouts[$((attempt-1))]}s, retrying... (attempt $((attempt + 1))/${#api_timeouts[@]})"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if ! $success; then
|
if ! $success; then
|
||||||
msg_error "Failed to fetch release metadata from $api_url after $max_retries attempts"
|
msg_error "Failed to fetch release metadata from $api_url after ${#api_timeouts[@]} attempts"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2769,7 +2798,7 @@ function fetch_and_deploy_codeberg_release() {
|
|||||||
|
|
||||||
# Codeberg archive URL format
|
# Codeberg archive URL format
|
||||||
local archive_url="https://codeberg.org/$repo/archive/${tag_name}.tar.gz"
|
local archive_url="https://codeberg.org/$repo/archive/${tag_name}.tar.gz"
|
||||||
if curl $download_timeout -fsSL -o "$tmpdir/$filename" "$archive_url"; then
|
if curl_download "$tmpdir/$filename" "$archive_url"; then
|
||||||
download_success=true
|
download_success=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2843,7 +2872,7 @@ function fetch_and_deploy_codeberg_release() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
filename="${url_match##*/}"
|
filename="${url_match##*/}"
|
||||||
curl $download_timeout -fsSL -o "$tmpdir/$filename" "$url_match" || {
|
curl_download "$tmpdir/$filename" "$url_match" || {
|
||||||
msg_error "Download failed: $url_match"
|
msg_error "Download failed: $url_match"
|
||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
return 1
|
return 1
|
||||||
@@ -2886,7 +2915,7 @@ function fetch_and_deploy_codeberg_release() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
filename="${asset_url##*/}"
|
filename="${asset_url##*/}"
|
||||||
curl $download_timeout -fsSL -o "$tmpdir/$filename" "$asset_url" || {
|
curl_download "$tmpdir/$filename" "$asset_url" || {
|
||||||
msg_error "Download failed: $asset_url"
|
msg_error "Download failed: $asset_url"
|
||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
return 1
|
return 1
|
||||||
@@ -2987,7 +3016,7 @@ function fetch_and_deploy_codeberg_release() {
|
|||||||
local target_file="$app"
|
local target_file="$app"
|
||||||
[[ "$use_filename" == "true" ]] && target_file="$filename"
|
[[ "$use_filename" == "true" ]] && target_file="$filename"
|
||||||
|
|
||||||
curl $download_timeout -fsSL -o "$target/$target_file" "$asset_url" || {
|
curl_download "$target/$target_file" "$asset_url" || {
|
||||||
msg_error "Download failed: $asset_url"
|
msg_error "Download failed: $asset_url"
|
||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
return 1
|
return 1
|
||||||
@@ -3182,8 +3211,7 @@ function fetch_and_deploy_gh_release() {
|
|||||||
local app_lc=$(echo "${app,,}" | tr -d ' ')
|
local app_lc=$(echo "${app,,}" | tr -d ' ')
|
||||||
local version_file="$HOME/.${app_lc}"
|
local version_file="$HOME/.${app_lc}"
|
||||||
|
|
||||||
local api_timeout="--connect-timeout 10 --max-time 60"
|
local api_timeouts=(60 120 240)
|
||||||
local download_timeout="--connect-timeout 15 --max-time 900"
|
|
||||||
|
|
||||||
local current_version=""
|
local current_version=""
|
||||||
[[ -f "$version_file" ]] && current_version=$(<"$version_file")
|
[[ -f "$version_file" ]] && current_version=$(<"$version_file")
|
||||||
@@ -3203,10 +3231,10 @@ function fetch_and_deploy_gh_release() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local max_retries=3 retry_delay=2 attempt=1 success=false http_code
|
local max_retries=${#api_timeouts[@]} retry_delay=2 attempt=1 success=false http_code
|
||||||
|
|
||||||
while ((attempt <= max_retries)); do
|
while ((attempt <= max_retries)); do
|
||||||
http_code=$(curl $api_timeout -sSL -w "%{http_code}" -o /tmp/gh_rel.json "${header[@]}" "$api_url" 2>/dev/null) || true
|
http_code=$(curl --connect-timeout 10 --max-time "${api_timeouts[$((attempt-1))]:-240}" -sSL -w "%{http_code}" -o /tmp/gh_rel.json "${header[@]}" "$api_url" 2>/dev/null) || true
|
||||||
if [[ "$http_code" == "200" ]]; then
|
if [[ "$http_code" == "200" ]]; then
|
||||||
success=true
|
success=true
|
||||||
break
|
break
|
||||||
@@ -3280,7 +3308,7 @@ function fetch_and_deploy_gh_release() {
|
|||||||
local direct_tarball_url="https://github.com/$repo/archive/refs/tags/$tag_name.tar.gz"
|
local direct_tarball_url="https://github.com/$repo/archive/refs/tags/$tag_name.tar.gz"
|
||||||
filename="${app_lc}-${version_safe}.tar.gz"
|
filename="${app_lc}-${version_safe}.tar.gz"
|
||||||
|
|
||||||
curl $download_timeout -fsSL -o "$tmpdir/$filename" "$direct_tarball_url" || {
|
curl_download "$tmpdir/$filename" "$direct_tarball_url" || {
|
||||||
msg_error "Download failed: $direct_tarball_url"
|
msg_error "Download failed: $direct_tarball_url"
|
||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
return 1
|
return 1
|
||||||
@@ -3383,7 +3411,7 @@ function fetch_and_deploy_gh_release() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
filename="${url_match##*/}"
|
filename="${url_match##*/}"
|
||||||
curl $download_timeout -fsSL -o "$tmpdir/$filename" "$url_match" || {
|
curl_download "$tmpdir/$filename" "$url_match" || {
|
||||||
msg_error "Download failed: $url_match"
|
msg_error "Download failed: $url_match"
|
||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
return 1
|
return 1
|
||||||
@@ -3450,7 +3478,7 @@ function fetch_and_deploy_gh_release() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
filename="${asset_url##*/}"
|
filename="${asset_url##*/}"
|
||||||
curl $download_timeout -fsSL -o "$tmpdir/$filename" "$asset_url" || {
|
curl_download "$tmpdir/$filename" "$asset_url" || {
|
||||||
msg_error "Download failed: $asset_url"
|
msg_error "Download failed: $asset_url"
|
||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
return 1
|
return 1
|
||||||
@@ -3571,7 +3599,7 @@ function fetch_and_deploy_gh_release() {
|
|||||||
local target_file="$app"
|
local target_file="$app"
|
||||||
[[ "$use_filename" == "true" ]] && target_file="$filename"
|
[[ "$use_filename" == "true" ]] && target_file="$filename"
|
||||||
|
|
||||||
curl $download_timeout -fsSL -o "$target/$target_file" "$asset_url" || {
|
curl_download "$target/$target_file" "$asset_url" || {
|
||||||
msg_error "Download failed: $asset_url"
|
msg_error "Download failed: $asset_url"
|
||||||
rm -rf "$tmpdir"
|
rm -rf "$tmpdir"
|
||||||
return 1
|
return 1
|
||||||
@@ -4640,7 +4668,7 @@ Pin: release o=repo.radeon.com
|
|||||||
Pin-Priority: 600
|
Pin-Priority: 600
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$STD apt update
|
$STD apt update || msg_warn "apt update failed (AMD repo may be temporarily unavailable) — continuing anyway"
|
||||||
# Install only runtime packages — full 'rocm' meta-package includes 15GB+ dev tools
|
# Install only runtime packages — full 'rocm' meta-package includes 15GB+ dev tools
|
||||||
$STD apt install -y rocm-opencl-runtime rocm-hip-runtime rocm-smi-lib 2>/dev/null || {
|
$STD apt install -y rocm-opencl-runtime rocm-hip-runtime rocm-smi-lib 2>/dev/null || {
|
||||||
msg_warn "ROCm runtime install failed — trying minimal set"
|
msg_warn "ROCm runtime install failed — trying minimal set"
|
||||||
|
|||||||
@@ -134,6 +134,7 @@ manage_states() {
|
|||||||
read -rp "Shutdown source and start new container? [Y/n]: " answer
|
read -rp "Shutdown source and start new container? [Y/n]: " answer
|
||||||
answer=${answer:-Y}
|
answer=${answer:-Y}
|
||||||
if [[ $answer =~ ^[Yy] ]]; then
|
if [[ $answer =~ ^[Yy] ]]; then
|
||||||
|
if pct status "$CONTAINER_ID" | grep -q running; then
|
||||||
pct shutdown "$CONTAINER_ID"
|
pct shutdown "$CONTAINER_ID"
|
||||||
for i in {1..36}; do
|
for i in {1..36}; do
|
||||||
sleep 5
|
sleep 5
|
||||||
@@ -145,6 +146,9 @@ manage_states() {
|
|||||||
pkill -9 -f "lxc-start -F -n $CONTAINER_ID"
|
pkill -9 -f "lxc-start -F -n $CONTAINER_ID"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
msg_custom "ℹ️" "\e[36m" "Source container $CONTAINER_ID is already stopped"
|
||||||
|
fi
|
||||||
pct start "$NEW_CONTAINER_ID"
|
pct start "$NEW_CONTAINER_ID"
|
||||||
msg_ok "New container started"
|
msg_ok "New container started"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -426,16 +426,23 @@ for container in $CHOICE; do
|
|||||||
elif [ $exit_code -eq 75 ]; then
|
elif [ $exit_code -eq 75 ]; then
|
||||||
echo -e "${YW}[WARN]${CL} Container $container skipped (requires interactive mode)"
|
echo -e "${YW}[WARN]${CL} Container $container skipped (requires interactive mode)"
|
||||||
elif [ "$BACKUP_CHOICE" == "yes" ]; then
|
elif [ "$BACKUP_CHOICE" == "yes" ]; then
|
||||||
msg_info "Restoring LXC from backup"
|
msg_error "Update failed for container $container (exit code: $exit_code) — attempting restore"
|
||||||
|
msg_info "Restoring LXC $container from backup ($STORAGE_CHOICE)"
|
||||||
pct stop $container
|
pct stop $container
|
||||||
LXC_STORAGE=$(pct config $container | awk -F '[:,]' '/rootfs/ {print $2}')
|
LXC_STORAGE=$(pct config $container | awk -F '[:,]' '/rootfs/ {print $2}')
|
||||||
pct restore $container /var/lib/vz/dump/vzdump-lxc-${container}-*.tar.zst --storage $LXC_STORAGE --force >/dev/null 2>&1
|
BACKUP_ENTRY=$(pvesm list "$STORAGE_CHOICE" 2>/dev/null | awk -v ctid="$container" '$1 ~ "vzdump-lxc-"ctid"-" || $1 ~ "/ct/"ctid"/" {print $1}' | sort -r | head -n1)
|
||||||
pct start $container
|
if [ -z "$BACKUP_ENTRY" ]; then
|
||||||
|
msg_error "No backup found in storage $STORAGE_CHOICE for container $container"
|
||||||
|
exit 235
|
||||||
|
fi
|
||||||
|
msg_info "Restoring from: $BACKUP_ENTRY"
|
||||||
|
pct restore $container "$BACKUP_ENTRY" --storage $LXC_STORAGE --force >/dev/null 2>&1
|
||||||
restorestatus=$?
|
restorestatus=$?
|
||||||
if [ $restorestatus -eq 0 ]; then
|
if [ $restorestatus -eq 0 ]; then
|
||||||
msg_ok "Restored LXC from backup"
|
pct start $container
|
||||||
|
msg_ok "Container $container successfully restored from backup"
|
||||||
else
|
else
|
||||||
msg_error "Restored LXC from backup failed"
|
msg_error "Restore failed for container $container"
|
||||||
exit 235
|
exit 235
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user