mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-09 14:53:25 +01:00
Compare commits
61 Commits
openprojec
...
fix/koille
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9eef7c064 | ||
|
|
d5cdfc7405 | ||
|
|
3d2bc05092 | ||
|
|
a330afde03 | ||
|
|
f19bc7722b | ||
|
|
03571fb26c | ||
|
|
c58ca1a70a | ||
|
|
157e69b365 | ||
|
|
ee3e53a1a2 | ||
|
|
c2cb89ddc5 | ||
|
|
d21df736fd | ||
|
|
59e27bfc8a | ||
|
|
43d76b6ea7 | ||
|
|
7715a02f05 | ||
|
|
c29dfa7a29 | ||
|
|
1439d98ec4 | ||
|
|
44ad9370b6 | ||
|
|
4e96bb664f | ||
|
|
57c9308326 | ||
|
|
f07c221ca4 | ||
|
|
63097e3b64 | ||
|
|
632a39f56e | ||
|
|
c0e212d89c | ||
|
|
aae3b8eefe | ||
|
|
aba32f42ee | ||
|
|
83a453a952 | ||
|
|
c1a2c54c59 | ||
|
|
0928c52147 | ||
|
|
f49629b740 | ||
|
|
b02c9fafb9 | ||
|
|
0cfca00013 | ||
|
|
8702f81515 | ||
|
|
38f2ffed23 | ||
|
|
fcdb0b2f6e | ||
|
|
88e84f71a6 | ||
|
|
7578c0d5a3 | ||
|
|
68711bf392 | ||
|
|
b1481b7259 | ||
|
|
6a024696ca | ||
|
|
9c1e90b0a5 | ||
|
|
eed0b7630e | ||
|
|
319e6ee46f | ||
|
|
b38eb8b6ef | ||
|
|
87224fb19f | ||
|
|
b661d9f4da | ||
|
|
ef43557649 | ||
|
|
8096ecb4c6 | ||
|
|
05ff43849b | ||
|
|
6bde13497f | ||
|
|
173aaeeb06 | ||
|
|
b900f90bab | ||
|
|
e70de7d95f | ||
|
|
493371423e | ||
|
|
e27dc1cebb | ||
|
|
fd7095a133 | ||
|
|
f752bebad3 | ||
|
|
263cbbeb86 | ||
|
|
48d743910a | ||
|
|
2763664e08 | ||
|
|
a524431c0e | ||
|
|
2c39cab0c1 |
116
.github/changelogs/2026/02.md
generated
vendored
116
.github/changelogs/2026/02.md
generated
vendored
@@ -1,3 +1,119 @@
|
||||
## 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))
|
||||
|
||||
## 2026-02-05
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- OpenCloud ([#11538](https://github.com/community-scripts/ProxmoxVE/pull/11538))
|
||||
- Nginx-UI ([#11573](https://github.com/community-scripts/ProxmoxVE/pull/11573))
|
||||
- New: SQL-Server 2025 | Refactor SQL-Server 2022 [@MickLesk](https://github.com/MickLesk) ([#11546](https://github.com/community-scripts/ProxmoxVE/pull/11546))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- OpenCloud: pin version to 5.0.2; Collabora CSP fix [@vhsdream](https://github.com/vhsdream) ([#11585](https://github.com/community-scripts/ProxmoxVE/pull/11585))
|
||||
- Wanderer: Fix repo [@tremor021](https://github.com/tremor021) ([#11567](https://github.com/community-scripts/ProxmoxVE/pull/11567))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Refactor: Docker-VM (Multi-OS / Cloud-Init / Stabilization) [@MickLesk](https://github.com/MickLesk) ([#9047](https://github.com/community-scripts/ProxmoxVE/pull/9047))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- cloud-init: add interactive SSH key discovery and selection [@MickLesk](https://github.com/MickLesk) ([#11547](https://github.com/community-scripts/ProxmoxVE/pull/11547))
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- github: extend docs / contribution / templates [@MickLesk](https://github.com/MickLesk) ([#10921](https://github.com/community-scripts/ProxmoxVE/pull/10921))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- fix(frontend): theme respective syntax highlighting [@ls-root](https://github.com/ls-root) ([#11565](https://github.com/community-scripts/ProxmoxVE/pull/11565))
|
||||
|
||||
## 2026-02-04
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
296
CHANGELOG.md
296
CHANGELOG.md
@@ -12,6 +12,9 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<details>
|
||||
<summary><h2>📜 History</h2></summary>
|
||||
|
||||
@@ -21,7 +24,7 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
|
||||
<details>
|
||||
<summary><h4>February (4 entries)</h4></summary>
|
||||
<summary><h4>February (7 entries)</h4></summary>
|
||||
|
||||
[View February 2026 Changelog](.github/changelogs/2026/02.md)
|
||||
|
||||
@@ -41,84 +44,84 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
|
||||
<details>
|
||||
<summary><h4>December - 31 entries</h4></summary>
|
||||
<summary><h4>December (31 entries)</h4></summary>
|
||||
|
||||
[View December 2025 Changelog](.github/changelogs/2025/12.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>November - 30 entries</h4></summary>
|
||||
<summary><h4>November (29 entries)</h4></summary>
|
||||
|
||||
[View November 2025 Changelog](.github/changelogs/2025/11.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>October - 31 entries</h4></summary>
|
||||
<summary><h4>October (30 entries)</h4></summary>
|
||||
|
||||
[View October 2025 Changelog](.github/changelogs/2025/10.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>September - 30 entries</h4></summary>
|
||||
<summary><h4>September (29 entries)</h4></summary>
|
||||
|
||||
[View September 2025 Changelog](.github/changelogs/2025/09.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>August - 31 entries</h4></summary>
|
||||
<summary><h4>August (30 entries)</h4></summary>
|
||||
|
||||
[View August 2025 Changelog](.github/changelogs/2025/08.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>July - 30 entries</h4></summary>
|
||||
<summary><h4>July (29 entries)</h4></summary>
|
||||
|
||||
[View July 2025 Changelog](.github/changelogs/2025/07.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>June - 30 entries</h4></summary>
|
||||
<summary><h4>June (29 entries)</h4></summary>
|
||||
|
||||
[View June 2025 Changelog](.github/changelogs/2025/06.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>May - 31 entries</h4></summary>
|
||||
<summary><h4>May (30 entries)</h4></summary>
|
||||
|
||||
[View May 2025 Changelog](.github/changelogs/2025/05.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>April - 26 entries</h4></summary>
|
||||
<summary><h4>April (25 entries)</h4></summary>
|
||||
|
||||
[View April 2025 Changelog](.github/changelogs/2025/04.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>March - 31 entries</h4></summary>
|
||||
<summary><h4>March (30 entries)</h4></summary>
|
||||
|
||||
[View March 2025 Changelog](.github/changelogs/2025/03.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>February - 27 entries</h4></summary>
|
||||
<summary><h4>February (26 entries)</h4></summary>
|
||||
|
||||
[View February 2025 Changelog](.github/changelogs/2025/02.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>January - 28 entries</h4></summary>
|
||||
<summary><h4>January (27 entries)</h4></summary>
|
||||
|
||||
[View January 2025 Changelog](.github/changelogs/2025/01.md)
|
||||
|
||||
@@ -131,84 +134,84 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
|
||||
<details>
|
||||
<summary><h4>December - 23 entries</h4></summary>
|
||||
<summary><h4>December (22 entries)</h4></summary>
|
||||
|
||||
[View December 2024 Changelog](.github/changelogs/2024/12.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>November - 16 entries</h4></summary>
|
||||
<summary><h4>November (15 entries)</h4></summary>
|
||||
|
||||
[View November 2024 Changelog](.github/changelogs/2024/11.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>October - 10 entries</h4></summary>
|
||||
<summary><h4>October (9 entries)</h4></summary>
|
||||
|
||||
[View October 2024 Changelog](.github/changelogs/2024/10.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>September - 2 entries</h4></summary>
|
||||
<summary><h4>September (1 entries)</h4></summary>
|
||||
|
||||
[View September 2024 Changelog](.github/changelogs/2024/09.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>August - 3 entries</h4></summary>
|
||||
<summary><h4>August (2 entries)</h4></summary>
|
||||
|
||||
[View August 2024 Changelog](.github/changelogs/2024/08.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>July - 1 entries</h4></summary>
|
||||
<summary><h4>July (0 entries)</h4></summary>
|
||||
|
||||
[View July 2024 Changelog](.github/changelogs/2024/07.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>June - 9 entries</h4></summary>
|
||||
<summary><h4>June (8 entries)</h4></summary>
|
||||
|
||||
[View June 2024 Changelog](.github/changelogs/2024/06.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>May - 17 entries</h4></summary>
|
||||
<summary><h4>May (16 entries)</h4></summary>
|
||||
|
||||
[View May 2024 Changelog](.github/changelogs/2024/05.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>April - 15 entries</h4></summary>
|
||||
<summary><h4>April (14 entries)</h4></summary>
|
||||
|
||||
[View April 2024 Changelog](.github/changelogs/2024/04.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>March - 6 entries</h4></summary>
|
||||
<summary><h4>March (5 entries)</h4></summary>
|
||||
|
||||
[View March 2024 Changelog](.github/changelogs/2024/03.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>February - 10 entries</h4></summary>
|
||||
<summary><h4>February (9 entries)</h4></summary>
|
||||
|
||||
[View February 2024 Changelog](.github/changelogs/2024/02.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>January - 10 entries</h4></summary>
|
||||
<summary><h4>January (9 entries)</h4></summary>
|
||||
|
||||
[View January 2024 Changelog](.github/changelogs/2024/01.md)
|
||||
|
||||
@@ -221,84 +224,84 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
|
||||
<details>
|
||||
<summary><h4>December - 4 entries</h4></summary>
|
||||
<summary><h4>December (3 entries)</h4></summary>
|
||||
|
||||
[View December 2023 Changelog](.github/changelogs/2023/12.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>November - 4 entries</h4></summary>
|
||||
<summary><h4>November (3 entries)</h4></summary>
|
||||
|
||||
[View November 2023 Changelog](.github/changelogs/2023/11.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>October - 8 entries</h4></summary>
|
||||
<summary><h4>October (7 entries)</h4></summary>
|
||||
|
||||
[View October 2023 Changelog](.github/changelogs/2023/10.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>September - 11 entries</h4></summary>
|
||||
<summary><h4>September (10 entries)</h4></summary>
|
||||
|
||||
[View September 2023 Changelog](.github/changelogs/2023/09.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>August - 8 entries</h4></summary>
|
||||
<summary><h4>August (7 entries)</h4></summary>
|
||||
|
||||
[View August 2023 Changelog](.github/changelogs/2023/08.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>July - 6 entries</h4></summary>
|
||||
<summary><h4>July (5 entries)</h4></summary>
|
||||
|
||||
[View July 2023 Changelog](.github/changelogs/2023/07.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>June - 6 entries</h4></summary>
|
||||
<summary><h4>June (5 entries)</h4></summary>
|
||||
|
||||
[View June 2023 Changelog](.github/changelogs/2023/06.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>May - 9 entries</h4></summary>
|
||||
<summary><h4>May (8 entries)</h4></summary>
|
||||
|
||||
[View May 2023 Changelog](.github/changelogs/2023/05.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>April - 9 entries</h4></summary>
|
||||
<summary><h4>April (8 entries)</h4></summary>
|
||||
|
||||
[View April 2023 Changelog](.github/changelogs/2023/04.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>March - 9 entries</h4></summary>
|
||||
<summary><h4>March (8 entries)</h4></summary>
|
||||
|
||||
[View March 2023 Changelog](.github/changelogs/2023/03.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>February - 7 entries</h4></summary>
|
||||
<summary><h4>February (6 entries)</h4></summary>
|
||||
|
||||
[View February 2023 Changelog](.github/changelogs/2023/02.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>January - 16 entries</h4></summary>
|
||||
<summary><h4>January (15 entries)</h4></summary>
|
||||
|
||||
[View January 2023 Changelog](.github/changelogs/2023/01.md)
|
||||
|
||||
@@ -311,84 +314,84 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
|
||||
<details>
|
||||
<summary><h4>December - 8 entries</h4></summary>
|
||||
<summary><h4>December (7 entries)</h4></summary>
|
||||
|
||||
[View December 2022 Changelog](.github/changelogs/2022/12.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>November - 8 entries</h4></summary>
|
||||
<summary><h4>November (7 entries)</h4></summary>
|
||||
|
||||
[View November 2022 Changelog](.github/changelogs/2022/11.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>October - 3 entries</h4></summary>
|
||||
<summary><h4>October (2 entries)</h4></summary>
|
||||
|
||||
[View October 2022 Changelog](.github/changelogs/2022/10.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>September - 10 entries</h4></summary>
|
||||
<summary><h4>September (9 entries)</h4></summary>
|
||||
|
||||
[View September 2022 Changelog](.github/changelogs/2022/09.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>August - 8 entries</h4></summary>
|
||||
<summary><h4>August (7 entries)</h4></summary>
|
||||
|
||||
[View August 2022 Changelog](.github/changelogs/2022/08.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>July - 11 entries</h4></summary>
|
||||
<summary><h4>July (10 entries)</h4></summary>
|
||||
|
||||
[View July 2022 Changelog](.github/changelogs/2022/07.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>June - 2 entries</h4></summary>
|
||||
<summary><h4>June (1 entries)</h4></summary>
|
||||
|
||||
[View June 2022 Changelog](.github/changelogs/2022/06.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>May - 9 entries</h4></summary>
|
||||
<summary><h4>May (8 entries)</h4></summary>
|
||||
|
||||
[View May 2022 Changelog](.github/changelogs/2022/05.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>April - 14 entries</h4></summary>
|
||||
<summary><h4>April (13 entries)</h4></summary>
|
||||
|
||||
[View April 2022 Changelog](.github/changelogs/2022/04.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>March - 21 entries</h4></summary>
|
||||
<summary><h4>March (20 entries)</h4></summary>
|
||||
|
||||
[View March 2022 Changelog](.github/changelogs/2022/03.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>February - 16 entries</h4></summary>
|
||||
<summary><h4>February (15 entries)</h4></summary>
|
||||
|
||||
[View February 2022 Changelog](.github/changelogs/2022/02.md)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><h4>January - 4 entries</h4></summary>
|
||||
<summary><h4>January (3 entries)</h4></summary>
|
||||
|
||||
[View January 2022 Changelog](.github/changelogs/2022/01.md)
|
||||
|
||||
@@ -398,8 +401,88 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
</details>
|
||||
|
||||
## 2026-02-09
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- 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))
|
||||
- PeaNUT: symlink server.js after update [@vhsdream](https://github.com/vhsdream) ([#11696](https://github.com/community-scripts/ProxmoxVE/pull/11696))
|
||||
|
||||
- #### ✨ 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
|
||||
@@ -1262,117 +1345,4 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
||||
|
||||
- #### 💥 Breaking Changes
|
||||
|
||||
- fix: setup_mariadb hangs on [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10672](https://github.com/community-scripts/ProxmoxVE/pull/10672))
|
||||
|
||||
## 2026-01-08
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- GWN-Manager ([#10642](https://github.com/community-scripts/ProxmoxVE/pull/10642))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Fix line continuation for vlc-bin installation [@chinedu40](https://github.com/chinedu40) ([#10654](https://github.com/community-scripts/ProxmoxVE/pull/10654))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- outline: use corepack yarn module [@MickLesk](https://github.com/MickLesk) ([#10652](https://github.com/community-scripts/ProxmoxVE/pull/10652))
|
||||
- Remove unnecessary quotes from variable expansions in VM scripts [@MickLesk](https://github.com/MickLesk) ([#10649](https://github.com/community-scripts/ProxmoxVE/pull/10649))
|
||||
- Monica: Fix database variable names [@tremor021](https://github.com/tremor021) ([#10634](https://github.com/community-scripts/ProxmoxVE/pull/10634))
|
||||
- Tianji: Fix PostrgreSQL vars [@tremor021](https://github.com/tremor021) ([#10633](https://github.com/community-scripts/ProxmoxVE/pull/10633))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- deCONZ: Bump to Trixie base [@tremor021](https://github.com/tremor021) ([#10643](https://github.com/community-scripts/ProxmoxVE/pull/10643))
|
||||
|
||||
## 2026-01-07
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- pve-scripts-local: fix missing exit in update [@MickLesk](https://github.com/MickLesk) ([#10630](https://github.com/community-scripts/ProxmoxVE/pull/10630))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Upgrade ESPHome LXC to Debian 13 [@heinemannj](https://github.com/heinemannj) ([#10624](https://github.com/community-scripts/ProxmoxVE/pull/10624))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Explicitly state installation method [@tremor021](https://github.com/tremor021) ([#10608](https://github.com/community-scripts/ProxmoxVE/pull/10608))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- Modify Debian sources list for trixie updates (as 4.1.0-1 config) [@maiux](https://github.com/maiux) ([#10505](https://github.com/community-scripts/ProxmoxVE/pull/10505))
|
||||
|
||||
## 2026-01-06
|
||||
|
||||
### 🆕 New Scripts
|
||||
|
||||
- Sportarr ([#10600](https://github.com/community-scripts/ProxmoxVE/pull/10600))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- chore: fix update msg [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10593](https://github.com/community-scripts/ProxmoxVE/pull/10593))
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- InspIRCd: Fix release fetching [@tremor021](https://github.com/tremor021) ([#10578](https://github.com/community-scripts/ProxmoxVE/pull/10578))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Sonarr [@tremor021](https://github.com/tremor021) ([#10573](https://github.com/community-scripts/ProxmoxVE/pull/10573))
|
||||
- Refactor: Dispatcharr [@tremor021](https://github.com/tremor021) ([#10599](https://github.com/community-scripts/ProxmoxVE/pull/10599))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- hwaccel: rewrite of GPU hardware acceleration support [@MickLesk](https://github.com/MickLesk) ([#10597](https://github.com/community-scripts/ProxmoxVE/pull/10597))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- iptag: fix syntax error in VM config file parsing [@MickLesk](https://github.com/MickLesk) ([#10598](https://github.com/community-scripts/ProxmoxVE/pull/10598))
|
||||
|
||||
- #### ✨ New Features
|
||||
|
||||
- Update clean-lxcs.sh to support Red Hat compatible distros [@jabofh](https://github.com/jabofh) ([#10583](https://github.com/community-scripts/ProxmoxVE/pull/10583))
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
- [gh] New Script template update [@tremor021](https://github.com/tremor021) ([#10607](https://github.com/community-scripts/ProxmoxVE/pull/10607))
|
||||
- chore: bump copyright to 2026 - happy new year [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10585](https://github.com/community-scripts/ProxmoxVE/pull/10585))
|
||||
|
||||
### 📂 Github
|
||||
|
||||
- re-add shellcheck exclusions [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10586](https://github.com/community-scripts/ProxmoxVE/pull/10586))
|
||||
|
||||
## 2026-01-05
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- #### 🐞 Bug Fixes
|
||||
|
||||
- reitti: add postgis extension to PostgreSQL DB setup [@MickLesk](https://github.com/MickLesk) ([#10555](https://github.com/community-scripts/ProxmoxVE/pull/10555))
|
||||
- openWRT: separate disk attachment and resizing in VM setup [@MickLesk](https://github.com/MickLesk) ([#10557](https://github.com/community-scripts/ProxmoxVE/pull/10557))
|
||||
- paperless-ai: Set TMPDIR for pip to use disk during install [@MickLesk](https://github.com/MickLesk) ([#10559](https://github.com/community-scripts/ProxmoxVE/pull/10559))
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: Monica [@tremor021](https://github.com/tremor021) ([#10552](https://github.com/community-scripts/ProxmoxVE/pull/10552))
|
||||
- Upgrade Wazuh LXC Container to Debian 13 [@heinemannj](https://github.com/heinemannj) ([#10551](https://github.com/community-scripts/ProxmoxVE/pull/10551))
|
||||
- Upgrade evcc LXC to Debian 13 [@heinemannj](https://github.com/heinemannj) ([#10548](https://github.com/community-scripts/ProxmoxVE/pull/10548))
|
||||
|
||||
### 💾 Core
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Harden setup_hwaccel for old Intel GPUs [@MickLesk](https://github.com/MickLesk) ([#10556](https://github.com/community-scripts/ProxmoxVE/pull/10556))
|
||||
|
||||
### 🧰 Tools
|
||||
|
||||
- #### 🔧 Refactor
|
||||
|
||||
- Refactor: IP-Tag (Multiple IP / Performance / Execution Time) [@MickLesk](https://github.com/MickLesk) ([#10558](https://github.com/community-scripts/ProxmoxVE/pull/10558))
|
||||
- fix: setup_mariadb hangs on [@CrazyWolf13](https://github.com/CrazyWolf13) ([#10672](https://github.com/community-scripts/ProxmoxVE/pull/10672))
|
||||
@@ -20,28 +20,9 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
if ! apk -e info newt >/dev/null 2>&1; then
|
||||
apk add -q newt
|
||||
fi
|
||||
while true; do
|
||||
CHOICE=$(
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 1 \
|
||||
"1" "Check for Docker Updates" 3>&2 2>&1 1>&3
|
||||
)
|
||||
exit_status=$?
|
||||
if [ $exit_status == 1 ]; then
|
||||
clear
|
||||
exit-script
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
header_info
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
@@ -20,43 +20,32 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
if ! apk -e info newt >/dev/null 2>&1; then
|
||||
apk add -q newt
|
||||
fi
|
||||
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
while true; do
|
||||
CHOICE=$(
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
|
||||
"1" "Check for Grafana Updates" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
|
||||
)
|
||||
exit_status=$?
|
||||
if [ $exit_status == 1 ]; then
|
||||
clear
|
||||
exit-script
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana
|
||||
service grafana restart
|
||||
msg_ok "Allowed listening on all interfaces!"
|
||||
exit
|
||||
;;
|
||||
3)
|
||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana
|
||||
service grafana restart
|
||||
msg_ok "Allowed listening only on ${LXCIP}!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
CHOICE=$(msg_menu "Grafana Update Options" \
|
||||
"1" "Check for Grafana Updates" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LXCIP} for listening")
|
||||
|
||||
case $CHOICE in
|
||||
1)
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana
|
||||
service grafana restart
|
||||
msg_ok "Allowed listening on all interfaces!"
|
||||
exit
|
||||
;;
|
||||
3)
|
||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana
|
||||
service grafana restart
|
||||
msg_ok "Allowed listening only on ${LXCIP}!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
@@ -20,43 +20,32 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
if ! apk -e info newt >/dev/null 2>&1; then
|
||||
apk add -q newt
|
||||
fi
|
||||
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
while true; do
|
||||
CHOICE=$(
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
|
||||
"1" "Check for Loki Updates" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
|
||||
)
|
||||
exit_status=$?
|
||||
if [ $exit_status == 1 ]; then
|
||||
clear
|
||||
exit-script
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki
|
||||
service loki restart
|
||||
msg_ok "Allowed listening on all interfaces!"
|
||||
exit
|
||||
;;
|
||||
3)
|
||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki
|
||||
service loki restart
|
||||
msg_ok "Allowed listening only on ${LXCIP}!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
CHOICE=$(msg_menu "Loki Update Options" \
|
||||
"1" "Check for Loki Updates" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LXCIP} for listening")
|
||||
|
||||
case $CHOICE in
|
||||
1)
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki
|
||||
service loki restart
|
||||
msg_ok "Allowed listening on all interfaces!"
|
||||
exit
|
||||
;;
|
||||
3)
|
||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki
|
||||
service loki restart
|
||||
msg_ok "Allowed listening only on ${LXCIP}!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
@@ -24,33 +24,31 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if ! apk -e info newt >/dev/null 2>&1; then
|
||||
apk add -q newt
|
||||
fi
|
||||
while true; do
|
||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 3 \
|
||||
"1" "Nextcloud Login Credentials" ON \
|
||||
"2" "Renew Self-signed Certificate" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
exit_status=$?
|
||||
if [ $exit_status == 1 ]; then
|
||||
clear
|
||||
exit-script
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
cat nextcloud.creds
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nextcloud-selfsigned.key -out /etc/ssl/certs/nextcloud-selfsigned.crt -subj "/C=US/O=Nextcloud/OU=Domain Control Validated/CN=nextcloud.local" >/dev/null 2>&1
|
||||
rc-service nginx restart
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
exit 0
|
||||
|
||||
CHOICE=$(msg_menu "Nextcloud Options" \
|
||||
"1" "Update Alpine Packages" \
|
||||
"2" "Nextcloud Login Credentials" \
|
||||
"3" "Renew Self-signed Certificate")
|
||||
|
||||
case $CHOICE in
|
||||
1)
|
||||
msg_info "Updating Alpine Packages"
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated Alpine Packages"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
cat nextcloud.creds
|
||||
exit
|
||||
;;
|
||||
3)
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nextcloud-selfsigned.key -out /etc/ssl/certs/nextcloud-selfsigned.crt -subj "/C=US/O=Nextcloud/OU=Domain Control Validated/CN=nextcloud.local" >/dev/null 2>&1
|
||||
rc-service nginx restart
|
||||
msg_ok "Renewed self-signed certificate"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -20,47 +20,36 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
if ! apk -e info newt >/dev/null 2>&1; then
|
||||
apk add -q newt
|
||||
fi
|
||||
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
while true; do
|
||||
CHOICE=$(
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Redis Management" --menu "Select option" 11 58 3 \
|
||||
"1" "Update Redis" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
|
||||
)
|
||||
exit_status=$?
|
||||
if [ $exit_status == 1 ]; then
|
||||
clear
|
||||
exit-script
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
msg_info "Updating Redis"
|
||||
apk update && apk upgrade redis
|
||||
rc-service redis restart
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
msg_info "Setting Redis to listen on all interfaces"
|
||||
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf
|
||||
rc-service redis restart
|
||||
msg_ok "Redis now listens on all interfaces!"
|
||||
exit
|
||||
;;
|
||||
3)
|
||||
msg_info "Setting Redis to listen only on ${LXCIP}"
|
||||
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/redis.conf
|
||||
rc-service redis restart
|
||||
msg_ok "Redis now listens only on ${LXCIP}!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
CHOICE=$(msg_menu "Redis Management" \
|
||||
"1" "Update Redis" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LXCIP} for listening")
|
||||
|
||||
case $CHOICE in
|
||||
1)
|
||||
msg_info "Updating Redis"
|
||||
apk update && apk upgrade redis
|
||||
rc-service redis restart
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
msg_info "Setting Redis to listen on all interfaces"
|
||||
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf
|
||||
rc-service redis restart
|
||||
msg_ok "Redis now listens on all interfaces!"
|
||||
exit
|
||||
;;
|
||||
3)
|
||||
msg_info "Setting Redis to listen only on ${LXCIP}"
|
||||
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/redis.conf
|
||||
rc-service redis restart
|
||||
msg_ok "Redis now listens only on ${LXCIP}!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -20,48 +20,37 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
if ! apk -e info newt >/dev/null 2>&1; then
|
||||
apk add -q newt
|
||||
fi
|
||||
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
while true; do
|
||||
CHOICE=$(
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Valkey Management" --menu "Select option" 11 58 3 \
|
||||
"1" "Update Valkey" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
|
||||
)
|
||||
exit_status=$?
|
||||
if [ $exit_status == 1 ]; then
|
||||
clear
|
||||
exit-script
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
msg_info "Updating Valkey"
|
||||
apk update && apk upgrade valkey
|
||||
rc-service valkey restart
|
||||
msg_ok "Updated Valkey"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
msg_info "Setting Valkey to listen on all interfaces"
|
||||
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf
|
||||
rc-service valkey restart
|
||||
msg_ok "Valkey now listens on all interfaces!"
|
||||
exit
|
||||
;;
|
||||
3)
|
||||
msg_info "Setting Valkey to listen only on ${LXCIP}"
|
||||
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf
|
||||
rc-service valkey restart
|
||||
msg_ok "Valkey now listens only on ${LXCIP}!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
CHOICE=$(msg_menu "Valkey Management" \
|
||||
"1" "Update Valkey" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LXCIP} for listening")
|
||||
|
||||
case $CHOICE in
|
||||
1)
|
||||
msg_info "Updating Valkey"
|
||||
apk update && apk upgrade valkey
|
||||
rc-service valkey restart
|
||||
msg_ok "Updated Valkey"
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
msg_info "Setting Valkey to listen on all interfaces"
|
||||
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf
|
||||
rc-service valkey restart
|
||||
msg_ok "Valkey now listens on all interfaces!"
|
||||
exit
|
||||
;;
|
||||
3)
|
||||
msg_info "Setting Valkey to listen only on ${LXCIP}"
|
||||
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf
|
||||
rc-service valkey restart
|
||||
msg_ok "Valkey now listens only on ${LXCIP}!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -20,45 +20,38 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
if ! apk -e info newt >/dev/null 2>&1; then
|
||||
apk add -q newt
|
||||
fi
|
||||
while true; do
|
||||
CHOICE=$(
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 2 \
|
||||
"1" "Update Vaultwarden" \
|
||||
"2" "Reset ADMIN_TOKEN" 3>&2 2>&1 1>&3
|
||||
)
|
||||
exit_status=$?
|
||||
if [ $exit_status == 1 ]; then
|
||||
clear
|
||||
exit-script
|
||||
CHOICE=$(msg_menu "Vaultwarden Update Options" \
|
||||
"1" "Update Vaultwarden" \
|
||||
"2" "Reset ADMIN_TOKEN")
|
||||
|
||||
case $CHOICE in
|
||||
1)
|
||||
$STD apk -U upgrade
|
||||
rc-service vaultwarden restart -q
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
if [[ "${PHS_SILENT:-0}" == "1" ]]; then
|
||||
msg_warn "Reset ADMIN_TOKEN requires interactive mode, skipping."
|
||||
exit
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
$STD apk -U upgrade
|
||||
rc-service vaultwarden restart -q
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
2)
|
||||
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Setup your ADMIN_TOKEN (make it strong)" 10 58 3>&1 1>&2 2>&3); then
|
||||
if [[ -z "$NEWTOKEN" ]]; then exit-script; fi
|
||||
if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi
|
||||
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
|
||||
if [[ ! -f /var/lib/vaultwarden/config.json ]]; then
|
||||
sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden
|
||||
else
|
||||
sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json
|
||||
fi
|
||||
rc-service vaultwarden restart -q
|
||||
read -r -s -p "Setup your ADMIN_TOKEN (make it strong): " NEWTOKEN
|
||||
echo ""
|
||||
if [[ -n "$NEWTOKEN" ]]; then
|
||||
if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi
|
||||
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
|
||||
if [[ ! -f /var/lib/vaultwarden/config.json ]]; then
|
||||
sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden
|
||||
else
|
||||
sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json
|
||||
fi
|
||||
clear
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
rc-service vaultwarden restart -q
|
||||
msg_ok "Admin token updated"
|
||||
fi
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -20,28 +20,10 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
if ! apk -e info newt >/dev/null 2>&1; then
|
||||
apk add -q newt
|
||||
fi
|
||||
while true; do
|
||||
CHOICE=$(
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 1 \
|
||||
"1" "Check for Zigbee2MQTT Updates" 3>&2 2>&1 1>&3
|
||||
)
|
||||
exit_status=$?
|
||||
if [ $exit_status == 1 ]; then
|
||||
clear
|
||||
exit-script
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
header_info
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
14
ct/alpine.sh
14
ct/alpine.sh
@@ -20,18 +20,10 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
UPD=$(
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \
|
||||
"1" "Check for Alpine Updates" ON \
|
||||
3>&1 1>&2 2>&3
|
||||
)
|
||||
|
||||
header_info
|
||||
if [ "$UPD" == "1" ]; then
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit 0
|
||||
fi
|
||||
$STD apk -U upgrade
|
||||
msg_ok "Updated successfully!"
|
||||
exit 0
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
55
ct/bichon.sh
Normal file
55
ct/bichon.sh
Normal file
@@ -0,0 +1,55 @@
|
||||
#!/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: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/rustmailer/bichon
|
||||
|
||||
APP="Bichon"
|
||||
var_tags="${var_tags:-email;archive}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
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 [[ ! -d /opt/bichon ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "bichon" "rustmailer/bichon"; then
|
||||
msg_info "Stopping service"
|
||||
systemctl stop bichon
|
||||
msg_ok "Stopped service"
|
||||
|
||||
cp /opt/bichon/bichon.env /tmp/bichon.env.backup
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "latest" "/opt/bichon" "bichon-*-x86_64-unknown-linux-gnu.tar.gz"
|
||||
cp /tmp/bichon.env.backup /opt/bichon/bichon.env
|
||||
|
||||
msg_info "Starting service"
|
||||
systemctl start bichon
|
||||
msg_ok "Service started"
|
||||
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}:15630${CL}"
|
||||
78
ct/checkmate.sh
Normal file
78
ct/checkmate.sh
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/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://github.com/bluewave-labs/Checkmate
|
||||
|
||||
APP="Checkmate"
|
||||
var_tags="${var_tags:-monitoring;uptime}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-10}"
|
||||
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/checkmate ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if check_for_gh_release "checkmate" "bluewave-labs/Checkmate"; then
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop checkmate-server checkmate-client nginx
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Backing up Data"
|
||||
cp /opt/checkmate/server/.env /opt/checkmate_server.env.bak
|
||||
[ -f /opt/checkmate/client/.env.local ] && cp /opt/checkmate/client/.env.local /opt/checkmate_client.env.local.bak
|
||||
msg_ok "Backed up Data"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate"
|
||||
|
||||
msg_info "Updating Checkmate Server"
|
||||
cd /opt/checkmate/server
|
||||
$STD npm install
|
||||
if [ -f package.json ]; then
|
||||
grep -q '"build"' package.json && $STD npm run build || true
|
||||
fi
|
||||
msg_ok "Updated Checkmate Server"
|
||||
|
||||
msg_info "Updating Checkmate Client"
|
||||
cd /opt/checkmate/client
|
||||
$STD npm install
|
||||
VITE_APP_API_BASE_URL="/api/v1" UPTIME_APP_API_BASE_URL="/api/v1" VITE_APP_LOG_LEVEL="warn" $STD npm run build
|
||||
msg_ok "Updated Checkmate Client"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
mv /opt/checkmate_server.env.bak /opt/checkmate/server/.env
|
||||
[ -f /opt/checkmate_client.env.local.bak ] && mv /opt/checkmate_client.env.local.bak /opt/checkmate/client/.env.local
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start checkmate-server checkmate-client nginx
|
||||
msg_ok "Started Services"
|
||||
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}${CL}"
|
||||
@@ -23,10 +23,9 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
|
||||
"1" "Update ${APP}" ON \
|
||||
"2" "Install ${APP} Worker" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
UPD=$(msg_menu "Cronicle Update Options" \
|
||||
"1" "Update ${APP}" \
|
||||
"2" "Install ${APP} Worker")
|
||||
|
||||
if [ "$UPD" == "1" ]; then
|
||||
if [[ ! -d /opt/cronicle ]]; then
|
||||
|
||||
@@ -37,17 +37,12 @@ function update_script() {
|
||||
msg_info "Stopped Service"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
ls /opt/*.tar.gz &>/dev/null && rm -f /opt/*.tar.gz
|
||||
backup_filename="/opt/${APP}_backup_$(date +%F).tar.gz"
|
||||
tar -czf "$backup_filename" -C /opt/fileflows Data
|
||||
msg_ok "Backup Created"
|
||||
|
||||
msg_info "Updating $APP to latest version"
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL https://fileflows.com/downloads/zip -o "$temp_file"
|
||||
$STD unzip -o -d /opt/fileflows "$temp_file"
|
||||
rm -rf "$temp_file"
|
||||
rm -rf "$backup_filename"
|
||||
msg_ok "Updated $APP to latest version"
|
||||
fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start fileflows
|
||||
|
||||
@@ -31,18 +31,27 @@ function update_script() {
|
||||
|
||||
APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
|
||||
if [[ $APP_VERSION =~ ^2\. ]]; then
|
||||
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ VERSION 2.x DETECTED" --yesno \
|
||||
"WARNING: Version $APP_VERSION detected!\n\nUpdating from version 2.x will CLEAR ALL CONFIGURATION.\n\nThis includes:\n• API tokens\n• User settings\n• Repository configurations\n• All custom settings\n\nDo you want to continue with the update process?" 15 70 --defaultno; then
|
||||
if [[ "${PHS_SILENT:-0}" == "1" ]]; then
|
||||
msg_warn "Version $APP_VERSION detected. Major version upgrade requires interactive confirmation, skipping."
|
||||
exit 75
|
||||
fi
|
||||
msg_warn "WARNING: Version $APP_VERSION detected!"
|
||||
msg_warn "Updating from version 2.x will CLEAR ALL CONFIGURATION."
|
||||
msg_warn "This includes: API tokens, User settings, Repository configurations, All custom settings"
|
||||
echo ""
|
||||
read -r -p "Do you want to continue? (y/N): " CONFIRM
|
||||
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ FINAL CONFIRMATION" --yesno \
|
||||
"FINAL WARNING: This update WILL clear all configuration!\n\nBEFORE PROCEEDING, please:\n\n• Copy API tokens to a safe location\n• Backup any custom configurations\n• Note down repository settings\n\nThis action CANNOT be undone!" 18 70 --defaultno; then
|
||||
whiptail --backtitle "Gitea Mirror Update" --title "Update Cancelled" --msgbox "Update process cancelled. Please backup your configuration before proceeding." 8 60
|
||||
msg_warn "FINAL WARNING: This update WILL clear all configuration!"
|
||||
msg_warn "Please ensure you have backed up API tokens, custom configurations, and repository settings."
|
||||
echo ""
|
||||
read -r -p "Final confirmation - proceed? (y/N): " CONFIRM2
|
||||
if [[ ! "$CONFIRM2" =~ ^[Yy]$ ]]; then
|
||||
msg_info "Update cancelled. Please backup your configuration before proceeding."
|
||||
exit 0
|
||||
fi
|
||||
whiptail --backtitle "Gitea Mirror Update" --title "Proceeding with Update" --msgbox \
|
||||
"Proceeding with version $APP_VERSION update.\n\nAll configuration will be cleared as warned." 8 50
|
||||
msg_info "Proceeding with version $APP_VERSION update. All configuration will be cleared as warned."
|
||||
rm -rf /opt/gitea-mirror
|
||||
fi
|
||||
|
||||
|
||||
6
ct/headers/bichon
Normal file
6
ct/headers/bichon
Normal file
@@ -0,0 +1,6 @@
|
||||
____ _ __
|
||||
/ __ )(_)____/ /_ ____ ____
|
||||
/ __ / / ___/ __ \/ __ \/ __ \
|
||||
/ /_/ / / /__/ / / / /_/ / / / /
|
||||
/_____/_/\___/_/ /_/\____/_/ /_/
|
||||
|
||||
6
ct/headers/checkmate
Normal file
6
ct/headers/checkmate
Normal file
@@ -0,0 +1,6 @@
|
||||
________ __ __
|
||||
/ ____/ /_ ___ _____/ /______ ___ ____ _/ /____
|
||||
/ / / __ \/ _ \/ ___/ //_/ __ `__ \/ __ `/ __/ _ \
|
||||
/ /___/ / / / __/ /__/ ,< / / / / / / /_/ / /_/ __/
|
||||
\____/_/ /_/\___/\___/_/|_/_/ /_/ /_/\__,_/\__/\___/
|
||||
|
||||
@@ -27,12 +27,11 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
|
||||
"1" "Update ALL Containers" ON \
|
||||
"2" "Remove ALL Unused Images" OFF \
|
||||
"3" "Install HACS" OFF \
|
||||
"4" "Install FileBrowser" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
UPD=$(msg_menu "Home Assistant Update Options" \
|
||||
"1" "Update ALL Containers" \
|
||||
"2" "Remove ALL Unused Images" \
|
||||
"3" "Install HACS" \
|
||||
"4" "Install FileBrowser")
|
||||
|
||||
if [ "$UPD" == "1" ]; then
|
||||
msg_info "Updating All Containers"
|
||||
|
||||
@@ -33,7 +33,8 @@ function update_script() {
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
PHP_VERSION="8.5" PHP_APACHE="YES" setup_php
|
||||
|
||||
setup_composer
|
||||
|
||||
msg_info "Creating a backup"
|
||||
mv /opt/koillection/ /opt/koillection-backup
|
||||
msg_ok "Backup created"
|
||||
|
||||
23
ct/loki.sh
23
ct/loki.sh
@@ -29,21 +29,13 @@ function update_script() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
while true; do
|
||||
CHOICE=$(
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
|
||||
"1" "Update Loki & Promtail" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LOCAL_IP} for listening" 3>&2 2>&1 1>&3
|
||||
)
|
||||
exit_status=$?
|
||||
if [ $exit_status == 1 ]; then
|
||||
clear
|
||||
exit-script
|
||||
fi
|
||||
header_info
|
||||
case $CHOICE in
|
||||
1)
|
||||
CHOICE=$(msg_menu "Loki Update Options" \
|
||||
"1" "Update Loki & Promtail" \
|
||||
"2" "Allow 0.0.0.0 for listening" \
|
||||
"3" "Allow only ${LOCAL_IP} for listening")
|
||||
|
||||
case $CHOICE in
|
||||
1)
|
||||
msg_info "Stopping Loki"
|
||||
systemctl stop loki
|
||||
if systemctl is-active --quiet promtail 2>/dev/null || dpkg -s promtail >/dev/null 2>&1; then
|
||||
@@ -85,7 +77,6 @@ function update_script() {
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
@@ -24,21 +24,9 @@ function update_script() {
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Meilisearch Update" --radiolist --cancel-button Exit-Script "Spacebar = Select" 10 58 2 \
|
||||
"1" "Update Meilisearch" ON \
|
||||
"2" "Update Meilisearch-UI" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
setup_meilisearch
|
||||
|
||||
if [ "$UPD" == "1" ]; then
|
||||
setup_meilisearch
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$UPD" == "2" ]; then
|
||||
if [[ ! -d /opt/meilisearch-ui ]]; then
|
||||
msg_error "No Meilisearch-UI Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if [[ -d /opt/meilisearch-ui ]]; then
|
||||
if check_for_gh_release "meilisearch-ui" "riccox/meilisearch-ui"; then
|
||||
msg_info "Stopping Meilisearch-UI"
|
||||
systemctl stop meilisearch-ui
|
||||
@@ -58,10 +46,11 @@ function update_script() {
|
||||
msg_info "Starting Meilisearch-UI"
|
||||
systemctl start meilisearch-ui
|
||||
msg_ok "Started Meilisearch-UI"
|
||||
msg_ok "Updated successfully!"
|
||||
fi
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -27,12 +27,12 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if check_for_gh_release "memos" "usememos/memos"; then
|
||||
if check_for_gh_release "memos" "usememos/memos" "v0.25.3"; then
|
||||
msg_info "Stopping service"
|
||||
systemctl stop memos
|
||||
msg_ok "Service stopped"
|
||||
|
||||
fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "latest" "/opt/memos" "memos*linux_amd64.tar.gz"
|
||||
fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "v0.25.3" "/opt/memos" "memos*linux_amd64.tar.gz"
|
||||
|
||||
msg_info "Starting service"
|
||||
systemctl start memos
|
||||
|
||||
@@ -11,7 +11,7 @@ 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_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
@@ -28,12 +28,6 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
|
||||
msg_error "This script is currently disabled due to an external issue with the OpenResty APT repository."
|
||||
msg_error "The repository's GPG key uses SHA-1 signatures, which are no longer accepted by Debian as of February 1, 2026."
|
||||
msg_error "The issue is tracked in openresty/openresty#1097"
|
||||
msg_error "For more details, see: https://github.com/community-scripts/ProxmoxVE/issues/11406"
|
||||
exit 1
|
||||
|
||||
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
|
||||
msg_error "Wrong Debian version detected!"
|
||||
msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
||||
@@ -145,15 +139,17 @@ function update_script() {
|
||||
"database": {
|
||||
"engine": "knex-native",
|
||||
"knex": {
|
||||
"client": "sqlite3",
|
||||
"client": "better-sqlite3",
|
||||
"connection": {
|
||||
"filename": "/data/database.sqlite"
|
||||
}
|
||||
},
|
||||
"useNullAsDefault": true
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
sed -i 's/"client": "sqlite3"/"client": "better-sqlite3"/' /app/config/production.json
|
||||
cd /app
|
||||
$STD yarn install --network-timeout 600000
|
||||
msg_ok "Initialized Backend"
|
||||
|
||||
@@ -27,12 +27,12 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
if check_for_gh_release "nocodb" "nocodb/nocodb"; then
|
||||
if check_for_gh_release "nocodb" "nocodb/nocodb" "0.301.1"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop nocodb
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "latest" "/opt/nocodb/" "Noco-linux-x64"
|
||||
fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "0.301.1" "/opt/nocodb/" "Noco-linux-x64"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start nocodb
|
||||
|
||||
@@ -27,10 +27,9 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
|
||||
"1" "Update ${APP}" ON \
|
||||
"2" "Install Themes" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
UPD=$(msg_menu "Node-Red Update Options" \
|
||||
"1" "Update ${APP}" \
|
||||
"2" "Install Themes")
|
||||
if [ "$UPD" == "1" ]; then
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
|
||||
@@ -49,32 +48,31 @@ function update_script() {
|
||||
exit
|
||||
fi
|
||||
if [ "$UPD" == "2" ]; then
|
||||
THEME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NODE-RED THEMES" --radiolist --cancel-button Exit-Script "Choose Theme" 15 58 6 \
|
||||
"aurora" "" OFF \
|
||||
"cobalt2" "" OFF \
|
||||
"dark" "" OFF \
|
||||
"dracula" "" OFF \
|
||||
"espresso-libre" "" OFF \
|
||||
"github-dark" "" OFF \
|
||||
"github-dark-default" "" OFF \
|
||||
"github-dark-dimmed" "" OFF \
|
||||
"midnight-red" "" ON \
|
||||
"monoindustrial" "" OFF \
|
||||
"monokai" "" OFF \
|
||||
"monokai-dimmed" "" OFF \
|
||||
"noctis" "" OFF \
|
||||
"oceanic-next" "" OFF \
|
||||
"oled" "" OFF \
|
||||
"one-dark-pro" "" OFF \
|
||||
"one-dark-pro-darker" "" OFF \
|
||||
"solarized-dark" "" OFF \
|
||||
"solarized-light" "" OFF \
|
||||
"tokyo-night" "" OFF \
|
||||
"tokyo-night-light" "" OFF \
|
||||
"tokyo-night-storm" "" OFF \
|
||||
"totallyinformation" "" OFF \
|
||||
"zenburn" "" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
THEME=$(msg_menu "Node-Red Themes" \
|
||||
"midnight-red" "Midnight Red (default)" \
|
||||
"aurora" "Aurora" \
|
||||
"cobalt2" "Cobalt2" \
|
||||
"dark" "Dark" \
|
||||
"dracula" "Dracula" \
|
||||
"espresso-libre" "Espresso Libre" \
|
||||
"github-dark" "GitHub Dark" \
|
||||
"github-dark-default" "GitHub Dark Default" \
|
||||
"github-dark-dimmed" "GitHub Dark Dimmed" \
|
||||
"monoindustrial" "Monoindustrial" \
|
||||
"monokai" "Monokai" \
|
||||
"monokai-dimmed" "Monokai Dimmed" \
|
||||
"noctis" "Noctis" \
|
||||
"oceanic-next" "Oceanic Next" \
|
||||
"oled" "OLED" \
|
||||
"one-dark-pro" "One Dark Pro" \
|
||||
"one-dark-pro-darker" "One Dark Pro Darker" \
|
||||
"solarized-dark" "Solarized Dark" \
|
||||
"solarized-light" "Solarized Light" \
|
||||
"tokyo-night" "Tokyo Night" \
|
||||
"tokyo-night-light" "Tokyo Night Light" \
|
||||
"tokyo-night-storm" "Tokyo Night Storm" \
|
||||
"totallyinformation" "TotallyInformation" \
|
||||
"zenburn" "Zenburn")
|
||||
header_info
|
||||
msg_info "Installing ${THEME} Theme"
|
||||
cd /root/.node-red
|
||||
|
||||
@@ -20,32 +20,21 @@ color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE MODE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 14 60 2 \
|
||||
"1" "Check for Alpine Updates" OFF \
|
||||
"2" "Update NPMplus Docker Container" ON \
|
||||
3>&1 1>&2 2>&3)
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
case "$UPD" in
|
||||
"1")
|
||||
msg_info "Updating Alpine OS"
|
||||
$STD apk -U upgrade
|
||||
msg_ok "System updated"
|
||||
exit
|
||||
;;
|
||||
"2")
|
||||
msg_info "Updating NPMplus Container"
|
||||
cd /opt
|
||||
msg_info "Pulling latest container image"
|
||||
$STD docker compose pull
|
||||
msg_info "Recreating container"
|
||||
$STD docker compose up -d
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
exit 0
|
||||
msg_info "Updating Alpine OS"
|
||||
$STD apk -U upgrade
|
||||
msg_ok "System updated"
|
||||
|
||||
msg_info "Pulling latest NPMplus container image"
|
||||
cd /opt
|
||||
$STD docker compose pull
|
||||
msg_info "Recreating container"
|
||||
$STD docker compose up -d
|
||||
msg_ok "Updated NPMplus container"
|
||||
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
|
||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-4096}"
|
||||
var_disk="${var_disk:-8}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_version="${var_version:-12}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
10
ct/peanut.sh
10
ct/peanut.sh
@@ -30,30 +30,30 @@ function update_script() {
|
||||
|
||||
NODE_VERSION="24" NODE_MODULE="pnpm" setup_nodejs
|
||||
|
||||
if check_for_gh_release "peanut" "Brandawg93/PeaNUT"; then
|
||||
if check_for_gh_release "PeaNUT" "Brandawg93/PeaNUT"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop peanut
|
||||
msg_info "Stopped Service"
|
||||
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PeaNUT" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
|
||||
|
||||
if ! grep -q '/opt/peanut/entrypoint.mjs' /etc/systemd/system/peanut.service; then
|
||||
msg_info "Fixing entrypoint"
|
||||
cd /opt/peanut
|
||||
ln -sf .next/standalone/server.js server.js
|
||||
sed -i 's|/opt/peanut/.next/standalone/server.js|/opt/peanut/entrypoint.mjs|' /etc/systemd/system/peanut.service
|
||||
systemctl daemon-reload
|
||||
msg_ok "Fixed entrypoint"
|
||||
fi
|
||||
|
||||
msg_info "Updating Peanut"
|
||||
msg_info "Updating PeaNUT"
|
||||
cd /opt/peanut
|
||||
$STD pnpm i
|
||||
$STD pnpm run build:local
|
||||
cp -r .next/static .next/standalone/.next/
|
||||
mkdir -p /opt/peanut/.next/standalone/config
|
||||
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
|
||||
msg_ok "Updated Peanut"
|
||||
ln -sf .next/standalone/server.js server.js
|
||||
msg_ok "Updated PeaNUT"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start peanut
|
||||
|
||||
@@ -29,10 +29,9 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select \nplexupdate info >> https://github.com/mrworf/plexupdate" 10 59 2 \
|
||||
"1" "Update LXC" ON \
|
||||
"2" "Install plexupdate" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
UPD=$(msg_menu "Plex Update Options" \
|
||||
"1" "Update LXC" \
|
||||
"2" "Install plexupdate")
|
||||
if [ "$UPD" == "1" ]; then
|
||||
msg_info "Updating ${APP} LXC"
|
||||
$STD apt update
|
||||
|
||||
@@ -27,12 +27,11 @@ function update_script() {
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
|
||||
"1" "Update system and containers" ON \
|
||||
"2" "Install HACS" OFF \
|
||||
"3" "Install FileBrowser" OFF \
|
||||
"4" "Remove ALL Unused Images" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
UPD=$(msg_menu "Home Assistant Update Options" \
|
||||
"1" "Update system and containers" \
|
||||
"2" "Install HACS" \
|
||||
"3" "Install FileBrowser" \
|
||||
"4" "Remove ALL Unused Images")
|
||||
|
||||
if [ "$UPD" == "1" ]; then
|
||||
msg_info "Updating ${APP} LXC"
|
||||
|
||||
@@ -10,8 +10,8 @@ var_tags="${var_tags:-dev_ops}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-2048}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_os="${var_os:-ubuntu}"
|
||||
var_version="${var_version:-24.04}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
|
||||
@@ -105,6 +105,7 @@ EOF
|
||||
cp -rf pnpm-lock.yaml /opt/tracearr/
|
||||
cp -rf apps/server/package.json /opt/tracearr/apps/server/
|
||||
cp -rf apps/server/dist /opt/tracearr/apps/server/dist
|
||||
cp -rf apps/server/scripts /opt/tracearr/apps/server/scripts
|
||||
cp -rf apps/web/dist /opt/tracearr/apps/web/dist
|
||||
cp -rf packages/shared/package.json /opt/tracearr/packages/shared/
|
||||
cp -rf packages/shared/dist /opt/tracearr/packages/shared/dist
|
||||
|
||||
@@ -33,7 +33,9 @@ function update_script() {
|
||||
systemctl stop umlautadaptarr
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
cp /opt/UmlautAdaptarr/appsettings.json /opt/UmlautAdaptarr/appsettings.json.bak
|
||||
fetch_and_deploy_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr" "prebuild" "latest" "/opt/UmlautAdaptarr" "linux-x64.zip"
|
||||
cp /opt/UmlautAdaptarr/appsettings.json.bak /opt/UmlautAdaptarr/appsettings.json
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start umlautadaptarr
|
||||
|
||||
@@ -31,11 +31,9 @@ function update_script() {
|
||||
VAULT=$(get_latest_github_release "dani-garcia/vaultwarden")
|
||||
WVRELEASE=$(get_latest_github_release "dani-garcia/bw_web_builds")
|
||||
|
||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 3 \
|
||||
"1" "VaultWarden $VAULT" ON \
|
||||
"2" "Web-Vault $WVRELEASE" OFF \
|
||||
"3" "Set Admin Token" OFF \
|
||||
3>&1 1>&2 2>&3)
|
||||
UPD=$(msg_menu "Vaultwarden Update Options" \
|
||||
"1" "Update VaultWarden + Web-Vault" \
|
||||
"2" "Set Admin Token")
|
||||
|
||||
if [ "$UPD" == "1" ]; then
|
||||
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
|
||||
@@ -59,14 +57,10 @@ function update_script() {
|
||||
msg_info "Starting Service"
|
||||
systemctl start vaultwarden
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "VaultWarden is already up-to-date"
|
||||
fi
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$UPD" == "2" ]; then
|
||||
if check_for_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop vaultwarden
|
||||
@@ -84,16 +78,22 @@ function update_script() {
|
||||
msg_info "Starting Service"
|
||||
systemctl start vaultwarden
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "Web-Vault is already up-to-date"
|
||||
fi
|
||||
|
||||
msg_ok "Updated successfully!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ "$UPD" == "3" ]; then
|
||||
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Set the ADMIN_TOKEN" 10 58 3>&1 1>&2 2>&3); then
|
||||
if [[ -z "$NEWTOKEN" ]]; then exit; fi
|
||||
if [ "$UPD" == "2" ]; then
|
||||
if [[ "${PHS_SILENT:-0}" == "1" ]]; then
|
||||
msg_warn "Set Admin Token requires interactive mode, skipping."
|
||||
exit
|
||||
fi
|
||||
read -r -s -p "Set the ADMIN_TOKEN: " NEWTOKEN
|
||||
echo ""
|
||||
if [[ -n "$NEWTOKEN" ]]; then
|
||||
ensure_dependencies argon2
|
||||
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -t 2 -m 16 -p 4 -l 64 -e)
|
||||
sed -i "s|ADMIN_TOKEN=.*|ADMIN_TOKEN='${TOKEN}'|" /opt/vaultwarden/.env
|
||||
|
||||
64
ct/wger.sh
64
ct/wger.sh
@@ -7,9 +7,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
||||
|
||||
APP="wger"
|
||||
var_tags="${var_tags:-management;fitness}"
|
||||
var_cpu="${var_cpu:-1}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-6}"
|
||||
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}"
|
||||
@@ -23,38 +23,44 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /home/wger ]]; then
|
||||
|
||||
if [[ ! -d /opt/wger ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||
|
||||
if check_for_gh_release "wger" "wger-project/wger"; then
|
||||
msg_info "Stopping Service"
|
||||
systemctl stop wger
|
||||
systemctl stop redis-server nginx celery celery-beat wger
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Updating $APP to v${RELEASE}"
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$temp_file"
|
||||
tar xzf "$temp_file"
|
||||
cp -rf wger-"$RELEASE"/* /home/wger/src
|
||||
cd /home/wger/src
|
||||
$STD pip install -r requirements_prod.txt --ignore-installed
|
||||
$STD pip install -e .
|
||||
$STD python3 manage.py migrate
|
||||
$STD python3 manage.py collectstatic --no-input
|
||||
$STD yarn install
|
||||
$STD yarn build:css:sass
|
||||
rm -rf "$temp_file"
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
msg_ok "Updated $APP to v${RELEASE}"
|
||||
msg_info "Backing up Data"
|
||||
cp -r /opt/wger/media /opt/wger_media_backup
|
||||
cp /opt/wger/.env /opt/wger_env_backup
|
||||
msg_ok "Backed up Data"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start wger
|
||||
msg_ok "Started Service"
|
||||
msg_ok "Updated successfully!"
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wger" "wger-project/wger" "tarball"
|
||||
|
||||
msg_info "Restoring Data"
|
||||
cp -r /opt/wger_media_backup/. /opt/wger/media
|
||||
cp /opt/wger_env_backup /opt/wger/.env
|
||||
rm -rf /opt/wger_media_backup /opt/wger_env_backup
|
||||
|
||||
msg_ok "Restored Data"
|
||||
|
||||
msg_info "Updating wger"
|
||||
cd /opt/wger
|
||||
set -a && source /opt/wger/.env && set +a
|
||||
export DJANGO_SETTINGS_MODULE=settings.main
|
||||
$STD uv pip install .
|
||||
$STD uv run python manage.py migrate
|
||||
$STD uv run python manage.py collectstatic --no-input
|
||||
msg_ok "Updated wger"
|
||||
|
||||
msg_info "Starting Services"
|
||||
systemctl start redis-server nginx celery celery-beat wger
|
||||
msg_ok "Started Services"
|
||||
msg_ok "Updated Successfully"
|
||||
fi
|
||||
exit
|
||||
}
|
||||
@@ -63,7 +69,7 @@ start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed successfully!\n"
|
||||
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}"
|
||||
|
||||
@@ -237,7 +237,6 @@ if [[ $# -gt 0 ]]; then
|
||||
# Check for --full flag
|
||||
if [[ "$1" == "--full" ]]; then
|
||||
UPDATE_ALL=true
|
||||
AUTO_DETECT=true
|
||||
shift # Remove --full from arguments
|
||||
fi
|
||||
|
||||
@@ -250,8 +249,10 @@ if [[ $# -gt 0 ]]; then
|
||||
REPO_NAME="$2"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# Try auto-detection
|
||||
fi
|
||||
|
||||
# Try auto-detection
|
||||
if [[ -z "$USERNAME" ]]; then
|
||||
if username=$(detect_username); then
|
||||
USERNAME="$username"
|
||||
print_success "Detected GitHub username: $USERNAME"
|
||||
@@ -261,14 +262,15 @@ else
|
||||
echo " ./setup-fork.sh YOUR_USERNAME"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if repo_name=$(detect_repo_name); then
|
||||
REPO_NAME="$repo_name"
|
||||
if [[ "$REPO_NAME" != "ProxmoxVE" ]]; then
|
||||
print_info "Detected custom repo name: $REPO_NAME"
|
||||
else
|
||||
print_success "Using default repo name: ProxmoxVE"
|
||||
fi
|
||||
# Auto-detect repo name if needed
|
||||
if repo_name=$(detect_repo_name); then
|
||||
REPO_NAME="$repo_name"
|
||||
if [[ "$REPO_NAME" != "ProxmoxVE" ]]; then
|
||||
print_info "Detected custom repo name: $REPO_NAME"
|
||||
else
|
||||
print_success "Using default repo name: ProxmoxVE"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
44
frontend/public/json/bichon.json
Normal file
44
frontend/public/json/bichon.json
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"name": "Bichon",
|
||||
"slug": "bichon",
|
||||
"categories": [
|
||||
7
|
||||
],
|
||||
"date_created": "2026-02-07",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 15630,
|
||||
"documentation": "https://github.com/rustmailer/bichon/wiki",
|
||||
"config_path": "/opt/bichon/bichon.env",
|
||||
"website": "https://github.com/rustmailer/bichon",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/bichon.webp",
|
||||
"description": "Bichon is an open-source email archiving system that synchronizes emails from IMAP servers, indexes them for full-text search, and provides a REST API for programmatic access. Unlike email clients, Bichon is designed for archiving and searching rather than sending/receiving emails. It runs as a standalone server application that continuously synchronizes configured email accounts and maintains a searchable local archive.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/bichon.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "admin",
|
||||
"password": "admin@bichon"
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "The Disk space initially allocated by the script is only a placeholder, as we can't know how much space you will ever need. You should increase it to match your workload.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Please copy your `BICHON_ENCRYPT_PASSWORD` from `/opt/bichon/bichon.env` to a safe place.",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
48
frontend/public/json/checkmate.json
Normal file
48
frontend/public/json/checkmate.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "Checkmate",
|
||||
"slug": "checkmate",
|
||||
"categories": [
|
||||
9
|
||||
],
|
||||
"date_created": "2026-02-07",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 5173,
|
||||
"documentation": "https://github.com/bluewave-labs/Checkmate#readme",
|
||||
"website": "https://github.com/bluewave-labs/Checkmate",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/checkmate.webp",
|
||||
"config_path": "/opt/checkmate/server/.env",
|
||||
"description": "Checkmate is an open source uptime and infrastructure monitoring application that helps you track the availability and performance of your services.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/checkmate.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 10,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Create your admin account on first login via the web interface.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Server API runs on port 52345, Client UI on port 5173.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "For PageSpeed monitoring, add a Google PageSpeed API key to the server .env file.",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated": "2026-02-07T12:07:39Z",
|
||||
"generated": "2026-02-09T12:16:55Z",
|
||||
"versions": [
|
||||
{
|
||||
"slug": "2fauth",
|
||||
@@ -109,9 +109,9 @@
|
||||
{
|
||||
"slug": "bentopdf",
|
||||
"repo": "alam00000/bentopdf",
|
||||
"version": "v2.1.0",
|
||||
"version": "v2.2.0",
|
||||
"pinned": false,
|
||||
"date": "2026-02-02T14:30:55Z"
|
||||
"date": "2026-02-09T07:07:40Z"
|
||||
},
|
||||
{
|
||||
"slug": "beszel",
|
||||
@@ -120,6 +120,13 @@
|
||||
"pinned": false,
|
||||
"date": "2026-02-01T19:02:42Z"
|
||||
},
|
||||
{
|
||||
"slug": "bichon",
|
||||
"repo": "rustmailer/bichon",
|
||||
"version": "0.3.7",
|
||||
"pinned": false,
|
||||
"date": "2026-01-28T12:47:09Z"
|
||||
},
|
||||
{
|
||||
"slug": "bitmagnet",
|
||||
"repo": "bitmagnet-io/bitmagnet",
|
||||
@@ -151,9 +158,9 @@
|
||||
{
|
||||
"slug": "byparr",
|
||||
"repo": "ThePhaseless/Byparr",
|
||||
"version": "v2.0.1",
|
||||
"version": "v2.1.0",
|
||||
"pinned": false,
|
||||
"date": "2025-09-11T20:29:38Z"
|
||||
"date": "2026-02-08T12:59:20Z"
|
||||
},
|
||||
{
|
||||
"slug": "bytestash",
|
||||
@@ -169,6 +176,13 @@
|
||||
"pinned": false,
|
||||
"date": "2025-07-29T16:39:18Z"
|
||||
},
|
||||
{
|
||||
"slug": "checkmate",
|
||||
"repo": "bluewave-labs/Checkmate",
|
||||
"version": "v3.3",
|
||||
"pinned": false,
|
||||
"date": "2026-01-28T14:25:25Z"
|
||||
},
|
||||
{
|
||||
"slug": "cleanuparr",
|
||||
"repo": "Cleanuparr/Cleanuparr",
|
||||
@@ -235,9 +249,9 @@
|
||||
{
|
||||
"slug": "dawarich",
|
||||
"repo": "Freika/dawarich",
|
||||
"version": "1.0.4",
|
||||
"version": "1.1.0",
|
||||
"pinned": false,
|
||||
"date": "2026-02-01T11:37:27Z"
|
||||
"date": "2026-02-08T14:42:45Z"
|
||||
},
|
||||
{
|
||||
"slug": "discopanel",
|
||||
@@ -270,9 +284,9 @@
|
||||
{
|
||||
"slug": "domain-monitor",
|
||||
"repo": "Hosteroid/domain-monitor",
|
||||
"version": "v1.1.1",
|
||||
"version": "v1.1.2",
|
||||
"pinned": false,
|
||||
"date": "2025-11-18T11:32:30Z"
|
||||
"date": "2026-02-09T06:29:34Z"
|
||||
},
|
||||
{
|
||||
"slug": "donetick",
|
||||
@@ -326,9 +340,9 @@
|
||||
{
|
||||
"slug": "firefly",
|
||||
"repo": "firefly-iii/firefly-iii",
|
||||
"version": "v6.4.17",
|
||||
"version": "v6.4.18",
|
||||
"pinned": false,
|
||||
"date": "2026-02-07T06:56:00Z"
|
||||
"date": "2026-02-08T07:28:00Z"
|
||||
},
|
||||
{
|
||||
"slug": "fladder",
|
||||
@@ -375,9 +389,9 @@
|
||||
{
|
||||
"slug": "ghostfolio",
|
||||
"repo": "ghostfolio/ghostfolio",
|
||||
"version": "2.236.0",
|
||||
"version": "2.237.0",
|
||||
"pinned": false,
|
||||
"date": "2026-02-05T19:30:11Z"
|
||||
"date": "2026-02-08T13:59:53Z"
|
||||
},
|
||||
{
|
||||
"slug": "gitea",
|
||||
@@ -543,9 +557,9 @@
|
||||
{
|
||||
"slug": "jackett",
|
||||
"repo": "Jackett/Jackett",
|
||||
"version": "v0.24.1060",
|
||||
"version": "v0.24.1074",
|
||||
"pinned": false,
|
||||
"date": "2026-02-07T05:55:27Z"
|
||||
"date": "2026-02-09T06:01:19Z"
|
||||
},
|
||||
{
|
||||
"slug": "joplin-server",
|
||||
@@ -753,16 +767,16 @@
|
||||
{
|
||||
"slug": "mediamanager",
|
||||
"repo": "maxdorninger/MediaManager",
|
||||
"version": "v1.12.1",
|
||||
"version": "v1.12.2",
|
||||
"pinned": false,
|
||||
"date": "2026-01-05T09:06:22Z"
|
||||
"date": "2026-02-08T19:18:29Z"
|
||||
},
|
||||
{
|
||||
"slug": "mediamtx",
|
||||
"repo": "bluenviron/mediamtx",
|
||||
"version": "v1.16.0",
|
||||
"version": "v1.16.1",
|
||||
"pinned": false,
|
||||
"date": "2026-01-31T15:38:51Z"
|
||||
"date": "2026-02-07T18:58:24Z"
|
||||
},
|
||||
{
|
||||
"slug": "meilisearch",
|
||||
@@ -774,16 +788,16 @@
|
||||
{
|
||||
"slug": "memos",
|
||||
"repo": "usememos/memos",
|
||||
"version": "v0.26.0",
|
||||
"pinned": false,
|
||||
"date": "2026-01-31T15:28:09Z"
|
||||
"version": "v0.25.3",
|
||||
"pinned": true,
|
||||
"date": "2025-11-25T15:40:41Z"
|
||||
},
|
||||
{
|
||||
"slug": "metube",
|
||||
"repo": "alexta69/metube",
|
||||
"version": "2026.02.06",
|
||||
"version": "2026.02.08",
|
||||
"pinned": false,
|
||||
"date": "2026-02-06T14:20:34Z"
|
||||
"date": "2026-02-08T17:01:37Z"
|
||||
},
|
||||
{
|
||||
"slug": "miniflux",
|
||||
@@ -823,9 +837,9 @@
|
||||
{
|
||||
"slug": "navidrome",
|
||||
"repo": "navidrome/navidrome",
|
||||
"version": "v0.60.0",
|
||||
"version": "v0.60.2",
|
||||
"pinned": false,
|
||||
"date": "2026-02-03T18:57:04Z"
|
||||
"date": "2026-02-07T19:42:33Z"
|
||||
},
|
||||
{
|
||||
"slug": "netbox",
|
||||
@@ -851,9 +865,9 @@
|
||||
{
|
||||
"slug": "nocodb",
|
||||
"repo": "nocodb/nocodb",
|
||||
"version": "0.301.2",
|
||||
"pinned": false,
|
||||
"date": "2026-01-21T16:23:04Z"
|
||||
"version": "0.301.1",
|
||||
"pinned": true,
|
||||
"date": "2026-01-14T13:13:33Z"
|
||||
},
|
||||
{
|
||||
"slug": "nodebb",
|
||||
@@ -991,9 +1005,9 @@
|
||||
{
|
||||
"slug": "peanut",
|
||||
"repo": "Brandawg93/PeaNUT",
|
||||
"version": "v5.21.2",
|
||||
"version": "v5.22.0",
|
||||
"pinned": false,
|
||||
"date": "2026-01-18T17:32:08Z"
|
||||
"date": "2026-02-08T00:32:25Z"
|
||||
},
|
||||
{
|
||||
"slug": "pelican-panel",
|
||||
@@ -1117,9 +1131,9 @@
|
||||
{
|
||||
"slug": "pulse",
|
||||
"repo": "rcourtman/Pulse",
|
||||
"version": "v5.1.2",
|
||||
"version": "v5.1.5",
|
||||
"pinned": false,
|
||||
"date": "2026-02-05T00:18:57Z"
|
||||
"date": "2026-02-08T12:19:53Z"
|
||||
},
|
||||
{
|
||||
"slug": "pve-scripts-local",
|
||||
@@ -1278,9 +1292,9 @@
|
||||
{
|
||||
"slug": "snowshare",
|
||||
"repo": "TuroYT/snowshare",
|
||||
"version": "v1.2.12",
|
||||
"version": "v1.3.3",
|
||||
"pinned": false,
|
||||
"date": "2026-01-30T13:35:56Z"
|
||||
"date": "2026-02-09T10:52:12Z"
|
||||
},
|
||||
{
|
||||
"slug": "sonarr",
|
||||
@@ -1292,9 +1306,9 @@
|
||||
{
|
||||
"slug": "speedtest-tracker",
|
||||
"repo": "alexjustesen/speedtest-tracker",
|
||||
"version": "v1.13.8",
|
||||
"version": "v1.13.9",
|
||||
"pinned": false,
|
||||
"date": "2026-02-04T19:24:23Z"
|
||||
"date": "2026-02-08T21:48:49Z"
|
||||
},
|
||||
{
|
||||
"slug": "spoolman",
|
||||
@@ -1334,9 +1348,9 @@
|
||||
{
|
||||
"slug": "tandoor",
|
||||
"repo": "TandoorRecipes/recipes",
|
||||
"version": "2.4.2",
|
||||
"version": "2.5.0",
|
||||
"pinned": false,
|
||||
"date": "2026-02-01T12:52:37Z"
|
||||
"date": "2026-02-08T13:23:02Z"
|
||||
},
|
||||
{
|
||||
"slug": "tasmoadmin",
|
||||
@@ -1432,9 +1446,9 @@
|
||||
{
|
||||
"slug": "trip",
|
||||
"repo": "itskovacs/TRIP",
|
||||
"version": "1.38.1",
|
||||
"version": "1.39.0",
|
||||
"pinned": false,
|
||||
"date": "2026-02-04T18:10:15Z"
|
||||
"date": "2026-02-07T16:59:51Z"
|
||||
},
|
||||
{
|
||||
"slug": "tududi",
|
||||
@@ -1509,9 +1523,9 @@
|
||||
{
|
||||
"slug": "vikunja",
|
||||
"repo": "go-vikunja/vikunja",
|
||||
"version": "v1.0.0",
|
||||
"version": "v1.1.0",
|
||||
"pinned": false,
|
||||
"date": "2026-01-28T11:12:59Z"
|
||||
"date": "2026-02-09T10:34:29Z"
|
||||
},
|
||||
{
|
||||
"slug": "wallabag",
|
||||
@@ -1614,9 +1628,9 @@
|
||||
{
|
||||
"slug": "yubal",
|
||||
"repo": "guillevc/yubal",
|
||||
"version": "v0.4.0",
|
||||
"version": "v0.4.2",
|
||||
"pinned": false,
|
||||
"date": "2026-02-06T21:25:24Z"
|
||||
"date": "2026-02-08T21:35:13Z"
|
||||
},
|
||||
{
|
||||
"slug": "zigbee2mqtt",
|
||||
|
||||
@@ -28,10 +28,14 @@
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "admin",
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "On first visit, the setup wizard will guide you to create an admin account and configure ACME email.",
|
||||
"type": "warning"
|
||||
},
|
||||
{
|
||||
"text": "Nginx runs on ports 80/443, Nginx UI management interface on port 9000.",
|
||||
"type": "info"
|
||||
@@ -39,10 +43,6 @@
|
||||
{
|
||||
"text": "SSL certificates can be managed automatically with Let's Encrypt integration.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "Initial Login data: `cat ~/nginx-ui.creds`",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"website": "https://nginxproxymanager.com/",
|
||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/nginx-proxy-manager.webp",
|
||||
"config_path": "",
|
||||
"disable": true,
|
||||
"disable": false,
|
||||
"disable_description": "This script is temporarily disabled due to an external issue with the OpenResty APT repository. The repository's GPG key uses SHA-1 signatures, which are no longer accepted by Debian as of February 1, 2026. This causes installation to fail with APT errors. The issue is tracked in openresty/openresty#1097. A workaround exists but requires manual configuration. The script will be re-enabled once OpenResty updates their repository signing key. For more details, see: https://github.com/community-scripts/ProxmoxVE/issues/11406",
|
||||
"description": "Nginx Proxy Manager is a tool that provides a web-based interface to manage Nginx reverse proxies. It enables users to easily and securely expose their services to the internet by providing features such as HTTPS encryption, domain mapping, and access control. It eliminates the need for manual configuration of Nginx reverse proxies, making it easy for users to quickly and securely expose their services to the public.",
|
||||
"install_methods": [
|
||||
@@ -25,15 +25,19 @@
|
||||
"ram": 2048,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": "admin@example.com",
|
||||
"password": "changeme"
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "On first launch, a setup wizard will guide you through creating an admin account. There are no default credentials.",
|
||||
"type": "info"
|
||||
},
|
||||
{
|
||||
"text": "You can install the specific one certbot you prefer, or you can Running /app/scripts/install-certbot-plugins within the Nginx Proxy Manager (NPM) LXC shell will install many common plugins. Important: This script does not install all Certbot plugins, as some require additional, external system dependencies (like specific packages for certain DNS providers). These external dependencies must be manually installed within the LXC container before you can successfully install and use the corresponding Certbot plugin. Consult the plugin's documentation for required packages.",
|
||||
"type": "info"
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"ram": 4096,
|
||||
"hdd": 8,
|
||||
"os": "Debian",
|
||||
"version": "13"
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
"os": "ubuntu",
|
||||
"version": "24.04"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
"type": "default",
|
||||
"script": "ct/wger.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 6,
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
"hdd": 8,
|
||||
"os": "debian",
|
||||
"version": "13"
|
||||
}
|
||||
@@ -33,7 +33,7 @@
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Enable proxy support by uncommenting this line in `/home/wger/src/settings.py` and pointing it to your URL: `# CSRF_TRUSTED_ORIGINS = ['http://127.0.0.1', 'https://my.domain.example.com']`, then restart the service `systemctl restart wger`.",
|
||||
"text": "This LXC also runs Celery and Redis to synchronize workouts and ingredients",
|
||||
"type": "info"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -32,6 +32,11 @@ import Note from "./_components/note";
|
||||
import { githubGist, nord } from "react-syntax-highlighter/dist/esm/styles/hljs";
|
||||
import SyntaxHighlighter from "react-syntax-highlighter";
|
||||
import { ScriptItem } from "../scripts/_components/script-item";
|
||||
import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu";
|
||||
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog";
|
||||
import { search } from "@/components/command-menu";
|
||||
import { basePath } from "@/config/site-config";
|
||||
import Image from "next/image";
|
||||
import { useTheme } from "next-themes";
|
||||
|
||||
const initialScript: Script = {
|
||||
@@ -65,8 +70,35 @@ export default function JSONGenerator() {
|
||||
const [isValid, setIsValid] = useState(false);
|
||||
const [categories, setCategories] = useState<Category[]>([]);
|
||||
const [currentTab, setCurrentTab] = useState<"json" | "preview">("json");
|
||||
const [selectedCategory, setSelectedCategory] = useState<string>("");
|
||||
const [searchQuery, setSearchQuery] = useState<string>("");
|
||||
const [isImportDialogOpen, setIsImportDialogOpen] = useState(false);
|
||||
const [zodErrors, setZodErrors] = useState<z.ZodError | null>(null);
|
||||
|
||||
const selectedCategoryObj = useMemo(
|
||||
() => categories.find(cat => cat.id.toString() === selectedCategory),
|
||||
[categories, selectedCategory]
|
||||
);
|
||||
|
||||
const allScripts = useMemo(
|
||||
() => categories.flatMap(cat => cat.scripts || []),
|
||||
[categories]
|
||||
);
|
||||
|
||||
const scripts = useMemo(() => {
|
||||
const query = searchQuery.trim()
|
||||
|
||||
if (query) {
|
||||
return search(allScripts, query)
|
||||
}
|
||||
|
||||
if (selectedCategoryObj) {
|
||||
return selectedCategoryObj.scripts || []
|
||||
}
|
||||
|
||||
return []
|
||||
}, [allScripts, selectedCategoryObj, searchQuery]);
|
||||
|
||||
useEffect(() => {
|
||||
fetchCategories()
|
||||
.then(setCategories)
|
||||
@@ -120,6 +152,53 @@ export default function JSONGenerator() {
|
||||
if (isValid) toast.success("Copied metadata to clipboard");
|
||||
}, [script]);
|
||||
|
||||
const importScript = (script: Script) => {
|
||||
try {
|
||||
const result = ScriptSchema.safeParse(script);
|
||||
if (!result.success) {
|
||||
setIsValid(false);
|
||||
setZodErrors(result.error);
|
||||
toast.error("Imported JSON is invalid according to the schema.");
|
||||
return;
|
||||
}
|
||||
|
||||
setScript(result.data);
|
||||
setIsValid(true);
|
||||
setZodErrors(null);
|
||||
toast.success("Imported JSON successfully");
|
||||
} catch (error) {
|
||||
toast.error("Failed to read or parse the JSON file.");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const handleFileImport = useCallback(() => {
|
||||
const input = document.createElement("input");
|
||||
input.type = "file";
|
||||
input.accept = "application/json";
|
||||
|
||||
input.onchange = (e: Event) => {
|
||||
const target = e.target as HTMLInputElement;
|
||||
const file = target.files?.[0];
|
||||
if (!file) return;
|
||||
|
||||
const reader = new FileReader();
|
||||
reader.onload = (event) => {
|
||||
try {
|
||||
const content = event.target?.result as string;
|
||||
const parsed = JSON.parse(content);
|
||||
importScript(parsed);
|
||||
toast.success("Imported JSON successfully");
|
||||
} catch (error) {
|
||||
toast.error("Failed to read the JSON file.");
|
||||
}
|
||||
};
|
||||
reader.readAsText(file);
|
||||
};
|
||||
|
||||
input.click();
|
||||
}, [setScript]);
|
||||
|
||||
const handleDownload = useCallback(() => {
|
||||
if (isValid === false) {
|
||||
toast.error("Cannot download invalid JSON");
|
||||
@@ -177,7 +256,94 @@ export default function JSONGenerator() {
|
||||
return (
|
||||
<div className="flex h-screen mt-20">
|
||||
<div className="w-1/2 p-4 overflow-y-auto">
|
||||
<h2 className="text-2xl font-bold mb-4">JSON Generator</h2>
|
||||
<div className="flex justify-between items-center mb-4">
|
||||
<h2 className="text-2xl font-bold">JSON Generator</h2>
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
<Button>Import</Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent className="w-52" align="start">
|
||||
<DropdownMenuGroup>
|
||||
<DropdownMenuItem onSelect={handleFileImport}>Import local JSON file</DropdownMenuItem>
|
||||
<Dialog
|
||||
open={isImportDialogOpen}
|
||||
onOpenChange={setIsImportDialogOpen}
|
||||
>
|
||||
<DialogTrigger asChild>
|
||||
<DropdownMenuItem onSelect={(e) => e.preventDefault()}>
|
||||
Import existing script
|
||||
</DropdownMenuItem>
|
||||
</DialogTrigger>
|
||||
<DialogContent className="sm:max-w-md w-full">
|
||||
<DialogHeader>
|
||||
<DialogTitle>Import existing script</DialogTitle>
|
||||
<DialogDescription>
|
||||
Select one of the puplished scripts to import its metadata.
|
||||
</DialogDescription>
|
||||
|
||||
</DialogHeader>
|
||||
<div className="flex items-center gap-2">
|
||||
<div className="grid flex-1 gap-2">
|
||||
<Select
|
||||
value={selectedCategory}
|
||||
onValueChange={setSelectedCategory}
|
||||
>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="Category" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{categories.map((category) => (
|
||||
<SelectItem key={category.id} value={category.id.toString()}>
|
||||
{category.name}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<Input
|
||||
placeholder="Search for a script..."
|
||||
value={searchQuery}
|
||||
onChange={(e) => setSearchQuery(e.target.value)}
|
||||
/>
|
||||
{!selectedCategory && !searchQuery ? (
|
||||
<p className="text-muted-foreground text-sm text-center">
|
||||
Select a category or search for a script
|
||||
</p>
|
||||
) : scripts.length === 0 ? (
|
||||
<p className="text-muted-foreground text-sm text-center">
|
||||
No scripts found
|
||||
</p>
|
||||
) : (
|
||||
<div className="grid grid-cols-3 auto-rows-min h-64 overflow-y-auto gap-4">
|
||||
{scripts.map(script => (
|
||||
<div
|
||||
key={script.slug}
|
||||
className="p-2 border rounded cursor-pointer hover:bg-accent hover:text-accent-foreground"
|
||||
onClick={() => {
|
||||
importScript(script);
|
||||
setIsImportDialogOpen(false);
|
||||
}}
|
||||
>
|
||||
<Image
|
||||
src={script.logo || `/${basePath}/logo.png`}
|
||||
alt={script.name}
|
||||
className="w-full h-12 object-contain mb-2"
|
||||
width={16}
|
||||
height={16}
|
||||
unoptimized
|
||||
/>
|
||||
<p className="text-sm text-center">{script.name}</p>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
</DropdownMenuGroup>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
</div>
|
||||
<form className="space-y-4">
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
|
||||
@@ -23,7 +23,7 @@ import { Button } from "./ui/button";
|
||||
import { Badge } from "./ui/badge";
|
||||
import Link from "next/link";
|
||||
|
||||
function search(scripts: Script[], query: string): Script[] {
|
||||
export function search(scripts: Script[], query: string): Script[] {
|
||||
const queryLower = query.toLowerCase().trim();
|
||||
const searchWords = queryLower.split(/\s+/).filter(Boolean);
|
||||
|
||||
|
||||
65
install/bichon-install.sh
Normal file
65
install/bichon-install.sh
Normal file
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2026 community-scripts ORG
|
||||
# Author: Slaviša Arežina (tremor021)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/rustmailer/bichon
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "bichon" "rustmailer/bichon" "prebuild" "latest" "/opt/bichon" "bichon-*-x86_64-unknown-linux-gnu.tar.gz"
|
||||
|
||||
read -r -p "${TAB3}Enter the public URL for Bichon (e.g., https://bichon.yourdomain.com) or leave empty to use container IP: " bichon_url
|
||||
if [[ -z "$bichon_url" ]]; then
|
||||
msg_info "No URL provided"
|
||||
BICHON_PUBLIC_URL="http://$LOCAL_IP:15630"
|
||||
msg_ok "Using local IP: http://$LOCAL_IP:15630\n"
|
||||
else
|
||||
msg_info "URL provided"
|
||||
BICHON_PUBLIC_URL="$bichon_url"
|
||||
msg_ok "Using provided URL: $BICHON_PUBLIC_URL\n"
|
||||
fi
|
||||
|
||||
msg_info "Setting up Bichon"
|
||||
mkdir -p /opt/bichon-data
|
||||
BICHON_ENC_PASSWORD=$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-32)
|
||||
|
||||
cat <<EOF >/opt/bichon/bichon.env
|
||||
BICHON_ROOT_DIR=/opt/bichon-data
|
||||
BICHON_LOG_LEVEL=info
|
||||
BICHON_ENCRYPT_PASSWORD=$BICHON_ENC_PASSWORD
|
||||
BICHON_PUBLIC_URL=$BICHON_PUBLIC_URL
|
||||
BICHON_CORS_ORIGINS=$BICHON_PUBLIC_URL
|
||||
EOF
|
||||
msg_ok "Setup Bichon"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/bichon.service
|
||||
[Unit]
|
||||
Description=Bichon service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
EnvironmentFile=/opt/bichon/bichon.env
|
||||
WorkingDirectory=/opt/bichon
|
||||
ExecStart=/opt/bichon/bichon
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now bichon
|
||||
msg_info "Created Service"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
132
install/checkmate-install.sh
Normal file
132
install/checkmate-install.sh
Normal file
@@ -0,0 +1,132 @@
|
||||
#!/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://github.com/bluewave-labs/Checkmate
|
||||
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
build-essential \
|
||||
openssl \
|
||||
nginx
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
MONGO_VERSION="8.0" setup_mongodb
|
||||
NODE_VERSION="22" setup_nodejs
|
||||
fetch_and_deploy_gh_release "checkmate" "bluewave-labs/Checkmate"
|
||||
|
||||
msg_info "Configuring Checkmate"
|
||||
JWT_SECRET="$(openssl rand -hex 32)"
|
||||
cat <<EOF >/opt/checkmate/server/.env
|
||||
CLIENT_HOST="http://${LOCAL_IP}"
|
||||
JWT_SECRET="${JWT_SECRET}"
|
||||
DB_CONNECTION_STRING="mongodb://localhost:27017/checkmate_db"
|
||||
TOKEN_TTL="99d"
|
||||
ORIGIN="${LOCAL_IP}"
|
||||
LOG_LEVEL="info"
|
||||
SERVER_HOST=0.0.0.0
|
||||
SERVER_PORT=52345
|
||||
EOF
|
||||
cat <<EOF >/opt/checkmate/client/.env.local
|
||||
VITE_APP_API_BASE_URL="/api/v1"
|
||||
UPTIME_APP_API_BASE_URL="/api/v1"
|
||||
VITE_APP_LOG_LEVEL="warn"
|
||||
EOF
|
||||
msg_ok "Configured Checkmate"
|
||||
|
||||
msg_info "Installing Checkmate Server"
|
||||
cd /opt/checkmate/server
|
||||
$STD npm install
|
||||
$STD npm run build
|
||||
msg_ok "Installed Checkmate Server"
|
||||
|
||||
msg_info "Installing Checkmate Client"
|
||||
cd /opt/checkmate/client
|
||||
$STD npm install
|
||||
VITE_APP_API_BASE_URL="/api/v1" UPTIME_APP_API_BASE_URL="/api/v1" VITE_APP_LOG_LEVEL="warn" $STD npm run build
|
||||
msg_ok "Installed Checkmate Client"
|
||||
|
||||
msg_info "Creating Services"
|
||||
cat <<EOF >/etc/systemd/system/checkmate-server.service
|
||||
[Unit]
|
||||
Description=Checkmate Server
|
||||
After=network.target mongod.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/checkmate/server
|
||||
EnvironmentFile=/opt/checkmate/server/.env
|
||||
ExecStart=/usr/bin/npm start
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
cat <<EOF >/etc/systemd/system/checkmate-client.service
|
||||
[Unit]
|
||||
Description=Checkmate Client
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/checkmate/client
|
||||
ExecStart=/usr/bin/npm run preview -- --host 127.0.0.1 --port 5173
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
$STD systemctl enable -q --now checkmate-server
|
||||
$STD systemctl enable -q --now checkmate-client
|
||||
msg_ok "Created Services"
|
||||
|
||||
msg_info "Configuring Nginx Reverse Proxy"
|
||||
cat <<EOF >/etc/nginx/sites-available/checkmate
|
||||
server {
|
||||
listen 80 default_server;
|
||||
server_name _;
|
||||
|
||||
client_max_body_size 100M;
|
||||
|
||||
# Client UI
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:5173;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade \$http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host \$host;
|
||||
proxy_set_header X-Real-IP \$remote_addr;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
}
|
||||
|
||||
# API Server
|
||||
location /api/v1/ {
|
||||
proxy_pass http://127.0.0.1:52345/api/v1/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Host \$host;
|
||||
proxy_set_header X-Real-IP \$remote_addr;
|
||||
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
ln -sf /etc/nginx/sites-available/checkmate /etc/nginx/sites-enabled/checkmate
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
$STD systemctl reload nginx
|
||||
msg_ok "Configured Nginx Reverse Proxy"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
cleanup_lxc
|
||||
@@ -37,26 +37,42 @@ fetch_and_deploy_gh_release "ComfyUI" "comfyanonymous/ComfyUI" "tarball" "latest
|
||||
|
||||
msg_info "Python dependencies"
|
||||
$STD uv venv "/opt/ComfyUI/venv"
|
||||
|
||||
if [[ "${comfyui_gpu_type,,}" == "nvidia" ]]; then
|
||||
pytorch_url="https://download.pytorch.org/whl/cu130"
|
||||
if [[ -f "/opt/ComfyUI/README.md" ]]; then
|
||||
extracted=$(grep -oP 'pip install.*?--extra-index-url\s+\Khttps://download\.pytorch\.org/whl/cu\d+' /opt/ComfyUI/README.md | head -1 || true)
|
||||
[[ -n "$extracted" ]] && pytorch_url="$extracted"
|
||||
fi
|
||||
$STD uv pip install \
|
||||
torch \
|
||||
torchvision \
|
||||
torchaudio \
|
||||
--extra-index-url "https://download.pytorch.org/whl/cu128" \
|
||||
--extra-index-url "$pytorch_url" \
|
||||
--python="/opt/ComfyUI/venv/bin/python"
|
||||
elif [[ "${comfyui_gpu_type,,}" == "amd" ]]; then
|
||||
pytorch_url="https://download.pytorch.org/whl/rocm6.4"
|
||||
if [[ -f "/opt/ComfyUI/README.md" ]]; then
|
||||
extracted=$(grep -oP 'pip install.*?--index-url\s+\Khttps://download\.pytorch\.org/whl/rocm[\d.]+' /opt/ComfyUI/README.md | grep -v 'nightly' | head -1 || true)
|
||||
[[ -n "$extracted" ]] && pytorch_url="$extracted"
|
||||
fi
|
||||
$STD uv pip install \
|
||||
torch \
|
||||
torchvision \
|
||||
torchaudio \
|
||||
--index-url "https://download.pytorch.org/whl/rocm6.3" \
|
||||
--index-url "$pytorch_url" \
|
||||
--python="/opt/ComfyUI/venv/bin/python"
|
||||
elif [[ "${comfyui_gpu_type,,}" == "intel" ]]; then
|
||||
pytorch_url="https://download.pytorch.org/whl/xpu"
|
||||
if [[ -f "/opt/ComfyUI/README.md" ]]; then
|
||||
extracted=$(grep -oP 'pip install.*?--index-url\s+\Khttps://download\.pytorch\.org/whl/xpu' /opt/ComfyUI/README.md | head -1 || true)
|
||||
[[ -n "$extracted" ]] && pytorch_url="$extracted"
|
||||
fi
|
||||
$STD uv pip install \
|
||||
torch \
|
||||
torchvision \
|
||||
torchaudio \
|
||||
--index-url "https://download.pytorch.org/whl/xpu" \
|
||||
--index-url "$pytorch_url" \
|
||||
--python="/opt/ComfyUI/venv/bin/python"
|
||||
fi
|
||||
$STD uv pip install -r "/opt/ComfyUI/requirements.txt" --python="/opt/ComfyUI/venv/bin/python"
|
||||
|
||||
@@ -15,31 +15,30 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y \
|
||||
$STD apt install -y \
|
||||
ffmpeg \
|
||||
jq \
|
||||
imagemagick
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
setup_hwaccel
|
||||
|
||||
msg_info "Installing ASP.NET Core Runtime"
|
||||
curl -fsSL https://packages.microsoft.com/config/debian/13/packages-microsoft-prod.deb -o packages-microsoft-prod.deb
|
||||
$STD dpkg -i packages-microsoft-prod.deb
|
||||
rm -rf packages-microsoft-prod.deb
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y aspnetcore-runtime-8.0
|
||||
setup_deb822_repo \
|
||||
"microsoft" \
|
||||
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||
"https://packages.microsoft.com/debian/13/prod/" \
|
||||
"trixie"
|
||||
$STD apt install -y aspnetcore-runtime-8.0
|
||||
msg_ok "Installed ASP.NET Core Runtime"
|
||||
|
||||
fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows"
|
||||
|
||||
msg_info "Setup FileFlows"
|
||||
$STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg
|
||||
$STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe
|
||||
temp_file=$(mktemp)
|
||||
curl -fsSL https://fileflows.com/downloads/zip -o "$temp_file"
|
||||
$STD unzip -d /opt/fileflows "$temp_file"
|
||||
$STD bash -c "cd /opt/fileflows/Server && dotnet FileFlows.Server.dll --systemd install --root true"
|
||||
cd /opt/fileflows/Server
|
||||
dotnet FileFlows.Server.dll --systemd install --root true
|
||||
systemctl enable -q --now fileflows
|
||||
rm -f "$temp_file"
|
||||
msg_ok "Setup FileFlows"
|
||||
|
||||
motd_ssh
|
||||
|
||||
@@ -108,7 +108,7 @@ ${LOCAL_IP} {
|
||||
EOF
|
||||
msg_ok "Configured Caddy"
|
||||
|
||||
msg_info "Creating systemd service"
|
||||
msg_info "Creating systemd services"
|
||||
cat <<EOF >/etc/systemd/system/healthchecks.service
|
||||
[Unit]
|
||||
Description=Healthchecks Service
|
||||
@@ -123,9 +123,23 @@ Restart=always
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable -q --now healthchecks caddy
|
||||
cat <<EOF >/etc/systemd/system/healthchecks-sendalerts.service
|
||||
[Unit]
|
||||
Description=Healthchecks Sendalerts Service
|
||||
After=network.target postgresql.service healthchecks.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/healthchecks/
|
||||
ExecStart=/opt/healthchecks/venv/bin/python manage.py sendalerts
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
systemctl enable -q --now healthchecks healthchecks-sendalerts caddy
|
||||
systemctl reload caddy
|
||||
msg_ok "Created Service"
|
||||
msg_ok "Created Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
@@ -14,7 +14,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "latest" "/opt/memos" "memos*linux_amd64.tar.gz"
|
||||
fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "v0.25.3" "/opt/memos" "memos*linux_amd64.tar.gz"
|
||||
mkdir -p /opt/memos_data
|
||||
|
||||
msg_info "Creating Service"
|
||||
|
||||
@@ -30,29 +30,19 @@ msg_ok "Installed Nginx UI"
|
||||
msg_info "Configuring Nginx UI"
|
||||
mkdir -p /usr/local/etc/nginx-ui
|
||||
cat <<EOF >/usr/local/etc/nginx-ui/app.ini
|
||||
[server]
|
||||
HttpHost = 0.0.0.0
|
||||
HttpPort = 9000
|
||||
RunMode = release
|
||||
JwtSecret = $(openssl rand -hex 32)
|
||||
|
||||
[nginx]
|
||||
AccessLogPath = /var/log/nginx/access.log
|
||||
ErrorLogPath = /var/log/nginx/error.log
|
||||
ConfigDir = /etc/nginx
|
||||
PIDPath = /run/nginx.pid
|
||||
TestConfigCmd = nginx -t
|
||||
ReloadCmd = nginx -s reload
|
||||
RestartCmd = systemctl restart nginx
|
||||
|
||||
[app]
|
||||
PageSize = 10
|
||||
|
||||
[server]
|
||||
Host = 0.0.0.0
|
||||
Port = 9000
|
||||
RunMode = release
|
||||
|
||||
[cert]
|
||||
Email =
|
||||
CADir =
|
||||
RenewalInterval = 7
|
||||
RecursiveNameservers =
|
||||
HTTPChallengePort = 9180
|
||||
|
||||
[terminal]
|
||||
StartCmd = login
|
||||
EOF
|
||||
msg_ok "Configured Nginx UI"
|
||||
|
||||
@@ -78,17 +68,6 @@ EOF
|
||||
systemctl daemon-reload
|
||||
msg_ok "Created Service"
|
||||
|
||||
msg_info "Creating Initial Admin User"
|
||||
systemctl start nginx-ui
|
||||
sleep 3
|
||||
systemctl stop nginx-ui
|
||||
sleep 1
|
||||
/usr/local/bin/nginx-ui reset-password --config /usr/local/etc/nginx-ui/app.ini &>/tmp/nginx-ui-reset.log || true
|
||||
ADMIN_PASS=$(grep -oP 'Password: \K\S+' /tmp/nginx-ui-reset.log || echo "admin")
|
||||
echo -e "Nginx-UI Credentials\nUsername: admin\nPassword: $ADMIN_PASS" >~/nginx-ui.creds
|
||||
rm -f /tmp/nginx-ui-reset.log
|
||||
msg_ok "Created Initial Admin User"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl enable -q --now nginx-ui
|
||||
rm -rf /etc/nginx/sites-enabled/default
|
||||
|
||||
@@ -130,10 +130,11 @@ if [ ! -f /app/config/production.json ]; then
|
||||
"database": {
|
||||
"engine": "knex-native",
|
||||
"knex": {
|
||||
"client": "sqlite3",
|
||||
"client": "better-sqlite3",
|
||||
"connection": {
|
||||
"filename": "/data/database.sqlite"
|
||||
}
|
||||
},
|
||||
"useNullAsDefault": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ setting_up_container
|
||||
network_check
|
||||
update_os
|
||||
|
||||
fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "latest" "/opt/nocodb/" "Noco-linux-x64"
|
||||
fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "0.301.1" "/opt/nocodb/" "Noco-linux-x64"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/nocodb.service
|
||||
|
||||
@@ -14,13 +14,9 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y git
|
||||
setup_deb822_repo \
|
||||
"ansible" \
|
||||
"https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" \
|
||||
"http://ppa.launchpad.net/ansible/ansible/ubuntu" \
|
||||
"noble"
|
||||
$STD apt install -y ansible
|
||||
$STD apt install -y \
|
||||
git \
|
||||
ansible
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary" "latest" "/opt/semaphore" "semaphore_*_linux_amd64.deb"
|
||||
|
||||
@@ -59,6 +59,7 @@ cp -rf pnpm-workspace.yaml /opt/tracearr/
|
||||
cp -rf pnpm-lock.yaml /opt/tracearr/
|
||||
cp -rf apps/server/package.json /opt/tracearr/apps/server/
|
||||
cp -rf apps/server/dist /opt/tracearr/apps/server/dist
|
||||
cp -rf apps/server/scripts /opt/tracearr/apps/server/scripts
|
||||
cp -rf apps/web/dist /opt/tracearr/apps/web/dist
|
||||
cp -rf packages/shared/package.json /opt/tracearr/packages/shared/
|
||||
cp -rf packages/shared/dist /opt/tracearr/packages/shared/dist
|
||||
|
||||
@@ -27,68 +27,6 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
fetch_and_deploy_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr" "prebuild" "latest" "/opt/UmlautAdaptarr" "linux-x64.zip"
|
||||
|
||||
msg_info "Setting up UmlautAdaptarr"
|
||||
cat <<EOF >/opt/UmlautAdaptarr/appsettings.json
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
},
|
||||
"Console": {
|
||||
"TimestampFormat": "yyyy-MM-dd HH:mm:ss::"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"Kestrel": {
|
||||
"Endpoints": {
|
||||
"Http": {
|
||||
"Url": "http://[::]:5005"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Settings": {
|
||||
"UserAgent": "UmlautAdaptarr/1.0",
|
||||
"UmlautAdaptarrApiHost": "https://umlautadaptarr.pcjones.de/api/v1",
|
||||
"IndexerRequestsCacheDurationInMinutes": 12
|
||||
},
|
||||
"Sonarr": [
|
||||
{
|
||||
"Enabled": false,
|
||||
"Name": "Sonarr",
|
||||
"Host": "http://192.168.1.100:8989",
|
||||
"ApiKey": "dein_sonarr_api_key"
|
||||
}
|
||||
],
|
||||
"Radarr": [
|
||||
{
|
||||
"Enabled": false,
|
||||
"Name": "Radarr",
|
||||
"Host": "http://192.168.1.101:7878",
|
||||
"ApiKey": "dein_radarr_api_key"
|
||||
}
|
||||
],
|
||||
"Lidarr": [
|
||||
{
|
||||
"Enabled": false,
|
||||
"Host": "http://192.168.1.102:8686",
|
||||
"ApiKey": "dein_lidarr_api_key"
|
||||
},
|
||||
],
|
||||
"Readarr": [
|
||||
{
|
||||
"Enabled": false,
|
||||
"Host": "http://192.168.1.103:8787",
|
||||
"ApiKey": "dein_readarr_api_key"
|
||||
},
|
||||
],
|
||||
"IpLeakTest": {
|
||||
"Enabled": false
|
||||
}
|
||||
}
|
||||
EOF
|
||||
msg_ok "Setup UmlautAdaptarr"
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/systemd/system/umlautadaptarr.service
|
||||
[Unit]
|
||||
|
||||
@@ -15,92 +15,167 @@ update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt install -y \
|
||||
git \
|
||||
apache2 \
|
||||
libapache2-mod-wsgi-py3
|
||||
build-essential \
|
||||
nginx \
|
||||
redis-server \
|
||||
libpq-dev
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Python"
|
||||
$STD apt install -y python3-pip
|
||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||
msg_ok "Installed Python"
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn,sass" setup_nodejs
|
||||
NODE_VERSION="22" NODE_MODULE="sass" setup_nodejs
|
||||
setup_uv
|
||||
PG_VERSION="16" setup_postgresql
|
||||
PG_DB_NAME="wger" PG_DB_USER="wger" setup_postgresql_db
|
||||
fetch_and_deploy_gh_release "wger" "wger-project/wger" "tarball"
|
||||
|
||||
msg_info "Setting up wger"
|
||||
$STD adduser wger --disabled-password --gecos ""
|
||||
mkdir /home/wger/db
|
||||
touch /home/wger/db/database.sqlite
|
||||
chown :www-data -R /home/wger/db
|
||||
chmod g+w /home/wger/db /home/wger/db/database.sqlite
|
||||
mkdir /home/wger/{static,media}
|
||||
chmod o+w /home/wger/media
|
||||
temp_dir=$(mktemp -d)
|
||||
cd "$temp_dir"
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
||||
curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$RELEASE.tar.gz"
|
||||
tar xzf "$RELEASE".tar.gz
|
||||
mv wger-"$RELEASE" /home/wger/src
|
||||
cd /home/wger/src
|
||||
$STD pip install -r requirements_prod.txt --ignore-installed
|
||||
$STD pip install -e .
|
||||
$STD wger create-settings --database-path /home/wger/db/database.sqlite
|
||||
sed -i "s#home/wger/src/media#home/wger/media#g" /home/wger/src/settings.py
|
||||
sed -i "/MEDIA_ROOT = '\/home\/wger\/media'/a STATIC_ROOT = '/home/wger/static'" /home/wger/src/settings.py
|
||||
$STD wger bootstrap
|
||||
$STD python3 manage.py collectstatic
|
||||
rm -rf "$temp_dir"
|
||||
echo "${RELEASE}" >/opt/wger_version.txt
|
||||
msg_ok "Finished setting up wger"
|
||||
mkdir -p /opt/wger/{static,media}
|
||||
chmod o+w /opt/wger/media
|
||||
cd /opt/wger
|
||||
$STD corepack enable
|
||||
$STD npm install
|
||||
$STD npm run build:css:sass
|
||||
$STD uv venv
|
||||
$STD uv pip install . --group docker
|
||||
SECRET_KEY=$(openssl rand -base64 40)
|
||||
cat <<EOF >/opt/wger/.env
|
||||
DJANGO_SETTINGS_MODULE=settings.main
|
||||
PYTHONPATH=/opt/wger
|
||||
|
||||
msg_info "Creating Service"
|
||||
cat <<EOF >/etc/apache2/sites-available/wger.conf
|
||||
<Directory /home/wger/src>
|
||||
<Files wsgi.py>
|
||||
Require all granted
|
||||
</Files>
|
||||
</Directory>
|
||||
DJANGO_DB_ENGINE=django.db.backends.postgresql
|
||||
DJANGO_DB_DATABASE=${PG_DB_NAME}
|
||||
DJANGO_DB_USER=${PG_DB_USER}
|
||||
DJANGO_DB_PASSWORD=${PG_DB_PASS}
|
||||
DJANGO_DB_HOST=localhost
|
||||
DJANGO_DB_PORT=5432
|
||||
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}
|
||||
|
||||
<VirtualHost *:80>
|
||||
WSGIApplicationGroup %{GLOBAL}
|
||||
WSGIDaemonProcess wger python-path=/home/wger/src python-home=/home/wger
|
||||
WSGIProcessGroup wger
|
||||
WSGIScriptAlias / /home/wger/src/wger/wsgi.py
|
||||
WSGIPassAuthorization On
|
||||
DJANGO_MEDIA_ROOT=/opt/wger/media
|
||||
DJANGO_STATIC_ROOT=/opt/wger/static
|
||||
DJANGO_STATIC_URL=/static/
|
||||
|
||||
Alias /static/ /home/wger/static/
|
||||
<Directory /home/wger/static>
|
||||
Require all granted
|
||||
</Directory>
|
||||
ALLOWED_HOSTS=${LOCAL_IP},localhost,127.0.0.1
|
||||
CSRF_TRUSTED_ORIGINS=http://${LOCAL_IP}:3000
|
||||
|
||||
Alias /media/ /home/wger/media/
|
||||
<Directory /home/wger/media>
|
||||
Require all granted
|
||||
</Directory>
|
||||
USE_X_FORWARDED_HOST=True
|
||||
SECURE_PROXY_SSL_HEADER=HTTP_X_FORWARDED_PROTO,http
|
||||
|
||||
ErrorLog /var/log/apache2/wger-error.log
|
||||
CustomLog /var/log/apache2/wger-access.log combined
|
||||
</VirtualHost>
|
||||
DJANGO_CACHE_BACKEND=django_redis.cache.RedisCache
|
||||
DJANGO_CACHE_LOCATION=redis://127.0.0.1:6379/1
|
||||
DJANGO_CACHE_TIMEOUT=300
|
||||
DJANGO_CACHE_CLIENT_CLASS=django_redis.client.DefaultClient
|
||||
AXES_CACHE_ALIAS=default
|
||||
|
||||
USE_CELERY=True
|
||||
CELERY_BROKER=redis://127.0.0.1:6379/2
|
||||
CELERY_BACKEND=redis://127.0.0.1:6379/2
|
||||
|
||||
SITE_URL=http://${LOCAL_IP}:3000
|
||||
SECRET_KEY=${SECRET_KEY}
|
||||
EOF
|
||||
$STD a2dissite 000-default.conf
|
||||
$STD a2ensite wger
|
||||
systemctl restart apache2
|
||||
set -a && source /opt/wger/.env && set +a
|
||||
$STD uv run wger bootstrap
|
||||
$STD uv run python manage.py collectstatic --no-input
|
||||
cat <<EOF | uv run python manage.py shell
|
||||
from django.contrib.auth import get_user_model
|
||||
User = get_user_model()
|
||||
|
||||
user, created = User.objects.get_or_create(
|
||||
username="admin",
|
||||
defaults={"email": "admin@localhost"},
|
||||
)
|
||||
|
||||
if created:
|
||||
user.set_password("${PG_DB_PASS}")
|
||||
user.is_superuser = True
|
||||
user.is_staff = True
|
||||
user.save()
|
||||
EOF
|
||||
msg_ok "Set up wger"
|
||||
msg_info "Creating Config and Services"
|
||||
cat <<EOF >/etc/systemd/system/wger.service
|
||||
[Unit]
|
||||
Description=wger Service
|
||||
Description=wger Gunicorn
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
ExecStart=/usr/local/bin/wger start -a 0.0.0.0 -p 3000
|
||||
WorkingDirectory=/opt/wger
|
||||
EnvironmentFile=/opt/wger/.env
|
||||
ExecStart=/opt/wger/.venv/bin/gunicorn \
|
||||
--bind 127.0.0.1:8000 \
|
||||
--workers 3 \
|
||||
--threads 2 \
|
||||
--timeout 120 \
|
||||
wger.wsgi:application
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
systemctl enable -q --now wger
|
||||
msg_ok "Created Service"
|
||||
cat <<EOF >/etc/systemd/system/celery.service
|
||||
[Unit]
|
||||
Description=wger Celery Worker
|
||||
After=network.target redis-server.service
|
||||
Requires=redis-server.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/wger
|
||||
EnvironmentFile=/opt/wger/.env
|
||||
ExecStart=/opt/wger/.venv/bin/celery -A wger worker -l info
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
mkdir -p /var/lib/wger/celery
|
||||
chmod 700 /var/lib/wger/celery
|
||||
cat <<EOF >/etc/systemd/system/celery-beat.service
|
||||
[Unit]
|
||||
Description=wger Celery Beat
|
||||
After=network.target redis-server.service
|
||||
Requires=redis-server.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/opt/wger
|
||||
EnvironmentFile=/opt/wger/.env
|
||||
ExecStart=/opt/wger/.venv/bin/celery -A wger beat -l info \
|
||||
--schedule /var/lib/wger/celery/celerybeat-schedule
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
cat <<'EOF' >/etc/nginx/sites-available/wger
|
||||
server {
|
||||
listen 3000;
|
||||
server_name _;
|
||||
|
||||
client_max_body_size 20M;
|
||||
|
||||
location /static/ {
|
||||
alias /opt/wger/static/;
|
||||
expires 30d;
|
||||
}
|
||||
|
||||
location /media/ {
|
||||
alias /opt/wger/media/;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_redirect off;
|
||||
}
|
||||
}
|
||||
EOF
|
||||
$STD rm -f /etc/nginx/sites-enabled/default
|
||||
$STD ln -sf /etc/nginx/sites-available/wger /etc/nginx/sites-enabled/wger
|
||||
systemctl enable -q --now redis-server nginx wger celery celery-beat
|
||||
systemctl restart nginx
|
||||
msg_ok "Created Config and Services"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
@@ -3318,6 +3318,68 @@ configure_ssh_settings() {
|
||||
fi
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# msg_menu()
|
||||
#
|
||||
# - Displays a numbered menu for update_script() functions
|
||||
# - In silent mode (PHS_SILENT=1): auto-selects the default option
|
||||
# - In interactive mode: shows menu via read with 10s timeout + default fallback
|
||||
# - Usage: CHOICE=$(msg_menu "Title" "tag1" "Description 1" "tag2" "Desc 2" ...)
|
||||
# - The first item is always the default
|
||||
# - Returns the selected tag to stdout
|
||||
# - If no valid selection or timeout, returns the default (first) tag
|
||||
# ------------------------------------------------------------------------------
|
||||
msg_menu() {
|
||||
local title="$1"
|
||||
shift
|
||||
|
||||
# Parse items into parallel arrays: tags[] and descriptions[]
|
||||
local -a tags=()
|
||||
local -a descs=()
|
||||
while [[ $# -ge 2 ]]; do
|
||||
tags+=("$1")
|
||||
descs+=("$2")
|
||||
shift 2
|
||||
done
|
||||
|
||||
local default_tag="${tags[0]}"
|
||||
local count=${#tags[@]}
|
||||
|
||||
# Silent mode: return default immediately
|
||||
if [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]]; then
|
||||
echo "$default_tag"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Display menu
|
||||
echo ""
|
||||
msg_custom "📋" "${BL}" "${title}"
|
||||
echo ""
|
||||
for i in "${!tags[@]}"; do
|
||||
local marker=" "
|
||||
[[ $i -eq 0 ]] && marker="* "
|
||||
printf "${TAB3}${marker}%s) %s\n" "${tags[$i]}" "${descs[$i]}"
|
||||
done
|
||||
echo ""
|
||||
|
||||
local selection=""
|
||||
read -r -t 10 -p "${TAB3}Select [default=${default_tag}, timeout 10s]: " selection || true
|
||||
|
||||
# Validate selection
|
||||
if [[ -n "$selection" ]]; then
|
||||
for tag in "${tags[@]}"; do
|
||||
if [[ "$selection" == "$tag" ]]; then
|
||||
echo "$selection"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
msg_warn "Invalid selection '${selection}' - using default: ${default_tag}"
|
||||
fi
|
||||
|
||||
echo "$default_tag"
|
||||
return 0
|
||||
}
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# start()
|
||||
#
|
||||
|
||||
156
misc/tools.func
156
misc/tools.func
@@ -2317,8 +2317,106 @@ function fetch_and_deploy_codeberg_release() {
|
||||
#
|
||||
# # 4. Single binary (chmod +x) like Argus, Promtail etc.
|
||||
# fetch_and_deploy_gh_release "argus" "release-argus/Argus" "singlefile" "0.26.3" "/opt/argus" "Argus-.*linux-amd64"
|
||||
#
|
||||
# Notes:
|
||||
# - For binary/prebuild/singlefile modes: if the target release has no
|
||||
# matching asset, the function scans older releases and prompts the user
|
||||
# (60s timeout, default yes) to use a previous version that has the asset.
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
# Scans older GitHub releases for a matching asset when the latest release
|
||||
# is missing the expected file. Used internally by fetch_and_deploy_gh_release.
|
||||
#
|
||||
# Arguments:
|
||||
# $1 - GitHub repo (owner/repo)
|
||||
# $2 - mode (binary|prebuild|singlefile)
|
||||
# $3 - asset_pattern (glob pattern for asset filename)
|
||||
# $4 - tag to skip (the already-checked release)
|
||||
#
|
||||
# Output:
|
||||
# Prints the release JSON of the first older release that has a matching asset.
|
||||
# Returns 0 on success, 1 if no matching release found or user declined.
|
||||
# ------------------------------------------------------------------------------
|
||||
_gh_scan_older_releases() {
|
||||
local repo="$1"
|
||||
local mode="$2"
|
||||
local asset_pattern="$3"
|
||||
local skip_tag="$4"
|
||||
|
||||
local header=()
|
||||
[[ -n "${GITHUB_TOKEN:-}" ]] && header=(-H "Authorization: token $GITHUB_TOKEN")
|
||||
|
||||
local releases_list
|
||||
releases_list=$(curl --connect-timeout 10 --max-time 30 -fsSL \
|
||||
-H 'Accept: application/vnd.github+json' \
|
||||
-H 'X-GitHub-Api-Version: 2022-11-28' \
|
||||
"${header[@]}" \
|
||||
"https://api.github.com/repos/${repo}/releases?per_page=15" 2>/dev/null) || return 1
|
||||
|
||||
local count
|
||||
count=$(echo "$releases_list" | jq 'length')
|
||||
|
||||
for ((i = 0; i < count; i++)); do
|
||||
local rel_tag rel_draft rel_prerelease
|
||||
rel_tag=$(echo "$releases_list" | jq -r ".[$i].tag_name")
|
||||
rel_draft=$(echo "$releases_list" | jq -r ".[$i].draft")
|
||||
rel_prerelease=$(echo "$releases_list" | jq -r ".[$i].prerelease")
|
||||
|
||||
# Skip drafts, prereleases, and the tag we already checked
|
||||
[[ "$rel_draft" == "true" || "$rel_prerelease" == "true" ]] && continue
|
||||
[[ "$rel_tag" == "$skip_tag" ]] && continue
|
||||
|
||||
local has_match=false
|
||||
|
||||
if [[ "$mode" == "binary" ]]; then
|
||||
local arch
|
||||
arch=$(dpkg --print-architecture 2>/dev/null || uname -m)
|
||||
[[ "$arch" == "x86_64" ]] && arch="amd64"
|
||||
[[ "$arch" == "aarch64" ]] && arch="arm64"
|
||||
|
||||
# Check with explicit pattern first, then arch heuristic, then any .deb
|
||||
if [[ -n "$asset_pattern" ]]; then
|
||||
has_match=$(echo "$releases_list" | jq -r --arg pat "$asset_pattern" ".[$i].assets[].name" | while read -r name; do
|
||||
case "$name" in $asset_pattern) echo true; break ;; esac
|
||||
done)
|
||||
fi
|
||||
if [[ "$has_match" != "true" ]]; then
|
||||
has_match=$(echo "$releases_list" | jq -r ".[$i].assets[].browser_download_url" | grep -qE "($arch|amd64|x86_64|aarch64|arm64).*\.deb$" && echo true)
|
||||
fi
|
||||
if [[ "$has_match" != "true" ]]; then
|
||||
has_match=$(echo "$releases_list" | jq -r ".[$i].assets[].browser_download_url" | grep -qE '\.deb$' && echo true)
|
||||
fi
|
||||
|
||||
elif [[ "$mode" == "prebuild" || "$mode" == "singlefile" ]]; then
|
||||
has_match=$(echo "$releases_list" | jq -r ".[$i].assets[].name" | while read -r name; do
|
||||
case "$name" in $asset_pattern) echo true; break ;; esac
|
||||
done)
|
||||
fi
|
||||
|
||||
if [[ "$has_match" == "true" ]]; then
|
||||
local rel_version="$rel_tag"
|
||||
[[ "$rel_tag" =~ ^v ]] && rel_version="${rel_tag:1}"
|
||||
|
||||
local use_fallback="y"
|
||||
if [[ -t 0 ]]; then
|
||||
msg_warn "Release ${skip_tag} has no matching asset. Previous release ${rel_tag} has a compatible asset."
|
||||
read -rp "Use version ${rel_tag} instead? [Y/n] (auto-yes in 60s): " -t 60 use_fallback || use_fallback="y"
|
||||
use_fallback="${use_fallback:-y}"
|
||||
fi
|
||||
|
||||
if [[ "${use_fallback,,}" == "y" || "${use_fallback,,}" == "yes" ]]; then
|
||||
echo "$releases_list" | jq ".[$i]"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
function fetch_and_deploy_gh_release() {
|
||||
local app="$1"
|
||||
local repo="$2"
|
||||
@@ -2458,6 +2556,33 @@ function fetch_and_deploy_gh_release() {
|
||||
done
|
||||
fi
|
||||
|
||||
# Fallback: scan older releases for a matching .deb asset
|
||||
if [[ -z "$url_match" ]]; then
|
||||
local fallback_json
|
||||
if fallback_json=$(_gh_scan_older_releases "$repo" "binary" "$asset_pattern" "$tag_name"); then
|
||||
json="$fallback_json"
|
||||
tag_name=$(echo "$json" | jq -r '.tag_name // .name // empty')
|
||||
[[ "$tag_name" =~ ^v ]] && version="${tag_name:1}" || version="$tag_name"
|
||||
msg_info "Fetching GitHub release: $app ($version)"
|
||||
assets=$(echo "$json" | jq -r '.assets[].browser_download_url')
|
||||
if [[ -n "$asset_pattern" ]]; then
|
||||
for u in $assets; do
|
||||
case "${u##*/}" in $asset_pattern) url_match="$u"; break ;; esac
|
||||
done
|
||||
fi
|
||||
if [[ -z "$url_match" ]]; then
|
||||
for u in $assets; do
|
||||
if [[ "$u" =~ ($arch|amd64|x86_64|aarch64|arm64).*\.deb$ ]]; then url_match="$u"; break; fi
|
||||
done
|
||||
fi
|
||||
if [[ -z "$url_match" ]]; then
|
||||
for u in $assets; do
|
||||
[[ "$u" =~ \.deb$ ]] && url_match="$u" && break
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -z "$url_match" ]]; then
|
||||
msg_error "No suitable .deb asset found for $app"
|
||||
rm -rf "$tmpdir"
|
||||
@@ -2506,6 +2631,21 @@ function fetch_and_deploy_gh_release() {
|
||||
esac
|
||||
done
|
||||
|
||||
# Fallback: scan older releases for a matching asset
|
||||
if [[ -z "$asset_url" ]]; then
|
||||
local fallback_json
|
||||
if fallback_json=$(_gh_scan_older_releases "$repo" "prebuild" "$pattern" "$tag_name"); then
|
||||
json="$fallback_json"
|
||||
tag_name=$(echo "$json" | jq -r '.tag_name // .name // empty')
|
||||
[[ "$tag_name" =~ ^v ]] && version="${tag_name:1}" || version="$tag_name"
|
||||
msg_info "Fetching GitHub release: $app ($version)"
|
||||
for u in $(echo "$json" | jq -r '.assets[].browser_download_url'); do
|
||||
filename_candidate="${u##*/}"
|
||||
case "$filename_candidate" in $pattern) asset_url="$u"; break ;; esac
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
[[ -z "$asset_url" ]] && {
|
||||
msg_error "No asset matching '$pattern' found"
|
||||
rm -rf "$tmpdir"
|
||||
@@ -2603,6 +2743,20 @@ function fetch_and_deploy_gh_release() {
|
||||
esac
|
||||
done
|
||||
|
||||
# Fallback: scan older releases for a matching asset
|
||||
if [[ -z "$asset_url" ]]; then
|
||||
local fallback_json
|
||||
if fallback_json=$(_gh_scan_older_releases "$repo" "singlefile" "$pattern" "$tag_name"); then
|
||||
json="$fallback_json"
|
||||
tag_name=$(echo "$json" | jq -r '.tag_name // .name // empty')
|
||||
[[ "$tag_name" =~ ^v ]] && version="${tag_name:1}" || version="$tag_name"
|
||||
msg_info "Fetching GitHub release: $app ($version)"
|
||||
for u in $(echo "$json" | jq -r '.assets[].browser_download_url'); do
|
||||
filename_candidate="${u##*/}"
|
||||
case "$filename_candidate" in $pattern) asset_url="$u"; break ;; esac
|
||||
done
|
||||
fi
|
||||
fi
|
||||
[[ -z "$asset_url" ]] && {
|
||||
msg_error "No asset matching '$pattern' found"
|
||||
rm -rf "$tmpdir"
|
||||
@@ -3441,6 +3595,7 @@ _setup_intel_arc() {
|
||||
$STD apt -y install \
|
||||
intel-media-va-driver-non-free \
|
||||
intel-opencl-icd \
|
||||
libmfx-gen1.2 \
|
||||
vainfo \
|
||||
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
||||
|
||||
@@ -3467,6 +3622,7 @@ _setup_intel_arc() {
|
||||
intel-media-va-driver-non-free \
|
||||
ocl-icd-libopencl1 \
|
||||
libvpl2 \
|
||||
libmfx-gen1.2 \
|
||||
vainfo \
|
||||
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
||||
fi
|
||||
|
||||
@@ -79,11 +79,24 @@ EOF
|
||||
header_info
|
||||
msg "Installing NetBird..."
|
||||
pct exec "$CTID" -- bash -c '
|
||||
if ! command -v curl &>/dev/null; then
|
||||
apt-get update -qq
|
||||
apt-get install -y curl >/dev/null
|
||||
fi
|
||||
apt install -y ca-certificates gpg &>/dev/null
|
||||
curl -fsSL "https://pkgs.netbird.io/debian/public.key" | gpg --dearmor >/usr/share/keyrings/netbird-archive-keyring.gpg
|
||||
echo "deb [signed-by=/usr/share/keyrings/netbird-archive-keyring.gpg] https://pkgs.netbird.io/debian stable main" >/etc/apt/sources.list.d/netbird.list
|
||||
apt-get update &>/dev/null
|
||||
apt-get install -y netbird-ui &>/dev/null
|
||||
if systemctl list-unit-files docker.service &>/dev/null; then
|
||||
mkdir -p /etc/systemd/system/netbird.service.d
|
||||
cat <<OVERRIDE >/etc/systemd/system/netbird.service.d/after-docker.conf
|
||||
[Unit]
|
||||
After=docker.service
|
||||
Wants=docker.service
|
||||
OVERRIDE
|
||||
systemctl daemon-reload
|
||||
fi
|
||||
'
|
||||
msg "\e[1;32m ✔ Installed NetBird.\e[0m"
|
||||
sleep 2
|
||||
|
||||
@@ -89,6 +89,12 @@ if ! dig +short pkgs.tailscale.com | grep -qvE "^127\.|^0\.0\.0\.0$"; then
|
||||
echo "nameserver 1.1.1.1" >"$ORIG_RESOLV"
|
||||
fi
|
||||
|
||||
if ! command -v curl &>/dev/null; then
|
||||
echo "[INFO] curl not found, installing..."
|
||||
apt-get update -qq
|
||||
apt-get install -y curl >/dev/null
|
||||
fi
|
||||
|
||||
curl -fsSL https://pkgs.tailscale.com/stable/${ID}/${VER}.noarmor.gpg \
|
||||
| tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
|
||||
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/bakito/adguardhome-sync
|
||||
|
||||
if ! command -v curl &>/dev/null; then
|
||||
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
|
||||
apt-get update >/dev/null 2>&1
|
||||
apt-get install -y curl >/dev/null 2>&1
|
||||
fi
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/9001/copyparty
|
||||
|
||||
if ! command -v curl &>/dev/null; then
|
||||
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
|
||||
apt-get update >/dev/null 2>&1
|
||||
apt-get install -y curl >/dev/null 2>&1
|
||||
fi
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
|
||||
|
||||
@@ -110,6 +110,7 @@ if [[ -f "$INSTALL_PATH" ]]; then
|
||||
read -r update_prompt
|
||||
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Updating ${APP}"
|
||||
if ! command -v curl &>/dev/null; then $PKG_MANAGER curl &>/dev/null; fi
|
||||
curl -fsSL https://github.com/gtsteffaniak/filebrowser/releases/latest/download/linux-amd64-filebrowser -o "$TMP_BIN"
|
||||
chmod +x "$TMP_BIN"
|
||||
mv -f "$TMP_BIN" /usr/local/bin/filebrowser
|
||||
|
||||
@@ -88,6 +88,7 @@ if [ -f "$INSTALL_PATH" ]; then
|
||||
read -r -p "Would you like to update ${APP}? (y/N): " update_prompt
|
||||
if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Updating ${APP}"
|
||||
if ! command -v curl &>/dev/null; then $PKG_MANAGER curl &>/dev/null; fi
|
||||
curl -fsSL "https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz" | tar -xzv -C /usr/local/bin &>/dev/null
|
||||
chmod +x "$INSTALL_PATH"
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
@@ -44,7 +44,7 @@ IP=$(get_lxc_ip)
|
||||
install_glances_debian() {
|
||||
msg_info "Installing dependencies"
|
||||
apt-get update >/dev/null 2>&1
|
||||
apt-get install -y gcc lm-sensors wireless-tools >/dev/null 2>&1
|
||||
apt-get install -y gcc lm-sensors wireless-tools curl >/dev/null 2>&1
|
||||
msg_ok "Installed dependencies"
|
||||
|
||||
msg_info "Setting up Python + uv"
|
||||
@@ -114,7 +114,7 @@ install_glances_alpine() {
|
||||
apk update >/dev/null 2>&1
|
||||
$STD apk add --no-cache \
|
||||
gcc musl-dev linux-headers python3-dev \
|
||||
python3 py3-pip py3-virtualenv lm-sensors wireless-tools >/dev/null 2>&1
|
||||
python3 py3-pip py3-virtualenv lm-sensors wireless-tools curl >/dev/null 2>&1
|
||||
msg_ok "Installed dependencies"
|
||||
|
||||
msg_info "Setting up Python + uv"
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/alangrainger/immich-public-proxy
|
||||
|
||||
if ! command -v curl &>/dev/null; then
|
||||
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
|
||||
apt-get update >/dev/null 2>&1
|
||||
apt-get install -y curl >/dev/null 2>&1
|
||||
fi
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/CyferShepard/Jellystat
|
||||
|
||||
if ! command -v curl &>/dev/null; then
|
||||
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
|
||||
apt-get update >/dev/null 2>&1
|
||||
apt-get install -y curl >/dev/null 2>&1
|
||||
fi
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/xperimental/nextcloud-exporter
|
||||
|
||||
if ! command -v curl &>/dev/null; then
|
||||
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
|
||||
apt-get update >/dev/null 2>&1
|
||||
apt-get install -y curl >/dev/null 2>&1
|
||||
fi
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
|
||||
|
||||
@@ -51,6 +51,10 @@ function msg_ok() {
|
||||
}
|
||||
|
||||
msg_info "Installing ${APP}"
|
||||
if ! command -v curl &>/dev/null; then
|
||||
apt-get update >/dev/null 2>&1
|
||||
apt-get install -y curl >/dev/null 2>&1
|
||||
fi
|
||||
curl -fsSL "https://github.com/OliveTin/OliveTin/releases/latest/download/OliveTin_linux_amd64.deb" -o $(basename "https://github.com/OliveTin/OliveTin/releases/latest/download/OliveTin_linux_amd64.deb")
|
||||
dpkg -i OliveTin_linux_amd64.deb &>/dev/null
|
||||
systemctl enable --now OliveTin &>/dev/null
|
||||
|
||||
@@ -57,6 +57,10 @@ function msg_ok() { echo -e "${CM} ${GN}${1}${CL}"; }
|
||||
function msg_error() { echo -e "${CROSS} ${RD}${1}${CL}"; }
|
||||
|
||||
function check_internet() {
|
||||
if ! command -v curl &>/dev/null; then
|
||||
apt-get update >/dev/null 2>&1
|
||||
apt-get install -y curl >/dev/null 2>&1
|
||||
fi
|
||||
msg_info "Checking Internet connectivity to GitHub"
|
||||
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://github.com)
|
||||
if [[ "$HTTP_CODE" -ge 200 && "$HTTP_CODE" -lt 400 ]]; then
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/eko/pihole-exporter/
|
||||
|
||||
if ! command -v curl &>/dev/null; then
|
||||
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
|
||||
apt-get update >/dev/null 2>&1
|
||||
apt-get install -y curl >/dev/null 2>&1
|
||||
fi
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/martabal/qbittorrent-exporter
|
||||
|
||||
if ! command -v curl &>/dev/null; then
|
||||
printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2
|
||||
apt-get update >/dev/null 2>&1
|
||||
apt-get install -y curl >/dev/null 2>&1
|
||||
fi
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func)
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func)
|
||||
|
||||
@@ -42,7 +42,7 @@ whiptail --backtitle "Proxmox VE Helper Scripts" --title "Webmin Installer" --ye
|
||||
|
||||
msg_info "Installing Prerequisites"
|
||||
apt update &>/dev/null
|
||||
apt-get -y install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl unzip shared-mime-info &>/dev/null
|
||||
apt-get -y install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl unzip shared-mime-info curl &>/dev/null
|
||||
msg_ok "Installed Prerequisites"
|
||||
|
||||
LATEST=$(curl -fsSL https://api.github.com/repos/webmin/webmin/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
||||
|
||||
@@ -421,6 +421,8 @@ for container in $CHOICE; do
|
||||
|
||||
if [ $exit_code -eq 0 ]; then
|
||||
msg_ok "Updated container $container"
|
||||
elif [ $exit_code -eq 75 ]; then
|
||||
echo -e "${YW}[WARN]${CL} Container $container skipped (requires interactive mode)"
|
||||
elif [ "$BACKUP_CHOICE" == "yes" ]; then
|
||||
msg_info "Restoring LXC from backup"
|
||||
pct stop $container
|
||||
|
||||
Reference in New Issue
Block a user