mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-04-21 01:15:05 +02:00
Compare commits
46 Commits
add-script
...
github-act
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
66e1c107ab | ||
|
|
7cb40af4e6 | ||
|
|
ce2b51a1a6 | ||
|
|
0986f485ee | ||
|
|
cd1e584696 | ||
|
|
cb156b6f85 | ||
|
|
06a676e6b0 | ||
|
|
3ac2ceda3d | ||
|
|
6082537f57 | ||
|
|
bd3fbb3999 | ||
|
|
7e5e5be161 | ||
|
|
55c7549c3e | ||
|
|
4089fed9c9 | ||
|
|
325668d5c9 | ||
|
|
63296fc3e7 | ||
|
|
e98fae3c54 | ||
|
|
bf97029f57 | ||
|
|
5859c06715 | ||
|
|
9b4fc56de6 | ||
|
|
3a5244e285 | ||
|
|
1025715a74 | ||
|
|
ec3b79bb61 | ||
|
|
37dfb58d29 | ||
|
|
d95073f505 | ||
|
|
b34e773cbb | ||
|
|
99782d0422 | ||
|
|
00e4a0a6b8 | ||
|
|
28b3b45fdb | ||
|
|
eba01133f4 | ||
|
|
1f04bb5012 | ||
|
|
d480a5c9b7 | ||
|
|
458402ea41 | ||
|
|
18cd4d401c | ||
|
|
91f5c3dfb0 | ||
|
|
9c604f624c | ||
|
|
d5421486d8 | ||
|
|
19dabf4970 | ||
|
|
8aee0efa4d | ||
|
|
11fdfa549a | ||
|
|
0fc913478e | ||
|
|
ada387f1a2 | ||
|
|
4fd80e3e60 | ||
|
|
d19cc5b69c | ||
|
|
02c174c4a2 | ||
|
|
fb9e8d90a7 | ||
|
|
501ea61d2e |
146
.github/changelogs/2026/04.md
generated
vendored
146
.github/changelogs/2026/04.md
generated
vendored
@@ -1,3 +1,149 @@
|
||||
## 2026-04-18
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Dagu ([#13830](https://github.com/community-scripts/ProxmoxVE/pull/13830))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- BabyBuddy: set DJANGO_SETTINGS_MODULE before migrate in update [@MickLesk](https://github.com/MickLesk) ([#13836](https://github.com/community-scripts/ProxmoxVE/pull/13836))
|
||||
- litellm: add prisma generate and use venv binary directly [@MickLesk](https://github.com/MickLesk) ([#13835](https://github.com/community-scripts/ProxmoxVE/pull/13835))
|
||||
- yamtrack: add missing nginx.conf sed edits to update script [@MickLesk](https://github.com/MickLesk) ([#13834](https://github.com/community-scripts/ProxmoxVE/pull/13834))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- SparkyFitness Garmin Microservice: fix update function [@tomfrenzel](https://github.com/tomfrenzel) ([#13824](https://github.com/community-scripts/ProxmoxVE/pull/13824))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Clean-Orphan-LVM: check all cluster nodes for VM/CT configs [@MickLesk](https://github.com/MickLesk) ([#13837](https://github.com/community-scripts/ProxmoxVE/pull/13837))
|
||||
|
||||
## 2026-04-17
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- step-ca ([#13775](https://github.com/community-scripts/ProxmoxVE/pull/13775))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- core: pin IGC version to compute-runtime compatible tag (Intel GPU) [@MickLesk](https://github.com/MickLesk) ([#13814](https://github.com/community-scripts/ProxmoxVE/pull/13814))
|
||||
- Fix for bambuddy community script update [@abbasegbeyemi](https://github.com/abbasegbeyemi) ([#13816](https://github.com/community-scripts/ProxmoxVE/pull/13816))
|
||||
- Umami: Fix update procedure [@tremor021](https://github.com/tremor021) ([#13807](https://github.com/community-scripts/ProxmoxVE/pull/13807))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- core: sanitize mount_fs input — strip spaces and trailing commas [@MickLesk](https://github.com/MickLesk) ([#13806](https://github.com/community-scripts/ProxmoxVE/pull/13806))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- core: fix some pct create issues (telemetry) + cleanup [@MickLesk](https://github.com/MickLesk) ([#13810](https://github.com/community-scripts/ProxmoxVE/pull/13810))
|
||||
|
||||
## 2026-04-16
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Add pnpm as a dependency to ghost-cli install [@YourFavoriteKyle](https://github.com/YourFavoriteKyle) ([#13789](https://github.com/community-scripts/ProxmoxVE/pull/13789))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: wire ENABLE_MKNOD and ALLOW_MOUNT_FS into LXC features [@MickLesk](https://github.com/MickLesk) ([#13796](https://github.com/community-scripts/ProxmoxVE/pull/13796))
|
||||
|
||||
## 2026-04-15
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- iGotify ([#13773](https://github.com/community-scripts/ProxmoxVE/pull/13773))
|
||||
- GitHub-Runner ([#13709](https://github.com/community-scripts/ProxmoxVE/pull/13709))
|
||||
- Revert "Remove low-install-count CT scripts and installers (#13570)" [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13752](https://github.com/community-scripts/ProxmoxVE/pull/13752))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- [alpine-nextcloud] Update Nginx MIME types to support .mjs files [@GuiltyFox](https://github.com/GuiltyFox) ([#13771](https://github.com/community-scripts/ProxmoxVE/pull/13771))
|
||||
- Domain Monitor: Fix file ownership after update [@tremor021](https://github.com/tremor021) ([#13759](https://github.com/community-scripts/ProxmoxVE/pull/13759))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Reitti: refactor scripts for v4 - remove RabbitMQ and Photon [@MickLesk](https://github.com/MickLesk) ([#13728](https://github.com/community-scripts/ProxmoxVE/pull/13728))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Semaphore: add BoltDB to SQLite migration [@tremor021](https://github.com/tremor021) ([#13779](https://github.com/community-scripts/ProxmoxVE/pull/13779))
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- cleanup: remove docs/, update README & CONTRIBUTING, fix repo config [@MickLesk](https://github.com/MickLesk) ([#13770](https://github.com/community-scripts/ProxmoxVE/pull/13770))
|
||||
|
||||
## 2026-04-14
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Immich: Pin photo-processing library revisions [@vhsdream](https://github.com/vhsdream) ([#13748](https://github.com/community-scripts/ProxmoxVE/pull/13748))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- BentoPDF: Nginx fixes [@tremor021](https://github.com/tremor021) ([#13741](https://github.com/community-scripts/ProxmoxVE/pull/13741))
|
||||
- Zerobyte: add git to dependencies to fix bun install failure [@Copilot](https://github.com/Copilot) ([#13721](https://github.com/community-scripts/ProxmoxVE/pull/13721))
|
||||
- alpine-nextcloud-install: do not use deprecated nginx config [@AlexanderStein](https://github.com/AlexanderStein) ([#13726](https://github.com/community-scripts/ProxmoxVE/pull/13726))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Mealie: support v3.15+ Nuxt 4 migration [@MickLesk](https://github.com/MickLesk) ([#13731](https://github.com/community-scripts/ProxmoxVE/pull/13731))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Lyrion: correct service name and version file in update script [@MickLesk](https://github.com/MickLesk) ([#13734](https://github.com/community-scripts/ProxmoxVE/pull/13734))
|
||||
- Changedetection: move env vars from service file to .env [@tremor021](https://github.com/tremor021) ([#13732](https://github.com/community-scripts/ProxmoxVE/pull/13732))
|
||||
|
||||
## 2026-04-13
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Slskd: Remove stale Soularr lock file on startup and redirect logs to stderr [@MickLesk](https://github.com/MickLesk) ([#13669](https://github.com/community-scripts/ProxmoxVE/pull/13669))
|
||||
- Bambuddy: preserve database and archive on update [@Copilot](https://github.com/Copilot) ([#13706](https://github.com/community-scripts/ProxmoxVE/pull/13706))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Immich: Pin version to 2.7.5 [@vhsdream](https://github.com/vhsdream) ([#13715](https://github.com/community-scripts/ProxmoxVE/pull/13715))
|
||||
- Bytestash: auto backup/restore data on update [@MickLesk](https://github.com/MickLesk) ([#13707](https://github.com/community-scripts/ProxmoxVE/pull/13707))
|
||||
- OpenCloud: pin version to 6.0.0 [@vhsdream](https://github.com/vhsdream) ([#13691](https://github.com/community-scripts/ProxmoxVE/pull/13691))
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- Mealie: pin version to v3.14.0 in install and update scripts [@Copilot](https://github.com/Copilot) ([#13724](https://github.com/community-scripts/ProxmoxVE/pull/13724))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- core: remove unused TEMP_DIR mktemp leak in build_container / clean sonarqube [@MickLesk](https://github.com/MickLesk) ([#13708](https://github.com/community-scripts/ProxmoxVE/pull/13708))
|
||||
|
||||
## 2026-04-12
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Alpine-Wakapi: Remove container checks in update_script function [@MickLesk](https://github.com/MickLesk) ([#13694](https://github.com/community-scripts/ProxmoxVE/pull/13694))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- IronClaw: Install keychain dependencies and launch in a DBus session [@MickLesk](https://github.com/MickLesk) ([#13692](https://github.com/community-scripts/ProxmoxVE/pull/13692))
|
||||
- MeTube: Allow pnpm build scripts to fix ERR_PNPM_IGNORED_BUILDS [@MickLesk](https://github.com/MickLesk) ([#13668](https://github.com/community-scripts/ProxmoxVE/pull/13668))
|
||||
|
||||
## 2026-04-11
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
12
.github/workflows/pocketbase-bot.yml
generated
vendored
12
.github/workflows/pocketbase-bot.yml
generated
vendored
@@ -337,8 +337,8 @@ jobs:
|
||||
|
||||
if (infoMatch) {
|
||||
// ── INFO SUBCOMMAND ──────────────────────────────────────────────
|
||||
const notesArr = readJsonBlob(record.notes_json);
|
||||
const methodsArr = readJsonBlob(record.install_methods_json);
|
||||
const notesArr = readJsonBlob(record.notes);
|
||||
const methodsArr = readJsonBlob(record.install_methods);
|
||||
|
||||
const out = [];
|
||||
out.push('ℹ️ **PocketBase Bot**: Info for **`' + slug + '`**\n');
|
||||
@@ -382,13 +382,13 @@ jobs:
|
||||
// ── NOTE SUBCOMMAND ──────────────────────────────────────────────
|
||||
const noteAction = noteMatch[1].toLowerCase();
|
||||
const noteArgsStr = rest.substring(noteMatch[0].length).trim();
|
||||
let notesArr = readJsonBlob(record.notes_json);
|
||||
let notesArr = readJsonBlob(record.notes);
|
||||
|
||||
async function patchNotes(arr) {
|
||||
const res = await request(recordsUrl + '/' + record.id, {
|
||||
method: 'PATCH',
|
||||
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ notes_json: JSON.stringify(arr) })
|
||||
body: JSON.stringify({ notes: arr })
|
||||
});
|
||||
if (!res.ok) {
|
||||
await addReaction('-1');
|
||||
@@ -504,7 +504,7 @@ jobs:
|
||||
// ── METHOD SUBCOMMAND ────────────────────────────────────────────
|
||||
const methodArgs = rest.replace(/^method\s*/i, '').trim();
|
||||
const methodListMode = !methodArgs || methodArgs.toLowerCase() === 'list';
|
||||
let methodsArr = readJsonBlob(record.install_methods_json);
|
||||
let methodsArr = readJsonBlob(record.install_methods);
|
||||
|
||||
// Method field classification
|
||||
const RESOURCE_KEYS = { cpu: 'number', ram: 'number', hdd: 'number', os: 'string', version: 'string' };
|
||||
@@ -526,7 +526,7 @@ jobs:
|
||||
const res = await request(recordsUrl + '/' + record.id, {
|
||||
method: 'PATCH',
|
||||
headers: { 'Authorization': token, 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ install_methods_json: arr })
|
||||
body: JSON.stringify({ install_methods: arr })
|
||||
});
|
||||
if (!res.ok) {
|
||||
await addReaction('-1');
|
||||
|
||||
242
CHANGELOG.md
242
CHANGELOG.md
@@ -38,6 +38,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -51,7 +54,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
|
||||
<details>
|
||||
<summary><h4>April (11 entries)</h4></summary>
|
||||
<summary><h4>April (18 entries)</h4></summary>
|
||||
|
||||
[View April 2026 Changelog](.github/changelogs/2026/04.md)
|
||||
|
||||
@@ -442,6 +445,68 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
</details>
|
||||
|
||||
## 2026-04-20
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- WhoDB ([#13880](https://github.com/community-scripts/ProxmoxVE/pull/13880))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- pangolin: create migration tables before data transfer to prevent role loss [@MickLesk](https://github.com/MickLesk) ([#13874](https://github.com/community-scripts/ProxmoxVE/pull/13874))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Pangolin: pre-apply schema migrations to prevent data loss [@MickLesk](https://github.com/MickLesk) ([#13861](https://github.com/community-scripts/ProxmoxVE/pull/13861))
|
||||
- ActualBudget: change migration messages to warnings [@MickLesk](https://github.com/MickLesk) ([#13860](https://github.com/community-scripts/ProxmoxVE/pull/13860))
|
||||
- slskd: migrate config keys for 0.25.0 breaking change [@MickLesk](https://github.com/MickLesk) ([#13862](https://github.com/community-scripts/ProxmoxVE/pull/13862))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Wanderer: add pocketbase CLI wrapper with env [@MickLesk](https://github.com/MickLesk) ([#13863](https://github.com/community-scripts/ProxmoxVE/pull/13863))
|
||||
- feat(homelable): add password reset utility script [@davidsoncabista](https://github.com/davidsoncabista) ([#13798](https://github.com/community-scripts/ProxmoxVE/pull/13798))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Several Scripts: Bump NodeJS to align Node.js versions with upstream for 5 scripts [@MickLesk](https://github.com/MickLesk) ([#13875](https://github.com/community-scripts/ProxmoxVE/pull/13875))
|
||||
- Refactor: PMG Post Install [@MickLesk](https://github.com/MickLesk) ([#13693](https://github.com/community-scripts/ProxmoxVE/pull/13693))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- core: detect Perl breakage after LXC stack upgrade and improve storage validation [@MickLesk](https://github.com/MickLesk) ([#13879](https://github.com/community-scripts/ProxmoxVE/pull/13879))
|
||||
|
||||
## 2026-04-19
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- nametag ([#13849](https://github.com/community-scripts/ProxmoxVE/pull/13849))
|
||||
|
||||
## 2026-04-18
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Dagu ([#13830](https://github.com/community-scripts/ProxmoxVE/pull/13830))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- BabyBuddy: set DJANGO_SETTINGS_MODULE before migrate in update [@MickLesk](https://github.com/MickLesk) ([#13836](https://github.com/community-scripts/ProxmoxVE/pull/13836))
|
||||
- litellm: add prisma generate and use venv binary directly [@MickLesk](https://github.com/MickLesk) ([#13835](https://github.com/community-scripts/ProxmoxVE/pull/13835))
|
||||
- yamtrack: add missing nginx.conf sed edits to update script [@MickLesk](https://github.com/MickLesk) ([#13834](https://github.com/community-scripts/ProxmoxVE/pull/13834))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- SparkyFitness Garmin Microservice: fix update function [@tomfrenzel](https://github.com/tomfrenzel) ([#13824](https://github.com/community-scripts/ProxmoxVE/pull/13824))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Clean-Orphan-LVM: check all cluster nodes for VM/CT configs [@MickLesk](https://github.com/MickLesk) ([#13837](https://github.com/community-scripts/ProxmoxVE/pull/13837))
|
||||
|
||||
## 2026-04-17
|
||||
|
||||
### 🆕 New Scripts
|
||||
@@ -452,6 +517,8 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- core: pin IGC version to compute-runtime compatible tag (Intel GPU) [@MickLesk](https://github.com/MickLesk) ([#13814](https://github.com/community-scripts/ProxmoxVE/pull/13814))
|
||||
- Fix for bambuddy community script update [@abbasegbeyemi](https://github.com/abbasegbeyemi) ([#13816](https://github.com/community-scripts/ProxmoxVE/pull/13816))
|
||||
- Umami: Fix update procedure [@tremor021](https://github.com/tremor021) ([#13807](https://github.com/community-scripts/ProxmoxVE/pull/13807))
|
||||
|
||||
### 💾 Core
|
||||
@@ -992,175 +1059,4 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Harden code-server addon install script [@MickLesk](https://github.com/MickLesk) ([#13116](https://github.com/community-scripts/ProxmoxVE/pull/13116))
|
||||
|
||||
## 2026-03-19
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Owncast: increase default disk size from 2GB to 10GB [@Copilot](https://github.com/Copilot) ([#13079](https://github.com/community-scripts/ProxmoxVE/pull/13079))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix: remove extra backslash to match single quoted here-doc [@Zelnes](https://github.com/Zelnes) ([#13108](https://github.com/community-scripts/ProxmoxVE/pull/13108))
|
||||
- Reactive-Resume: Upgrade Node to 24 and enable Corepack [@MickLesk](https://github.com/MickLesk) ([#13093](https://github.com/community-scripts/ProxmoxVE/pull/13093))
|
||||
- Increase Tracearr RAM; derive APP_VERSION [@MickLesk](https://github.com/MickLesk) ([#13087](https://github.com/community-scripts/ProxmoxVE/pull/13087))
|
||||
- ProjectSend: Update application access URL [@tremor021](https://github.com/tremor021) ([#13078](https://github.com/community-scripts/ProxmoxVE/pull/13078))
|
||||
- Dispatcharr: use npm install --no-audit --progress=false [@MickLesk](https://github.com/MickLesk) ([#13074](https://github.com/community-scripts/ProxmoxVE/pull/13074))
|
||||
- core: reorder hwaccel setup and adjust GPU group usermod [@MickLesk](https://github.com/MickLesk) ([#13072](https://github.com/community-scripts/ProxmoxVE/pull/13072))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools.func: display pin reason in release-check messages [@MickLesk](https://github.com/MickLesk) ([#13095](https://github.com/community-scripts/ProxmoxVE/pull/13095))
|
||||
- NocoDB: Unpin Version to latest [@MickLesk](https://github.com/MickLesk) ([#13094](https://github.com/community-scripts/ProxmoxVE/pull/13094))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- tools.func: use dpkg-query for reliable JDK version detection [@MickLesk](https://github.com/MickLesk) ([#13101](https://github.com/community-scripts/ProxmoxVE/pull/13101))
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- Update link from helper-scripts.com to community-scripts.org [@adnanvaldes](https://github.com/adnanvaldes) ([#13098](https://github.com/community-scripts/ProxmoxVE/pull/13098))
|
||||
- github: add PocketBase bot workflow [@MickLesk](https://github.com/MickLesk) ([#13075](https://github.com/community-scripts/ProxmoxVE/pull/13075))
|
||||
|
||||
## 2026-03-18
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Alpine-Ntfy [@MickLesk](https://github.com/MickLesk) ([#13048](https://github.com/community-scripts/ProxmoxVE/pull/13048))
|
||||
- Split-Pro ([#12975](https://github.com/community-scripts/ProxmoxVE/pull/12975))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Tdarr: use curl_with_retry and correct exit code [@MickLesk](https://github.com/MickLesk) ([#13060](https://github.com/community-scripts/ProxmoxVE/pull/13060))
|
||||
- reitti: fix: v4 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#13039](https://github.com/community-scripts/ProxmoxVE/pull/13039))
|
||||
- Paperless-NGX: increase default RAM to 3GB [@MickLesk](https://github.com/MickLesk) ([#13018](https://github.com/community-scripts/ProxmoxVE/pull/13018))
|
||||
- Plex: restart service after update to apply new version [@MickLesk](https://github.com/MickLesk) ([#13017](https://github.com/community-scripts/ProxmoxVE/pull/13017))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools: centralize GPU group setup via setup_hwaccel [@MickLesk](https://github.com/MickLesk) ([#13044](https://github.com/community-scripts/ProxmoxVE/pull/13044))
|
||||
- Termix: add guacd build and systemd integration [@MickLesk](https://github.com/MickLesk) ([#12999](https://github.com/community-scripts/ProxmoxVE/pull/12999))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Podman: replace deprecated commands with Quadlets [@MickLesk](https://github.com/MickLesk) ([#13052](https://github.com/community-scripts/ProxmoxVE/pull/13052))
|
||||
- Refactor: Jellyfin repo, ffmpeg package and symlinks [@MickLesk](https://github.com/MickLesk) ([#13045](https://github.com/community-scripts/ProxmoxVE/pull/13045))
|
||||
- pve-scripts-local: Increase default disk size from 4GB to 10GB [@MickLesk](https://github.com/MickLesk) ([#13009](https://github.com/community-scripts/ProxmoxVE/pull/13009))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- tools.func Implement pg_cron setup for setup_postgresql [@MickLesk](https://github.com/MickLesk) ([#13053](https://github.com/community-scripts/ProxmoxVE/pull/13053))
|
||||
- tools.func: Implement check_for_gh_tag function [@MickLesk](https://github.com/MickLesk) ([#12998](https://github.com/community-scripts/ProxmoxVE/pull/12998))
|
||||
- tools.func: Implement fetch_and_deploy_gh_tag function [@MickLesk](https://github.com/MickLesk) ([#13000](https://github.com/community-scripts/ProxmoxVE/pull/13000))
|
||||
|
||||
## 2026-03-17
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Gluetun: add OpenVPN process user and cleanup stale config [@MickLesk](https://github.com/MickLesk) ([#13016](https://github.com/community-scripts/ProxmoxVE/pull/13016))
|
||||
- Frigate: check OpenVino model files exist before configuring detector and use curl_with_retry instead of default wget [@MickLesk](https://github.com/MickLesk) ([#13019](https://github.com/community-scripts/ProxmoxVE/pull/13019))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- tools.func: Update `create_self_signed_cert()` [@tremor021](https://github.com/tremor021) ([#13008](https://github.com/community-scripts/ProxmoxVE/pull/13008))
|
||||
|
||||
## 2026-03-16
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Gluetun ([#12976](https://github.com/community-scripts/ProxmoxVE/pull/12976))
|
||||
- Anytype-Server ([#12974](https://github.com/community-scripts/ProxmoxVE/pull/12974))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Immich: use gcc-13 for compilation & add uv python pre-install with retry logic [@MickLesk](https://github.com/MickLesk) ([#12935](https://github.com/community-scripts/ProxmoxVE/pull/12935))
|
||||
- Tautulli: add setuptools<81 constraint to update script [@MickLesk](https://github.com/MickLesk) ([#12959](https://github.com/community-scripts/ProxmoxVE/pull/12959))
|
||||
- Seerr: add missing build deps [@MickLesk](https://github.com/MickLesk) ([#12960](https://github.com/community-scripts/ProxmoxVE/pull/12960))
|
||||
- fix: yubal update [@CrazyWolf13](https://github.com/CrazyWolf13) ([#12961](https://github.com/community-scripts/ProxmoxVE/pull/12961))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- hwaccel: remove ROCm install from AMD APU setup [@MickLesk](https://github.com/MickLesk) ([#12958](https://github.com/community-scripts/ProxmoxVE/pull/12958))
|
||||
|
||||
## 2026-03-15
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Yamtrack ([#12936](https://github.com/community-scripts/ProxmoxVE/pull/12936))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- Wishlist: use --frozen-lockfile for pnpm install [@MickLesk](https://github.com/MickLesk) ([#12892](https://github.com/community-scripts/ProxmoxVE/pull/12892))
|
||||
- SparkyFitness: use --legacy-peer-deps for npm install [@MickLesk](https://github.com/MickLesk) ([#12888](https://github.com/community-scripts/ProxmoxVE/pull/12888))
|
||||
- Frigate: add fallback for OpenVino labelmap file [@MickLesk](https://github.com/MickLesk) ([#12889](https://github.com/community-scripts/ProxmoxVE/pull/12889))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: ITSM-NG [@MickLesk](https://github.com/MickLesk) ([#12918](https://github.com/community-scripts/ProxmoxVE/pull/12918))
|
||||
- core: unify RELEASE variable for check_for_gh_release and fetch_and_deploy [@MickLesk](https://github.com/MickLesk) ([#12917](https://github.com/community-scripts/ProxmoxVE/pull/12917))
|
||||
- Standardize NSAPP names across VM scripts [@MickLesk](https://github.com/MickLesk) ([#12924](https://github.com/community-scripts/ProxmoxVE/pull/12924))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- core: retry downloads with exponential backoff [@MickLesk](https://github.com/MickLesk) ([#12896](https://github.com/community-scripts/ProxmoxVE/pull/12896))
|
||||
|
||||
### ❔ Uncategorized
|
||||
|
||||
- [go2rtc] Add ffmpeg dependency to install script [@Copilot](https://github.com/Copilot) ([#12944](https://github.com/community-scripts/ProxmoxVE/pull/12944))
|
||||
|
||||
## 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))
|
||||
- Harden code-server addon install script [@MickLesk](https://github.com/MickLesk) ([#13116](https://github.com/community-scripts/ProxmoxVE/pull/13116))
|
||||
@@ -48,9 +48,9 @@ function update_script() {
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
else
|
||||
msg_info "Old Installation Found, you need to migrate your data and recreate to a new container"
|
||||
msg_info "Please follow the instructions on the Actual Budget website to migrate your data"
|
||||
msg_info "https://actualbudget.org/docs/backup-restore/backup"
|
||||
msg_warn "Old Installation Found, you need to migrate your data and recreate to a new container"
|
||||
msg_warn "Please follow the instructions on the Actual Budget website to migrate your data"
|
||||
msg_warn "https://actualbudget.org/docs/backup-restore/backup"
|
||||
exit
|
||||
fi
|
||||
exit
|
||||
|
||||
@@ -48,6 +48,7 @@ function update_script() {
|
||||
mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py
|
||||
source .venv/bin/activate
|
||||
$STD uv pip install -r requirements.txt
|
||||
export DJANGO_SETTINGS_MODULE=babybuddy.settings.production
|
||||
$STD python manage.py migrate
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ function update_script() {
|
||||
|
||||
msg_info "Updating Python Dependencies"
|
||||
cd /opt/bambuddy
|
||||
$STD uv venv
|
||||
$STD uv venv --clear
|
||||
$STD uv pip install -r requirements.txt
|
||||
msg_ok "Updated Python Dependencies"
|
||||
|
||||
|
||||
64
ct/dagu.sh
Normal file
64
ct/dagu.sh
Normal file
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://dagu.sh/
|
||||
|
||||
APP="Dagu"
|
||||
var_tags="${var_tags:-automation;workflow;scheduler}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /opt/dagu/dagu ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "dagu" "dagucloud/dagu"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop dagu
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up Data"
|
||||
cp -r /opt/dagu/data /opt/dagu_data_backup
|
||||
msg_ok "Backed up Data"
|
||||
|
||||
fetch_and_deploy_gh_release "dagu" "dagucloud/dagu" "prebuild" "latest" "/opt/dagu" "dagu_*_linux_amd64.tar.gz"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
mkdir -p /opt/dagu/data
|
||||
cp -r /opt/dagu_data_backup/. /opt/dagu/data
|
||||
rm -rf /opt/dagu_data_backup
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start dagu
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
73
ct/dashy.sh
73
ct/dashy.sh
@@ -1,73 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: tteck (tteckster) | Co-Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://dashy.to/
|
||||
|
||||
APP="Dashy"
|
||||
var_tags="${var_tags:-dashboard}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-6}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/dashy/public/ ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if check_for_gh_release "dashy" "Lissy93/dashy"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop dashy
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up conf.yml"
|
||||
if [[ -f /opt/dashy/public/conf.yml ]]; then
|
||||
cp -R /opt/dashy/public/conf.yml /opt/dashy_conf_backup.yml
|
||||
else
|
||||
cp -R /opt/dashy/user-data/conf.yml /opt/dashy_conf_backup.yml
|
||||
fi
|
||||
msg_ok "Backed up conf.yml"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz"
|
||||
|
||||
msg_info "Updating Dashy"
|
||||
cd /opt/dashy
|
||||
$STD yarn install --ignore-engines --network-timeout 300000
|
||||
msg_ok "Updated Dashy"
|
||||
|
||||
msg_info "Restoring conf.yml"
|
||||
cp -R /opt/dashy_conf_backup.yml /opt/dashy/user-data
|
||||
msg_ok "Restored conf.yml"
|
||||
|
||||
msg_info "Cleaning"
|
||||
rm -rf /opt/dashy_conf_backup.yml /opt/dashy/public/conf.yml
|
||||
msg_ok "Cleaned"
|
||||
|
||||
msg_info "Starting Dashy"
|
||||
systemctl start dashy
|
||||
msg_ok "Started Dashy"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}"
|
||||
6
ct/headers/dagu
Normal file
6
ct/headers/dagu
Normal file
@@ -0,0 +1,6 @@
|
||||
____
|
||||
/ __ \____ _____ ___ __
|
||||
/ / / / __ `/ __ `/ / / /
|
||||
/ /_/ / /_/ / /_/ / /_/ /
|
||||
/_____/\__,_/\__, /\__,_/
|
||||
/____/
|
||||
6
ct/headers/nametag
Normal file
6
ct/headers/nametag
Normal file
@@ -0,0 +1,6 @@
|
||||
_ __ __
|
||||
/ | / /___ _____ ___ ___ / /_____ _____ _
|
||||
/ |/ / __ `/ __ `__ \/ _ \/ __/ __ `/ __ `/
|
||||
/ /| / /_/ / / / / / / __/ /_/ /_/ / /_/ /
|
||||
/_/ |_/\__,_/_/ /_/ /_/\___/\__/\__,_/\__, /
|
||||
/____/
|
||||
@@ -27,6 +27,9 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt update
|
||||
$STD apt -y upgrade
|
||||
|
||||
@@ -32,10 +32,16 @@ function update_script() {
|
||||
if ! grep -qEi 'ubuntu' /etc/os-release; then
|
||||
msg_info "Updating Intel Dependencies"
|
||||
rm -f ~/.intel-* || true
|
||||
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
|
||||
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
|
||||
|
||||
# Fetch compute-runtime first so /tmp/gh_rel.json is populated for IGC tag resolution
|
||||
fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
|
||||
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
|
||||
|
||||
local igc_tag
|
||||
_resolve_igc_tag igc_tag
|
||||
|
||||
fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-core-2_*_amd64.deb"
|
||||
fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-opencl-2_*_amd64.deb"
|
||||
msg_ok "Updated Intel Dependencies"
|
||||
fi
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
if check_for_gh_release "kima-hub" "Chevron7Locked/kima-hub"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop kima-frontend kima-backend kima-analyzer kima-analyzer-clap
|
||||
|
||||
@@ -38,12 +38,18 @@ function update_script() {
|
||||
|
||||
msg_info "Updating LiteLLM"
|
||||
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
|
||||
$STD "$VENV_PATH/bin/prisma" generate
|
||||
msg_ok "LiteLLM updated"
|
||||
|
||||
msg_info "Updating DB Schema"
|
||||
$STD uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
||||
$STD /opt/litellm/.venv/bin/litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
||||
msg_ok "DB Schema Updated"
|
||||
|
||||
msg_info "Updating Service"
|
||||
sed -i 's|ExecStart=uv --directory=/opt/litellm run litellm|ExecStart=/opt/litellm/.venv/bin/litellm|' /etc/systemd/system/litellm.service
|
||||
systemctl daemon-reload
|
||||
msg_ok "Updated Service"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start litellm
|
||||
msg_ok "Started Service"
|
||||
|
||||
@@ -28,6 +28,8 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
if check_for_gh_release "myip" "jason5ng32/MyIP"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop myip
|
||||
|
||||
83
ct/nametag.sh
Normal file
83
ct/nametag.sh
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/mattogodoy/nametag
|
||||
|
||||
APP="Nametag"
|
||||
var_tags="${var_tags:-contacts;crm}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -d /opt/nametag ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "nametag" "mattogodoy/nametag"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop nametag
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Backing up Data"
|
||||
cp /opt/nametag/.env /opt/nametag.env.bak
|
||||
cp -r /opt/nametag/data /opt/nametag_data_bak
|
||||
msg_ok "Backed up Data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "nametag" "mattogodoy/nametag" "tarball" "latest" "/opt/nametag"
|
||||
|
||||
msg_info "Rebuilding Application"
|
||||
cd /opt/nametag
|
||||
$STD npm ci
|
||||
set -a
|
||||
source /opt/nametag/.env
|
||||
set +a
|
||||
$STD npx prisma generate
|
||||
$STD npm run build
|
||||
cp -r /opt/nametag/.next/static /opt/nametag/.next/standalone/.next/static
|
||||
cp -r /opt/nametag/public /opt/nametag/.next/standalone/public
|
||||
msg_ok "Rebuilt Application"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
cp /opt/nametag.env.bak /opt/nametag/.env
|
||||
cp -r /opt/nametag_data_bak/. /opt/nametag/data/
|
||||
rm -f /opt/nametag.env.bak
|
||||
rm -rf /opt/nametag_data_bak
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Running Migrations"
|
||||
cd /opt/nametag
|
||||
$STD npx prisma migrate deploy
|
||||
msg_ok "Ran Migrations"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start nametag
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||
@@ -28,7 +28,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
if check_for_gh_release "outline" "outline/outline"; then
|
||||
msg_info "Stopping Services"
|
||||
|
||||
@@ -69,7 +69,33 @@ function update_script() {
|
||||
|
||||
msg_info "Running database migrations"
|
||||
cd /opt/pangolin
|
||||
ENVIRONMENT=prod $STD npx drizzle-kit push --config drizzle.sqlite.config.ts
|
||||
|
||||
# Pre-apply potentially destructive schema changes safely so drizzle-kit
|
||||
# does not recreate tables (which would delete all rows).
|
||||
local DB="/opt/pangolin/config/db/db.sqlite"
|
||||
if [[ -f "$DB" ]]; then
|
||||
sqlite3 "$DB" "ALTER TABLE 'orgs' ADD COLUMN 'settingsLogRetentionDaysConnection' integer DEFAULT 0 NOT NULL;" 2>/dev/null || true
|
||||
sqlite3 "$DB" "ALTER TABLE 'clientSitesAssociationsCache' ADD COLUMN 'isJitMode' integer DEFAULT 0 NOT NULL;" 2>/dev/null || true
|
||||
|
||||
# Create new role-mapping tables and migrate data before drizzle-kit
|
||||
# drops the roleId columns from userOrgs and userInvites.
|
||||
sqlite3 "$DB" "CREATE TABLE IF NOT EXISTS 'userOrgRoles' (
|
||||
'userId' text NOT NULL REFERENCES 'user'('id') ON DELETE CASCADE,
|
||||
'orgId' text NOT NULL REFERENCES 'orgs'('orgId') ON DELETE CASCADE,
|
||||
'roleId' integer NOT NULL REFERENCES 'roles'('roleId') ON DELETE CASCADE,
|
||||
UNIQUE('userId', 'orgId', 'roleId')
|
||||
);" 2>/dev/null || true
|
||||
sqlite3 "$DB" "INSERT OR IGNORE INTO 'userOrgRoles' (userId, orgId, roleId) SELECT userId, orgId, roleId FROM 'userOrgs' WHERE roleId IS NOT NULL;" 2>/dev/null || true
|
||||
|
||||
sqlite3 "$DB" "CREATE TABLE IF NOT EXISTS 'userInviteRoles' (
|
||||
'inviteId' text NOT NULL REFERENCES 'userInvites'('inviteId') ON DELETE CASCADE,
|
||||
'roleId' integer NOT NULL REFERENCES 'roles'('roleId') ON DELETE CASCADE,
|
||||
PRIMARY KEY('inviteId', 'roleId')
|
||||
);" 2>/dev/null || true
|
||||
sqlite3 "$DB" "INSERT OR IGNORE INTO 'userInviteRoles' (inviteId, roleId) SELECT inviteId, roleId FROM 'userInvites' WHERE roleId IS NOT NULL;" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
ENVIRONMENT=prod $STD npx drizzle-kit push --force --config drizzle.sqlite.config.ts
|
||||
msg_ok "Ran database migrations"
|
||||
|
||||
msg_info "Updating Badger plugin version"
|
||||
|
||||
@@ -29,7 +29,7 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
if check_for_gh_release "shelfmark" "calibrain/shelfmark"; then
|
||||
|
||||
@@ -43,6 +43,10 @@ function update_script() {
|
||||
|
||||
msg_info "Restoring config"
|
||||
mv /opt/slskd.yml.bak /opt/slskd/config/slskd.yml
|
||||
|
||||
# Migrate 0.25.0 breaking config key renames
|
||||
sed -i 's/^global:/transfers:/' /opt/slskd/config/slskd.yml
|
||||
sed -i 's/^integration:/integrations:/' /opt/slskd/config/slskd.yml
|
||||
msg_ok "Restored config"
|
||||
|
||||
msg_info "Starting Service(s)"
|
||||
|
||||
54
ct/whodb.sh
Normal file
54
ct/whodb.sh
Normal file
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://whodb.com/
|
||||
|
||||
APP="WhoDB"
|
||||
var_tags="${var_tags:-database;management;gui}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-512}"
|
||||
var_disk="${var_disk:-2}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
if [[ ! -f /opt/whodb/whodb ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "whodb" "clidey/whodb"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop whodb
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
fetch_and_deploy_gh_release "whodb" "clidey/whodb" "singlefile" "latest" "/opt/whodb" "whodb-*-linux-amd64"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start whodb
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||
@@ -61,7 +61,10 @@ function update_script() {
|
||||
msg_info "Updating Nginx Configuration"
|
||||
cp /opt/yamtrack/nginx.conf /etc/nginx/nginx.conf
|
||||
sed -i 's|user abc;|user www-data;|' /etc/nginx/nginx.conf
|
||||
sed -i 's|pid /tmp/nginx.pid;|pid /run/nginx.pid;|' /etc/nginx/nginx.conf
|
||||
sed -i 's|/yamtrack/staticfiles/|/opt/yamtrack/src/staticfiles/|' /etc/nginx/nginx.conf
|
||||
sed -i 's|error_log /dev/stderr|error_log /var/log/nginx/error.log|' /etc/nginx/nginx.conf
|
||||
sed -i 's|access_log /dev/stdout|access_log /var/log/nginx/access.log|' /etc/nginx/nginx.conf
|
||||
$STD systemctl reload nginx
|
||||
msg_ok "Updated Nginx Configuration"
|
||||
|
||||
|
||||
47
install/dagu-install.sh
Normal file
47
install/dagu-install.sh
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://dagu.sh/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "dagu" "dagucloud/dagu" "prebuild" "latest" "/opt/dagu" "dagu_*_linux_amd64.tar.gz"
|
||||
|
||||
msg_info "Setting up Dagu"
|
||||
mkdir -p /opt/dagu/data
|
||||
msg_ok "Set up Dagu"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/dagu.service
|
||||
[Unit]
|
||||
Description=Dagu Workflow Engine
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/dagu
|
||||
Environment=DAGU_HOME=/opt/dagu/data
|
||||
Environment=DAGU_HOST=0.0.0.0
|
||||
Environment=DAGU_PORT=8080
|
||||
ExecStart=/opt/dagu/dagu start-all
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now dagu
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -1,42 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: tteck (tteckster) | Co-Author: CrazyWolf13
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://dashy.to/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
NODE_VERSION="24" NODE_MODULE="yarn" setup_nodejs
|
||||
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy" "prebuild" "latest" "/opt/dashy" "dashy-*.tar.gz"
|
||||
|
||||
msg_info "Installing Dashy"
|
||||
cd /opt/dashy
|
||||
$STD yarn install --ignore-engines --network-timeout 300000
|
||||
msg_ok "Installed Dashy"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/dashy.service
|
||||
[Unit]
|
||||
Description=dashy
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/dashy
|
||||
Environment=NODE_OPTIONS=--openssl-legacy-provider
|
||||
ExecStart=/usr/bin/node server.js
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl -q --now enable dashy
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -45,6 +45,30 @@ STATUS_CHECKER_INTERVAL=60
|
||||
EOF
|
||||
msg_ok "Configured Homelable"
|
||||
|
||||
msg_info "Creating Password Reset Utility"
|
||||
cat <<'EOF' >/root/change_password.sh
|
||||
#!/usr/bin/env bash
|
||||
|
||||
NEW_PASS=""
|
||||
|
||||
while [[ -z "$NEW_PASS" ]]; do
|
||||
read -s -p "Enter new password: " NEW_PASS
|
||||
echo ""
|
||||
if [[ -z "$NEW_PASS" ]]; then
|
||||
echo "Error: Password cannot be blank. Try again."
|
||||
fi
|
||||
done
|
||||
|
||||
HASH=$(/opt/homelable/backend/.venv/bin/python -c "from passlib.context import CryptContext; print(CryptContext(schemes=['bcrypt']).hash('${NEW_PASS}'))")
|
||||
|
||||
sed -i "s|^AUTH_PASSWORD_HASH=.*|AUTH_PASSWORD_HASH='${HASH}'|" /opt/homelable/backend/.env
|
||||
|
||||
systemctl restart homelable
|
||||
echo "Password updated and service restarted successfully!"
|
||||
EOF
|
||||
chmod +x /opt/homelable/change_password.sh
|
||||
msg_ok "Created Password Reset Utility"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
cd /opt/homelable/frontend
|
||||
$STD npm ci
|
||||
|
||||
@@ -28,7 +28,7 @@ if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
||||
exit 10
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
|
||||
msg_info "Installing ioBroker (Patience)"
|
||||
$STD bash <(curl -fsSL https://iobroker.net/install.sh)
|
||||
|
||||
@@ -28,7 +28,7 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
||||
PG_DB_NAME="kima" PG_DB_USER="kima" PG_DB_GRANT_SUPERUSER="true" setup_postgresql_db
|
||||
NODE_VERSION="20" setup_nodejs
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
msg_info "Configuring Redis"
|
||||
systemctl enable -q --now redis-server
|
||||
|
||||
@@ -30,6 +30,7 @@ $STD uv venv --clear /opt/litellm/.venv
|
||||
$STD /opt/litellm/.venv/bin/python -m ensurepip --upgrade
|
||||
$STD /opt/litellm/.venv/bin/python -m pip install --upgrade pip
|
||||
$STD /opt/litellm/.venv/bin/python -m pip install litellm[proxy] prisma
|
||||
$STD /opt/litellm/.venv/bin/prisma generate
|
||||
msg_ok "Installed LiteLLM"
|
||||
|
||||
msg_info "Configuring LiteLLM"
|
||||
@@ -40,7 +41,7 @@ general_settings:
|
||||
database_url: postgresql://$PG_DB_USER:$PG_DB_PASS@127.0.0.1:5432/$PG_DB_NAME
|
||||
store_model_in_db: true
|
||||
EOF
|
||||
uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
||||
$STD /opt/litellm/.venv/bin/litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
||||
msg_ok "Configured LiteLLM"
|
||||
|
||||
msg_info "Creating Service"
|
||||
@@ -50,7 +51,7 @@ Description=LiteLLM
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml
|
||||
ExecStart=/opt/litellm/.venv/bin/litellm --config /opt/litellm/litellm.yaml
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
|
||||
@@ -13,7 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
fetch_and_deploy_gh_release "myip" "jason5ng32/MyIP" "tarball"
|
||||
|
||||
msg_info "Configuring MyIP"
|
||||
|
||||
88
install/nametag-install.sh
Normal file
88
install/nametag-install.sh
Normal file
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/mattogodoy/nametag
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="nametag_db" PG_DB_USER="nametag" setup_postgresql_db
|
||||
NODE_VERSION="20" setup_nodejs
|
||||
fetch_and_deploy_gh_release "nametag" "mattogodoy/nametag" "tarball" "latest" "/opt/nametag"
|
||||
|
||||
msg_info "Setting up Application"
|
||||
cd /opt/nametag
|
||||
$STD npm ci
|
||||
DATABASE_URL="postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}" $STD npx prisma generate
|
||||
DATABASE_URL="postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}" $STD npx prisma migrate deploy
|
||||
msg_ok "Set up Application"
|
||||
|
||||
msg_info "Configuring Nametag"
|
||||
NEXTAUTH_SECRET=$(openssl rand -base64 32)
|
||||
CRON_SECRET=$(openssl rand -base64 16)
|
||||
mkdir -p /opt/nametag/data/photos
|
||||
cat <<EOF >/opt/nametag/.env
|
||||
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@127.0.0.1:5432/${PG_DB_NAME}
|
||||
NEXTAUTH_URL=http://${LOCAL_IP}:3000
|
||||
NEXTAUTH_SECRET=${NEXTAUTH_SECRET}
|
||||
CRON_SECRET=${CRON_SECRET}
|
||||
PHOTO_STORAGE_PATH=/opt/nametag/data/photos
|
||||
NODE_ENV=production
|
||||
EOF
|
||||
msg_ok "Configured Nametag"
|
||||
|
||||
msg_info "Building Application"
|
||||
cd /opt/nametag
|
||||
set -a
|
||||
source /opt/nametag/.env
|
||||
set +a
|
||||
$STD npm run build
|
||||
cp -r /opt/nametag/.next/static /opt/nametag/.next/standalone/.next/static
|
||||
cp -r /opt/nametag/public /opt/nametag/.next/standalone/public
|
||||
msg_ok "Built Application"
|
||||
|
||||
msg_info "Running Production Seed"
|
||||
cd /opt/nametag
|
||||
$STD npx esbuild prisma/seed.production.ts --platform=node --format=cjs --outfile=prisma/seed.production.js --bundle --external:@prisma/client --external:pg --minify
|
||||
$STD node prisma/seed.production.js
|
||||
msg_ok "Ran Production Seed"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/nametag.service
|
||||
[Unit]
|
||||
Description=Nametag - Personal Relationships Manager
|
||||
After=network.target postgresql.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/opt/nametag
|
||||
EnvironmentFile=/opt/nametag/.env
|
||||
ExecStart=/usr/bin/node /opt/nametag/.next/standalone/server.js
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now nametag
|
||||
msg_ok "Created Service"
|
||||
|
||||
msg_info "Setting up Cron Jobs"
|
||||
cat <<EOF >/etc/cron.d/nametag
|
||||
0 8 * * * root curl -sf -H "Authorization: Bearer ${CRON_SECRET}" http://127.0.0.1:3000/api/cron/send-reminders >/dev/null 2>&1
|
||||
0 3 * * * root curl -sf -H "Authorization: Bearer ${CRON_SECRET}" http://127.0.0.1:3000/api/cron/purge-deleted >/dev/null 2>&1
|
||||
EOF
|
||||
chmod 644 /etc/cron.d/nametag
|
||||
msg_ok "Set up Cron Jobs"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -20,7 +20,7 @@ $STD apt install -y \
|
||||
redis
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="outline" PG_DB_USER="outline" setup_postgresql_db
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@ else
|
||||
msg_ok "Installed internal bypasser dependencies"
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
NODE_VERSION="24" setup_nodejs
|
||||
PYTHON_VERSION="3.12" setup_uv
|
||||
|
||||
fetch_and_deploy_gh_release "shelfmark" "calibrain/shelfmark" "tarball" "latest" "/opt/shelfmark"
|
||||
|
||||
@@ -60,6 +60,16 @@ wait -n
|
||||
EOF
|
||||
chmod +x /opt/wanderer/start.sh
|
||||
|
||||
cat <<'EOF' >/usr/local/bin/wanderer-pb
|
||||
#!/usr/bin/env bash
|
||||
set -a
|
||||
source /opt/wanderer/.env
|
||||
set +a
|
||||
cd /opt/wanderer/source/db
|
||||
exec ./pocketbase "$@" --dir="$PB_DB_LOCATION"
|
||||
EOF
|
||||
chmod +x /usr/local/bin/wanderer-pb
|
||||
|
||||
cat <<EOF >/etc/systemd/system/wanderer-web.service
|
||||
[Unit]
|
||||
Description=wanderer
|
||||
|
||||
40
install/whodb-install.sh
Normal file
40
install/whodb-install.sh
Normal file
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://whodb.com/
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "whodb" "clidey/whodb" "singlefile" "latest" "/opt/whodb" "whodb-*-linux-amd64"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/whodb.service
|
||||
[Unit]
|
||||
Description=WhoDB Database Management
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/whodb
|
||||
ExecStart=/opt/whodb/whodb
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now whodb
|
||||
msg_ok "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
253
misc/build.func
253
misc/build.func
@@ -3658,7 +3658,7 @@ build_container() {
|
||||
local _mount_clean="${ALLOW_MOUNT_FS// /}"
|
||||
_mount_clean="${_mount_clean%%,}"
|
||||
_mount_clean="${_mount_clean##,}"
|
||||
_mount_clean="${_mount_clean%%;}"
|
||||
_mount_clean="${_mount_clean%%;}"
|
||||
_mount_clean="${_mount_clean//,/;}"
|
||||
if [ -n "$_mount_clean" ]; then
|
||||
[ -n "$FEATURES" ] && FEATURES="$FEATURES,"
|
||||
@@ -5250,9 +5250,133 @@ create_lxc_container() {
|
||||
# Extract Debian OS minor from template name: debian-13-standard_13.1-1_amd64.tar.zst => "13.1"
|
||||
parse_template_osver() { sed -n 's/.*_\([0-9][0-9]*\(\.[0-9]\+\)\?\)-.*/\1/p' <<<"$1"; }
|
||||
|
||||
# Switch to the previous OS major version template and retry pct create
|
||||
# Determines the fallback version automatically based on available templates.
|
||||
# Returns: 0 = success, 1 = failed
|
||||
fallback_to_previous_os_version() {
|
||||
local old_template="$TEMPLATE"
|
||||
local os_type="${PCT_OSTYPE:-}"
|
||||
local current_ver="${PCT_OSVERSION:-}"
|
||||
|
||||
# Determine template search pattern based on OS type
|
||||
local tpl_pattern=""
|
||||
case "$os_type" in
|
||||
debian | ubuntu) tpl_pattern="-standard_" ;;
|
||||
alpine | fedora | rocky | centos) tpl_pattern="-default_" ;;
|
||||
*) tpl_pattern="" ;;
|
||||
esac
|
||||
|
||||
msg_info "Searching for an older $os_type template (current: $os_type $current_ver)"
|
||||
|
||||
# Collect all available versions for this OS type (local + online)
|
||||
local -a all_versions=()
|
||||
|
||||
# Local templates
|
||||
mapfile -t _local_vers < <(
|
||||
pveam list "$TEMPLATE_STORAGE" 2>/dev/null |
|
||||
awk -v os="$os_type" -v pat="$tpl_pattern" '$1 ~ ("^"os"|/"os) && $1 ~ pat {print $1}' |
|
||||
sed 's|.*/||' |
|
||||
sed -E "s/^${os_type}-([0-9]+(\.[0-9]+)?).*/\1/" |
|
||||
sort -u -V
|
||||
)
|
||||
all_versions+=("${_local_vers[@]}")
|
||||
|
||||
# Online templates (only if needed)
|
||||
if command -v timeout &>/dev/null; then
|
||||
timeout 30 pveam update >/dev/null 2>&1 || true
|
||||
else
|
||||
pveam update >/dev/null 2>&1 || true
|
||||
fi
|
||||
mapfile -t _online_vers < <(
|
||||
pveam available -section system 2>/dev/null |
|
||||
awk '{print $2}' |
|
||||
grep -E "^${os_type}-[0-9]" |
|
||||
{ [[ -n "$tpl_pattern" ]] && grep "$tpl_pattern" || cat; } |
|
||||
sed -E "s/^${os_type}-([0-9]+(\.[0-9]+)?).*/\1/" |
|
||||
sort -u -V 2>/dev/null || true
|
||||
)
|
||||
all_versions+=("${_online_vers[@]}")
|
||||
|
||||
# Deduplicate and sort, find the highest version below current
|
||||
local fallback_ver=""
|
||||
fallback_ver=$(printf '%s\n' "${all_versions[@]}" | sort -u -V | awk -v cur="$current_ver" '{
|
||||
# Compare major versions: extract major part
|
||||
split($0, a, ".")
|
||||
split(cur, b, ".")
|
||||
if (a[1]+0 < b[1]+0) ver=$0
|
||||
} END { if (ver) print ver }')
|
||||
|
||||
if [[ -z "$fallback_ver" ]]; then
|
||||
msg_error "No older $os_type template version found."
|
||||
return 1
|
||||
fi
|
||||
|
||||
msg_ok "Fallback version: $os_type $fallback_ver"
|
||||
|
||||
# Find the actual template file for this version
|
||||
local fallback_search="${os_type}-${fallback_ver}"
|
||||
local fallback_template=""
|
||||
|
||||
# Check local first
|
||||
mapfile -t _fb_local < <(
|
||||
pveam list "$TEMPLATE_STORAGE" 2>/dev/null |
|
||||
awk -v search="$fallback_search" -v pat="$tpl_pattern" '$1 ~ search && $1 ~ pat {print $1}' |
|
||||
sed 's|.*/||' | sort -t - -k 2 -V
|
||||
)
|
||||
if [[ ${#_fb_local[@]} -gt 0 ]]; then
|
||||
fallback_template="${_fb_local[-1]}"
|
||||
else
|
||||
# Check online
|
||||
mapfile -t _fb_online < <(
|
||||
pveam available -section system 2>/dev/null |
|
||||
awk '{print $2}' |
|
||||
grep -E "^${fallback_search}.*${tpl_pattern}" |
|
||||
sort -t - -k 2 -V 2>/dev/null || true
|
||||
)
|
||||
[[ ${#_fb_online[@]} -gt 0 ]] && fallback_template="${_fb_online[-1]}"
|
||||
fi
|
||||
|
||||
if [[ -z "$fallback_template" ]]; then
|
||||
msg_error "No template found for $os_type $fallback_ver."
|
||||
return 1
|
||||
fi
|
||||
|
||||
msg_ok "Found template: $fallback_template"
|
||||
|
||||
# Download if needed
|
||||
local fallback_path
|
||||
fallback_path="$(pvesm path "$TEMPLATE_STORAGE:vztmpl/$fallback_template" 2>/dev/null || true)"
|
||||
[[ -z "$fallback_path" ]] && fallback_path="/var/lib/vz/template/cache/$fallback_template"
|
||||
|
||||
if [[ ! -f "$fallback_path" ]]; then
|
||||
msg_info "Downloading $os_type $fallback_ver template"
|
||||
if ! pveam download "$TEMPLATE_STORAGE" "$fallback_template" >>"${BUILD_LOG:-/dev/null}" 2>&1; then
|
||||
msg_error "Failed to download $os_type $fallback_ver template."
|
||||
return 1
|
||||
fi
|
||||
msg_ok "Template downloaded"
|
||||
fi
|
||||
|
||||
# Update variables
|
||||
TEMPLATE="$fallback_template"
|
||||
TEMPLATE_PATH="$fallback_path"
|
||||
PCT_OSVERSION="$fallback_ver"
|
||||
export PCT_OSVERSION
|
||||
|
||||
# Retry pct create
|
||||
msg_info "Retrying container creation with $os_type $fallback_ver"
|
||||
if pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >>"$LOGFILE" 2>&1; then
|
||||
msg_ok "Container created successfully with $os_type $fallback_ver (fallback from $old_template)."
|
||||
return 0
|
||||
else
|
||||
msg_error "Container creation with $os_type $fallback_ver also failed. See $LOGFILE"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Offer upgrade for pve-container/lxc-pve if candidate > installed; optional auto-retry pct create
|
||||
# Returns:
|
||||
# 0 = no upgrade needed
|
||||
# 0 = no upgrade needed / container created after upgrade or fallback
|
||||
# 1 = upgraded (and if do_retry=yes and retry succeeded, creation done)
|
||||
# 2 = user declined
|
||||
# 3 = upgrade attempted but failed OR retry failed
|
||||
@@ -5280,13 +5404,58 @@ create_lxc_container() {
|
||||
echo " pve-container: installed=${_pvec_i:-n/a} candidate=${_pvec_c:-n/a}"
|
||||
echo " lxc-pve : installed=${_lxcp_i:-n/a} candidate=${_lxcp_c:-n/a}"
|
||||
echo
|
||||
read -rp "Do you want to upgrade now? [y/N] " _ans </dev/tty
|
||||
|
||||
# Offer older OS version fallback when template version might be too new for LXC stack
|
||||
local _has_fallback_option=false
|
||||
if [[ -n "${PCT_OSTYPE:-}" && -n "${PCT_OSVERSION:-}" ]]; then
|
||||
_has_fallback_option=true
|
||||
echo " [1] Upgrade LXC stack now (recommended)"
|
||||
echo " [2] Use an older ${PCT_OSTYPE} template instead (may not work with all scripts)"
|
||||
echo " [3] Cancel"
|
||||
echo
|
||||
read -rp "Select option [1/2/3]: " _ans </dev/tty
|
||||
else
|
||||
read -rp "Do you want to upgrade now? [y/N] " _ans </dev/tty
|
||||
fi
|
||||
|
||||
if [[ "$_has_fallback_option" == true ]]; then
|
||||
case "$_ans" in
|
||||
1)
|
||||
_ans="y"
|
||||
;;
|
||||
2)
|
||||
if [[ "$do_retry" == "yes" ]]; then
|
||||
if fallback_to_previous_os_version; then
|
||||
return 0
|
||||
else
|
||||
return 3
|
||||
fi
|
||||
else
|
||||
msg_custom "ℹ️" "${YW}" "OS version fallback is only available during container creation."
|
||||
return 2
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
return 2
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
case "${_ans,,}" in
|
||||
y | yes)
|
||||
msg_info "Upgrading Proxmox LXC stack (pve-container, lxc-pve)"
|
||||
apt_update_safe
|
||||
if $STD apt-get install -y --only-upgrade pve-container lxc-pve; then
|
||||
msg_ok "LXC stack upgraded."
|
||||
# Verify pct binary still works after upgrade (partial upgrades can break Perl modules)
|
||||
if ! pct list &>/dev/null; then
|
||||
msg_error "LXC stack upgrade caused PVE tool breakage (likely Perl module incompatibility)."
|
||||
msg_custom "⚠️" "${YW}" "A partial package upgrade has left the PVE stack in an inconsistent state."
|
||||
msg_custom "🔧" "${YW}" "Please run the following on the Proxmox host, then retry:"
|
||||
echo -e "${TAB} apt update && apt dist-upgrade -y"
|
||||
echo -e "${TAB} reboot"
|
||||
return 3
|
||||
fi
|
||||
if [[ "$do_retry" == "yes" ]]; then
|
||||
msg_info "Retrying container creation after upgrade"
|
||||
if pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >>"$LOGFILE" 2>&1; then
|
||||
@@ -5385,10 +5554,35 @@ create_lxc_container() {
|
||||
fi
|
||||
|
||||
msg_info "Validating storage '$CONTAINER_STORAGE'"
|
||||
STORAGE_TYPE=$(grep -E "^[^:]+: $CONTAINER_STORAGE$" /etc/pve/storage.cfg | cut -d: -f1 | head -1 || true)
|
||||
# Check if storage.cfg is accessible (pmxcfs must be mounted)
|
||||
if [[ ! -f /etc/pve/storage.cfg ]]; then
|
||||
if ! mountpoint -q /etc/pve 2>/dev/null; then
|
||||
msg_error "Proxmox cluster filesystem (pmxcfs) is not mounted at /etc/pve."
|
||||
msg_custom "🔧" "${YW}" "Try: systemctl restart pve-cluster"
|
||||
else
|
||||
msg_error "/etc/pve/storage.cfg does not exist."
|
||||
msg_custom "🔧" "${YW}" "Check Proxmox cluster filesystem integrity: pvecm status"
|
||||
fi
|
||||
exit 213
|
||||
fi
|
||||
|
||||
STORAGE_TYPE=$(grep -E "^[^:]+:[[:space:]]*$CONTAINER_STORAGE[[:space:]]*$" /etc/pve/storage.cfg | cut -d: -f1 | head -1 || true)
|
||||
|
||||
# Fallback: use pvesm status to determine storage type
|
||||
if [[ -z "$STORAGE_TYPE" ]]; then
|
||||
STORAGE_TYPE=$(pvesm status -storage "$CONTAINER_STORAGE" 2>/dev/null | awk 'NR>1{print $2}')
|
||||
fi
|
||||
|
||||
if [[ -z "$STORAGE_TYPE" ]]; then
|
||||
msg_error "Storage '$CONTAINER_STORAGE' not found in /etc/pve/storage.cfg"
|
||||
msg_custom "📋" "${YW}" "Available storages: $(pvesm status 2>/dev/null | awk 'NR>1{printf "%s (%s) ", $1, $2}' || echo 'n/a')"
|
||||
if [[ -r /etc/pve/storage.cfg ]]; then
|
||||
msg_custom "📋" "${YW}" "Storage definitions found in config:"
|
||||
grep -E '^[a-z]+:' /etc/pve/storage.cfg 2>/dev/null | while IFS= read -r _line; do
|
||||
echo "${TAB} $_line"
|
||||
done
|
||||
fi
|
||||
msg_custom "📖" "${YW}" "See https://pve.proxmox.com/wiki/Storage for storage configuration details."
|
||||
exit 213
|
||||
fi
|
||||
|
||||
@@ -5811,6 +6005,17 @@ create_lxc_container() {
|
||||
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" $PCT_OPTIONS >"$LOGFILE" 2>&1; then
|
||||
msg_debug "Container creation failed on ${TEMPLATE_STORAGE}. Checking error..."
|
||||
|
||||
# Check for Perl module breakage (partial PVE upgrade)
|
||||
if grep -qiE 'Compilation failed|Bareword.*not allowed' "$LOGFILE"; then
|
||||
msg_error "Container creation failed due to broken Perl modules on the PVE host."
|
||||
msg_custom "⚠️" "${YW}" "This usually happens after a partial PVE package upgrade."
|
||||
msg_custom "🔧" "${YW}" "Please run the following on the Proxmox host, then retry:"
|
||||
echo -e "${TAB} apt update && apt dist-upgrade -y"
|
||||
echo -e "${TAB} reboot"
|
||||
_flush_pct_log
|
||||
exit 232
|
||||
fi
|
||||
|
||||
# Check if CTID collision (race condition: ID claimed between validation and creation)
|
||||
if grep -qiE 'already exists|already in use' "$LOGFILE"; then
|
||||
local old_ctid="$CTID"
|
||||
@@ -5856,15 +6061,16 @@ create_lxc_container() {
|
||||
rc=$?
|
||||
case $rc in
|
||||
0) : ;; # success - container created, continue
|
||||
2)
|
||||
msg_error "Upgrade declined. Please update and re-run: apt update && apt install --only-upgrade pve-container lxc-pve"
|
||||
_flush_pct_log
|
||||
exit 231
|
||||
;;
|
||||
3)
|
||||
msg_error "Upgrade and/or retry failed. Please inspect: $LOGFILE"
|
||||
_flush_pct_log
|
||||
exit 231
|
||||
2 | 3)
|
||||
# Upgrade declined or failed — try older OS version as last resort
|
||||
msg_warn "Attempting older ${PCT_OSTYPE:-} version as last resort"
|
||||
if fallback_to_previous_os_version; then
|
||||
: # success
|
||||
else
|
||||
msg_error "All recovery options exhausted. Please inspect: $LOGFILE"
|
||||
_flush_pct_log
|
||||
exit 231
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -5888,15 +6094,16 @@ create_lxc_container() {
|
||||
rc=$?
|
||||
case $rc in
|
||||
0) : ;; # success - container created, continue
|
||||
2)
|
||||
msg_error "Upgrade declined. Please update and re-run: apt update && apt install --only-upgrade pve-container lxc-pve"
|
||||
_flush_pct_log
|
||||
exit 231
|
||||
;;
|
||||
3)
|
||||
msg_error "Upgrade and/or retry failed. Please inspect: $LOGFILE"
|
||||
_flush_pct_log
|
||||
exit 231
|
||||
2 | 3)
|
||||
# Upgrade declined or failed — try older OS version as last resort
|
||||
msg_warn "Attempting older ${PCT_OSTYPE:-} version as last resort"
|
||||
if fallback_to_previous_os_version; then
|
||||
: # success
|
||||
else
|
||||
msg_error "All recovery options exhausted. Please inspect: $LOGFILE"
|
||||
_flush_pct_log
|
||||
exit 231
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
else
|
||||
@@ -5915,7 +6122,7 @@ create_lxc_container() {
|
||||
fi
|
||||
fi # close CTID collision else-branch
|
||||
fi
|
||||
set +f # re-enable globbing after pct create block
|
||||
set +f # re-enable globbing after pct create block
|
||||
|
||||
# Verify container exists (allow up to 10s for pmxcfs sync in clusters)
|
||||
local _pct_visible=false
|
||||
|
||||
@@ -1139,39 +1139,42 @@ validate_github_token() {
|
||||
-H "Authorization: Bearer $token" \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
-H "X-GitHub-Api-Version: 2022-11-28" \
|
||||
"https://api.github.com/user" 2>/dev/null) || { rm -f "$headers"; return 3; }
|
||||
"https://api.github.com/user" 2>/dev/null) || {
|
||||
rm -f "$headers"
|
||||
return 3
|
||||
}
|
||||
http_code="$response"
|
||||
|
||||
# Read expiry header (fine-grained PATs carry this)
|
||||
expiry_date=$(grep -i '^github-authentication-token-expiration:' "$headers" \
|
||||
| sed 's/.*: *//' | tr -d '\r\n' || true)
|
||||
expiry_date=$(grep -i '^github-authentication-token-expiration:' "$headers" |
|
||||
sed 's/.*: *//' | tr -d '\r\n' || true)
|
||||
# Read token scopes (classic PATs)
|
||||
scopes=$(grep -i '^x-oauth-scopes:' "$headers" \
|
||||
| sed 's/.*: *//' | tr -d '\r\n' || true)
|
||||
scopes=$(grep -i '^x-oauth-scopes:' "$headers" |
|
||||
sed 's/.*: *//' | tr -d '\r\n' || true)
|
||||
rm -f "$headers"
|
||||
|
||||
case "$http_code" in
|
||||
200)
|
||||
if [[ -n "$expiry_date" ]]; then
|
||||
msg_ok "GitHub token is valid (expires: $expiry_date)."
|
||||
else
|
||||
msg_ok "GitHub token is valid (no expiry / fine-grained PAT)."
|
||||
fi
|
||||
# Warn if classic PAT has no public_repo scope
|
||||
if [[ -n "$scopes" && "$scopes" != *"public_repo"* && "$scopes" != *"repo"* ]]; then
|
||||
msg_warn "Token has no 'public_repo' scope - private repos and some release APIs may fail."
|
||||
return 2
|
||||
fi
|
||||
return 0
|
||||
;;
|
||||
401)
|
||||
msg_error "GitHub token is invalid or expired (HTTP 401)."
|
||||
return 1
|
||||
;;
|
||||
*)
|
||||
msg_warn "GitHub token validation returned HTTP $http_code - treating as valid."
|
||||
return 0
|
||||
;;
|
||||
200)
|
||||
if [[ -n "$expiry_date" ]]; then
|
||||
msg_ok "GitHub token is valid (expires: $expiry_date)."
|
||||
else
|
||||
msg_ok "GitHub token is valid (no expiry / fine-grained PAT)."
|
||||
fi
|
||||
# Warn if classic PAT has no public_repo scope
|
||||
if [[ -n "$scopes" && "$scopes" != *"public_repo"* && "$scopes" != *"repo"* ]]; then
|
||||
msg_warn "Token has no 'public_repo' scope - private repos and some release APIs may fail."
|
||||
return 2
|
||||
fi
|
||||
return 0
|
||||
;;
|
||||
401)
|
||||
msg_error "GitHub token is invalid or expired (HTTP 401)."
|
||||
return 1
|
||||
;;
|
||||
*)
|
||||
msg_warn "GitHub token validation returned HTTP $http_code - treating as valid."
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
@@ -4604,6 +4607,23 @@ function setup_hwaccel() {
|
||||
msg_ok "Setup Hardware Acceleration"
|
||||
}
|
||||
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
# Resolve the IGC tag that the latest compute-runtime was built against.
|
||||
# Must be called AFTER a fetch_and_deploy_gh_release for intel/compute-runtime
|
||||
# so that /tmp/gh_rel.json contains the compute-runtime release metadata.
|
||||
# Sets the variable named by $1 (default: igc_tag) to the discovered tag.
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
_resolve_igc_tag() {
|
||||
local -n _out_ref="${1:-igc_tag}"
|
||||
_out_ref="latest"
|
||||
if [[ -f /tmp/gh_rel.json ]]; then
|
||||
local _body _parsed
|
||||
_body=$(jq -r '.body // empty' /tmp/gh_rel.json 2>/dev/null) || return 0
|
||||
_parsed=$(grep -oP 'intel-graphics-compiler/releases/tag/\K[^\s\)]+' <<<"$_body" | head -1)
|
||||
[[ -n "$_parsed" ]] && _out_ref="$_parsed"
|
||||
fi
|
||||
}
|
||||
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
# Intel Arc GPU Setup
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
@@ -4630,12 +4650,17 @@ _setup_intel_arc() {
|
||||
if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then
|
||||
msg_info "Fetching Intel compute-runtime from GitHub for Arc support"
|
||||
|
||||
# Fetch a compute-runtime package first so /tmp/gh_rel.json is populated,
|
||||
# then resolve the matching IGC tag from the release notes.
|
||||
# libigdgmm - bundled in compute-runtime releases
|
||||
fetch_and_deploy_gh_release "libigdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb" || true
|
||||
|
||||
# Intel Graphics Compiler (note: packages have -2 suffix)
|
||||
fetch_and_deploy_gh_release "intel-igc-core" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb" || true
|
||||
fetch_and_deploy_gh_release "intel-igc-opencl" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb" || true
|
||||
local igc_tag
|
||||
_resolve_igc_tag igc_tag
|
||||
|
||||
# Intel Graphics Compiler – pinned to the version compute-runtime expects
|
||||
fetch_and_deploy_gh_release "intel-igc-core" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-core-2_*_amd64.deb" || true
|
||||
fetch_and_deploy_gh_release "intel-igc-opencl" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-opencl-2_*_amd64.deb" || true
|
||||
|
||||
# Compute Runtime (depends on IGC and gmmlib)
|
||||
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb" || true
|
||||
@@ -4685,12 +4710,17 @@ _setup_intel_modern() {
|
||||
if [[ "$os_codename" == "trixie" || "$os_codename" == "sid" ]]; then
|
||||
msg_info "Fetching Intel compute-runtime from GitHub"
|
||||
|
||||
# Fetch a compute-runtime package first so /tmp/gh_rel.json is populated,
|
||||
# then resolve the matching IGC tag from the release notes.
|
||||
# libigdgmm first (bundled in compute-runtime releases)
|
||||
fetch_and_deploy_gh_release "libigdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb" || true
|
||||
|
||||
# Intel Graphics Compiler (note: packages have -2 suffix)
|
||||
fetch_and_deploy_gh_release "intel-igc-core" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb" || true
|
||||
fetch_and_deploy_gh_release "intel-igc-opencl" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb" || true
|
||||
local igc_tag
|
||||
_resolve_igc_tag igc_tag
|
||||
|
||||
# Intel Graphics Compiler – pinned to the version compute-runtime expects
|
||||
fetch_and_deploy_gh_release "intel-igc-core" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-core-2_*_amd64.deb" || true
|
||||
fetch_and_deploy_gh_release "intel-igc-opencl" "intel/intel-graphics-compiler" "binary" "$igc_tag" "" "intel-igc-opencl-2_*_amd64.deb" || true
|
||||
|
||||
# Compute Runtime
|
||||
fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb" || true
|
||||
|
||||
@@ -69,6 +69,9 @@ function update() {
|
||||
msg_ok "Stopped service"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "sparkyfitness-garmin" "CodeWithCJ/SparkyFitness" "tarball" "latest" $INSTALL_PATH
|
||||
cd $INSTALL_PATH/SparkyFitnessGarmin
|
||||
$STD uv venv --clear .venv
|
||||
$STD uv pip install -r requirements.txt
|
||||
|
||||
msg_info "Starting service"
|
||||
systemctl start sparkyfitness-garmin
|
||||
|
||||
@@ -37,8 +37,9 @@ function find_orphaned_lvm {
|
||||
fi
|
||||
|
||||
container_id=$(echo "$lv" | grep -oE "[0-9]+" | head -1)
|
||||
# Check if the ID exists as a VM or LXC container
|
||||
if [ -f "/etc/pve/lxc/${container_id}.conf" ] || [ -f "/etc/pve/qemu-server/${container_id}.conf" ]; then
|
||||
# Check if the ID exists as a VM or LXC container on any cluster node
|
||||
if compgen -G "/etc/pve/nodes/*/lxc/${container_id}.conf" >/dev/null 2>&1 ||
|
||||
compgen -G "/etc/pve/nodes/*/qemu-server/${container_id}.conf" >/dev/null 2>&1; then
|
||||
continue
|
||||
fi
|
||||
|
||||
|
||||
@@ -47,7 +47,8 @@ msg_error() {
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true
|
||||
declare -f init_tool_telemetry &>/dev/null && init_tool_telemetry "post-pmg-install" "pve"
|
||||
|
||||
if ! grep -q "Proxmox Mail Gateway" /etc/issue 2>/dev/null; then
|
||||
if ! dpkg -s proxmox-mailgateway-container >/dev/null 2>&1 &&
|
||||
! dpkg -s proxmox-mailgateway >/dev/null 2>&1; then
|
||||
msg_error "This script is only intended for Proxmox Mail Gateway"
|
||||
exit 232
|
||||
fi
|
||||
@@ -57,14 +58,24 @@ repo_state() {
|
||||
local repo="$1"
|
||||
local file=""
|
||||
local state="missing"
|
||||
for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do
|
||||
for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources; do
|
||||
[[ -f "$f" ]] || continue
|
||||
if grep -q "$repo" "$f"; then
|
||||
file="$f"
|
||||
if grep -qE "^[^#].*${repo}" "$f"; then
|
||||
state="active"
|
||||
elif grep -qE "^#.*${repo}" "$f"; then
|
||||
state="disabled"
|
||||
if [[ "$f" == *.sources ]]; then
|
||||
# deb822 format: check Enabled field
|
||||
if grep -qiE '^Enabled:\s*no' "$f"; then
|
||||
state="disabled"
|
||||
else
|
||||
state="active"
|
||||
fi
|
||||
else
|
||||
# legacy format
|
||||
if grep -qE "^[^#].*${repo}" "$f"; then
|
||||
state="active"
|
||||
elif grep -qE "^#.*${repo}" "$f"; then
|
||||
state="disabled"
|
||||
fi
|
||||
fi
|
||||
break
|
||||
fi
|
||||
@@ -72,6 +83,28 @@ repo_state() {
|
||||
echo "$state $file"
|
||||
}
|
||||
|
||||
toggle_repo() {
|
||||
# $1 = file, $2 = action (enable|disable)
|
||||
local file="$1" action="$2"
|
||||
if [[ "$file" == *.sources ]]; then
|
||||
if [[ "$action" == "disable" ]]; then
|
||||
if grep -qiE '^Enabled:' "$file"; then
|
||||
sed -i 's/^Enabled:.*/Enabled: no/' "$file"
|
||||
else
|
||||
echo "Enabled: no" >>"$file"
|
||||
fi
|
||||
else
|
||||
sed -i 's/^Enabled:.*/Enabled: yes/' "$file"
|
||||
fi
|
||||
else
|
||||
if [[ "$action" == "disable" ]]; then
|
||||
sed -i '/^[^#]/s/^/# /' "$file"
|
||||
else
|
||||
sed -i 's/^# *//' "$file"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
start_routines() {
|
||||
header_info
|
||||
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
|
||||
@@ -84,11 +117,20 @@ start_routines() {
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Correcting Debian Sources"
|
||||
cat <<EOF >/etc/apt/sources.list
|
||||
deb http://deb.debian.org/debian ${VERSION} main contrib
|
||||
deb http://deb.debian.org/debian ${VERSION}-updates main contrib
|
||||
deb http://security.debian.org/debian-security ${VERSION}-security main contrib
|
||||
cat <<EOF >/etc/apt/sources.list.d/debian.sources
|
||||
Types: deb
|
||||
URIs: http://deb.debian.org/debian
|
||||
Suites: ${VERSION} ${VERSION}-updates
|
||||
Components: main contrib non-free non-free-firmware
|
||||
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
|
||||
|
||||
Types: deb
|
||||
URIs: http://security.debian.org/debian-security
|
||||
Suites: ${VERSION}-security
|
||||
Components: main contrib non-free non-free-firmware
|
||||
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
|
||||
EOF
|
||||
rm -f /etc/apt/sources.list
|
||||
msg_ok "Corrected Debian Sources"
|
||||
;;
|
||||
no) msg_error "Selected no to Correcting Debian Sources" ;;
|
||||
@@ -108,7 +150,7 @@ EOF
|
||||
keep) msg_ok "Kept 'pmg-enterprise' repository" ;;
|
||||
disable)
|
||||
msg_info "Disabling 'pmg-enterprise' repository"
|
||||
sed -i "s/^[^#].*pmg-enterprise/# &/" "$file"
|
||||
toggle_repo "$file" disable
|
||||
msg_ok "Disabled 'pmg-enterprise' repository"
|
||||
;;
|
||||
delete)
|
||||
@@ -128,7 +170,7 @@ EOF
|
||||
case $CHOICE in
|
||||
enable)
|
||||
msg_info "Enabling 'pmg-enterprise' repository"
|
||||
sed -i "s/^#.*pmg-enterprise/deb/" "$file"
|
||||
toggle_repo "$file" enable
|
||||
msg_ok "Enabled 'pmg-enterprise' repository"
|
||||
;;
|
||||
keep) msg_ok "Kept 'pmg-enterprise' repository disabled" ;;
|
||||
@@ -149,8 +191,12 @@ EOF
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Adding 'pmg-enterprise' repository"
|
||||
cat >/etc/apt/sources.list.d/pmg-enterprise.list <<EOF
|
||||
deb https://enterprise.proxmox.com/debian/pmg ${VERSION} pmg-enterprise
|
||||
cat >/etc/apt/sources.list.d/pmg-enterprise.sources <<EOF
|
||||
Types: deb
|
||||
URIs: https://enterprise.proxmox.com/debian/pmg
|
||||
Suites: ${VERSION}
|
||||
Components: pmg-enterprise
|
||||
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
||||
EOF
|
||||
msg_ok "Added 'pmg-enterprise' repository"
|
||||
;;
|
||||
@@ -173,7 +219,7 @@ EOF
|
||||
keep) msg_ok "Kept 'pmg-no-subscription' repository" ;;
|
||||
disable)
|
||||
msg_info "Disabling 'pmg-no-subscription' repository"
|
||||
sed -i "s/^[^#].*pmg-no-subscription/# &/" "$file"
|
||||
toggle_repo "$file" disable
|
||||
msg_ok "Disabled 'pmg-no-subscription' repository"
|
||||
;;
|
||||
delete)
|
||||
@@ -193,7 +239,7 @@ EOF
|
||||
case $CHOICE in
|
||||
enable)
|
||||
msg_info "Enabling 'pmg-no-subscription' repository"
|
||||
sed -i "s/^#.*pmg-no-subscription/deb/" "$file"
|
||||
toggle_repo "$file" enable
|
||||
msg_ok "Enabled 'pmg-no-subscription' repository"
|
||||
;;
|
||||
keep) msg_ok "Kept 'pmg-no-subscription' repository disabled" ;;
|
||||
@@ -213,8 +259,12 @@ EOF
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Adding 'pmg-no-subscription' repository"
|
||||
cat >/etc/apt/sources.list.d/pmg-install-repo.list <<EOF
|
||||
deb http://download.proxmox.com/debian/pmg ${VERSION} pmg-no-subscription
|
||||
cat >/etc/apt/sources.list.d/pmg-no-subscription.sources <<EOF
|
||||
Types: deb
|
||||
URIs: http://download.proxmox.com/debian/pmg
|
||||
Suites: ${VERSION}
|
||||
Components: pmg-no-subscription
|
||||
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
||||
EOF
|
||||
msg_ok "Added 'pmg-no-subscription' repository"
|
||||
;;
|
||||
@@ -236,8 +286,13 @@ EOF
|
||||
case $CHOICE in
|
||||
yes)
|
||||
msg_info "Adding 'pmgtest' repository (disabled)"
|
||||
cat >/etc/apt/sources.list.d/pmgtest-for-beta.list <<EOF
|
||||
# deb http://download.proxmox.com/debian/pmg ${VERSION} pmgtest
|
||||
cat >/etc/apt/sources.list.d/pmgtest.sources <<EOF
|
||||
Types: deb
|
||||
URIs: http://download.proxmox.com/debian/pmg
|
||||
Suites: ${VERSION}
|
||||
Components: pmgtest
|
||||
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
|
||||
Enabled: no
|
||||
EOF
|
||||
msg_ok "Added 'pmgtest' repository"
|
||||
;;
|
||||
|
||||
Reference in New Issue
Block a user