mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-06 11:22:49 +00:00
Compare commits
216 Commits
2025-08-13
...
2025-08-22
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5cd24b503c | ||
|
|
2e5db6a283 | ||
|
|
32f6a76426 | ||
|
|
5d526717ef | ||
|
|
287265d554 | ||
|
|
e72f248918 | ||
|
|
c207d65b1b | ||
|
|
fb1d5d5a33 | ||
|
|
ed5dfa6eef | ||
|
|
8314e59973 | ||
|
|
b73c50399d | ||
|
|
50feb0d846 | ||
|
|
4773649706 | ||
|
|
ebb5d8f2c4 | ||
|
|
0555dbd93c | ||
|
|
e63bc92368 | ||
|
|
a74b7c4763 | ||
|
|
73178f5ff4 | ||
|
|
0358111f5f | ||
|
|
7346e7b1ab | ||
|
|
4add8e8273 | ||
|
|
49f1f7b1e2 | ||
|
|
e5a6a5f1c0 | ||
|
|
19365b5083 | ||
|
|
12d3457002 | ||
|
|
18abecbf9b | ||
|
|
2ead98c480 | ||
|
|
265321b0c0 | ||
|
|
bae22ebf82 | ||
|
|
c80f136871 | ||
|
|
faf4fbd0fd | ||
|
|
41e8958ab9 | ||
|
|
cdc546f879 | ||
|
|
4ded6585a2 | ||
|
|
2892b85a6f | ||
|
|
e28ab86797 | ||
|
|
2c3193ebb3 | ||
|
|
96959ffdb0 | ||
|
|
13fbf25ecd | ||
|
|
21d2159f22 | ||
|
|
a42ceeac98 | ||
|
|
6e7ad44d36 | ||
|
|
9ea852ffad | ||
|
|
d4bd7a6fda | ||
|
|
316f4043d4 | ||
|
|
f799c90712 | ||
|
|
7de8934105 | ||
|
|
15dedc1e16 | ||
|
|
13f46d2c58 | ||
|
|
ff7e7a6e10 | ||
|
|
c49519a7de | ||
|
|
8ce4776a87 | ||
|
|
9cda1a8680 | ||
|
|
c9b5e27d74 | ||
|
|
70ec048aa9 | ||
|
|
89af0c466b | ||
|
|
93a1710e20 | ||
|
|
91a5c9c48f | ||
|
|
e85353856b | ||
|
|
bf99523a94 | ||
|
|
c1b3321801 | ||
|
|
beb9189c72 | ||
|
|
186c82d156 | ||
|
|
9d431458ca | ||
|
|
9c86eea347 | ||
|
|
e20af295f0 | ||
|
|
68832d71fa | ||
|
|
2e13483f19 | ||
|
|
c7643ae88c | ||
|
|
f16f7a130a | ||
|
|
94a8fe7132 | ||
|
|
059d297305 | ||
|
|
2bd2a763a1 | ||
|
|
452ba92a6f | ||
|
|
d27a875987 | ||
|
|
14418411f6 | ||
|
|
f13c8ff3ce | ||
|
|
28dc145811 | ||
|
|
170543bb66 | ||
|
|
c783024ef0 | ||
|
|
19403a627b | ||
|
|
cc08395a1d | ||
|
|
d5093a3d9d | ||
|
|
52c4f3e0c2 | ||
|
|
76a4ec9e06 | ||
|
|
bebf6f65aa | ||
|
|
34582c4dc4 | ||
|
|
4495878c4f | ||
|
|
3c33e8b826 | ||
|
|
be6cc7ddbb | ||
|
|
615049ce5c | ||
|
|
f9e5c46b21 | ||
|
|
913102d66f | ||
|
|
07628f3b76 | ||
|
|
291d364158 | ||
|
|
98c4a2ccae | ||
|
|
c60098d8eb | ||
|
|
7df1dbaf17 | ||
|
|
304c90a1af | ||
|
|
01fe1b1f62 | ||
|
|
fd85e71fcf | ||
|
|
66c03ce1b4 | ||
|
|
067f9eb209 | ||
|
|
cd3dbc864f | ||
|
|
f42f06343d | ||
|
|
e46648ecdc | ||
|
|
206751f517 | ||
|
|
6a06afcbb9 | ||
|
|
bd3e93215b | ||
|
|
94b9aa4025 | ||
|
|
36523dfd33 | ||
|
|
618fa65bc2 | ||
|
|
1dd417fdaa | ||
|
|
4480a70ceb | ||
|
|
5d423888d9 | ||
|
|
81876d6992 | ||
|
|
b777d74dce | ||
|
|
c904da6b94 | ||
|
|
4591b58e66 | ||
|
|
8f7cd0bff9 | ||
|
|
60318fd77b | ||
|
|
50c41cec72 | ||
|
|
ef2e9803d0 | ||
|
|
e428a05b45 | ||
|
|
37e5f7272e | ||
|
|
5560c4eb12 | ||
|
|
be6e2e3cb1 | ||
|
|
7086a15321 | ||
|
|
23f29b14fe | ||
|
|
9aafb65a98 | ||
|
|
296f4577d0 | ||
|
|
1ea1429874 | ||
|
|
3f70f92fbb | ||
|
|
23c6994835 | ||
|
|
70cd362d3e | ||
|
|
aed25098e5 | ||
|
|
a79392149e | ||
|
|
f32647a3d3 | ||
|
|
bb3c77f1b6 | ||
|
|
66a582dd09 | ||
|
|
06eb76c5d9 | ||
|
|
a37f921aff | ||
|
|
5c7e221efa | ||
|
|
7e00889967 | ||
|
|
f1d855e331 | ||
|
|
a33bbd603d | ||
|
|
472ad02d44 | ||
|
|
aed2fbc4b1 | ||
|
|
dabb49d7eb | ||
|
|
61b7b96780 | ||
|
|
a72885b4c1 | ||
|
|
58fe2df6b4 | ||
|
|
5c8bd4b124 | ||
|
|
b6d7ad7c38 | ||
|
|
dd4d518052 | ||
|
|
a99650f969 | ||
|
|
842d73de82 | ||
|
|
65f731d88b | ||
|
|
363685d3d3 | ||
|
|
ff77960aa6 | ||
|
|
8d4a81d28e | ||
|
|
faf10a9d5b | ||
|
|
1b931becaa | ||
|
|
905198116d | ||
|
|
8d65b4624f | ||
|
|
4e17190721 | ||
|
|
9337e2de3c | ||
|
|
c7a7ea763b | ||
|
|
ce71992dd6 | ||
|
|
f68b80fe4a | ||
|
|
79adb4ef9b | ||
|
|
8dda5ac31f | ||
|
|
7d901bc594 | ||
|
|
b6dce8cff1 | ||
|
|
1b43202a79 | ||
|
|
66687c0d21 | ||
|
|
39b9cfcffc | ||
|
|
24f4d2f488 | ||
|
|
ee74400626 | ||
|
|
032709e107 | ||
|
|
65d60fbf1e | ||
|
|
c7b80448dc | ||
|
|
d7a60f6027 | ||
|
|
241ae98c0b | ||
|
|
63f24a8e61 | ||
|
|
1cb87c4087 | ||
|
|
5c22f9775e | ||
|
|
a403da9f47 | ||
|
|
4ce7335482 | ||
|
|
bc52b1a7d7 | ||
|
|
1c5ff8b26a | ||
|
|
967b2a313f | ||
|
|
50410acf8d | ||
|
|
ab07afb7bd | ||
|
|
eee083c7e0 | ||
|
|
31ef36d744 | ||
|
|
13afa93ddf | ||
|
|
7c631eec00 | ||
|
|
82d1a872c7 | ||
|
|
0c23782485 | ||
|
|
ef7c774a24 | ||
|
|
c12ec76181 | ||
|
|
a805e40b04 | ||
|
|
727b713893 | ||
|
|
5cedb8469e | ||
|
|
c612a4daa8 | ||
|
|
87b7166924 | ||
|
|
9b9faf7a53 | ||
|
|
51a1d3c0ef | ||
|
|
8b1c2d6e68 | ||
|
|
21c2ef2915 | ||
|
|
6796e609d0 | ||
|
|
723ac08abb | ||
|
|
35c4c363a0 | ||
|
|
32f99aee54 | ||
|
|
1803ea0323 |
200
CHANGELOG.md
200
CHANGELOG.md
@@ -10,8 +10,208 @@
|
|||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
|
||||||
|
|
||||||
|
## 2025-08-23
|
||||||
|
|
||||||
|
## 2025-08-22
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Refactor: Prometheus [@tremor021](https://github.com/tremor021) ([#7093](https://github.com/community-scripts/ProxmoxVE/pull/7093))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- paperless: nltk fix [@MickLesk](https://github.com/MickLesk) ([#7098](https://github.com/community-scripts/ProxmoxVE/pull/7098))
|
||||||
|
- Tududi Fix: use correct tag parsing for release during update check [@vhsdream](https://github.com/vhsdream) ([#7072](https://github.com/community-scripts/ProxmoxVE/pull/7072))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: phpIPAM [@tremor021](https://github.com/tremor021) ([#7095](https://github.com/community-scripts/ProxmoxVE/pull/7095))
|
||||||
|
- Refactor: Prometheus Paperless NGX Exporter [@tremor021](https://github.com/tremor021) ([#7092](https://github.com/community-scripts/ProxmoxVE/pull/7092))
|
||||||
|
- Refactor: PS5-MQTT [@tremor021](https://github.com/tremor021) ([#7090](https://github.com/community-scripts/ProxmoxVE/pull/7090))
|
||||||
|
- Refactor: qBittorrent [@tremor021](https://github.com/tremor021) ([#7089](https://github.com/community-scripts/ProxmoxVE/pull/7089))
|
||||||
|
- Refactor: RDTClient [@tremor021](https://github.com/tremor021) ([#7086](https://github.com/community-scripts/ProxmoxVE/pull/7086))
|
||||||
|
- Refactor: Recyclarr [@tremor021](https://github.com/tremor021) ([#7085](https://github.com/community-scripts/ProxmoxVE/pull/7085))
|
||||||
|
- Refactor: RevealJS [@tremor021](https://github.com/tremor021) ([#7084](https://github.com/community-scripts/ProxmoxVE/pull/7084))
|
||||||
|
- Refactor: Rclone [@tremor021](https://github.com/tremor021) ([#7087](https://github.com/community-scripts/ProxmoxVE/pull/7087))
|
||||||
|
- Refactor: Semaphore [@tremor021](https://github.com/tremor021) ([#7083](https://github.com/community-scripts/ProxmoxVE/pull/7083))
|
||||||
|
- Refactor: Silverbullet [@tremor021](https://github.com/tremor021) ([#7082](https://github.com/community-scripts/ProxmoxVE/pull/7082))
|
||||||
|
- Refactor: Plant-it [@tremor021](https://github.com/tremor021) ([#7094](https://github.com/community-scripts/ProxmoxVE/pull/7094))
|
||||||
|
- Refactor: TasmoAdmin [@tremor021](https://github.com/tremor021) ([#7080](https://github.com/community-scripts/ProxmoxVE/pull/7080))
|
||||||
|
|
||||||
|
## 2025-08-21
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- LiteLLM ([#7052](https://github.com/community-scripts/ProxmoxVE/pull/7052))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- tianji: add uv deps [@MickLesk](https://github.com/MickLesk) ([#7066](https://github.com/community-scripts/ProxmoxVE/pull/7066))
|
||||||
|
- Zitadel: installer for v4 [@MickLesk](https://github.com/MickLesk) ([#7058](https://github.com/community-scripts/ProxmoxVE/pull/7058))
|
||||||
|
- Paperless-NGX: create direction for nltk [@MickLesk](https://github.com/MickLesk) ([#7064](https://github.com/community-scripts/ProxmoxVE/pull/7064))
|
||||||
|
- Immich: hotfix - revert 7035 [@vhsdream](https://github.com/vhsdream) ([#7054](https://github.com/community-scripts/ProxmoxVE/pull/7054))
|
||||||
|
- duplicati: fix release pattern [@MickLesk](https://github.com/MickLesk) ([#7049](https://github.com/community-scripts/ProxmoxVE/pull/7049))
|
||||||
|
- technitiumdns: fix unbound variable [@MickLesk](https://github.com/MickLesk) ([#7047](https://github.com/community-scripts/ProxmoxVE/pull/7047))
|
||||||
|
- [core]: improve binary globbing for gh releases [@MickLesk](https://github.com/MickLesk) ([#7044](https://github.com/community-scripts/ProxmoxVE/pull/7044))
|
||||||
|
|
||||||
|
## 2025-08-20
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Post-Install, change pve-test for trixie [@MickLesk](https://github.com/MickLesk) ([#7031](https://github.com/community-scripts/ProxmoxVE/pull/7031))
|
||||||
|
- Immich: fix small issue with immich-admin "start" script [@vhsdream](https://github.com/vhsdream) ([#7035](https://github.com/community-scripts/ProxmoxVE/pull/7035))
|
||||||
|
- WasteBin: Small fixes [@tremor021](https://github.com/tremor021) ([#7018](https://github.com/community-scripts/ProxmoxVE/pull/7018))
|
||||||
|
- Komga: Fix update [@tremor021](https://github.com/tremor021) ([#7027](https://github.com/community-scripts/ProxmoxVE/pull/7027))
|
||||||
|
- Barcode Buddy: Fix missing dependency [@tremor021](https://github.com/tremor021) ([#7020](https://github.com/community-scripts/ProxmoxVE/pull/7020))
|
||||||
|
- PBS: ifupdown2 reload [@MickLesk](https://github.com/MickLesk) ([#7013](https://github.com/community-scripts/ProxmoxVE/pull/7013))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Feature: Netdata support PVE9 (Debian 13 Trixie) [@MickLesk](https://github.com/MickLesk) ([#7012](https://github.com/community-scripts/ProxmoxVE/pull/7012))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: RustDesk Server [@tremor021](https://github.com/tremor021) ([#7008](https://github.com/community-scripts/ProxmoxVE/pull/7008))
|
||||||
|
- ghost: fix: verbose [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7023](https://github.com/community-scripts/ProxmoxVE/pull/7023))
|
||||||
|
- Refactor: Paperless-ngx [@MickLesk](https://github.com/MickLesk) ([#6938](https://github.com/community-scripts/ProxmoxVE/pull/6938))
|
||||||
|
|
||||||
|
## 2025-08-19
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Debian 13 VM [@MickLesk](https://github.com/MickLesk) ([#6970](https://github.com/community-scripts/ProxmoxVE/pull/6970))
|
||||||
|
- Swizzin ([#6962](https://github.com/community-scripts/ProxmoxVE/pull/6962))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- [core]: create_lxc - fix offline issue with alpine packages [@MickLesk](https://github.com/MickLesk) ([#6994](https://github.com/community-scripts/ProxmoxVE/pull/6994))
|
||||||
|
- OpenObserve: Fix release fetching [@tremor021](https://github.com/tremor021) ([#6961](https://github.com/community-scripts/ProxmoxVE/pull/6961))
|
||||||
|
- Update hev-socks5-server-install.sh [@iAzamat2](https://github.com/iAzamat2) ([#6953](https://github.com/community-scripts/ProxmoxVE/pull/6953))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Refactor: Glances (+ Feature Bump) [@MickLesk](https://github.com/MickLesk) ([#6976](https://github.com/community-scripts/ProxmoxVE/pull/6976))
|
||||||
|
- [core]: add new features to create_lxc [@MickLesk](https://github.com/MickLesk) ([#6979](https://github.com/community-scripts/ProxmoxVE/pull/6979))
|
||||||
|
- [core]: extend setup_uv to work with alpine [@MickLesk](https://github.com/MickLesk) ([#6978](https://github.com/community-scripts/ProxmoxVE/pull/6978))
|
||||||
|
- Immich: Bump version to 1.138.1 [@vhsdream](https://github.com/vhsdream) ([#6984](https://github.com/community-scripts/ProxmoxVE/pull/6984))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Tdarr [@MickLesk](https://github.com/MickLesk) ([#6969](https://github.com/community-scripts/ProxmoxVE/pull/6969))
|
||||||
|
- Refactor: The Lounge [@tremor021](https://github.com/tremor021) ([#6958](https://github.com/community-scripts/ProxmoxVE/pull/6958))
|
||||||
|
- Refactor: TeddyCloud [@tremor021](https://github.com/tremor021) ([#6963](https://github.com/community-scripts/ProxmoxVE/pull/6963))
|
||||||
|
- Refactor: Technitium DNS [@tremor021](https://github.com/tremor021) ([#6968](https://github.com/community-scripts/ProxmoxVE/pull/6968))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- [web]: update logos from reactive-resume & slskd [@MickLesk](https://github.com/MickLesk) ([#6990](https://github.com/community-scripts/ProxmoxVE/pull/6990))
|
||||||
|
|
||||||
|
## 2025-08-18
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- CopyParty [@MickLesk](https://github.com/MickLesk) ([#6929](https://github.com/community-scripts/ProxmoxVE/pull/6929))
|
||||||
|
- Twingate-Connector ([#6921](https://github.com/community-scripts/ProxmoxVE/pull/6921))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Keycloak: fix update function [@MickLesk](https://github.com/MickLesk) ([#6943](https://github.com/community-scripts/ProxmoxVE/pull/6943))
|
||||||
|
- Immich: add message to indicate image-processing library update check [@vhsdream](https://github.com/vhsdream) ([#6935](https://github.com/community-scripts/ProxmoxVE/pull/6935))
|
||||||
|
- fix(uptimekuma): unbound env variable [@vidonnus](https://github.com/vidonnus) ([#6922](https://github.com/community-scripts/ProxmoxVE/pull/6922))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Traefik [@tremor021](https://github.com/tremor021) ([#6940](https://github.com/community-scripts/ProxmoxVE/pull/6940))
|
||||||
|
- Refactor: Traccar [@tremor021](https://github.com/tremor021) ([#6942](https://github.com/community-scripts/ProxmoxVE/pull/6942))
|
||||||
|
- Refactor: Umami [@tremor021](https://github.com/tremor021) ([#6939](https://github.com/community-scripts/ProxmoxVE/pull/6939))
|
||||||
|
- Refactor: GoMFT [@tremor021](https://github.com/tremor021) ([#6916](https://github.com/community-scripts/ProxmoxVE/pull/6916))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- OpenWRT: add info for VLAN-aware in frontend [@MickLesk](https://github.com/MickLesk) ([#6944](https://github.com/community-scripts/ProxmoxVE/pull/6944))
|
||||||
|
|
||||||
|
## 2025-08-17
|
||||||
|
|
||||||
|
## 2025-08-16
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Wireguard: Fix WGDashboard not updating [@tremor021](https://github.com/tremor021) ([#6898](https://github.com/community-scripts/ProxmoxVE/pull/6898))
|
||||||
|
- Tandoor Images Fix [@WarLord185](https://github.com/WarLord185) ([#6892](https://github.com/community-scripts/ProxmoxVE/pull/6892))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Uptime Kuma [@tremor021](https://github.com/tremor021) ([#6902](https://github.com/community-scripts/ProxmoxVE/pull/6902))
|
||||||
|
- Refactor: Wallos [@tremor021](https://github.com/tremor021) ([#6900](https://github.com/community-scripts/ProxmoxVE/pull/6900))
|
||||||
|
|
||||||
|
## 2025-08-15
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Immich: pin Vectorchord release; adjust extension update commands [@vhsdream](https://github.com/vhsdream) ([#6878](https://github.com/community-scripts/ProxmoxVE/pull/6878))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Bump Immich to v1.138.0 [@vhsdream](https://github.com/vhsdream) ([#6813](https://github.com/community-scripts/ProxmoxVE/pull/6813))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: Wavelog [@tremor021](https://github.com/tremor021) ([#6869](https://github.com/community-scripts/ProxmoxVE/pull/6869))
|
||||||
|
- Refactor: WatchYourLAN [@tremor021](https://github.com/tremor021) ([#6871](https://github.com/community-scripts/ProxmoxVE/pull/6871))
|
||||||
|
- Refactor: Watcharr [@tremor021](https://github.com/tremor021) ([#6872](https://github.com/community-scripts/ProxmoxVE/pull/6872))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Add missing default user & pass for RabbitMQ [@hbenyoussef](https://github.com/hbenyoussef) ([#6883](https://github.com/community-scripts/ProxmoxVE/pull/6883))
|
||||||
|
|
||||||
## 2025-08-14
|
## 2025-08-14
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Bugfix Searxng Redis replaced with Valkey in installscript [@elvito](https://github.com/elvito) ([#6831](https://github.com/community-scripts/ProxmoxVE/pull/6831))
|
||||||
|
- Spoolman: Use environment variables to control host and port [@tremor021](https://github.com/tremor021) ([#6825](https://github.com/community-scripts/ProxmoxVE/pull/6825))
|
||||||
|
- Pulse: v4.3.2+ [@vhsdream](https://github.com/vhsdream) ([#6859](https://github.com/community-scripts/ProxmoxVE/pull/6859))
|
||||||
|
- rustdeskserver: fix API version file [@steadfasterX](https://github.com/steadfasterX) ([#6847](https://github.com/community-scripts/ProxmoxVE/pull/6847))
|
||||||
|
- Immich: quickfix #6836 [@vhsdream](https://github.com/vhsdream) ([#6848](https://github.com/community-scripts/ProxmoxVE/pull/6848))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: WikiJS [@tremor021](https://github.com/tremor021) ([#6840](https://github.com/community-scripts/ProxmoxVE/pull/6840))
|
||||||
|
- Refactor: Zoraxy [@tremor021](https://github.com/tremor021) ([#6823](https://github.com/community-scripts/ProxmoxVE/pull/6823))
|
||||||
|
- Refactor: Zitadel [@tremor021](https://github.com/tremor021) ([#6826](https://github.com/community-scripts/ProxmoxVE/pull/6826))
|
||||||
|
- Refactor: WordPress [@tremor021](https://github.com/tremor021) ([#6837](https://github.com/community-scripts/ProxmoxVE/pull/6837))
|
||||||
|
- Refactor: WireGuard [@tremor021](https://github.com/tremor021) ([#6839](https://github.com/community-scripts/ProxmoxVE/pull/6839))
|
||||||
|
- Refactor: yt-dlp-webui [@tremor021](https://github.com/tremor021) ([#6832](https://github.com/community-scripts/ProxmoxVE/pull/6832))
|
||||||
|
- Refactor: Zipline [@tremor021](https://github.com/tremor021) ([#6829](https://github.com/community-scripts/ProxmoxVE/pull/6829))
|
||||||
|
- Refactor: Zot-Registry [@tremor021](https://github.com/tremor021) ([#6822](https://github.com/community-scripts/ProxmoxVE/pull/6822))
|
||||||
|
- Refactor: Zwave-JS-UI [@tremor021](https://github.com/tremor021) ([#6820](https://github.com/community-scripts/ProxmoxVE/pull/6820))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- #### 📂 Github
|
||||||
|
|
||||||
|
- ProxmoxVE svg logo [@LuisPalacios](https://github.com/LuisPalacios) ([#6846](https://github.com/community-scripts/ProxmoxVE/pull/6846))
|
||||||
|
|
||||||
## 2025-08-13
|
## 2025-08-13
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ function update_script() {
|
|||||||
systemctl stop duplicati
|
systemctl stop duplicati
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
|
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "duplicati-*-linux-x64-gui.deb"
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
systemctl start duplicati
|
systemctl start duplicati
|
||||||
|
|||||||
75
ct/gomft.sh
75
ct/gomft.sh
@@ -28,83 +28,14 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if ! dpkg -l | grep -q "^ii.*build-essential"; then
|
|
||||||
$STD apt-get install -y build-essential
|
|
||||||
fi
|
|
||||||
if [[ ! -f "/usr/bin/node" ]]; then
|
|
||||||
mkdir -p /etc/apt/keyrings
|
|
||||||
curl -fsSL "https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key" | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
|
||||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get install -y nodejs
|
|
||||||
fi
|
|
||||||
RELEASE=$(curl -fsSL "https://api.github.com/repos/StarFleetCPTN/GoMFT/releases/latest" | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL "https://api.github.com/repos/StarFleetCPTN/GoMFT/releases/latest" | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.gomft)" ]] || [[ ! -f ~/.gomft ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop gomft
|
systemctl stop gomft
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
fetch_and_deploy_gh_release "gomft" "StarFleetCPTN/GoMFT" "singlefile" "latest" "/opt/gomft" "gomft*linux-amd64"
|
||||||
if ! command -v git >/dev/null 2>&1; then
|
|
||||||
$STD apt-get install -y git
|
|
||||||
fi
|
|
||||||
rm -f /opt/gomft/gomft
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
curl -fsSL "https://github.com/StarFleetCPTN/GoMFT/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
|
||||||
tar -xzf "$temp_file"
|
|
||||||
cp -rf "GoMFT-${RELEASE}"/* /opt/gomft/
|
|
||||||
cd /opt/gomft
|
|
||||||
$STD npm install
|
|
||||||
$STD npm run build
|
|
||||||
TEMPL_VERSION="$(awk '/github.com\/a-h\/templ/{print $2}' go.mod)"
|
|
||||||
$STD go install github.com/a-h/templ/cmd/templ@${TEMPL_VERSION}
|
|
||||||
# dirty hack to fix templ
|
|
||||||
cat <<'EOF' >/opt/gomft/components/file_metadata/search/file_metadata_search_content.templ
|
|
||||||
package search
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"github.com/starfleetcptn/gomft/components/file_metadata"
|
|
||||||
"github.com/starfleetcptn/gomft/components/file_metadata/list"
|
|
||||||
)
|
|
||||||
|
|
||||||
templ FileMetadataSearchContent(ctx context.Context, data file_metadata.FileMetadataSearchData) {
|
|
||||||
<!-- Search Results -->
|
|
||||||
<div id="search-results">
|
|
||||||
if len(data.Files) > 0 {
|
|
||||||
@list.FileMetadataListPartial(ctx, file_metadata.FileMetadataListData{
|
|
||||||
Files: data.Files,
|
|
||||||
Page: data.Page,
|
|
||||||
Limit: data.Limit,
|
|
||||||
TotalCount: data.TotalCount,
|
|
||||||
TotalPages: data.TotalPages,
|
|
||||||
Filter: data.Filter,
|
|
||||||
SortBy: data.SortBy,
|
|
||||||
SortDir: data.SortDir,
|
|
||||||
}, "/files/search/partial", "#search-results-container")
|
|
||||||
} else {
|
|
||||||
<div class="p-6 text-center text-gray-500 dark:text-gray-400">
|
|
||||||
<svg class="mx-auto mb-4 w-12 h-12 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" />
|
|
||||||
</svg>
|
|
||||||
<p>No files found matching your search criteria.</p>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
$STD "$HOME"/go/bin/templ generate
|
|
||||||
export CGO_ENABLED=1
|
|
||||||
export GOOS=linux
|
|
||||||
$STD go build -o gomft
|
|
||||||
chmod +x /opt/gomft/gomft
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to ${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -f "$temp_file"
|
|
||||||
rm -rf "$HOME/GoMFT-v.${RELEASE}/"
|
|
||||||
msg_ok "Cleanup Complete"
|
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
systemctl start gomft
|
systemctl start gomft
|
||||||
|
|||||||
6
ct/headers/litellm
Normal file
6
ct/headers/litellm
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ _ __ __ __ __ ___
|
||||||
|
/ / (_) /____ / / / / / |/ /
|
||||||
|
/ / / / __/ _ \/ / / / / /|_/ /
|
||||||
|
/ /___/ / /_/ __/ /___/ /___/ / / /
|
||||||
|
/_____/_/\__/\___/_____/_____/_/ /_/
|
||||||
|
|
||||||
6
ct/headers/swizzin
Normal file
6
ct/headers/swizzin
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_____ _ _
|
||||||
|
/ ___/ __(_)_______ (_)___
|
||||||
|
\__ \ | /| / / /_ /_ / / / __ \
|
||||||
|
___/ / |/ |/ / / / /_/ /_/ / / / /
|
||||||
|
/____/|__/|__/_/ /___/___/_/_/ /_/
|
||||||
|
|
||||||
6
ct/headers/twingate-connector
Normal file
6
ct/headers/twingate-connector
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
______ _ __ ______ __
|
||||||
|
/_ __/ __(_)___ ____ _____ _/ /____ / ____/___ ____ ____ ___ _____/ /_____ _____
|
||||||
|
/ / | | /| / / / __ \/ __ `/ __ `/ __/ _ \______/ / / __ \/ __ \/ __ \/ _ \/ ___/ __/ __ \/ ___/
|
||||||
|
/ / | |/ |/ / / / / / /_/ / /_/ / /_/ __/_____/ /___/ /_/ / / / / / / / __/ /__/ /_/ /_/ / /
|
||||||
|
/_/ |__/|__/_/_/ /_/\__, /\__,_/\__/\___/ \____/\____/_/ /_/_/ /_/\___/\___/\__/\____/_/
|
||||||
|
/____/
|
||||||
20
ct/immich.sh
20
ct/immich.sh
@@ -52,13 +52,14 @@ function update_script() {
|
|||||||
if [[ -f ~/.immich_library_revisions ]]; then
|
if [[ -f ~/.immich_library_revisions ]]; then
|
||||||
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
|
libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
|
||||||
cd "$BASE_DIR"
|
cd "$BASE_DIR"
|
||||||
|
msg_info "Checking for updates to custom image-processing libraries"
|
||||||
$STD git pull
|
$STD git pull
|
||||||
for library in "${libraries[@]}"; do
|
for library in "${libraries[@]}"; do
|
||||||
compile_"$library"
|
compile_"$library"
|
||||||
done
|
done
|
||||||
msg_ok "Image-processing libraries updated"
|
msg_ok "Image-processing libraries up to date"
|
||||||
fi
|
fi
|
||||||
RELEASE="1.137.3"
|
RELEASE="1.138.1"
|
||||||
#RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
#RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
|
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
@@ -74,7 +75,8 @@ function update_script() {
|
|||||||
APP_DIR="${INSTALL_DIR}/app"
|
APP_DIR="${INSTALL_DIR}/app"
|
||||||
ML_DIR="${APP_DIR}/machine-learning"
|
ML_DIR="${APP_DIR}/machine-learning"
|
||||||
GEO_DIR="${INSTALL_DIR}/geodata"
|
GEO_DIR="${INSTALL_DIR}/geodata"
|
||||||
VCHORD_RELEASE="$(curl -fsSL https://api.github.com/repos/tensorchord/vectorchord/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
|
VCHORD_RELEASE="0.4.3"
|
||||||
|
# VCHORD_RELEASE="$(curl -fsSL https://api.github.com/repos/tensorchord/vectorchord/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
|
||||||
|
|
||||||
if [[ ! -f ~/.vchord_version ]] || [[ "$VCHORD_RELEASE" != "$(cat ~/.vchord_version)" ]]; then
|
if [[ ! -f ~/.vchord_version ]] || [[ "$VCHORD_RELEASE" != "$(cat ~/.vchord_version)" ]]; then
|
||||||
msg_info "Updating VectorChord"
|
msg_info "Updating VectorChord"
|
||||||
@@ -91,7 +93,8 @@ function update_script() {
|
|||||||
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;"
|
$STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;"
|
||||||
systemctl restart postgresql
|
systemctl restart postgresql
|
||||||
if [[ ! -f ~/.vchord_version ]] || [[ ! "$(cat ~/.vchord_version)" > "0.3.0" ]]; then
|
if [[ ! -f ~/.vchord_version ]] || [[ ! "$(cat ~/.vchord_version)" > "0.3.0" ]]; then
|
||||||
$STD sudo -u postgres psql -d immich -c "REINDEX DATABASE;"
|
$STD sudo -u postgres psql -d immich -c "REINDEX INDEX face_index;"
|
||||||
|
$STD sudo -u postgres psql -d immich -c "REINDEX INDEX clip_index;"
|
||||||
fi
|
fi
|
||||||
echo "$VCHORD_RELEASE" >~/.vchord_version
|
echo "$VCHORD_RELEASE" >~/.vchord_version
|
||||||
rm ./vchord.deb
|
rm ./vchord.deb
|
||||||
@@ -106,10 +109,10 @@ function update_script() {
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -a
|
set -a
|
||||||
. "$INSTALL_DIR"/.env
|
. ${INSTALL_DIR}/.env
|
||||||
set +a
|
set +a
|
||||||
|
|
||||||
/usr/bin/node "$APP_DIR"/dist/main.js "\$@"
|
/usr/bin/node ${APP_DIR}/dist/main.js "\$@"
|
||||||
EOF
|
EOF
|
||||||
chmod +x "$INSTALL_DIR"/start.sh
|
chmod +x "$INSTALL_DIR"/start.sh
|
||||||
fi
|
fi
|
||||||
@@ -180,7 +183,10 @@ EOF
|
|||||||
msg_ok "Updated Immich CLI"
|
msg_ok "Updated Immich CLI"
|
||||||
|
|
||||||
chown -R immich:immich "$INSTALL_DIR"
|
chown -R immich:immich "$INSTALL_DIR"
|
||||||
echo "$RELEASE" >/opt/"${APP}"_version.txt
|
if [[ ! -f ~/.debian_version.bak ]]; then
|
||||||
|
cp /etc/debian_version ~/.debian_version.bak
|
||||||
|
sed -i 's/.*/13.0/' /etc/debian_version
|
||||||
|
fi
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
|
|||||||
@@ -27,38 +27,50 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if ! command -v jq &>/dev/null; then
|
||||||
|
$STD apt-get install -y jq
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Stopping Keycloak"
|
RELEASE=$(curl -fsSL https://api.github.com/repos/keycloak/keycloak/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
systemctl stop keycloak
|
if [[ "${RELEASE}" != "$(cat ~/.keycloak_app 2>/dev/null)" ]] || [[ ! -f ~/.keycloak_app ]]; then
|
||||||
msg_ok "Stopped Keycloak"
|
msg_info "Stopping Keycloak"
|
||||||
|
systemctl stop keycloak
|
||||||
|
msg_ok "Stopped Keycloak"
|
||||||
|
|
||||||
msg_info "Updating packages"
|
msg_info "Updating packages"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y upgrade
|
$STD apt-get -y upgrade
|
||||||
msg_ok "Updated packages"
|
msg_ok "Updated packages"
|
||||||
|
|
||||||
msg_info "Backup old Keycloak"
|
msg_info "Backup old Keycloak"
|
||||||
cd /opt
|
cd /opt
|
||||||
mv keycloak keycloak.old
|
mv keycloak keycloak.old
|
||||||
tar -czf keycloak_conf_backup.tar.gz keycloak.old/conf
|
msg_ok "Backup done"
|
||||||
msg_ok "Backup done"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "keycloak" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
|
fetch_and_deploy_gh_release "keycloak_app" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
cd /opt
|
cd /opt
|
||||||
mv keycloak_conf_backup.tar.gz keycloak/conf
|
cp -a keycloak.old/conf/. keycloak/conf/
|
||||||
cp -r keycloak.old/providers keycloak
|
cp -a keycloak.old/providers/. keycloak/providers/ 2>/dev/null || true
|
||||||
cp -r keycloak.old/themes keycloak
|
cp -a keycloak.old/themes/. keycloak/themes/ 2>/dev/null || true
|
||||||
rm -rf keycloak.old
|
msg_ok "Updated ${APP} LXC"
|
||||||
msg_ok "Updated ${APP} LXC"
|
|
||||||
|
|
||||||
msg_info "Restarting Keycloak"
|
msg_info "Restarting Keycloak"
|
||||||
systemctl restart keycloak
|
systemctl restart keycloak
|
||||||
msg_ok "Restarted Keycloak"
|
msg_ok "Restarted Keycloak"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf keycloak.old
|
||||||
|
msg_ok "Cleanup complete"
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
start
|
start
|
||||||
build_container
|
build_container
|
||||||
description
|
description
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ ! -f ~/.komga ]] || [[ "${RELEASE}" != "$(cat ~/.komga)" ]]; then
|
if [[ ! -f ~/.komga-org ]] || [[ "${RELEASE}" != "$(cat ~/.komga-org)" ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop komga
|
systemctl stop komga
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|||||||
60
ct/litellm.sh
Normal file
60
ct/litellm.sh
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: stout01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/BerriAI/litellm
|
||||||
|
|
||||||
|
APP="LiteLLM"
|
||||||
|
var_tags="${var_tags:-ai;interface}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-12}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f /etc/systemd/system/litellm.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
systemctl stop litellm
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
VENV_PATH="/opt/litellm/.venv"
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
|
||||||
|
msg_info "Updating $APP"
|
||||||
|
$STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
|
||||||
|
|
||||||
|
msg_info "Updating DB Schema"
|
||||||
|
$STD uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
||||||
|
msg_ok "DB Schema Updated"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start litellm
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}"
|
||||||
@@ -30,7 +30,7 @@ function update_script() {
|
|||||||
msg_info "Updating $APP"
|
msg_info "Updating $APP"
|
||||||
systemctl stop openobserve
|
systemctl stop openobserve
|
||||||
LATEST=$(curl -fsSL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
LATEST=$(curl -fsSL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
||||||
tar zxvf <(curl -fsSL https://github.com/openobserve/openobserve/releases/download/$LATEST/openobserve-${LATEST}-linux-amd64.tar.gz) -C /opt/openobserve
|
$STD tar zxvf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/$LATEST/openobserve-$LATEST-linux-amd64.tar.gz) -C /opt/openobserve
|
||||||
systemctl start openobserve
|
systemctl start openobserve
|
||||||
msg_ok "Updated $APP"
|
msg_ok "Updated $APP"
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ APP="Paperless-ngx"
|
|||||||
var_tags="${var_tags:-document;management}"
|
var_tags="${var_tags:-document;management}"
|
||||||
var_cpu="${var_cpu:-2}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-2048}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-10}"
|
var_disk="${var_disk:-12}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-12}"
|
var_version="${var_version:-12}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -20,70 +20,115 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
if [[ ! -d /opt/paperless ]]; then
|
if [[ ! -d /opt/paperless ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
if ! command -v jq &>/dev/null; then
|
||||||
|
$STD apt-get install -y jq
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | jq -r .tag_name | sed 's/^v//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.paperless 2>/dev/null)" ]] || [[ ! -f ~/.paperless ]]; then
|
||||||
|
msg_info "Stopping all Paperless-ngx Services"
|
||||||
|
systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
|
||||||
|
msg_ok "Stopped all Paperless-ngx Services"
|
||||||
|
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
|
if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
|
||||||
"1" "Update Paperless-ngx to $RELEASE" ON \
|
|
||||||
"2" "Paperless-ngx Credentials" OFF \
|
msg_info "Backing up data"
|
||||||
3>&1 1>&2 2>&3)
|
mkdir -p /opt/paperless/backup
|
||||||
header_info
|
cp -r /opt/paperless/data /opt/paperless/backup/
|
||||||
check_container_storage
|
cp -r /opt/paperless/media /opt/paperless/backup/
|
||||||
check_container_resources
|
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
|
||||||
if [ "$UPD" == "1" ]; then
|
msg_ok "Backup completed"
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
|
||||||
if [[ "$(gs --version 2>/dev/null)" != "10.04.0" ]]; then
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
msg_info "Updating Ghostscript (Patience)"
|
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||||
cd /tmp
|
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||||
curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz" -o $(basename "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz")
|
setup_gs
|
||||||
tar -xzf ghostscript-10.04.0.tar.gz
|
|
||||||
cd ghostscript-10.04.0
|
|
||||||
$STD ./configure
|
|
||||||
$STD make
|
|
||||||
$STD sudo make install
|
|
||||||
rm -rf /tmp/ghostscript*
|
|
||||||
msg_ok "Ghostscript updated to 10.04.0"
|
|
||||||
fi
|
|
||||||
msg_info "Stopping all Paperless-ngx Services"
|
|
||||||
systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service
|
|
||||||
msg_ok "Stopped all Paperless-ngx Services"
|
|
||||||
|
|
||||||
msg_info "Updating to ${RELEASE}"
|
msg_info "Updating to ${RELEASE}"
|
||||||
cd ~
|
cp -r /opt/paperless/backup/* /opt/paperless/
|
||||||
curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz" -o $(basename "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz")
|
|
||||||
tar -xf paperless-ngx-$RELEASE.tar.xz
|
|
||||||
cp -r /opt/paperless/paperless.conf paperless-ngx/
|
|
||||||
cp -r paperless-ngx/* /opt/paperless/
|
|
||||||
cd /opt/paperless
|
cd /opt/paperless
|
||||||
$STD pip install -r requirements.txt
|
$STD uv sync --all-extras
|
||||||
cd /opt/paperless/src
|
cd /opt/paperless/src
|
||||||
$STD /usr/bin/python3 manage.py migrate
|
$STD uv run -- python manage.py migrate
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated to ${RELEASE}"
|
msg_ok "Updated to ${RELEASE}"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
cd ~
|
|
||||||
rm paperless-ngx-$RELEASE.tar.xz
|
|
||||||
rm -rf paperless-ngx
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
|
|
||||||
msg_info "Starting all Paperless-ngx Services"
|
|
||||||
systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service
|
|
||||||
sleep 1
|
|
||||||
msg_ok "Started all Paperless-ngx Services"
|
|
||||||
msg_ok "Updated Successfully!\n"
|
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_warn "You are about to migrate your Paperless-ngx installation to uv!"
|
||||||
|
msg_custom "🔒" "It is strongly recommended to take a Proxmox snapshot first:"
|
||||||
|
echo -e " 1. Stop the container: pct stop <CTID>"
|
||||||
|
echo -e " 2. Create a snapshot: pct snapshot <CTID> pre-paperless-uv-migration"
|
||||||
|
echo -e " 3. Start the container again\n"
|
||||||
|
|
||||||
|
read -rp "Have you created a snapshot? [y/N]: " confirm
|
||||||
|
if [[ ! "$confirm" =~ ^([yY]|[yY][eE][sS])$ ]]; then
|
||||||
|
msg_error "Migration aborted. Please create a snapshot first."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
msg_info "Migrating old Paperless-ngx installation to uv"
|
||||||
|
rm -rf /opt/paperless/venv
|
||||||
|
find /opt/paperless -name "__pycache__" -type d -exec rm -rf {} +
|
||||||
|
|
||||||
|
declare -A PATCHES=(
|
||||||
|
["paperless-consumer.service"]="ExecStart=uv run -- python manage.py document_consumer"
|
||||||
|
["paperless-scheduler.service"]="ExecStart=uv run -- celery --app paperless beat --loglevel INFO"
|
||||||
|
["paperless-task-queue.service"]="ExecStart=uv run -- celery --app paperless worker --loglevel INFO"
|
||||||
|
["paperless-webserver.service"]="ExecStart=uv run -- granian --interface asgi --ws \"paperless.asgi:application\""
|
||||||
|
)
|
||||||
|
|
||||||
|
for svc in "${!PATCHES[@]}"; do
|
||||||
|
path=$(systemctl show -p FragmentPath "$svc" | cut -d= -f2)
|
||||||
|
if [[ -n "$path" && -f "$path" ]]; then
|
||||||
|
sed -i "s|^ExecStart=.*|${PATCHES[$svc]}|" "$path"
|
||||||
|
if [[ "$svc" == "paperless-webserver.service" ]]; then
|
||||||
|
grep -q "^Environment=GRANIAN_HOST=" "$path" ||
|
||||||
|
sed -i '/^\[Service\]/a Environment=GRANIAN_HOST=::' "$path"
|
||||||
|
grep -q "^Environment=GRANIAN_PORT=" "$path" ||
|
||||||
|
sed -i '/^\[Service\]/a Environment=GRANIAN_PORT=8000' "$path"
|
||||||
|
grep -q "^Environment=GRANIAN_WORKERS=" "$path" ||
|
||||||
|
sed -i '/^\[Service\]/a Environment=GRANIAN_WORKERS=1' "$path"
|
||||||
|
fi
|
||||||
|
msg_ok "Patched $svc"
|
||||||
|
else
|
||||||
|
msg_error "Service file for $svc not found!"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
$STD systemctl daemon-reload
|
||||||
|
msg_info "Backing up data"
|
||||||
|
mkdir -p /opt/paperless/backup
|
||||||
|
cp -r /opt/paperless/data /opt/paperless/backup/
|
||||||
|
cp -r /opt/paperless/media /opt/paperless/backup/
|
||||||
|
cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
|
||||||
|
msg_ok "Backup completed"
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||||
|
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||||
|
setup_gs
|
||||||
|
|
||||||
|
msg_info "Updating Paperless-ngx"
|
||||||
|
cp -r /opt/paperless/backup/* /opt/paperless/
|
||||||
|
cd /opt/paperless
|
||||||
|
$STD uv sync --all-extras
|
||||||
|
cd /opt/paperless/src
|
||||||
|
$STD uv run -- python manage.py migrate
|
||||||
|
msg_ok "Paperless-ngx migration and update to ${RELEASE} completed"
|
||||||
fi
|
fi
|
||||||
exit
|
|
||||||
fi
|
msg_info "Starting all Paperless-ngx Services"
|
||||||
if [ "$UPD" == "2" ]; then
|
systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
|
||||||
cat paperless.creds
|
sleep 1
|
||||||
exit
|
msg_ok "Started all Paperless-ngx Services"
|
||||||
|
msg_ok "Updated Successfully!\n"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
fi
|
fi
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
@@ -94,3 +139,4 @@ msg_ok "Completed Successfully!\n"
|
|||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
|
||||||
|
|
||||||
|
|||||||
@@ -27,29 +27,25 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/phpipam/phpipam/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/phpipam/phpipam/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.phpipam ]] || [[ "${RELEASE}" != "$(cat ~/.phpipam 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
|
||||||
cd /opt
|
|
||||||
mv /opt/phpipam/ /opt/phpipam-backup
|
mv /opt/phpipam/ /opt/phpipam-backup
|
||||||
curl -fsSL "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip" -o $(basename "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip")
|
fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
|
||||||
$STD unzip "phpipam-v${RELEASE}.zip"
|
|
||||||
cp /opt/phpipam-backup/config.php /opt/phpipam
|
cp /opt/phpipam-backup/config.php /opt/phpipam
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start apache2
|
systemctl start apache2
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -r "/opt/phpipam-v${RELEASE}.zip"
|
|
||||||
rm -r /opt/phpipam-backup
|
rm -r /opt/phpipam-backup
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -20,38 +20,31 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
if [[ ! -d /opt/plant-it ]]; then
|
||||||
if [[ ! -d /opt/plant-it ]]; then
|
msg_error "No ${APP} Installation Found!"
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/MDeLuise/plant-it/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
|
|
||||||
msg_info "Stopping $APP"
|
|
||||||
systemctl stop plant-it
|
|
||||||
msg_ok "Stopped $APP"
|
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
|
||||||
curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar" -o "/opt/plant-it/server.jar"
|
|
||||||
cd /opt/plant-it/frontend
|
|
||||||
curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz" -o $(basename "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz")
|
|
||||||
tar -xzf client.tar.gz
|
|
||||||
rm -f client.tar.gz
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
|
||||||
systemctl start plant-it
|
|
||||||
msg_ok "Started $APP"
|
|
||||||
msg_ok "Update Successful"
|
|
||||||
else
|
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.plant-it 2>/dev/null)" ]] || [[ ! -f ~/.plant-it ]]; then
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop plant-it
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "latest" "/opt/plant-it/backend" "server.jar"
|
||||||
|
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "latest" "/opt/plant-it/frontend" "client.tar.gz"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start plant-it
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -27,24 +27,19 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.prom-paperless-exp ]] || [[ "${RELEASE}" != "$(cat prom-paperless-exp 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop prometheus-paperless-ngx-exporter
|
systemctl stop prometheus-paperless-ngx-exporter
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary"
|
||||||
cd /opt
|
|
||||||
curl -fsSL "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz" -o $(basename "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz")
|
|
||||||
tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
|
||||||
cp -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
|
|
||||||
rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start prometheus-paperless-ngx-exporter
|
systemctl start prometheus-paperless-ngx-exporter
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -28,23 +28,18 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.prometheus ]] || [[ "${RELEASE}" != "$(cat ~/.prometheus 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop prometheus
|
systemctl stop prometheus
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-amd64.tar.gz"
|
||||||
cd /opt
|
rm -f /usr/local/bin/prometheus.yml
|
||||||
curl -fsSL "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz" -o $(basename "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz")
|
|
||||||
tar -xf prometheus-${RELEASE}.linux-amd64.tar.gz
|
|
||||||
cp -rf prometheus-${RELEASE}.linux-amd64/prometheus prometheus-${RELEASE}.linux-amd64/promtool /usr/local/bin/
|
|
||||||
rm -rf prometheus-${RELEASE}.linux-amd64 prometheus-${RELEASE}.linux-amd64.tar.gz
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start prometheus
|
systemctl start prometheus
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -23,37 +23,30 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /opt/ps5-mqtt ]]; then
|
if [[ ! -d /opt/ps5-mqtt ]]; then
|
||||||
msg_error "No ${APP} installation found!"
|
msg_error "No ${APP} installation found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.ps5-mqtt 2>/dev/null)" ]] || [[ ! -f ~/.ps5-mqtt ]]; then
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/ps5-mqtt_version.txt)" ]]; then
|
|
||||||
msg_info "Stopping service"
|
msg_info "Stopping service"
|
||||||
systemctl stop ps5-mqtt
|
systemctl stop ps5-mqtt
|
||||||
msg_ok "Stopped service"
|
msg_ok "Stopped service"
|
||||||
|
|
||||||
msg_info "Updating PS5-MQTT to ${RELEASE}"
|
fetch_and_deploy_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt" "tarball"
|
||||||
curl -fsSL https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz -o /tmp/${RELEASE}.tar.gz
|
|
||||||
rm -rf /opt/ps5-mqtt
|
|
||||||
tar zxf /tmp/${RELEASE}.tar.gz -C /opt
|
|
||||||
mv /opt/ps5-mqtt-* /opt/ps5-mqtt
|
|
||||||
rm /tmp/${RELEASE}.tar.gz
|
|
||||||
echo ${RELEASE} >/opt/ps5-mqtt_version.txt
|
|
||||||
msg_ok "Updated PS5-MQTT"
|
|
||||||
|
|
||||||
msg_info "Building new PS5-MQTT version"
|
msg_info "Configuring ${APP}"
|
||||||
cd /opt/ps5-mqtt/ps5-mqtt/
|
cd /opt/ps5-mqtt/ps5-mqtt/
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
msg_ok "Built new PS5-MQTT version"
|
msg_ok "Configured ${APP}"
|
||||||
|
|
||||||
msg_info "Starting service"
|
msg_info "Starting service"
|
||||||
systemctl start ps5-mqtt
|
systemctl start ps5-mqtt
|
||||||
msg_ok "Started service"
|
msg_ok "Started service"
|
||||||
|
|
||||||
|
msg_ok "Updated successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
20
ct/pulse.sh
20
ct/pulse.sh
@@ -34,28 +34,30 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/rcourtman/Pulse/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/rcourtman/Pulse/releases/latest | jq -r '.tag_name' | sed 's/^v//')
|
||||||
|
SERVICE_PATH="/etc/systemd/system"
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.pulse 2>/dev/null)" ]] || [[ ! -f ~/.pulse ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.pulse 2>/dev/null)" ]] || [[ ! -f ~/.pulse ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop pulse
|
systemctl stop pulse*.service
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
dirs=(/opt/pulse/bin /opt/pulse/frontend-modern)
|
if [[ -f /opt/pulse/pulse ]]; then
|
||||||
for dir in "${dirs[@]}"; do
|
rm -f /opt/pulse/pulse
|
||||||
if [[ -d "$dir" ]]; then
|
fi
|
||||||
rm -rf "$dir"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "pulse" "rcourtman/Pulse" "prebuild" "latest" "/opt/pulse" "*-linux-amd64.tar.gz"
|
fetch_and_deploy_gh_release "pulse" "rcourtman/Pulse" "prebuild" "latest" "/opt/pulse" "*-linux-amd64.tar.gz"
|
||||||
chown -R pulse:pulse /etc/pulse /opt/pulse
|
chown -R pulse:pulse /etc/pulse /opt/pulse
|
||||||
sed -i 's|bin/pulse|pulse|' /etc/systemd/system/pulse.service
|
if [[ -f "$SERVICE_PATH"/pulse.service ]]; then
|
||||||
|
mv "$SERVICE_PATH"/pulse.service "$SERVICE_PATH"/pulse-backend.service
|
||||||
|
fi
|
||||||
|
sed -i -e 's|pulse/pulse|pulse/bin/pulse|' \
|
||||||
|
-e 's/^Environment="API.*$//' "$SERVICE_PATH"/pulse-backend.service
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
if grep -q 'pulse-home:/bin/bash' /etc/passwd; then
|
if grep -q 'pulse-home:/bin/bash' /etc/passwd; then
|
||||||
usermod -s /usr/sbin/nologin pulse
|
usermod -s /usr/sbin/nologin pulse
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start pulse
|
systemctl start pulse-backend
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
|
|||||||
@@ -27,32 +27,24 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ ! -f ~/.qbittorrent ]]; then
|
||||||
touch /opt/${APP}_version.txt
|
msg_error "Please create new qBittorrent LXC. Updating from v4.x to v5.x is not supported!"
|
||||||
mkdir -p $HOME/.config/qBittorrent/
|
exit
|
||||||
mkdir -p /opt/qbittorrent/
|
|
||||||
[ -d "/.config/qBittorrent" ] && mv /.config/qBittorrent "$HOME/.config/"
|
|
||||||
$STD apt-get remove --purge -y qbittorrent-nox
|
|
||||||
sed -i 's@ExecStart=/usr/bin/qbittorrent-nox@ExecStart=/opt/qbittorrent/qbittorrent-nox@g' /etc/systemd/system/qbittorrent-nox.service
|
|
||||||
systemctl daemon-reload
|
|
||||||
fi
|
fi
|
||||||
FULLRELEASE=$(curl -fsSL https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
RELEASE=$(echo $FULLRELEASE | cut -c 9-13)
|
RELEASE=$(curl -fsSL https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.qbittorrent ]] || [[ "${RELEASE}" != "$(cat ~/.qbittorrent 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop qbittorrent-nox
|
systemctl stop qbittorrent-nox
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "qbittorrent" "userdocs/qbittorrent-nox-static" "singlefile" "latest" "/opt/qbittorrent" "x86_64-qbittorrent-nox"
|
||||||
rm -f /opt/qbittorrent/qbittorrent-nox
|
mv /opt/qbittorrent/x86_64-qbittorrent-nox /opt/qbittorrent/qbittorrent-nox
|
||||||
curl -fsSL "https://github.com/userdocs/qbittorrent-nox-static/releases/download/${FULLRELEASE}/x86_64-qbittorrent-nox" -o /opt/qbittorrent/qbittorrent-nox
|
|
||||||
chmod +x /opt/qbittorrent/qbittorrent-nox
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start qbittorrent-nox
|
systemctl start qbittorrent-nox
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
14
ct/rclone.sh
14
ct/rclone.sh
@@ -28,27 +28,19 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.rclone ]] || [[ "${RELEASE}" != "$(cat ~/.rclone 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop rclone-web
|
systemctl stop rclone-web
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-amd64.zip"
|
||||||
temp_file=$(mktemp)
|
|
||||||
rm -rf /opt/rclone/*
|
|
||||||
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
|
|
||||||
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start rclone-web
|
systemctl start rclone-web
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -f "$temp_file"
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -27,30 +27,37 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Stopping ${APP}"
|
|
||||||
systemctl stop rdtc
|
|
||||||
msg_ok "Stopped ${APP}"
|
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
RELEASE=$(curl -s https://api.github.com/repos/rogerfar/rdt-client/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
if [[ ! -f ~/.rdt-client ]] || [[ "${RELEASE}" != "$(cat ~/.rdt-client 2>/dev/null)" ]]; then
|
||||||
$STD apt-get remove --purge -y dotnet-sdk-8.0
|
msg_info "Stopping ${APP}"
|
||||||
$STD apt-get install -y dotnet-sdk-9.0
|
systemctl stop rdtc
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
msg_info "Creating backup"
|
||||||
|
mkdir -p /opt/rdtc-backup
|
||||||
|
cp -R /opt/rdtc/appsettings.json /opt/rdtc-backup/
|
||||||
|
msg_ok "Backup created"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
||||||
|
cp -R /opt/rdtc-backup/appsettings.json /opt/rdtc/
|
||||||
|
if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
|
||||||
|
$STD apt-get remove --purge -y dotnet-sdk-8.0
|
||||||
|
$STD apt-get install -y dotnet-sdk-9.0
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start rdtc
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf /opt/rdtc-backup
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
fi
|
fi
|
||||||
mkdir -p rdtc-backup
|
|
||||||
cp -R /opt/rdtc/appsettings.json rdtc-backup/
|
|
||||||
curl -fsSL "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip" -o $(basename "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip")
|
|
||||||
$STD unzip -o RealDebridClient.zip -d /opt/rdtc
|
|
||||||
cp -R rdtc-backup/appsettings.json /opt/rdtc/
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
|
||||||
systemctl start rdtc
|
|
||||||
msg_ok "Started ${APP}"
|
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf rdtc-backup RealDebridClient.zip
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,22 +20,23 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /root/.config/recyclarr/recyclarr.yml ]]; then
|
if [[ ! -f /root/.config/recyclarr/recyclarr.yml ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
|
||||||
curl -fsSL "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)")
|
|
||||||
tar -C /usr/local/bin -xJf recyclarr*.tar.xz
|
|
||||||
rm -rf recyclarr*.tar.xz
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.recyclarr 2>/dev/null)" ]] || [[ ! -f ~/.recyclarr ]]; then
|
||||||
|
fetch_and_deploy_gh_release "recyclarr" "recyclarr/recyclarr" "prebuild" "latest" "/usr/local/bin" "recyclarr-linux-x64.tar.xz"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -23,29 +23,25 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d "/opt/revealjs" ]]; then
|
if [[ ! -d "/opt/revealjs" ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hakimel/reveal.js/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/hakimel/reveal.js/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 [[ "${RELEASE}" != "$(cat ~/.revealjs 2>/dev/null)" ]] || [[ ! -f ~/.revealjs ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop revealjs
|
systemctl stop revealjs
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
curl -fsSL "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_file"
|
|
||||||
tar zxf $temp_file
|
|
||||||
rm -rf /opt/revealjs/node_modules/*
|
|
||||||
cp /opt/revealjs/index.html /opt
|
cp /opt/revealjs/index.html /opt
|
||||||
cp -rf reveal.js-${RELEASE}/* /opt/revealjs
|
fetch_and_deploy_gh_release "revealjs" "hakimel/reveal.js" "tarball"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
cd /opt/revealjs
|
cd /opt/revealjs
|
||||||
$STD npm install
|
$STD npm install
|
||||||
cp -f /opt/index.html /opt/revealjs
|
cp -f /opt/index.html /opt/revealjs
|
||||||
sed -i '25s/localhost/0.0.0.0/g' /opt/revealjs/gulpfile.js
|
sed -i '25s/localhost/0.0.0.0/g' /opt/revealjs/gulpfile.js
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to ${RELEASE}"
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
@@ -53,8 +49,7 @@ curl -fsSL "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.ta
|
|||||||
msg_ok "Started $APP"
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -f $temp_file
|
rm -f /opt/index.html
|
||||||
rm -rf ~/reveal.js-${RELEASE}
|
|
||||||
msg_ok "Cleanup Completed"
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
msg_ok "Update Successful"
|
msg_ok "Update Successful"
|
||||||
|
|||||||
@@ -28,13 +28,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [[ ! -f /opt/rustdeskapi_version.txt ]]; then
|
|
||||||
touch /opt/rustdeskapi_version.txt
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/rustdesk_version.txt)" ]] || [[ "${APIRELEASE}" != "$(cat /opt/rustdesk-api.txt)" ]] || [[ ! -f /opt/rustdesk_version.txt ]] || [[ ! -f /opt/rustdesk-api.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.rustdesk-hbbr)" ]] || [[ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ]] || [[ ! -f ~/.rustdesk-hbbr ]] || [[ ! -f ~/.rustdesk-api ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop rustdesk-hbbr
|
systemctl stop rustdesk-hbbr
|
||||||
systemctl stop rustdesk-hbbs
|
systemctl stop rustdesk-hbbs
|
||||||
@@ -43,28 +40,15 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
|
||||||
TEMPDIR=$(mktemp -d)
|
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
|
||||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_amd64.deb" \
|
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
|
||||||
-o "${TEMPDIR}/rustdesk-server-hbbr_${RELEASE}_amd64.deb"
|
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
|
||||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_amd64.deb" \
|
|
||||||
-o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_amd64.deb"
|
|
||||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_amd64.deb" \
|
|
||||||
-o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_amd64.deb"
|
|
||||||
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/rustdesk-api-server_${APIRELEASE}_amd64.deb" \
|
|
||||||
-o "${TEMPDIR}/rustdesk-api-server_${APIRELEASE}_amd64.deb"
|
|
||||||
$STD dpkg -i $TEMPDIR/*.deb
|
|
||||||
echo "${RELEASE}" >/opt/rustdesk_version.txt
|
|
||||||
echo "${APIRELEASE}" >/opt/rustdeskapi_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf $TEMPDIR
|
|
||||||
msg_ok "Cleanup Completed"
|
|
||||||
|
|
||||||
msg_info "Starting services"
|
msg_info "Starting services"
|
||||||
systemctl start -q rustdesk-* --all
|
systemctl start -q rustdesk-* --all
|
||||||
msg_ok "Services started"
|
msg_ok "Services started"
|
||||||
|
|
||||||
msg_ok "Update Successful"
|
msg_ok "Update Successful"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -29,25 +29,17 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.semaphore ]] || [[ "${RELEASE}" != "$(cat ~/.semaphore 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop semaphore
|
systemctl stop semaphore
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "semaphore" "semaphoreui/semaphore" "binary"
|
||||||
cd /opt
|
|
||||||
curl -fsSL "https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb")
|
|
||||||
$STD dpkg -i semaphore_${RELEASE}_linux_amd64.deb
|
|
||||||
echo "${RELEASE}" >"/opt/${APP}_version.txt"
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start semaphore
|
systemctl start semaphore
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -rf /opt/semaphore_${RELEASE}_linux_amd64.deb
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
||||||
|
|||||||
@@ -26,19 +26,14 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ ! -f "/opt/${APP}_version.txt" || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.silverbullet || "${RELEASE}" != "$(cat ~/.silverbullet 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop silverbullet
|
systemctl stop silverbullet
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "silverbullet" "silverbulletmd/silverbullet" "prebuild" "latest" "/opt/silverbullet/bin" "silverbullet-server-linux-x86_64.zip"
|
||||||
curl -fsSL "https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip" -o $(basename "https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip")
|
|
||||||
$STD unzip silverbullet-server-linux-x86_64.zip
|
|
||||||
mv silverbullet /opt/silverbullet/bin/
|
|
||||||
chmod +x /opt/silverbullet/bin/silverbullet
|
|
||||||
echo "${RELEASE}" >/opt/silverbullet/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start silverbullet
|
systemctl start silverbullet
|
||||||
|
|||||||
43
ct/swizzin.sh
Normal file
43
ct/swizzin.sh
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: EEJoshua
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://swizzin.ltd/
|
||||||
|
|
||||||
|
APP="Swizzin"
|
||||||
|
var_tags="${var_tags:-seedbox}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-4096}"
|
||||||
|
var_disk="${var_disk:-20}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-12}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if ! command -v sudo box >/dev/null 2>&1; then
|
||||||
|
msg_error "No ${APP} installation found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Running 'sudo box update' inside the container"
|
||||||
|
$STD sudo box update
|
||||||
|
msg_ok "Update finished"
|
||||||
|
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}If installed panel, access through the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
||||||
34
ct/tdarr.sh
34
ct/tdarr.sh
@@ -20,18 +20,30 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /opt/tdarr ]]; then
|
if [[ ! -d /opt/tdarr ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating $APP LXC"
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get -y upgrade
|
|
||||||
msg_ok "Updated $APP LXC"
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating $APP LXC"
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get -y upgrade
|
||||||
|
rm -rf /opt/tdarr/Tdarr_Updater
|
||||||
|
cd /opt/tdarr
|
||||||
|
RELEASE=$(curl -fsSL https://f000.backblazeb2.com/file/tdarrs/versions.json | grep -oP '(?<="Tdarr_Updater": ")[^"]+' | grep linux_x64 | head -n 1)
|
||||||
|
curl -fsSL "$RELEASE" -o Tdarr_Updater.zip
|
||||||
|
$STD unzip Tdarr_Updater.zip
|
||||||
|
chmod +x Tdarr_Updater
|
||||||
|
$STD ./Tdarr_Updater
|
||||||
|
msg_ok "Updated $APP LXC"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf /opt/tdarr/Tdarr_Updater.zip
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
msg_ok "$APP has been successfully updated!"
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -27,17 +27,20 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating ${APP}"
|
|
||||||
|
|
||||||
if ! dpkg -s aspnetcore-runtime-8.0 >/dev/null 2>&1; then
|
RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
|
||||||
curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -o $(basename "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb")
|
if [[ ! -f ~/.technitium || "${RELEASE}" != "$(cat ~/.technitium)" ]]; then
|
||||||
$STD dpkg -i packages-microsoft-prod.deb
|
msg_info "Updating ${APP}"
|
||||||
$STD apt-get update
|
curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz
|
||||||
$STD apt-get install -y aspnetcore-runtime-8.0
|
$STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/
|
||||||
rm packages-microsoft-prod.deb
|
msg_ok "Updated Successfully"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f /opt/DnsServerPortable.tar.gz
|
||||||
|
msg_ok "Cleaned up"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
||||||
fi
|
fi
|
||||||
$STD bash <(curl -fsSL https://download.technitium.com/dns/install.sh)
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,32 +26,34 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE="$(curl -fsSL https://api.github.com/repos/toniebox-reverse-engineering/teddycloud/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
|
RELEASE="$(curl -fsSL https://api.github.com/repos/toniebox-reverse-engineering/teddycloud/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
|
||||||
VERSION="${RELEASE#tc_v}"
|
if [[ ! -f ~/.teddycloud || "${RELEASE}" != "$(cat ~/.teddycloud)" ]]; then
|
||||||
if [[ ! -f "/opt/${APP}_version.txt" || "${VERSION}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop teddycloud
|
systemctl stop teddycloud
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${VERSION}"
|
msg_info "Creating backup"
|
||||||
cd /opt
|
|
||||||
mv /opt/teddycloud /opt/teddycloud_bak
|
mv /opt/teddycloud /opt/teddycloud_bak
|
||||||
curl -fsSL "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip" -o $(basename "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip")
|
msg_ok "Backup created"
|
||||||
$STD unzip -d /opt/teddycloud teddycloud.amd64.release_v${VERSION}.zip
|
|
||||||
|
fetch_and_deploy_gh_release "teddycloud" "toniebox-reverse-engineering/teddycloud" "prebuild" "latest" "/opt/teddycloud" "teddycloud.amd64.release*.zip"
|
||||||
|
|
||||||
|
msg_info "Restoring data"
|
||||||
cp -R /opt/teddycloud_bak/certs /opt/teddycloud_bak/config /opt/teddycloud_bak/data /opt/teddycloud
|
cp -R /opt/teddycloud_bak/certs /opt/teddycloud_bak/config /opt/teddycloud_bak/data /opt/teddycloud
|
||||||
echo "${VERSION}" >"/opt/${APP}_version.txt"
|
msg_ok "Data restored"
|
||||||
msg_ok "Updated ${APP} to v${VERSION}"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start teddycloud
|
systemctl start teddycloud
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf /opt/teddycloud.amd64.release_v${VERSION}.zip
|
|
||||||
rm -rf /opt/teddycloud_bak
|
rm -rf /opt/teddycloud_bak
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
|
msg_ok "Updated successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${VERSION}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,33 +27,15 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if ! dpkg -l build-essential >/dev/null 2>&1; then
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get install -y build-essential
|
|
||||||
fi
|
|
||||||
if ! npm list -g node-gyp >/dev/null 2>&1; then
|
|
||||||
$STD npm install -g node-gyp
|
|
||||||
fi
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/thelounge/thelounge-deb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/thelounge/thelounge-deb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.thelounge ]] || [[ "${RELEASE}" != "$(cat ~/.thelounge)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop thelounge
|
systemctl stop thelounge
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
fetch_and_deploy_gh_release "thelounge" "thelounge/thelounge-deb" "binary"
|
||||||
$STD apt-get install --only-upgrade nodejs
|
|
||||||
cd /opt
|
|
||||||
curl -fsSL "https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb" -o $(basename "https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb")
|
|
||||||
dpkg -i ./thelounge_${RELEASE}_all.deb
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start thelounge
|
|
||||||
msg_ok "Started Service"
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -rf "/opt/thelounge_${RELEASE}_all.deb"
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
||||||
|
|||||||
@@ -27,7 +27,42 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_error "Currently we don't provide an update function for this ${APP}."
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/traccar/traccar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.traccar)" ]] || [[ ! -f ~/.traccar ]]; then
|
||||||
|
msg_info "Stopping service"
|
||||||
|
systemctl stop traccar
|
||||||
|
msg_ok "Service stopped"
|
||||||
|
|
||||||
|
msg_info "Creating backup"
|
||||||
|
mv /opt/traccar/conf/traccar.xml /opt
|
||||||
|
[[ -d /opt/traccar/data ]] && mv /opt/traccar/data /opt
|
||||||
|
[[ -d /opt/traccar/media ]] && mv /opt/traccar/media /opt
|
||||||
|
msg_ok "Backup created"
|
||||||
|
|
||||||
|
rm -rf /opt/traccar
|
||||||
|
fetch_and_deploy_gh_release "traccar" "traccar/traccar" "prebuild" "latest" "/opt/traccar" "traccar-linux-64*.zip"
|
||||||
|
cd /opt/traccar
|
||||||
|
$STD ./traccar.run
|
||||||
|
|
||||||
|
msg_info "Restoring data"
|
||||||
|
mv /opt/traccar.xml /opt/traccar/conf
|
||||||
|
[[ -d /opt/data ]] && mv /opt/data /opt/traccar
|
||||||
|
[[ -d /opt/media ]] && mv /opt/media /opt/traccar
|
||||||
|
msg_ok "Data restored"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start traccar
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
[ -f README.txt ] || [ -f traccar.run ] && rm -f README.txt traccar.run
|
||||||
|
msg_ok "Cleaned up"
|
||||||
|
|
||||||
|
msg_ok "Successfully updated ${APP}"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,16 +27,20 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/traefik/traefik/releases | grep -oP '"tag_name":\s*"v\K[\d.]+?(?=")' | sort -V | tail -n 1)
|
|
||||||
msg_info "Updating $APP LXC"
|
RELEASE=$(curl -fsSL https://api.github.com/repos/traefik/traefik/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.traefik)" ]] || [[ ! -f ~/.traefik ]]; then
|
||||||
curl -fsSL "https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_amd64.tar.gz" -o $(basename "https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_amd64.tar.gz")
|
msg_info "Stopping service"
|
||||||
tar -C /tmp -xzf traefik*.tar.gz
|
systemctl stop traefik
|
||||||
mv /tmp/traefik /usr/bin/
|
msg_ok "Service stopped"
|
||||||
rm -rf traefik*.tar.gz
|
|
||||||
systemctl restart traefik.service
|
fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_amd64.tar.gz"
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP LXC"
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start traefik
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
|
msg_ok "Successfully updated ${APP}"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/chrisvel/tududi/releases/latest | yq '.tag_name' | sed 's/^v//')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/chrisvel/tududi/releases/latest | yq '.tag_name' | sed 's/^"v//;s/"$//')
|
||||||
if [[ "${RELEASE}" != "$(cat ~/.tududi 2>/dev/null)" ]] || [[ ! -f ~/.tududi ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.tududi 2>/dev/null)" ]] || [[ ! -f ~/.tududi ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop tududi
|
systemctl stop tududi
|
||||||
|
|||||||
44
ct/twingate-connector.sh
Normal file
44
ct/twingate-connector.sh
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: twingate-andrewb
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.twingate.com/docs/
|
||||||
|
|
||||||
|
APP="Twingate-Connector"
|
||||||
|
var_tags="${var_tags:-network;connector;twingate}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
var_disk="${var_disk:-3}"
|
||||||
|
var_os="${var_os:-ubuntu}"
|
||||||
|
var_version="${var_version:-24.04}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
|
||||||
|
if [[ ! -f /lib/systemd/system/twingate-connector.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt install -yq twingate-connector
|
||||||
|
$STD systemctl restart twingate-connector
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "All Finished! If you need to update your access or refresh tokens, they can be found in /etc/twingate/connector.conf"
|
||||||
@@ -32,11 +32,12 @@ function update_script() {
|
|||||||
systemctl stop umami
|
systemctl stop umami
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "umami" "umami-software/umami" "tarball"
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
msg_info "Updating ${APP}"
|
||||||
cd /opt/umami
|
cd /opt/umami
|
||||||
git pull
|
$STD yarn install
|
||||||
yarn install
|
$STD yarn run build
|
||||||
yarn build
|
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
|
|||||||
@@ -34,27 +34,29 @@ function update_script() {
|
|||||||
echo "Installed NPM..."
|
echo "Installed NPM..."
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
LATEST=$(curl -fsSL https://api.github.com/repos/louislam/uptime-kuma/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
|
||||||
msg_info "Stopping ${APP}"
|
|
||||||
$STD sudo systemctl stop uptime-kuma
|
|
||||||
msg_ok "Stopped ${APP}"
|
|
||||||
|
|
||||||
cd /opt/uptime-kuma
|
RELEASE=$(curl -fsSL https://api.github.com/repos/louislam/uptime-kuma/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
||||||
|
if [[ ! -f ~/.uptime-kuma ]] || [[ "${RELEASE}" != "$(cat ~/.uptime-kuma)" ]]; then
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
$STD systemctl stop uptime-kuma
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
msg_info "Pulling ${APP} ${LATEST}"
|
fetch_and_deploy_gh_release "uptime-kuma" "louislam/uptime-kuma" "tarball"
|
||||||
$STD git fetch --all
|
cd /opt/uptime-kuma
|
||||||
$STD git checkout $LATEST --force
|
|
||||||
msg_ok "Pulled ${APP} ${LATEST}"
|
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${LATEST}"
|
msg_info "Updating ${APP} to ${RELEASE}"
|
||||||
$STD npm install --production
|
$STD npm install --omit dev
|
||||||
$STD npm run download-dist
|
$STD npm run download-dist
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
$STD sudo systemctl start uptime-kuma
|
$STD sudo systemctl start uptime-kuma
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
20
ct/wallos.sh
20
ct/wallos.sh
@@ -27,17 +27,19 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/ellite/Wallos/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/ellite/Wallos/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.wallos ]] || [[ "${RELEASE}" != "$(cat ~/.wallos)" ]]; then
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
msg_info "Creating backup"
|
||||||
cd /opt
|
|
||||||
curl -fsSL "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip")
|
|
||||||
mkdir -p /opt/logos
|
mkdir -p /opt/logos
|
||||||
mv /opt/wallos/db/wallos.db /opt/wallos.db
|
mv /opt/wallos/db/wallos.db /opt/wallos.db
|
||||||
mv /opt/wallos/images/uploads/logos /opt/logos/
|
mv /opt/wallos/images/uploads/logos /opt/logos/
|
||||||
$STD unzip v${RELEASE}.zip
|
msg_ok "Backup created"
|
||||||
|
|
||||||
rm -rf /opt/wallos
|
rm -rf /opt/wallos
|
||||||
mv Wallos-${RELEASE} /opt/wallos
|
fetch_and_deploy_gh_release "wallos" "ellite/Wallos" "tarball"
|
||||||
|
|
||||||
|
msg_info "Configuring ${APP}"
|
||||||
rm -rf /opt/wallos/db/wallos.empty.db
|
rm -rf /opt/wallos/db/wallos.empty.db
|
||||||
mv /opt/wallos.db /opt/wallos/db/wallos.db
|
mv /opt/wallos.db /opt/wallos/db/wallos.db
|
||||||
mv /opt/logos/* /opt/wallos/images/uploads/logos
|
mv /opt/logos/* /opt/wallos/images/uploads/logos
|
||||||
@@ -48,16 +50,12 @@ function update_script() {
|
|||||||
chmod -R 755 /opt/wallos
|
chmod -R 755 /opt/wallos
|
||||||
mkdir -p /var/log/cron
|
mkdir -p /var/log/cron
|
||||||
$STD curl http://localhost/endpoints/db/migrate.php
|
$STD curl http://localhost/endpoints/db/migrate.php
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
msg_ok "Configured ${APP}"
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
|
|
||||||
msg_info "Reload Apache2"
|
msg_info "Reload Apache2"
|
||||||
systemctl reload apache2
|
systemctl reload apache2
|
||||||
msg_ok "Apache2 Reloaded"
|
msg_ok "Apache2 Reloaded"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -R /opt/v${RELEASE}.zip
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
if ! [[ $(dpkg -s zstd 2>/dev/null) ]]; then
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y zstd
|
||||||
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
# Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
|
# Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
|
||||||
msg_info "Running Migration"
|
msg_info "Running Migration"
|
||||||
@@ -66,8 +70,9 @@ EOF
|
|||||||
temp_file=$(mktemp)
|
temp_file=$(mktemp)
|
||||||
curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file"
|
curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file"
|
||||||
tar -xf $temp_file
|
tar -xf $temp_file
|
||||||
cp -f wastebin /opt/wastebin/
|
cp -f wastebin* /opt/wastebin/
|
||||||
chmod +x /opt/wastebin/wastebin
|
chmod +x /opt/wastebin/wastebin
|
||||||
|
chmod +x /opt/wastebin/wastebin-ctl
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
msg_ok "Updated Wastebin"
|
msg_ok "Updated Wastebin"
|
||||||
|
|
||||||
|
|||||||
@@ -27,22 +27,20 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/sbondCo/Watcharr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/sbondCo/Watcharr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.watcharr)" ]] || [[ ! -f ~/.watcharr ]]; then
|
||||||
msg_info "Updating $APP"
|
msg_info "Updating $APP"
|
||||||
|
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop watcharr
|
systemctl stop watcharr
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
|
||||||
temp_file=$(mktemp)
|
|
||||||
temp_folder=$(mktemp -d)
|
|
||||||
curl -fsSL "https://github.com/sbondCo/Watcharr/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file""
|
|
||||||
tar -xzf "$temp_file" -C "$temp_folder"
|
|
||||||
rm -f /opt/watcharr/server/watcharr
|
rm -f /opt/watcharr/server/watcharr
|
||||||
rm -rf /opt/watcharr/server/ui
|
rm -rf /opt/watcharr/server/ui
|
||||||
cp -rf ${temp_folder}/Watcharr-${RELEASE}/* /opt/watcharr
|
fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
cd /opt/watcharr
|
cd /opt/watcharr
|
||||||
export GOOS=linux
|
export GOOS=linux
|
||||||
$STD npm i
|
$STD npm i
|
||||||
@@ -57,12 +55,6 @@ function update_script() {
|
|||||||
systemctl start watcharr
|
systemctl start watcharr
|
||||||
msg_ok "Started $APP"
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -f ${temp_file}
|
|
||||||
rm -rf ${temp_folder}
|
|
||||||
msg_ok "Cleanup Completed"
|
|
||||||
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Update Successful"
|
msg_ok "Update Successful"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -27,17 +27,28 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating $APP"
|
|
||||||
systemctl stop watchyourlan.service
|
RELEASE=$(curl -fsSL https://api.github.com/repos/aceberg/WatchYourLAN/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
cp -R /data/config.yaml config.yaml
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/aceberg/WatchYourLAN/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d '"' -f 4)
|
msg_info "Stopping service"
|
||||||
curl -fsSL "https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_amd64.deb")
|
systemctl stop watchyourlan.service
|
||||||
dpkg -i watchyourlan_${RELEASE}_linux_amd64.deb
|
msg_ok "Service stopped"
|
||||||
cp -R config.yaml /data/config.yaml
|
|
||||||
sed -i 's|/etc/watchyourlan/config.yaml|/data/config.yaml|' /lib/systemd/system/watchyourlan.service
|
cp -R /data/config.yaml ~/config.yaml
|
||||||
rm watchyourlan_${RELEASE}_linux_amd64.deb config.yaml
|
fetch_and_deploy_gh_release "watchyourlan" "aceberg/WatchYourLAN" "binary"
|
||||||
systemctl enable -q --now watchyourlan
|
cp -R config.yaml /data/config.yaml
|
||||||
msg_ok "Updated $APP"
|
sed -i 's|/etc/watchyourlan/config.yaml|/data/config.yaml|' /lib/systemd/system/watchyourlan.service
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm ~/config.yaml
|
||||||
|
msg_ok "Cleaned up"
|
||||||
|
|
||||||
|
msg_info "Starting service"
|
||||||
|
systemctl enable -q --now watchyourlan
|
||||||
|
msg_ok "Service started"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,23 +27,26 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | cut -d '"' -f 4)
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
RELEASE=$(curl -fsSL https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
||||||
|
if [[ ! -f ~/.wavelog ]] || [[ "${RELEASE}" != "$(cat ~/.wavelog)" ]]; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
msg_info "Creating backup"
|
||||||
cp /opt/wavelog/application/config/config.php /opt/config.php
|
cp /opt/wavelog/application/config/config.php /opt/config.php
|
||||||
cp /opt/wavelog/application/config/database.php /opt/database.php
|
cp /opt/wavelog/application/config/database.php /opt/database.php
|
||||||
cp -r /opt/wavelog/userdata /opt/userdata
|
cp -r /opt/wavelog/userdata /opt/userdata
|
||||||
if [[ -f /opt/wavelog/assets/js/sections/custom.js ]]; then
|
if [[ -f /opt/wavelog/assets/js/sections/custom.js ]]; then
|
||||||
cp /opt/wavelog/assets/js/sections/custom.js /opt/custom.js
|
cp /opt/wavelog/assets/js/sections/custom.js /opt/custom.js
|
||||||
fi
|
fi
|
||||||
curl -fsSL "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip")
|
msg_ok "Backup created"
|
||||||
$STD unzip ${RELEASE}.zip
|
|
||||||
rm -rf /opt/wavelog
|
rm -rf /opt/wavelog
|
||||||
mv wavelog-${RELEASE}/ /opt/wavelog
|
fetch_and_deploy_gh_release "wavelog" "wavelog/wavelog" "tarball"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to ${RELEASE}"
|
||||||
rm -rf /opt/wavelog/install
|
rm -rf /opt/wavelog/install
|
||||||
mv /opt/config.php /opt/wavelog/application/config/config.php
|
mv /opt/config.php /opt/wavelog/application/config/config.php
|
||||||
mv /opt/database.php /opt/wavelog/application/config/database.php
|
mv /opt/database.php /opt/wavelog/application/config/database.php
|
||||||
@@ -55,16 +58,12 @@ function update_script() {
|
|||||||
chown -R www-data:www-data /opt/wavelog/
|
chown -R www-data:www-data /opt/wavelog/
|
||||||
find /opt/wavelog/ -type d -exec chmod 755 {} \;
|
find /opt/wavelog/ -type d -exec chmod 755 {} \;
|
||||||
find /opt/wavelog/ -type f -exec chmod 664 {} \;
|
find /opt/wavelog/ -type f -exec chmod 664 {} \;
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
systemctl start apache2
|
systemctl start apache2
|
||||||
msg_ok "Started Services"
|
msg_ok "Started Services"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf ${RELEASE}.zip
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
|||||||
11
ct/wikijs.sh
11
ct/wikijs.sh
@@ -27,8 +27,9 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Requarks/wiki/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Requarks/wiki/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.wikijs)" ]] || [[ ! -f ~/.wikijs ]]; then
|
||||||
msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite."
|
msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite."
|
||||||
SQLITE_INSTALL=$([ -f /opt/wikijs/db.sqlite ] && echo "true" || echo "false")
|
SQLITE_INSTALL=$([ -f /opt/wikijs/db.sqlite ] && echo "true" || echo "false")
|
||||||
if [[ "${SQLITE_INSTALL}" == "true" && "${RELEASE}" =~ ^3.* ]]; then
|
if [[ "${SQLITE_INSTALL}" == "true" && "${RELEASE}" =~ ^3.* ]]; then
|
||||||
@@ -47,12 +48,8 @@ function update_script() {
|
|||||||
cp -R /opt/wikijs/{config.yml,/data} /opt/wikijs-backup
|
cp -R /opt/wikijs/{config.yml,/data} /opt/wikijs-backup
|
||||||
msg_ok "Backed up Data"
|
msg_ok "Backed up Data"
|
||||||
|
|
||||||
msg_info "Updating ${APP}"
|
|
||||||
rm -rf /opt/wikijs/*
|
rm -rf /opt/wikijs/*
|
||||||
cd /opt/wikijs
|
fetch_and_deploy_gh_release "wikijs" "requarks/wiki" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz"
|
||||||
curl -fsSL "https://github.com/requarks/wiki/releases/download/v${RELEASE}/wiki-js.tar.gz" -o $(basename "https://github.com/requarks/wiki/releases/download/v${RELEASE}/wiki-js.tar.gz")
|
|
||||||
tar -xzf wiki-js.tar.gz
|
|
||||||
msg_ok "Updated ${APP}"
|
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
msg_info "Restoring Data"
|
||||||
cp -R /opt/wikijs-backup/* /opt/wikijs
|
cp -R /opt/wikijs-backup/* /opt/wikijs
|
||||||
@@ -64,9 +61,9 @@ function update_script() {
|
|||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -rf /opt/wikijs/wiki-js.tar.gz
|
|
||||||
rm -rf /opt/wikijs-backup
|
rm -rf /opt/wikijs-backup
|
||||||
msg_ok "Cleanup Completed"
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
|||||||
@@ -30,10 +30,12 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get -y upgrade
|
apt-get -y upgrade
|
||||||
sleep 2
|
if [[ -d /etc/wgdashboard ]]; then
|
||||||
cd /etc/wgdashboard/src
|
sleep 2
|
||||||
./wgd.sh update
|
cd /etc/wgdashboard/src
|
||||||
./wgd.sh start
|
./wgd.sh update
|
||||||
|
./wgd.sh start
|
||||||
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,5 +45,5 @@ description
|
|||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} WGDashboard Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW}Access WGDashboard (if installed) using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:10086${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:10086${CL}"
|
||||||
|
|||||||
@@ -28,21 +28,20 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Updating yt-dlp"
|
|
||||||
$STD yt-dlp -U
|
|
||||||
msg_ok "Updated yt-dlp"
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/marcopiovanello/yt-dlp-web-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/marcopiovanello/yt-dlp-web-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/yt-dlp-webui_version.txt)" ]] || [[ ! -f /opt/yt-dlp-webui_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.yt-dlp-webui)" ]] || [[ ! -f ~/.yt-dlp-webui ]]; then
|
||||||
|
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop yt-dlp-webui
|
systemctl stop yt-dlp-webui
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
msg_info "Updating yt-dlp"
|
||||||
|
$STD yt-dlp -U
|
||||||
|
msg_ok "Updated yt-dlp"
|
||||||
|
|
||||||
rm -rf /usr/local/bin/yt-dlp-webui
|
rm -rf /usr/local/bin/yt-dlp-webui
|
||||||
curl -fsSL "https://github.com/marcopiovanello/yt-dlp-web-ui/releases/download/v${RELEASE}/yt-dlp-webui_linux-amd64" -o "/usr/local/bin/yt-dlp-webui"
|
fetch_and_deploy_gh_release "yt-dlp-webui" "marcopiovanello/yt-dlp-web-ui" "singlefile" "latest" "/usr/local/bin" "yt-dlp-webui_linux-amd64"
|
||||||
chmod +x /usr/local/bin/yt-dlp-webui
|
|
||||||
msg_ok "Updated $APP LXC"
|
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
systemctl start yt-dlp-webui
|
systemctl start yt-dlp-webui
|
||||||
|
|||||||
@@ -32,36 +32,32 @@ function update_script() {
|
|||||||
$STD npm install -g pnpm@latest
|
$STD npm install -g pnpm@latest
|
||||||
msg_ok "Installed pnpm"
|
msg_ok "Installed pnpm"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/diced/zipline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/diced/zipline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
if [[ ! -f ~/.zipline ]] || [[ "${RELEASE}" != "$(cat ~/.zipline)" ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop zipline
|
systemctl stop zipline
|
||||||
msg_ok "${APP} Stopped"
|
msg_ok "${APP} Stopped"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
|
||||||
cp /opt/zipline/.env /opt/
|
|
||||||
mkdir -p /opt/zipline-uploads
|
mkdir -p /opt/zipline-uploads
|
||||||
if [ -d /opt/zipline/uploads ] && [ "$(ls -A /opt/zipline/uploads)" ]; then
|
if [ -d /opt/zipline/uploads ] && [ "$(ls -A /opt/zipline/uploads)" ]; then
|
||||||
cp -R /opt/zipline/uploads/* /opt/zipline-uploads/
|
cp -R /opt/zipline/uploads/* /opt/zipline-uploads/
|
||||||
fi
|
fi
|
||||||
curl -fsSL "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip")
|
cp /opt/zipline/.env /opt/
|
||||||
$STD unzip v"${RELEASE}".zip
|
|
||||||
rm -R /opt/zipline
|
rm -R /opt/zipline
|
||||||
mv zipline-"${RELEASE}" /opt/zipline
|
fetch_and_deploy_gh_release "zipline" "diced/zipline" "tarball"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to ${RELEASE}"
|
||||||
cd /opt/zipline
|
cd /opt/zipline
|
||||||
mv /opt/.env /opt/zipline/.env
|
mv /opt/.env /opt/zipline/.env
|
||||||
$STD pnpm install
|
$STD pnpm install
|
||||||
$STD pnpm build
|
$STD pnpm build
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start zipline
|
systemctl start zipline
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf v"${RELEASE}".zip
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
|||||||
@@ -27,27 +27,24 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ ! -f ~/.zitadel ]] || [[ "${RELEASE}" != "$(cat ~/.zitadel)" ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop zitadel
|
systemctl stop zitadel
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
rm -f /usr/local/bin/zitadel
|
||||||
|
fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "/usr/local/bin" "zitadel-linux-amd64.tar.gz"
|
||||||
|
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
cd /tmp
|
|
||||||
curl -fsSL "https://github.com/zitadel/zitadel/releases/download/v$RELEASE/zitadel-linux-amd64.tar.gz" | tar -xz
|
|
||||||
mv zitadel-linux-amd64/zitadel /usr/local/bin
|
|
||||||
$STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true
|
$STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to ${RELEASE}"
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
msg_info "Starting $APP"
|
msg_info "Starting $APP"
|
||||||
systemctl start zitadel
|
systemctl start zitadel
|
||||||
msg_ok "Started $APP"
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
|
||||||
rm -rf /tmp/zitadel-linux-amd64
|
|
||||||
msg_ok "Cleanup Completed"
|
|
||||||
msg_ok "Update Successful"
|
msg_ok "Update Successful"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
|||||||
20
ct/zoraxy.sh
20
ct/zoraxy.sh
@@ -27,17 +27,21 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/tobychui/zoraxy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
RELEASE=$(curl -fsSL https://api.github.com/repos/tobychui/zoraxy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
if [[ ! -f ~/.zoraxy ]] || [[ "${RELEASE}" != "$(cat ~/.zoraxy)" ]]; then
|
||||||
|
msg_info "Stopping service"
|
||||||
systemctl stop zoraxy
|
systemctl stop zoraxy
|
||||||
curl -fsSL "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_amd64" -o $(basename "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_amd64")
|
msg_ok "Service stopped"
|
||||||
|
|
||||||
rm -rf /opt/zoraxy/zoraxy
|
rm -rf /opt/zoraxy/zoraxy
|
||||||
mv zoraxy_linux_amd64 /opt/zoraxy/zoraxy
|
fetch_and_deploy_gh_release "zoraxy" "tobychui/zoraxy" "singlefile" "latest" "/opt/zoraxy" "zoraxy_linux_amd64"
|
||||||
chmod +x /opt/zoraxy/zoraxy
|
|
||||||
|
msg_info "Starting service"
|
||||||
systemctl start zoraxy
|
systemctl start zoraxy
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
msg_ok "Service started"
|
||||||
msg_ok "Updated $APP"
|
|
||||||
|
msg_ok "Updated successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -23,25 +23,29 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -f /usr/bin/zot ]]; then
|
if [[ ! -f /usr/bin/zot ]]; then
|
||||||
msg_error "No ${APP} installation found!"
|
msg_error "No ${APP} installation found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/project-zot/zot/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/project-zot/zot/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
|
||||||
if [[ ! -f ~/.${APP} ]] || [[ "${RELEASE}" != "$(cat ~/.${APP})" ]]; then
|
if [[ ! -f ~/.${APP} ]] || [[ "${RELEASE}" != "$(cat ~/.${APP})" ]]; then
|
||||||
msg_info "Stopping Zot service"
|
msg_info "Stopping Zot service"
|
||||||
systemctl stop zot
|
systemctl stop zot
|
||||||
msg_ok "Stopped Zot service"
|
msg_ok "Stopped Zot service"
|
||||||
|
|
||||||
msg_info "Updating Zot to ${RELEASE}"
|
rm -f /usr/bin/zot
|
||||||
curl -fsSL "https://github.com/project-zot/zot/releases/download/${RELEASE}/zot-linux-amd64" -o /usr/bin/zot
|
fetch_and_deploy_gh_release "zot" "project-zot/zot" "singlefile" "latest" "/usr/bin" "zot-linux-amd64"
|
||||||
chmod +x /usr/bin/zot
|
|
||||||
|
msg_info "Configuring Zot Registry"
|
||||||
chown root:root /usr/bin/zot
|
chown root:root /usr/bin/zot
|
||||||
echo "${RELEASE}" >~/.${APP}
|
msg_ok "Configured Zot Registry"
|
||||||
systemctl restart zot
|
|
||||||
msg_ok "Updated Zot to ${RELEASE}"
|
msg_info "Starting service"
|
||||||
|
systemctl start zot
|
||||||
|
msg_ok "Service started"
|
||||||
|
|
||||||
|
msg_ok "Updated successfuly"
|
||||||
else
|
else
|
||||||
msg_ok "Zot is already up to date (${RELEASE})"
|
msg_ok "Zot is already up to date (${RELEASE})"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -27,27 +27,24 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
RELEASE=$(curl -fsSL https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ ! -f ~/.zwave-js-ui ]] || [[ "${RELEASE}" != "$(cat ~/.zwave-js-ui)" ]]; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop zwave-js-ui
|
systemctl stop zwave-js-ui
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating Z-Wave JS UI"
|
|
||||||
rm -rf /opt/zwave-js-ui/*
|
rm -rf /opt/zwave-js-ui/*
|
||||||
cd /opt/zwave-js-ui
|
fetch_and_deploy_gh_release "zwave-js-ui" "zwave-js/zwave-js-ui" "prebuild" "latest" "/opt/zwave-js-ui" "zwave-js-ui*-linux.zip"
|
||||||
curl -fsSL "https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip" -o $(basename "https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip")
|
|
||||||
$STD unzip zwave-js-ui-${RELEASE}-linux.zip
|
|
||||||
msg_ok "Updated Z-Wave JS UI"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start zwave-js-ui
|
systemctl start zwave-js-ui
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
|
||||||
msg_info "Cleanup"
|
msg_info "Cleanup"
|
||||||
rm -rf /opt/zwave-js-ui/zwave-js-ui-${RELEASE}-linux.zip
|
|
||||||
rm -rf /opt/zwave-js-ui/store
|
rm -rf /opt/zwave-js-ui/store
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
msg_ok "Updated Successfully!\n"
|
msg_ok "Updated Successfully!\n"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
msg_ok "No update required. ${APP} is already at ${RELEASE}."
|
||||||
|
|||||||
40
frontend/public/json/copyparty.json
Normal file
40
frontend/public/json/copyparty.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "Copyparty",
|
||||||
|
"slug": "copyparty",
|
||||||
|
"categories": [
|
||||||
|
11
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-18",
|
||||||
|
"type": "addon",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": "https://github.com/9001/copyparty?tab=readme-ov-file#the-browser",
|
||||||
|
"website": "https://github.com/9001/copyparty",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/copyparty.webp",
|
||||||
|
"config_path": "/etc/copyparty.conf",
|
||||||
|
"description": "Copyparty is a lightweight, portable HTTP file server with a browser-based interface. It supports drag-and-drop uploads, downloads, deduplication, media playback, and advanced search, making it ideal for quickly sharing and managing files.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "tools/addon/copyparty.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": null,
|
||||||
|
"ram": null,
|
||||||
|
"hdd": null,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Execute within the Proxmox shell or in LXC",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
48
frontend/public/json/debian-13-vm.json
Normal file
48
frontend/public/json/debian-13-vm.json
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"name": "Debian 13",
|
||||||
|
"slug": "debian-13-vm",
|
||||||
|
"categories": [
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-19",
|
||||||
|
"type": "vm",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": null,
|
||||||
|
"website": "https://www.debian.org/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/debian.webp",
|
||||||
|
"config_path": "",
|
||||||
|
"description": "Debian 13 (Trixie) Linux is a distribution that emphasizes free software. It supports many hardware platforms",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "vm/debian-13-vm.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "VM has no root password set. To login type in user `root` and just press enter",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "After installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/836´ for useful Debian commands",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "If you use Cloud-init, checkout after installation: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "addon",
|
"type": "addon",
|
||||||
"updateable": false,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 61208,
|
"interface_port": 61208,
|
||||||
"documentation": "https://glances.readthedocs.io/en/latest/",
|
"documentation": "https://glances.readthedocs.io/en/latest/",
|
||||||
@@ -33,12 +33,8 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "Execute within an existing LXC Console",
|
"text": "Execute within an existing LXC Console (Debian / Ubuntu / Alpine supported)",
|
||||||
"type": "warning"
|
"type": "info"
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
|
|
||||||
"type": "warning"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "Jenkins",
|
"name": "Jenkins",
|
||||||
"slug": "jenkins",
|
"slug": "jenkins",
|
||||||
"categories": [
|
"categories": [
|
||||||
22
|
20
|
||||||
],
|
],
|
||||||
"date_created": "2024-12-26",
|
"date_created": "2024-12-26",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
|
|||||||
40
frontend/public/json/litellm.json
Normal file
40
frontend/public/json/litellm.json
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "LiteLLM",
|
||||||
|
"slug": "litellm",
|
||||||
|
"categories": [
|
||||||
|
20
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-21",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 4000,
|
||||||
|
"documentation": "https://docs.litellm.ai/",
|
||||||
|
"config_path": "/opt/litellm/litellm.yaml",
|
||||||
|
"website": "https://www.litellm.ai/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/litellm-light.webp",
|
||||||
|
"description": "LLM proxy to call 100+ LLMs in a unified interface & track spend, set budgets per virtual key/user",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/litellm.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": "admin",
|
||||||
|
"password": "sk-1234"
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Update master key in the config file",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 5080,
|
"interface_port": 5080,
|
||||||
"documentation": null,
|
"documentation": "https://openobserve.ai/docs/",
|
||||||
"website": "https://openobserve.ai/",
|
"website": "https://openobserve.ai/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openobserve.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openobserve.webp",
|
||||||
"config_path": "/opt/openobserve/data/.env",
|
"config_path": "/opt/openobserve/data/.env",
|
||||||
|
|||||||
@@ -32,5 +32,10 @@
|
|||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "If you use VLANs (default LAN is set to VLAN 999), make sure the Proxmox Linux Bridge is configured as VLAN-aware, otherwise the VM may fail to start.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8000,
|
"interface_port": 8000,
|
||||||
"documentation": null,
|
"documentation": "https://docs.paperless-ngx.com/",
|
||||||
"website": "https://docs.paperless-ngx.com/",
|
"website": "https://docs.paperless-ngx.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx.webp",
|
||||||
"config_path": "/opt/paperless/paperless.conf",
|
"config_path": "/opt/paperless/paperless.conf",
|
||||||
@@ -21,19 +21,19 @@
|
|||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 10,
|
"hdd": 12,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": "admin",
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "Show Login Credentials, type `update` in the LXC console",
|
"text": "Show Login Credentials, type `cat ~/paperless.creds` in the LXC console",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 9090,
|
"interface_port": 9090,
|
||||||
"documentation": null,
|
"documentation": "https://prometheus.io/docs/introduction/overview/",
|
||||||
"website": "https://prometheus.io/",
|
"website": "https://prometheus.io/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prometheus.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prometheus.webp",
|
||||||
"config_path": "/etc/prometheus/prometheus.yml",
|
"config_path": "/etc/prometheus/prometheus.yml",
|
||||||
|
|||||||
@@ -39,6 +39,10 @@
|
|||||||
{
|
{
|
||||||
"text": "After installation, access the web interface to configure your Proxmox connection details through the built-in setup wizard",
|
"text": "After installation, access the web interface to configure your Proxmox connection details through the built-in setup wizard",
|
||||||
"type": "Info"
|
"type": "Info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Configure authentication in the Web UI => Settings => Security",
|
||||||
|
"type": "Info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,8 +28,8 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": "proxmox",
|
||||||
"password": null
|
"password": "proxmox"
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": []
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": "https://docs.rxresume.org/",
|
"documentation": "https://docs.rxresume.org/",
|
||||||
"website": "https://rxresume.org",
|
"website": "https://rxresume.org",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/reactive-resume-light.png",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/reactive-resume.webp",
|
||||||
"config_path": "/opt/reactive-resume/.env",
|
"config_path": "/opt/reactive-resume/.env",
|
||||||
"description": "A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever.",
|
"description": "A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
@@ -33,4 +33,3 @@
|
|||||||
},
|
},
|
||||||
"notes": []
|
"notes": []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
"interface_port": 5030,
|
"interface_port": 5030,
|
||||||
"documentation": "https://github.com/slskd/slskd/tree/master/docs",
|
"documentation": "https://github.com/slskd/slskd/tree/master/docs",
|
||||||
"website": "https://github.com/slskd/slskd",
|
"website": "https://github.com/slskd/slskd",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/slskd.png",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/slskd.webp",
|
||||||
"config_path": "/opt/slskd/config/slskd.yml",
|
"config_path": "/opt/slskd/config/slskd.yml",
|
||||||
"description": "A modern client-server application for the Soulseek file sharing network. ",
|
"description": "A modern client-server application for the Soulseek file sharing network. ",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
@@ -42,4 +42,3 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 7912,
|
"interface_port": 7912,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/Donkie/Spoolman/wiki/Installation",
|
||||||
"website": "https://github.com/Donkie/Spoolman",
|
"website": "https://github.com/Donkie/Spoolman",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/spoolman.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/spoolman.webp",
|
||||||
"config_path": "/opt/spoolman/.env",
|
"config_path": "/opt/spoolman/.env",
|
||||||
|
|||||||
52
frontend/public/json/swizzin.json
Normal file
52
frontend/public/json/swizzin.json
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"name": "Swizzin",
|
||||||
|
"slug": "swizzin",
|
||||||
|
"categories": [
|
||||||
|
15
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-19",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://swizzin.ltd/getting-started",
|
||||||
|
"config_path": "/etc/swizzin/",
|
||||||
|
"website": "https://swizzin.ltd/",
|
||||||
|
"logo": "https://swizzin.ltd/img/logo-sm.png",
|
||||||
|
"description": "Swizzin is a light-weight, modular, and user-friendly seedbox solution for Debian-based servers. It allows for the easy installation and management of a wide variety of applications commonly used for torrenting and media management, such as rTorrent, Sonarr, Radarr, and Plex, all accessible through a command-line utility or a web-based dashboard.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/swizzin.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 4096,
|
||||||
|
"hdd": 20,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Installation might take a long time if choosing to install many apps. Be patient.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Swizzin is a management suite, not a single application. Use the 'box' command inside the container to install/manage individual apps like rTorrent, Sonarr, etc. A full list can be found in documentation.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "It is very recommended to install at least the 'panel' for web access, and 'nginx' for easy access to other apps.",
|
||||||
|
"type": "warning"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
|
||||||
|
"type": "warning"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": false,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8265,
|
"interface_port": 8265,
|
||||||
"documentation": null,
|
"documentation": null,
|
||||||
|
|||||||
@@ -31,10 +31,5 @@
|
|||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": []
|
||||||
{
|
|
||||||
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
|
|
||||||
"type": "warning"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": false,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8082,
|
"interface_port": 8082,
|
||||||
"documentation": null,
|
"documentation": "https://www.traccar.org/documentation/",
|
||||||
"website": "https://www.traccar.org/",
|
"website": "https://www.traccar.org/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/traccar.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/traccar.webp",
|
||||||
"config_path": "/opt/traccar/conf/traccar.xml",
|
"config_path": "/opt/traccar/conf/traccar.xml",
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8080,
|
"interface_port": 8080,
|
||||||
"documentation": null,
|
"documentation": "https://doc.traefik.io/",
|
||||||
"website": "https://traefik.io/",
|
"website": "https://traefik.io/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/traefik.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/traefik.webp",
|
||||||
"config_path": "/etc/traefik/traefik.yaml",
|
"config_path": "/etc/traefik/traefik.yaml",
|
||||||
|
|||||||
44
frontend/public/json/twingate-connector.json
Normal file
44
frontend/public/json/twingate-connector.json
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"name": "twingate-connector",
|
||||||
|
"slug": "twingate-connector",
|
||||||
|
"categories": [
|
||||||
|
4
|
||||||
|
],
|
||||||
|
"date_created": "2025-08-18",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": "https://www.twingate.com/docs/",
|
||||||
|
"config_path": "/etc/twingate/connector.conf",
|
||||||
|
"website": "https://www.twingate.com",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/twingate.webp",
|
||||||
|
"description": "Twingate Connectors are lightweight software components that establish secure, least-privileged access between private network resources and authorized users without exposing the network to the internet. They act as outbound-only bridges between your protected resources and the Twingate infrastructure, ensuring zero-trust access without the need for a VPN.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/twingate-connector.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 3,
|
||||||
|
"os": "Ubuntu",
|
||||||
|
"version": "24.04"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "You can get your Twingate access or refresh tokens from the Twingate Admin Console. `https://auth.twingate.com/signup-v2`",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "If you need to update your access or refresh tokens, they can be found in /etc/twingate/connector.conf",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,40 +1,40 @@
|
|||||||
{
|
{
|
||||||
"name": "Umami",
|
"name": "Umami",
|
||||||
"slug": "umami",
|
"slug": "umami",
|
||||||
"categories": [
|
"categories": [
|
||||||
9
|
9
|
||||||
],
|
],
|
||||||
"date_created": "2024-05-09",
|
"date_created": "2024-05-09",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": false,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": null,
|
"documentation": "https://umami.is/docs",
|
||||||
"website": "https://umami.is/",
|
"website": "https://umami.is/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/umami.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/umami.webp",
|
||||||
"config_path": "/opt/umami/.env",
|
"config_path": "/opt/umami/.env",
|
||||||
"description": "Umami makes it easy to collect, analyze, and understand your web data while maintaining visitor privacy and data ownership.",
|
"description": "Umami makes it easy to collect, analyze, and understand your web data while maintaining visitor privacy and data ownership.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/umami.sh",
|
"script": "ct/umami.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 12,
|
"hdd": 12,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": "admin",
|
"username": "admin",
|
||||||
"password": "umami"
|
"password": "umami"
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "To view the database credentials : `cat umami.creds`",
|
"text": "To view the database credentials : `cat umami.creds`",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,35 +1,35 @@
|
|||||||
{
|
{
|
||||||
"name": "Uptime Kuma",
|
"name": "Uptime Kuma",
|
||||||
"slug": "uptimekuma",
|
"slug": "uptimekuma",
|
||||||
"categories": [
|
"categories": [
|
||||||
9
|
9
|
||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3001,
|
"interface_port": 3001,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/louislam/uptime-kuma/wiki",
|
||||||
"website": "https://github.com/louislam/uptime-kuma#uptime-kuma",
|
"website": "https://github.com/louislam/uptime-kuma#uptime-kuma",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/uptime-kuma.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/uptime-kuma.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
"description": "Uptime Kuma is a monitoring and alerting system that tracks the availability and performance of servers, websites, and other internet-connected devices. It can be self-hosted and is open-source, offering a visually appealing interface for monitoring and receiving notifications about downtime events.",
|
"description": "Uptime Kuma is a monitoring and alerting system that tracks the availability and performance of servers, websites, and other internet-connected devices. It can be self-hosted and is open-source, offering a visually appealing interface for monitoring and receiving notifications about downtime events.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/uptimekuma.sh",
|
"script": "ct/uptimekuma.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 1,
|
"cpu": 1,
|
||||||
"ram": 1024,
|
"ram": 1024,
|
||||||
"hdd": 4,
|
"hdd": 4,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": []
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -12,7 +12,7 @@
|
|||||||
"documentation": "https://github.com/wavelog/wavelog/wiki",
|
"documentation": "https://github.com/wavelog/wavelog/wiki",
|
||||||
"website": "https://www.wavelog.org/",
|
"website": "https://www.wavelog.org/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/wavelog.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/wavelog.webp",
|
||||||
"config_path": "",
|
"config_path": "/opt/wavelog/application/config/config.php",
|
||||||
"description": "Wavelog is a self-hosted PHP application that allows you to log your amateur radio contacts anywhere. All you need is a web browser and active internet connection.",
|
"description": "Wavelog is a self-hosted PHP application that allows you to log your amateur radio contacts anywhere. All you need is a web browser and active internet connection.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,35 +1,35 @@
|
|||||||
{
|
{
|
||||||
"name": "Wiki.js",
|
"name": "Wiki.js",
|
||||||
"slug": "wikijs",
|
"slug": "wikijs",
|
||||||
"categories": [
|
"categories": [
|
||||||
12
|
12
|
||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": null,
|
"documentation": "https://docs.requarks.io/",
|
||||||
"website": "https://js.wiki/",
|
"website": "https://js.wiki/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/wiki-js.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/wiki-js.webp",
|
||||||
"config_path": "/opt/wikijs/config.yml",
|
"config_path": "/opt/wikijs/config.yml",
|
||||||
"description": "Wiki.js is a free, open-source, and modern wiki application built using Node.js. It is designed to be fast, easy to use, and flexible, with a range of features for collaboration, knowledge management, and content creation. Wiki.js supports Markdown syntax for editing pages, and includes features such as version control, page history, and access control, making it easy to manage content and collaborate with others. The software is fully customizable, with a range of themes and extensions available, and can be deployed on a local server or in the cloud, making it an ideal choice for small teams and organizations looking to create and manage a wiki. Wiki.js provides a modern, user-friendly interface, and supports a range of data sources, including local file systems, databases, and cloud storage services.",
|
"description": "Wiki.js is a free, open-source, and modern wiki application built using Node.js. It is designed to be fast, easy to use, and flexible, with a range of features for collaboration, knowledge management, and content creation. Wiki.js supports Markdown syntax for editing pages, and includes features such as version control, page history, and access control, making it easy to manage content and collaborate with others. The software is fully customizable, with a range of themes and extensions available, and can be deployed on a local server or in the cloud, making it an ideal choice for small teams and organizations looking to create and manage a wiki. Wiki.js provides a modern, user-friendly interface, and supports a range of data sources, including local file systems, databases, and cloud storage services.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/wikijs.sh",
|
"script": "ct/wikijs.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 7,
|
"hdd": 7,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": []
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,10 @@
|
|||||||
{
|
{
|
||||||
"text": "Wireguard and WGDashboard are not the same. More info: `https://docs.wgdashboard.dev/what-is-wireguard-what-is-wgdashboard.html`",
|
"text": "Wireguard and WGDashboard are not the same. More info: `https://docs.wgdashboard.dev/what-is-wireguard-what-is-wgdashboard.html`",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "WGDashboard installation is optional.`",
|
||||||
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": null,
|
"documentation": "https://zipline.diced.sh/docs/get-started",
|
||||||
"website": "https://zipline.diced.sh/",
|
"website": "https://zipline.diced.sh/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zipline.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zipline.webp",
|
||||||
"config_path": "/opt/zipline/.env",
|
"config_path": "/opt/zipline/.env",
|
||||||
|
|||||||
@@ -1,35 +1,35 @@
|
|||||||
{
|
{
|
||||||
"name": "Zoraxy",
|
"name": "Zoraxy",
|
||||||
"slug": "zoraxy",
|
"slug": "zoraxy",
|
||||||
"categories": [
|
"categories": [
|
||||||
4
|
4
|
||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8000,
|
"interface_port": 8000,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/tobychui/zoraxy/wiki",
|
||||||
"website": "https://zoraxy.aroz.org/",
|
"website": "https://zoraxy.aroz.org/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zoraxy.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zoraxy.webp",
|
||||||
"config_path": "",
|
"config_path": "",
|
||||||
"description": "Zoraxy is an all in one homelab network routing solution.",
|
"description": "Zoraxy is an all in one homelab network routing solution.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/zoraxy.sh",
|
"script": "ct/zoraxy.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
"hdd": 6,
|
"hdd": 6,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": []
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y redis
|
$STD apt-get install -y \
|
||||||
|
redis \
|
||||||
|
sqlite3
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="redis, sqlite3" setup_php
|
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="redis, sqlite3" setup_php
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ $STD apt-get install -y \
|
|||||||
libfontconfig1
|
libfontconfig1
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
|
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "duplicati-*-linux-x64-gui.deb"
|
||||||
|
|
||||||
msg_info "Configuring duplicati"
|
msg_info "Configuring duplicati"
|
||||||
DECRYPTKEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
DECRYPTKEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ echo "ghost-user ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/ghost-user
|
|||||||
mkdir -p /var/www/ghost
|
mkdir -p /var/www/ghost
|
||||||
chown -R ghost-user:ghost-user /var/www/ghost
|
chown -R ghost-user:ghost-user /var/www/ghost
|
||||||
chmod 775 /var/www/ghost
|
chmod 775 /var/www/ghost
|
||||||
sudo -u ghost-user -H sh -c "cd /var/www/ghost && ghost install --db=mysql --dbhost=localhost --dbuser=$DB_USER --dbpass=$DB_PASS --dbname=ghost --url=http://localhost:2368 --no-prompt --no-setup-nginx --no-setup-ssl --no-setup-mysql --enable --start --ip 0.0.0.0"
|
$STD sudo -u ghost-user -H sh -c "cd /var/www/ghost && ghost install --db=mysql --dbhost=localhost --dbuser=$DB_USER --dbpass=$DB_PASS --dbname=ghost --url=http://localhost:2368 --no-prompt --no-setup-nginx --no-setup-ssl --no-setup-mysql --enable --start --ip 0.0.0.0"
|
||||||
rm /etc/sudoers.d/ghost-user
|
rm /etc/sudoers.d/ghost-user
|
||||||
msg_ok "Creating Service"
|
msg_ok "Creating Service"
|
||||||
|
|
||||||
|
|||||||
@@ -18,64 +18,13 @@ $STD apt-get install -y \
|
|||||||
sqlite3 \
|
sqlite3 \
|
||||||
rclone \
|
rclone \
|
||||||
tzdata \
|
tzdata \
|
||||||
ca-certificates \
|
ca-certificates
|
||||||
build-essential \
|
|
||||||
git
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
setup_go
|
fetch_and_deploy_gh_release "gomft" "StarFleetCPTN/GoMFT" "singlefile" "latest" "/opt/gomft" "gomft*linux-amd64"
|
||||||
NODE_VERSION="22" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Setup ${APPLICATION} (Patience)"
|
msg_info "Configuring ${APPLICATION}"
|
||||||
temp_file=$(mktemp)
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/StarFleetCPTN/GoMFT/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/StarFleetCPTN/GoMFT/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
|
|
||||||
tar -xzf "$temp_file"
|
|
||||||
mv GoMFT-"${RELEASE}"/ /opt/gomft
|
|
||||||
cd /opt/gomft
|
|
||||||
TEMPL_VERSION="$(awk '/github.com\/a-h\/templ/{print $2}' go.mod)"
|
|
||||||
$STD go install github.com/a-h/templ/cmd/templ@${TEMPL_VERSION}
|
|
||||||
cp /opt/gomft/components/file_metadata/search/file_metadata_search_content.templ{,.bak}
|
|
||||||
# dirty hack to fix templ
|
|
||||||
cat <<'EOF' >/opt/gomft/components/file_metadata/search/file_metadata_search_content.templ
|
|
||||||
package search
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"github.com/starfleetcptn/gomft/components/file_metadata"
|
|
||||||
"github.com/starfleetcptn/gomft/components/file_metadata/list"
|
|
||||||
)
|
|
||||||
|
|
||||||
templ FileMetadataSearchContent(ctx context.Context, data file_metadata.FileMetadataSearchData) {
|
|
||||||
<!-- Search Results -->
|
|
||||||
<div id="search-results">
|
|
||||||
if len(data.Files) > 0 {
|
|
||||||
@list.FileMetadataListPartial(ctx, file_metadata.FileMetadataListData{
|
|
||||||
Files: data.Files,
|
|
||||||
Page: data.Page,
|
|
||||||
Limit: data.Limit,
|
|
||||||
TotalCount: data.TotalCount,
|
|
||||||
TotalPages: data.TotalPages,
|
|
||||||
Filter: data.Filter,
|
|
||||||
SortBy: data.SortBy,
|
|
||||||
SortDir: data.SortDir,
|
|
||||||
}, "/files/search/partial", "#search-results-container")
|
|
||||||
} else {
|
|
||||||
<div class="p-6 text-center text-gray-500 dark:text-gray-400">
|
|
||||||
<svg class="mx-auto mb-4 w-12 h-12 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" />
|
|
||||||
</svg>
|
|
||||||
<p>No files found matching your search criteria.</p>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
$STD "$HOME"/go/bin/templ generate
|
|
||||||
$STD go build -o gomft main.go
|
|
||||||
chmod +x /opt/gomft/gomft
|
|
||||||
JWT_SECRET_KEY=$(openssl rand -base64 24 | tr -d '/+=')
|
JWT_SECRET_KEY=$(openssl rand -base64 24 | tr -d '/+=')
|
||||||
|
|
||||||
cat <<EOF >/opt/gomft/.env
|
cat <<EOF >/opt/gomft/.env
|
||||||
SERVER_ADDRESS=:8080
|
SERVER_ADDRESS=:8080
|
||||||
DATA_DIR=/opt/gomft/data/gomft
|
DATA_DIR=/opt/gomft/data/gomft
|
||||||
@@ -95,9 +44,7 @@ EMAIL_REQUIRE_AUTH=true
|
|||||||
EMAIL_USERNAME=smtp_username
|
EMAIL_USERNAME=smtp_username
|
||||||
EMAIL_PASSWORD=smtp_password
|
EMAIL_PASSWORD=smtp_password
|
||||||
EOF
|
EOF
|
||||||
|
msg_ok "Configured ${APPLICATION}"
|
||||||
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
|
|
||||||
msg_ok "Setup ${APPLICATION}"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/gomft.service
|
cat <<EOF >/etc/systemd/system/gomft.service
|
||||||
@@ -108,8 +55,9 @@ After=network.target
|
|||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
User=root
|
User=root
|
||||||
|
EnvironmentFile=/opt/gomft/.env
|
||||||
WorkingDirectory=/opt/gomft
|
WorkingDirectory=/opt/gomft
|
||||||
ExecStart=/opt/gomft/./gomft
|
ExecStart=/opt/gomft/gomft
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
@@ -122,7 +70,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f "$temp_file"
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ curl -L -o "${APPLICATION}" "https://github.com/heiher/${APPLICATION}/releases/d
|
|||||||
mv ${APPLICATION} /opt/${APPLICATION}
|
mv ${APPLICATION} /opt/${APPLICATION}
|
||||||
chmod +x /opt/${APPLICATION}
|
chmod +x /opt/${APPLICATION}
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
curl -L -o "main.yml" "https://raw.githubusercontent.com/heiher/${APPLICATION}/refs/heads/master/conf/main.yml"
|
curl -L -o "main.yml" "https://raw.githubusercontent.com/heiher/${APPLICATION}/refs/heads/main/conf/main.yml"
|
||||||
sed -i 's/^#auth:/auth:/; s/^# file: conf\/auth.txt/ file: \/root\/hev.creds/' main.yml
|
sed -i 's/^#auth:/auth:/; s/^# file: conf\/auth.txt/ file: \/root\/hev.creds/' main.yml
|
||||||
mkdir -p /etc/${APPLICATION}
|
mkdir -p /etc/${APPLICATION}
|
||||||
USERNAME="admin"
|
USERNAME="admin"
|
||||||
|
|||||||
@@ -115,7 +115,8 @@ NODE_VERSION="22" setup_nodejs
|
|||||||
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
||||||
|
|
||||||
msg_info "Setting up Postgresql Database"
|
msg_info "Setting up Postgresql Database"
|
||||||
VCHORD_RELEASE="$(curl -fsSL https://api.github.com/repos/tensorchord/vectorchord/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
|
VCHORD_RELEASE="0.4.3"
|
||||||
|
# VCHORD_RELEASE="$(curl -fsSL https://api.github.com/repos/tensorchord/vectorchord/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
|
||||||
curl -fsSL "https://github.com/tensorchord/VectorChord/releases/download/${VCHORD_RELEASE}/postgresql-16-vchord_${VCHORD_RELEASE}-1_amd64.deb" -o vchord.deb
|
curl -fsSL "https://github.com/tensorchord/VectorChord/releases/download/${VCHORD_RELEASE}/postgresql-16-vchord_${VCHORD_RELEASE}-1_amd64.deb" -o vchord.deb
|
||||||
$STD apt install -y ./vchord.deb
|
$STD apt install -y ./vchord.deb
|
||||||
rm vchord.deb
|
rm vchord.deb
|
||||||
@@ -282,7 +283,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
|
|||||||
mkdir -p "$INSTALL_DIR"
|
mkdir -p "$INSTALL_DIR"
|
||||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${ML_DIR}","${INSTALL_DIR}"/cache}
|
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${ML_DIR}","${INSTALL_DIR}"/cache}
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.137.3" "$SRC_DIR"
|
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.138.1" "$SRC_DIR"
|
||||||
|
|
||||||
msg_info "Installing ${APPLICATION} (more patience please)"
|
msg_info "Installing ${APPLICATION} (more patience please)"
|
||||||
|
|
||||||
@@ -455,6 +456,8 @@ systemctl enable -q --now "$APPLICATION"-ml.service "$APPLICATION"-web.service
|
|||||||
msg_ok "Created user, env file, scripts and services"
|
msg_ok "Created user, env file, scripts and services"
|
||||||
|
|
||||||
sed -i "$ a VERSION_ID=12" /etc/os-release # otherwise the motd_ssh function will fail
|
sed -i "$ a VERSION_ID=12" /etc/os-release # otherwise the motd_ssh function will fail
|
||||||
|
cp /etc/debian_version ~/.debian_version.bak
|
||||||
|
sed -i 's/.*/13.0/' /etc/debian_version
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCO
|
|||||||
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
|
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
|
||||||
msg_ok "Configured PostgreSQL"
|
msg_ok "Configured PostgreSQL"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "keycloak" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
|
fetch_and_deploy_gh_release "keycloak_app" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/keycloak.service
|
cat <<EOF >/etc/systemd/system/keycloak.service
|
||||||
|
|||||||
80
install/litellm-install.sh
Normal file
80
install/litellm-install.sh
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: stout01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/BerriAI/litellm
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
PG_VERSION="17" setup_postgresql
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
|
|
||||||
|
msg_info "Setting up PostgreSQL"
|
||||||
|
DB_NAME="litellm_db"
|
||||||
|
DB_USER="litellm"
|
||||||
|
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
||||||
|
{
|
||||||
|
echo "${APPLICATION} Credentials"
|
||||||
|
echo "Database Name: $DB_NAME"
|
||||||
|
echo "Database User: $DB_USER"
|
||||||
|
echo "Database Password: $DB_PASS"
|
||||||
|
} >>~/litellm.creds
|
||||||
|
msg_ok "Set up PostgreSQL"
|
||||||
|
|
||||||
|
msg_info "Setting up Virtual Environment"
|
||||||
|
mkdir -p /opt/litellm
|
||||||
|
cd /opt/litellm
|
||||||
|
$STD uv venv /opt/litellm/.venv
|
||||||
|
$STD /opt/litellm/.venv/bin/python -m ensurepip --upgrade
|
||||||
|
$STD /opt/litellm/.venv/bin/python -m pip install --upgrade pip
|
||||||
|
$STD /opt/litellm/.venv/bin/python -m pip install litellm[proxy] prisma
|
||||||
|
msg_ok "Installed LiteLLM"
|
||||||
|
|
||||||
|
msg_info "Configuring LiteLLM"
|
||||||
|
mkdir -p /opt
|
||||||
|
cat <<EOF >/opt/litellm/litellm.yaml
|
||||||
|
general_settings:
|
||||||
|
master_key: sk-1234
|
||||||
|
database_url: postgresql://$DB_USER:$DB_PASS@127.0.0.1:5432/$DB_NAME
|
||||||
|
store_model_in_db: true
|
||||||
|
EOF
|
||||||
|
|
||||||
|
uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
|
||||||
|
msg_ok "Configured LiteLLM"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/litellm.service
|
||||||
|
[Unit]
|
||||||
|
Description=LiteLLM
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl enable -q --now litellm
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
# Copyright (c) 2021-2025 tteck
|
||||||
# Author: tteck (tteckster)
|
# Author: tteck (tteckster) | MickLesk (CanbiZ)
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: https://docs.paperless-ngx.com/
|
# Source: https://docs.paperless-ngx.com/
|
||||||
|
|
||||||
@@ -29,22 +29,16 @@ $STD apt-get install -y \
|
|||||||
automake \
|
automake \
|
||||||
libtool \
|
libtool \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
git \
|
|
||||||
libtiff-dev \
|
libtiff-dev \
|
||||||
libpng-dev \
|
libpng-dev \
|
||||||
libleptonica-dev
|
libleptonica-dev
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PG_VERSION="16" setup_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
|
PYTHON_VERSION="3.13" setup_uv
|
||||||
msg_info "Setup Python3"
|
fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
|
||||||
$STD apt-get install -y \
|
fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
|
||||||
python3 \
|
setup_gs
|
||||||
python3-pip \
|
|
||||||
python3-dev \
|
|
||||||
python3-setuptools \
|
|
||||||
python3-wheel
|
|
||||||
msg_ok "Setup Python3"
|
|
||||||
|
|
||||||
msg_info "Installing OCR Dependencies (Patience)"
|
msg_info "Installing OCR Dependencies (Patience)"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
@@ -57,50 +51,18 @@ $STD apt-get install -y \
|
|||||||
zlib1g \
|
zlib1g \
|
||||||
tesseract-ocr \
|
tesseract-ocr \
|
||||||
tesseract-ocr-eng
|
tesseract-ocr-eng
|
||||||
|
|
||||||
cd /tmp
|
|
||||||
curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz" -o "ghostscript-10.04.0.tar.gz"
|
|
||||||
$STD tar -xzf ghostscript-10.04.0.tar.gz
|
|
||||||
cd ghostscript-10.04.0
|
|
||||||
$STD ./configure
|
|
||||||
$STD make
|
|
||||||
$STD sudo make install
|
|
||||||
msg_ok "Installed OCR Dependencies"
|
msg_ok "Installed OCR Dependencies"
|
||||||
|
|
||||||
msg_info "Installing JBIG2"
|
msg_info "Setup JBIG2"
|
||||||
$STD git clone https://github.com/ie13/jbig2enc /opt/jbig2enc
|
|
||||||
cd /opt/jbig2enc
|
cd /opt/jbig2enc
|
||||||
$STD bash ./autogen.sh
|
$STD bash ./autogen.sh
|
||||||
$STD bash ./configure
|
$STD bash ./configure
|
||||||
$STD make
|
$STD make
|
||||||
$STD make install
|
$STD make install
|
||||||
|
cd /
|
||||||
rm -rf /opt/jbig2enc
|
rm -rf /opt/jbig2enc
|
||||||
msg_ok "Installed JBIG2"
|
msg_ok "Installed JBIG2"
|
||||||
|
|
||||||
msg_info "Installing Paperless-ngx (Patience)"
|
|
||||||
Paperlessngx=$(curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/latest" | grep "title>Release" | cut -d " " -f 5)
|
|
||||||
cd /opt
|
|
||||||
$STD curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$Paperlessngx/paperless-ngx-$Paperlessngx.tar.xz" -o "paperless-ngx-$Paperlessngx.tar.xz"
|
|
||||||
$STD tar -xf "paperless-ngx-$Paperlessngx.tar.xz" -C /opt/
|
|
||||||
mv paperless-ngx paperless
|
|
||||||
rm "paperless-ngx-$Paperlessngx.tar.xz"
|
|
||||||
cd /opt/paperless
|
|
||||||
$STD pip install --upgrade pip
|
|
||||||
$STD pip install -r requirements.txt
|
|
||||||
curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf
|
|
||||||
mkdir -p {consume,data,media,static}
|
|
||||||
sed -i -e 's|#PAPERLESS_REDIS=redis://localhost:6379|PAPERLESS_REDIS=redis://localhost:6379|' /opt/paperless/paperless.conf
|
|
||||||
sed -i -e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" /opt/paperless/paperless.conf
|
|
||||||
sed -i -e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" /opt/paperless/paperless.conf
|
|
||||||
sed -i -e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" /opt/paperless/paperless.conf
|
|
||||||
sed -i -e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" /opt/paperless/paperless.conf
|
|
||||||
echo "${Paperlessngx}" >/opt/"${APPLICATION}"_version.txt
|
|
||||||
msg_ok "Installed Paperless-ngx"
|
|
||||||
|
|
||||||
msg_info "Installing Natural Language Toolkit (Patience)"
|
|
||||||
$STD python3 -m nltk.downloader -d /usr/share/nltk_data all
|
|
||||||
msg_ok "Installed Natural Language Toolkit"
|
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL database"
|
msg_info "Setting up PostgreSQL database"
|
||||||
DB_NAME=paperlessdb
|
DB_NAME=paperlessdb
|
||||||
DB_USER=paperless
|
DB_USER=paperless
|
||||||
@@ -111,40 +73,44 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCO
|
|||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
||||||
echo "" >>~/paperless.creds
|
{
|
||||||
echo -e "Paperless-ngx Database User: \e[32m$DB_USER\e[0m" >>~/paperless.creds
|
echo "Paperless-ngx-Credentials"
|
||||||
echo -e "Paperless-ngx Database Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
echo "Paperless-ngx Database Name: $DB_NAME"
|
||||||
echo -e "Paperless-ngx Database Name: \e[32m$DB_NAME\e[0m" >>~/paperless.creds
|
echo "Paperless-ngx Database User: $DB_USER"
|
||||||
sed -i -e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBHOST=localhost|' /opt/paperless/paperless.conf
|
echo "Paperless-ngx Database Password: $DB_PASS"
|
||||||
sed -i -e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' /opt/paperless/paperless.conf
|
echo "Paperless-ngx Secret Key: $SECRET_KEY\n"
|
||||||
sed -i -e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$DB_NAME|" /opt/paperless/paperless.conf
|
echo "Paperless-ngx WebUI User: admin"
|
||||||
sed -i -e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$DB_USER|" /opt/paperless/paperless.conf
|
echo "Paperless-ngx WebUI Password: $DB_PASS"
|
||||||
sed -i -e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" /opt/paperless/paperless.conf
|
} >>~/paperless-ngx.creds
|
||||||
sed -i -e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" /opt/paperless/paperless.conf
|
msg_ok "Setup PostgreSQL database"
|
||||||
cd /opt/paperless/src
|
|
||||||
$STD python3 manage.py migrate
|
|
||||||
msg_ok "Set up PostgreSQL database"
|
|
||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
msg_info "Setup Paperless-ngx"
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
cd /opt/paperless
|
||||||
msg_info "Installing Adminer"
|
$STD uv sync --all-extras
|
||||||
$STD apt install -y adminer
|
curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf
|
||||||
$STD a2enconf adminer
|
mkdir -p {consume,data,media,static}
|
||||||
systemctl reload apache2
|
sed -i \
|
||||||
IP=$(hostname -I | awk '{print $1}')
|
-e 's|#PAPERLESS_REDIS=redis://localhost:6379|PAPERLESS_REDIS=redis://localhost:6379|' \
|
||||||
echo "" >>~/paperless.creds
|
-e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" \
|
||||||
echo -e "Adminer Interface: \e[32m$IP/adminer/\e[0m" >>~/paperless.creds
|
-e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" \
|
||||||
echo -e "Adminer System: \e[32mPostgreSQL\e[0m" >>~/paperless.creds
|
-e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" \
|
||||||
echo -e "Adminer Server: \e[32mlocalhost:5432\e[0m" >>~/paperless.creds
|
-e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" \
|
||||||
echo -e "Adminer Username: \e[32m$DB_USER\e[0m" >>~/paperless.creds
|
-e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBHOST=localhost|' \
|
||||||
echo -e "Adminer Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
-e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' \
|
||||||
echo -e "Adminer Database: \e[32m$DB_NAME\e[0m" >>~/paperless.creds
|
-e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$DB_NAME|" \
|
||||||
msg_ok "Installed Adminer"
|
-e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$DB_USER|" \
|
||||||
fi
|
-e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" \
|
||||||
|
-e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \
|
||||||
|
/opt/paperless/paperless.conf
|
||||||
|
cd /opt/paperless/src
|
||||||
|
set -a
|
||||||
|
. /opt/paperless/paperless.conf
|
||||||
|
set +a
|
||||||
|
$STD uv run -- python manage.py migrate
|
||||||
|
msg_ok "Setup Paperless-ngx"
|
||||||
|
|
||||||
msg_info "Setting up admin Paperless-ngx User & Password"
|
msg_info "Setting up admin Paperless-ngx User & Password"
|
||||||
## From https://github.com/linuxserver/docker-paperless-ngx/blob/main/root/etc/cont-init.d/99-migrations
|
cat <<EOF | uv run -- python /opt/paperless/src/manage.py shell
|
||||||
cat <<EOF | python3 /opt/paperless/src/manage.py shell
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
UserModel = get_user_model()
|
UserModel = get_user_model()
|
||||||
user = UserModel.objects.create_user('admin', password='$DB_PASS')
|
user = UserModel.objects.create_user('admin', password='$DB_PASS')
|
||||||
@@ -152,12 +118,17 @@ user.is_superuser = True
|
|||||||
user.is_staff = True
|
user.is_staff = True
|
||||||
user.save()
|
user.save()
|
||||||
EOF
|
EOF
|
||||||
echo "" >>~/paperless.creds
|
|
||||||
echo -e "Paperless-ngx WebUI User: \e[32madmin\e[0m" >>~/paperless.creds
|
|
||||||
echo -e "Paperless-ngx WebUI Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds
|
|
||||||
echo "" >>~/paperless.creds
|
|
||||||
msg_ok "Set up admin Paperless-ngx User & Password"
|
msg_ok "Set up admin Paperless-ngx User & Password"
|
||||||
|
|
||||||
|
msg_info "Installing Natural Language Toolkit (Patience)"
|
||||||
|
cd /opt/paperless
|
||||||
|
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data snowball_data
|
||||||
|
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data stopwords
|
||||||
|
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt_tab || \
|
||||||
|
$STD uv run python -m nltk.downloader -d /usr/share/nltk_data punkt
|
||||||
|
sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
|
||||||
|
msg_ok "Installed Natural Language Toolkit"
|
||||||
|
|
||||||
msg_info "Creating Services"
|
msg_info "Creating Services"
|
||||||
cat <<EOF >/etc/systemd/system/paperless-scheduler.service
|
cat <<EOF >/etc/systemd/system/paperless-scheduler.service
|
||||||
[Unit]
|
[Unit]
|
||||||
@@ -166,7 +137,7 @@ Requires=redis.service
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/paperless/src
|
WorkingDirectory=/opt/paperless/src
|
||||||
ExecStart=celery --app paperless beat --loglevel INFO
|
ExecStart=uv run -- celery --app paperless beat --loglevel INFO
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
@@ -180,7 +151,7 @@ After=postgresql.service
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/paperless/src
|
WorkingDirectory=/opt/paperless/src
|
||||||
ExecStart=celery --app paperless worker --loglevel INFO
|
ExecStart=uv run -- celery --app paperless worker --loglevel INFO
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
@@ -194,7 +165,7 @@ Requires=redis.service
|
|||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/paperless/src
|
WorkingDirectory=/opt/paperless/src
|
||||||
ExecStartPre=/bin/sleep 2
|
ExecStartPre=/bin/sleep 2
|
||||||
ExecStart=python3 manage.py document_consumer
|
ExecStart=uv run -- python manage.py document_consumer
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
@@ -209,7 +180,7 @@ Requires=redis.service
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/paperless/src
|
WorkingDirectory=/opt/paperless/src
|
||||||
ExecStart=granian --interface asginl --ws "paperless.asgi:application"
|
ExecStart=uv run -- granian --interface asginl --ws "paperless.asgi:application"
|
||||||
Environment=GRANIAN_HOST=::
|
Environment=GRANIAN_HOST=::
|
||||||
Environment=GRANIAN_PORT=8000
|
Environment=GRANIAN_PORT=8000
|
||||||
Environment=GRANIAN_WORKERS=1
|
Environment=GRANIAN_WORKERS=1
|
||||||
@@ -217,13 +188,14 @@ Environment=GRANIAN_WORKERS=1
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
systemctl enable -q --now paperless-webserver paperless-scheduler paperless-task-queue paperless-consumer
|
||||||
sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
|
|
||||||
|
|
||||||
systemctl daemon-reload
|
|
||||||
$STD systemctl enable -q --now paperless-webserver paperless-scheduler paperless-task-queue paperless-consumer
|
|
||||||
msg_ok "Created Services"
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
||||||
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
|
setup_adminer
|
||||||
|
fi
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
|
|||||||
@@ -14,13 +14,10 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y php-pear
|
||||||
apache2 \
|
|
||||||
libapache2-mod-php \
|
|
||||||
php8.2 php8.2-{fpm,curl,cli,mysql,gd,intl,imap,apcu,pspell,tidy,xmlrpc,mbstring,gmp,xml,ldap,common,snmp} \
|
|
||||||
php-pear
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_FPM="YES" PHP_MODULE="mysql,imap,apcu,pspell,tidy,xmlrpc,gmp,ldap,common,snmp" setup_php
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Setting up MariaDB"
|
msg_info "Setting up MariaDB"
|
||||||
@@ -38,11 +35,9 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
|
|||||||
} >>~/phpipam.creds
|
} >>~/phpipam.creds
|
||||||
msg_ok "Set up MariaDB"
|
msg_ok "Set up MariaDB"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "phpipam" "phpipam/phpipam" "prebuild" "latest" "/opt/phpipam" "phpipam-v*.zip"
|
||||||
|
|
||||||
msg_info "Installing phpIPAM"
|
msg_info "Installing phpIPAM"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/phpipam/phpipam/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
cd /opt
|
|
||||||
curl -fsSL "https://github.com/phpipam/phpipam/releases/download/v${RELEASE}/phpipam-v${RELEASE}.zip" -o "phpipam-v${RELEASE}.zip"
|
|
||||||
$STD unzip "phpipam-v${RELEASE}.zip"
|
|
||||||
$STD mariadb -u root "${DB_NAME}" </opt/phpipam/db/SCHEMA.sql
|
$STD mariadb -u root "${DB_NAME}" </opt/phpipam/db/SCHEMA.sql
|
||||||
cp /opt/phpipam/config.dist.php /opt/phpipam/config.php
|
cp /opt/phpipam/config.dist.php /opt/phpipam/config.php
|
||||||
sed -i -e "s/\(\$disable_installer = \).*/\1true;/" \
|
sed -i -e "s/\(\$disable_installer = \).*/\1true;/" \
|
||||||
@@ -51,7 +46,6 @@ sed -i -e "s/\(\$disable_installer = \).*/\1true;/" \
|
|||||||
-e "s/\(\$db\['name'\] = \).*/\1'$DB_NAME';/" \
|
-e "s/\(\$db\['name'\] = \).*/\1'$DB_NAME';/" \
|
||||||
/opt/phpipam/config.php
|
/opt/phpipam/config.php
|
||||||
sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.2/apache2/php.ini
|
sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.2/apache2/php.ini
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Installed phpIPAM"
|
msg_ok "Installed phpIPAM"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -79,7 +73,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf "/opt/phpipam-v${RELEASE}.zip"
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -20,17 +20,7 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
setup_mariadb
|
setup_mariadb
|
||||||
|
JAVA_VERSION="21" setup_java
|
||||||
msg_info "Setting up Adoptium Repository"
|
|
||||||
mkdir -p /etc/apt/keyrings
|
|
||||||
curl -fsSL "https://packages.adoptium.net/artifactory/api/gpg/key/public" | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg
|
|
||||||
echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" >/etc/apt/sources.list.d/adoptium.list
|
|
||||||
$STD apt-get update
|
|
||||||
msg_ok "Set up Adoptium Repository"
|
|
||||||
|
|
||||||
msg_info "Installing Temurin JDK 21 (LTS)"
|
|
||||||
$STD apt-get install -y temurin-21-jdk
|
|
||||||
msg_ok "Setup Temurin JDK 21 (LTS)"
|
|
||||||
|
|
||||||
msg_info "Setting up MariaDB"
|
msg_info "Setting up MariaDB"
|
||||||
JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
|
JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=')
|
||||||
@@ -48,13 +38,11 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
|
|||||||
} >>~/plant-it.creds
|
} >>~/plant-it.creds
|
||||||
msg_ok "Set up MariaDB"
|
msg_ok "Set up MariaDB"
|
||||||
|
|
||||||
msg_info "Setup Plant-it"
|
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "latest" "/opt/plant-it/backend" "server.jar"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/MDeLuise/plant-it/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "latest" "/opt/plant-it/frontend" "client.tar.gz"
|
||||||
curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/server.jar" -o "server.jar"
|
|
||||||
mkdir -p /opt/plant-it/{backend,frontend}
|
|
||||||
mkdir -p /opt/plant-it-data
|
|
||||||
mv -f server.jar /opt/plant-it/backend/server.jar
|
|
||||||
|
|
||||||
|
msg_info "Configured Plant-it"
|
||||||
|
mkdir -p /opt/plant-it-data
|
||||||
cat <<EOF >/opt/plant-it/backend/server.env
|
cat <<EOF >/opt/plant-it/backend/server.env
|
||||||
MYSQL_HOST=localhost
|
MYSQL_HOST=localhost
|
||||||
MYSQL_PORT=3306
|
MYSQL_PORT=3306
|
||||||
@@ -78,12 +66,7 @@ CACHE_TTL=86400
|
|||||||
CACHE_HOST=localhost
|
CACHE_HOST=localhost
|
||||||
CACHE_PORT=6379
|
CACHE_PORT=6379
|
||||||
EOF
|
EOF
|
||||||
|
msg_ok "Configured Plant-it"
|
||||||
cd /opt/plant-it/frontend
|
|
||||||
curl -fsSL "https://github.com/MDeLuise/plant-it/releases/download/${RELEASE}/client.tar.gz" -o "client.tar.gz"
|
|
||||||
tar -xzf client.tar.gz
|
|
||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
|
||||||
msg_ok "Setup Plant-it"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/plant-it.service
|
cat <<EOF >/etc/systemd/system/plant-it.service
|
||||||
@@ -136,7 +119,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf /opt/plant-it/frontend/client.tar.gz
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -13,19 +13,17 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "prometheus" "prometheus/prometheus" "prebuild" "latest" "/usr/local/bin" "*linux-amd64.tar.gz"
|
||||||
|
|
||||||
msg_info "Installing Prometheus"
|
msg_info "Installing Prometheus"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
mkdir -p /etc/prometheus
|
mkdir -p /etc/prometheus
|
||||||
mkdir -p /var/lib/prometheus
|
mkdir -p /var/lib/prometheus
|
||||||
curl -fsSL "https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz" -o "prometheus-${RELEASE}.linux-amd64.tar.gz"
|
mv /usr/local/bin/prometheus.yml /etc/prometheus/prometheus.yml
|
||||||
tar -xf prometheus-${RELEASE}.linux-amd64.tar.gz
|
|
||||||
mv prometheus-${RELEASE}.linux-amd64/prometheus prometheus-${RELEASE}.linux-amd64/promtool /usr/local/bin/
|
|
||||||
mv prometheus-${RELEASE}.linux-amd64/prometheus.yml /etc/prometheus/prometheus.yml
|
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
msg_ok "Installed Prometheus"
|
msg_ok "Installed Prometheus"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/prometheus.service
|
cat <<'EOF' >/etc/systemd/system/prometheus.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Prometheus
|
Description=Prometheus
|
||||||
Wants=network-online.target
|
Wants=network-online.target
|
||||||
@@ -53,5 +51,4 @@ customize
|
|||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
rm -rf prometheus-${RELEASE}.linux-amd64 prometheus-${RELEASE}.linux-amd64.tar.gz
|
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -13,17 +13,14 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Prometheus Paperless NGX Exporter"
|
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz" -o "prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz"
|
msg_info "Configuring Prometheus Paperless NGX Exporter"
|
||||||
tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
|
||||||
mv prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
|
|
||||||
mkdir -p /etc/prometheus-paperless-ngx-exporter
|
mkdir -p /etc/prometheus-paperless-ngx-exporter
|
||||||
cat <<EOF >/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
|
cat <<EOF >/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
|
||||||
SECRET_AUTH_TOKEN
|
SECRET_AUTH_TOKEN
|
||||||
EOF
|
EOF
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
msg_ok "Configured Prometheus Paperless NGX Exporter"
|
||||||
msg_ok "Installed Prometheus Paperless NGX Exporter"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/prometheus-paperless-ngx-exporter.service
|
cat <<EOF >/etc/systemd/system/prometheus-paperless-ngx-exporter.service
|
||||||
@@ -53,5 +50,4 @@ customize
|
|||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
|
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ cat <<EOF >>/etc/apt/sources.list
|
|||||||
deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription
|
deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription
|
||||||
EOF
|
EOF
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
export IFUPDOWN2_NO_IFRELOAD=1
|
||||||
$STD apt-get install -y proxmox-backup-server
|
$STD apt-get install -y proxmox-backup-server
|
||||||
msg_ok "Installed Proxmox Backup Server"
|
msg_ok "Installed Proxmox Backup Server"
|
||||||
|
|
||||||
|
|||||||
@@ -20,19 +20,12 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="playactor" setup_nodejs
|
NODE_VERSION="22" NODE_MODULE="playactor" setup_nodejs
|
||||||
|
fetch_and_deploy_gh_release "ps5-mqtt" "FunkeyFlo/ps5-mqtt" "tarball"
|
||||||
|
|
||||||
msg_info "Installing PS5-MQTT"
|
msg_info "Configuring PS5-MQTT"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/FunkeyFlo/ps5-mqtt/releases/latest | jq -r '.tag_name')
|
|
||||||
curl -fsSL https://github.com/FunkeyFlo/ps5-mqtt/archive/refs/tags/${RELEASE}.tar.gz -o /tmp/${RELEASE}.tar.gz
|
|
||||||
tar zxf /tmp/${RELEASE}.tar.gz -C /opt
|
|
||||||
mv /opt/ps5-mqtt-* /opt/ps5-mqtt
|
|
||||||
cd /opt/ps5-mqtt/ps5-mqtt/
|
cd /opt/ps5-mqtt/ps5-mqtt/
|
||||||
$STD npm install
|
$STD npm install
|
||||||
$STD npm run build
|
$STD npm run build
|
||||||
echo ${RELEASE} >/opt/ps5-mqtt_version.txt
|
|
||||||
msg_ok "Installed PS5-MQTT"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
mkdir -p /opt/.config/ps5-mqtt/
|
mkdir -p /opt/.config/ps5-mqtt/
|
||||||
mkdir -p /opt/.config/ps5-mqtt/playactor
|
mkdir -p /opt/.config/ps5-mqtt/playactor
|
||||||
cat <<EOF >/opt/.config/ps5-mqtt/config.json
|
cat <<EOF >/opt/.config/ps5-mqtt/config.json
|
||||||
@@ -64,6 +57,9 @@ cat <<EOF >/opt/.config/ps5-mqtt/config.json
|
|||||||
"frontendPort": "8645"
|
"frontendPort": "8645"
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
msg_ok "Configured PS5-MQTT"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/ps5-mqtt.service
|
cat <<EOF >/etc/systemd/system/ps5-mqtt.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=PS5-MQTT Daemon
|
Description=PS5-MQTT Daemon
|
||||||
@@ -92,5 +88,4 @@ customize
|
|||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
rm /tmp/${RELEASE}.tar.gz
|
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ chown -R pulse:pulse /etc/pulse /opt/pulse
|
|||||||
msg_ok "Installed Pulse"
|
msg_ok "Installed Pulse"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/pulse.service
|
cat <<EOF >/etc/systemd/system/pulse-backend.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Pulse Monitoring Server
|
Description=Pulse Monitoring Server
|
||||||
After=network.target
|
After=network.target
|
||||||
@@ -44,7 +44,7 @@ Type=simple
|
|||||||
User=pulse
|
User=pulse
|
||||||
Group=pulse
|
Group=pulse
|
||||||
WorkingDirectory=/opt/pulse
|
WorkingDirectory=/opt/pulse
|
||||||
ExecStart=/opt/pulse/pulse
|
ExecStart=/opt/pulse/bin/pulse
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=3
|
RestartSec=3
|
||||||
StandardOutput=journal
|
StandardOutput=journal
|
||||||
@@ -55,7 +55,7 @@ Environment="PULSE_DATA_DIR=/etc/pulse"
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now pulse
|
systemctl enable -q --now pulse-backend
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -13,14 +13,12 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "qbittorrent" "userdocs/qbittorrent-nox-static" "singlefile" "latest" "/opt/qbittorrent" "x86_64-qbittorrent-nox"
|
||||||
|
|
||||||
msg_info "Setup qBittorrent-nox"
|
msg_info "Setup qBittorrent-nox"
|
||||||
FULLRELEASE=$(curl -fsSL https://api.github.com/repos/userdocs/qbittorrent-nox-static/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
mv /opt/qbittorrent/x86_64-qbittorrent-nox /opt/qbittorrent/qbittorrent-nox
|
||||||
RELEASE=$(echo $FULLRELEASE | cut -c 9-13)
|
mkdir -p ~/.config/qBittorrent/
|
||||||
mkdir -p /opt/qbittorrent
|
cat <<EOF >~/.config/qBittorrent/qBittorrent.conf
|
||||||
curl -fsSL "https://github.com/userdocs/qbittorrent-nox-static/releases/download/${FULLRELEASE}/x86_64-qbittorrent-nox" -o /opt/qbittorrent/qbittorrent-nox
|
|
||||||
chmod +x /opt/qbittorrent/qbittorrent-nox
|
|
||||||
mkdir -p $HOME/.config/qBittorrent/
|
|
||||||
cat <<EOF >$HOME/.config/qBittorrent/qBittorrent.conf
|
|
||||||
[LegalNotice]
|
[LegalNotice]
|
||||||
Accepted=true
|
Accepted=true
|
||||||
|
|
||||||
@@ -30,7 +28,6 @@ WebUI\Port=8090
|
|||||||
WebUI\UseUPnP=false
|
WebUI\UseUPnP=false
|
||||||
WebUI\Username=admin
|
WebUI\Username=admin
|
||||||
EOF
|
EOF
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Setup qBittorrent-nox"
|
msg_ok "Setup qBittorrent-nox"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
|
|||||||
@@ -17,12 +17,9 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y apache2-utils fuse3
|
$STD apt-get install -y apache2-utils fuse3
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "rclone" "rclone/rclone" "prebuild" "latest" "/opt/rclone" "rclone*linux-amd64.zip"
|
||||||
|
|
||||||
msg_info "Installing rclone"
|
msg_info "Installing rclone"
|
||||||
temp_file=$(mktemp)
|
|
||||||
mkdir -p /opt/rclone
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/rclone/rclone/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/rclone/rclone/releases/download/v${RELEASE}/rclone-v${RELEASE}-linux-amd64.zip" -o "$temp_file"
|
|
||||||
$STD unzip -j "$temp_file" '*/**' -d /opt/rclone
|
|
||||||
cd /opt/rclone
|
cd /opt/rclone
|
||||||
RCLONE_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
RCLONE_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
$STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD"
|
$STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD"
|
||||||
@@ -31,7 +28,6 @@ $STD htpasswd -cb -B /opt/login.pwd admin "$RCLONE_PASSWORD"
|
|||||||
echo "rclone User Name: admin"
|
echo "rclone User Name: admin"
|
||||||
echo "rclone Password: $RCLONE_PASSWORD"
|
echo "rclone Password: $RCLONE_PASSWORD"
|
||||||
} >>~/rclone.creds
|
} >>~/rclone.creds
|
||||||
echo "${RELEASE}" >/opt/rclone_version.txt
|
|
||||||
msg_ok "Installed rclone"
|
msg_ok "Installed rclone"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -57,7 +53,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f "$temp_file"
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -16,19 +16,17 @@ update_os
|
|||||||
msg_info "Installing ASP.NET Core Runtime"
|
msg_info "Installing ASP.NET Core Runtime"
|
||||||
curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -o packages-microsoft-prod.deb
|
curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -o packages-microsoft-prod.deb
|
||||||
$STD dpkg -i packages-microsoft-prod.deb
|
$STD dpkg -i packages-microsoft-prod.deb
|
||||||
rm packages-microsoft-prod.deb
|
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get install -y dotnet-sdk-9.0
|
$STD apt-get install -y dotnet-sdk-9.0
|
||||||
msg_ok "Installed ASP.NET Core Runtime"
|
msg_ok "Installed ASP.NET Core Runtime"
|
||||||
|
|
||||||
msg_info "Installing rdtclient"
|
fetch_and_deploy_gh_release "rdt-client" "rogerfar/rdt-client" "prebuild" "latest" "/opt/rdtc" "RealDebridClient.zip"
|
||||||
curl -fsSL "https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip" -o RealDebridClient.zip
|
|
||||||
$STD unzip RealDebridClient.zip -d /opt/rdtc
|
msg_info "Configuring rdtclient"
|
||||||
rm RealDebridClient.zip
|
|
||||||
cd /opt/rdtc
|
cd /opt/rdtc
|
||||||
mkdir -p data/{db,downloads}
|
mkdir -p data/{db,downloads}
|
||||||
sed -i 's#/data/db/#/opt/rdtc&#g' /opt/rdtc/appsettings.json
|
sed -i 's#/data/db/#/opt/rdtc&#g' /opt/rdtc/appsettings.json
|
||||||
msg_ok "Installed rdtclient"
|
msg_ok "Configured rdtclient"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/rdtc.service
|
cat <<EOF >/etc/systemd/system/rdtc.service
|
||||||
@@ -51,6 +49,7 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
|
rm -f ~/packages-microsoft-prod.deb
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -17,18 +17,17 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y git
|
$STD apt-get install -y git
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Recyclarr"
|
fetch_and_deploy_gh_release "recyclarr" "recyclarr/recyclarr" "prebuild" "latest" "/usr/local/bin" "recyclarr-linux-x64.tar.xz"
|
||||||
curl -fsSL "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)")
|
|
||||||
tar -C /usr/local/bin -xJf recyclarr*.tar.xz
|
msg_info "Configuring Recyclarr"
|
||||||
mkdir -p /root/.config/recyclarr
|
mkdir -p /root/.config/recyclarr
|
||||||
recyclarr config create
|
recyclarr config create
|
||||||
msg_ok "Installed Recyclarr"
|
msg_ok "Configured Recyclarr"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf recyclarr*.tar.xz
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -14,17 +14,12 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
fetch_and_deploy_gh_release "revealjs" "hakimel/reveal.js" "tarball"
|
||||||
|
|
||||||
msg_info "Setup ${APPLICATION}"
|
msg_info "Configuring ${APPLICATION}"
|
||||||
temp_file=$(mktemp)
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hakimel/reveal.js/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
curl -fsSL "https://github.com/hakimel/reveal.js/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_file"
|
|
||||||
tar zxf $temp_file
|
|
||||||
mv reveal.js-${RELEASE}/ /opt/revealjs
|
|
||||||
cd /opt/revealjs
|
cd /opt/revealjs
|
||||||
$STD npm install
|
$STD npm install
|
||||||
sed -i '25s/localhost/0.0.0.0/g' /opt/revealjs/gulpfile.js
|
sed -i '25s/localhost/0.0.0.0/g' /opt/revealjs/gulpfile.js
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
msg_ok "Setup ${APPLICATION}"
|
msg_ok "Setup ${APPLICATION}"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -50,7 +45,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f $temp_file
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
@@ -13,21 +13,12 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Setup RustDesk"
|
fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
|
||||||
|
fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
|
||||||
|
fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
|
||||||
|
fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
|
msg_info "Configuring RustDesk Server"
|
||||||
APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
TEMPDIR=$(mktemp -d)
|
|
||||||
|
|
||||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_amd64.deb" \
|
|
||||||
-o "${TEMPDIR}/rustdesk-server-hbbr_${RELEASE}_amd64.deb"
|
|
||||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_amd64.deb" \
|
|
||||||
-o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_amd64.deb"
|
|
||||||
curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_amd64.deb" \
|
|
||||||
-o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_amd64.deb"
|
|
||||||
curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/rustdesk-api-server_${APIRELEASE}_amd64.deb" \
|
|
||||||
-o "${TEMPDIR}/rustdesk-api-server_${APIRELEASE}_amd64.deb"
|
|
||||||
$STD dpkg -i "${TEMPDIR}"/*.deb
|
|
||||||
ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
cd /var/lib/rustdesk-api
|
cd /var/lib/rustdesk-api
|
||||||
$STD rustdesk-api reset-admin-pwd $ADMINPASS
|
$STD rustdesk-api reset-admin-pwd $ADMINPASS
|
||||||
@@ -37,14 +28,12 @@ $STD rustdesk-api reset-admin-pwd $ADMINPASS
|
|||||||
echo "Username: admin"
|
echo "Username: admin"
|
||||||
echo "Password: $ADMINPASS"
|
echo "Password: $ADMINPASS"
|
||||||
} >>~/rustdesk.creds
|
} >>~/rustdesk.creds
|
||||||
echo "${RELEASE}" >/opt/rustdesk_version.txt
|
msg_ok "Configured RustDesk Server"
|
||||||
msg_ok "Setup RustDesk"
|
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf $TEMPDIR
|
|
||||||
$STD apt-get -y autoremove
|
$STD apt-get -y autoremove
|
||||||
$STD apt-get -y autoclean
|
$STD apt-get -y autoclean
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user