mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-04 18:32:51 +00:00
Compare commits
138 Commits
2025-06-16
...
2025-06-23
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
daad486c5e | ||
|
|
e11fb287f1 | ||
|
|
b889909d65 | ||
|
|
454a272cad | ||
|
|
7e7d610182 | ||
|
|
7302d43e7e | ||
|
|
3d4bcb8081 | ||
|
|
a0f18fd0f7 | ||
|
|
dc3113c57b | ||
|
|
c09606db69 | ||
|
|
7b90b0624e | ||
|
|
342722b10a | ||
|
|
22964f4898 | ||
|
|
a8b3244f92 | ||
|
|
a1aee90f72 | ||
|
|
09dbc22728 | ||
|
|
9559a1b3f7 | ||
|
|
2f0bff4e42 | ||
|
|
ea8586d4b5 | ||
|
|
33bb4fd9e0 | ||
|
|
5cf8765d9a | ||
|
|
b6a98288cc | ||
|
|
89cfb38459 | ||
|
|
82179752ee | ||
|
|
d495095d21 | ||
|
|
6cc901eba6 | ||
|
|
75b6aa9dac | ||
|
|
aab85ab654 | ||
|
|
5e87af5e8f | ||
|
|
8bd6d89bff | ||
|
|
ddf3019021 | ||
|
|
ef871c44ff | ||
|
|
5fcc97142f | ||
|
|
c6cbb495d2 | ||
|
|
cd84cf974c | ||
|
|
a2b8a87cc4 | ||
|
|
c684472cb4 | ||
|
|
930e4bd556 | ||
|
|
c6c03d4728 | ||
|
|
e024099beb | ||
|
|
08648aca15 | ||
|
|
70a1cfbe28 | ||
|
|
3d99d74685 | ||
|
|
6cc090b693 | ||
|
|
a8deff54d8 | ||
|
|
e33cf652a1 | ||
|
|
b35eadfc36 | ||
|
|
74a073e8bd | ||
|
|
ce9c1e63a8 | ||
|
|
25f6245d31 | ||
|
|
074d6fa31b | ||
|
|
8dfacb9e7d | ||
|
|
12a6055ea3 | ||
|
|
637f9a1f44 | ||
|
|
a7ed02160b | ||
|
|
03551e23e4 | ||
|
|
1f7d85ac60 | ||
|
|
4e46fd739d | ||
|
|
ea5eca83fe | ||
|
|
b49b902d64 | ||
|
|
f81f7fb1c0 | ||
|
|
bcdeeaafb3 | ||
|
|
92f631b628 | ||
|
|
9133782289 | ||
|
|
e343c7b5aa | ||
|
|
3e47e39633 | ||
|
|
43a90bf9e6 | ||
|
|
cd45ccfb70 | ||
|
|
b52cba817f | ||
|
|
ac203f4e79 | ||
|
|
b019991ee6 | ||
|
|
6bc17a0031 | ||
|
|
69d9394840 | ||
|
|
ad8462bc10 | ||
|
|
39b18ea011 | ||
|
|
76c99518b1 | ||
|
|
8fb0a16568 | ||
|
|
9bbc0c90e3 | ||
|
|
b5012c4225 | ||
|
|
204ec64f14 | ||
|
|
451608b445 | ||
|
|
94ad4f2e40 | ||
|
|
5db3d92286 | ||
|
|
796aaaa1d4 | ||
|
|
5042f6edb0 | ||
|
|
0c1fad54b6 | ||
|
|
fe1df0b344 | ||
|
|
3ca014b757 | ||
|
|
db7a13fced | ||
|
|
ab1f4c1196 | ||
|
|
14ffff4c6a | ||
|
|
bada204f64 | ||
|
|
1c42a2016e | ||
|
|
0cd347d3b6 | ||
|
|
63713c6489 | ||
|
|
49153887dc | ||
|
|
c46d543c43 | ||
|
|
dbd2af91b5 | ||
|
|
86183c638d | ||
|
|
aec9af49a0 | ||
|
|
791eca99b9 | ||
|
|
4190582659 | ||
|
|
601e1853e9 | ||
|
|
14077eddcd | ||
|
|
2255600c3b | ||
|
|
badd63d4a7 | ||
|
|
6c345af691 | ||
|
|
2f326ffb97 | ||
|
|
e7bb270c34 | ||
|
|
fc4a46b72d | ||
|
|
a402b45b17 | ||
|
|
9ab2089d01 | ||
|
|
0dc533cb82 | ||
|
|
4351218f8b | ||
|
|
3ee4ece04d | ||
|
|
a377640d16 | ||
|
|
bece1c574f | ||
|
|
e9afe958b1 | ||
|
|
93f9291d7c | ||
|
|
8f0751442d | ||
|
|
003422934a | ||
|
|
c11636562c | ||
|
|
654508eb94 | ||
|
|
acfb9d6ea1 | ||
|
|
0d56db2d3d | ||
|
|
4a1ae51446 | ||
|
|
6520b7f4d4 | ||
|
|
48da94f77a | ||
|
|
2ea372f034 | ||
|
|
5773459a39 | ||
|
|
40f083ea40 | ||
|
|
219a7853e1 | ||
|
|
6d1d903345 | ||
|
|
ef9ca48477 | ||
|
|
8ac24981a6 | ||
|
|
7e046d830d | ||
|
|
1691fafcc1 | ||
|
|
4400cd2b97 |
BIN
.gitattributes
vendored
BIN
.gitattributes
vendored
Binary file not shown.
4
.github/CONTRIBUTOR_AND_GUIDES/CODE-AUDIT.md
generated
vendored
4
.github/CONTRIBUTOR_AND_GUIDES/CODE-AUDIT.md
generated
vendored
@@ -5,10 +5,10 @@
|
|||||||
|
|
||||||
1) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh): This script collects system parameters. (Also holds the function to update the application.)
|
1) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh): This script collects system parameters. (Also holds the function to update the application.)
|
||||||
2) [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func): Adds user settings and integrates collected information.
|
2) [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func): Adds user settings and integrates collected information.
|
||||||
3) [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/create_lxc.sh): Constructs the LXC container.
|
3) [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/create_lxc.sh): Constructs the LXC container.
|
||||||
4) [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh): Executes functions from [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), and installs the application.
|
4) [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh): Executes functions from [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), and installs the application.
|
||||||
5) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh) (again): To display the completion message.
|
5) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh) (again): To display the completion message.
|
||||||
|
|
||||||
The installation process uses reusable scripts: [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func), [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/create_lxc.sh), and [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), which are not specific to any particular application.
|
The installation process uses reusable scripts: [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func), [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/create_lxc.sh), and [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), which are not specific to any particular application.
|
||||||
|
|
||||||
To gain a better understanding, focus on reviewing [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh). This script contains the commands and configurations for installing and configuring AdGuard Home within the LXC container.
|
To gain a better understanding, focus on reviewing [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh). This script contains the commands and configurations for installing and configuring AdGuard Home within the LXC container.
|
||||||
|
|||||||
61
.github/autolabeler-config.json
generated
vendored
61
.github/autolabeler-config.json
generated
vendored
@@ -2,21 +2,43 @@
|
|||||||
"new script": [
|
"new script": [
|
||||||
{
|
{
|
||||||
"fileStatus": "added",
|
"fileStatus": "added",
|
||||||
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
|
"includeGlobs": [
|
||||||
|
"ct/**",
|
||||||
|
"install/**",
|
||||||
|
"misc/**",
|
||||||
|
"turnkey/**",
|
||||||
|
"vm/**"
|
||||||
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"update script": [
|
"update script": [
|
||||||
{
|
{
|
||||||
"fileStatus": "modified",
|
"fileStatus": "modified",
|
||||||
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
|
"includeGlobs": [
|
||||||
"excludeGlobs": ["misc/build.func", "misc/install.func", "misc/api.func"]
|
"ct/**",
|
||||||
|
"install/**",
|
||||||
|
"misc/**",
|
||||||
|
"turnkey/**",
|
||||||
|
"vm/**"
|
||||||
|
],
|
||||||
|
"excludeGlobs": [
|
||||||
|
"misc/build.func",
|
||||||
|
"misc/install.func",
|
||||||
|
"misc/api.func"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"delete script": [
|
"delete script": [
|
||||||
{
|
{
|
||||||
"fileStatus": "removed",
|
"fileStatus": "removed",
|
||||||
"includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
|
"includeGlobs": [
|
||||||
|
"ct/**",
|
||||||
|
"install/**",
|
||||||
|
"misc/**",
|
||||||
|
"turnkey/**",
|
||||||
|
"vm/**"
|
||||||
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -27,7 +49,7 @@
|
|||||||
"*.md",
|
"*.md",
|
||||||
".github/**",
|
".github/**",
|
||||||
"misc/*.func",
|
"misc/*.func",
|
||||||
"ct/create_lxc.sh",
|
"misc/create_lxc.sh",
|
||||||
"api/**"
|
"api/**"
|
||||||
],
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
@@ -36,46 +58,57 @@
|
|||||||
"core": [
|
"core": [
|
||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": ["misc/*.func", "ct/create_lxc.sh"],
|
"includeGlobs": [
|
||||||
|
"misc/*.func",
|
||||||
|
"misc/create_lxc.sh"
|
||||||
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"website": [
|
"website": [
|
||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": ["frontend/**"],
|
"includeGlobs": [
|
||||||
|
"frontend/**"
|
||||||
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"api": [
|
"api": [
|
||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": ["api/**", "misc/api.func"],
|
"includeGlobs": [
|
||||||
|
"api/**",
|
||||||
|
"misc/api.func"
|
||||||
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"github": [
|
"github": [
|
||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": [".github/**"],
|
"includeGlobs": [
|
||||||
|
".github/**"
|
||||||
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"json": [
|
"json": [
|
||||||
{
|
{
|
||||||
"fileStatus": "modified",
|
"fileStatus": "modified",
|
||||||
"includeGlobs": ["frontend/public/json/**"],
|
"includeGlobs": [
|
||||||
|
"frontend/public/json/**"
|
||||||
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
"high risk": [
|
"high risk": [
|
||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": [
|
"includeGlobs": [
|
||||||
"misc/build.func",
|
"misc/build.func",
|
||||||
"misc/install.func",
|
"misc/install.func",
|
||||||
"ct/create_lxc.sh"
|
"misc/create_lxc.sh"
|
||||||
],
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
@@ -83,7 +116,9 @@
|
|||||||
"documentation": [
|
"documentation": [
|
||||||
{
|
{
|
||||||
"fileStatus": null,
|
"fileStatus": null,
|
||||||
"includeGlobs": ["*.md"],
|
"includeGlobs": [
|
||||||
|
"*.md"
|
||||||
|
],
|
||||||
"excludeGlobs": []
|
"excludeGlobs": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
4
.github/workflows/validate-filenames.yml
generated
vendored
4
.github/workflows/validate-filenames.yml
generated
vendored
@@ -51,8 +51,8 @@ jobs:
|
|||||||
|
|
||||||
NON_COMPLIANT_FILES=""
|
NON_COMPLIANT_FILES=""
|
||||||
for FILE in $CHANGED_FILES; do
|
for FILE in $CHANGED_FILES; do
|
||||||
# Datei "ct/create_lxc.sh" explizit überspringen
|
# Skip File "misc/create_lxc.sh"
|
||||||
if [[ "$FILE" == "ct/create_lxc.sh" ]]; then
|
if [[ "$FILE" == "misc/create_lxc.sh" ]]; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
BASENAME=$(echo "$(basename "${FILE%.*}")")
|
BASENAME=$(echo "$(basename "${FILE%.*}")")
|
||||||
|
|||||||
139
CHANGELOG.md
139
CHANGELOG.md
@@ -14,8 +14,147 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
|
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
|
||||||
|
|
||||||
|
|
||||||
|
## 2025-06-24
|
||||||
|
|
||||||
|
## 2025-06-23
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Alpine-Forgejo by @Johann3s-H [@MickLesk](https://github.com/MickLesk) ([#5396](https://github.com/community-scripts/ProxmoxVE/pull/5396))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- [core]: tools.func -> autoupdate npm to newest version on install [@MickLesk](https://github.com/MickLesk) ([#5397](https://github.com/community-scripts/ProxmoxVE/pull/5397))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- PLANKA: Fix the update procedure [@tremor021](https://github.com/tremor021) ([#5391](https://github.com/community-scripts/ProxmoxVE/pull/5391))
|
||||||
|
- changed trilium github repo [@miggi92](https://github.com/miggi92) ([#5390](https://github.com/community-scripts/ProxmoxVE/pull/5390))
|
||||||
|
- changedetection: fix: hermetic msedge [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5388](https://github.com/community-scripts/ProxmoxVE/pull/5388))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- MariaDB: Add information about Adminer on website [@tremor021](https://github.com/tremor021) ([#5400](https://github.com/community-scripts/ProxmoxVE/pull/5400))
|
||||||
|
|
||||||
|
## 2025-06-22
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- [core]: fix timing issues while template update & timezone setup at create new LXC [@MickLesk](https://github.com/MickLesk) ([#5358](https://github.com/community-scripts/ProxmoxVE/pull/5358))
|
||||||
|
- alpine: increase hdd to 1gb [@MickLesk](https://github.com/MickLesk) ([#5377](https://github.com/community-scripts/ProxmoxVE/pull/5377))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- fix: casing and naming error after #5254 [@GoetzGoerisch](https://github.com/GoetzGoerisch) ([#5380](https://github.com/community-scripts/ProxmoxVE/pull/5380))
|
||||||
|
- fix: install_adminer > setup_adminer [@MickLesk](https://github.com/MickLesk) ([#5356](https://github.com/community-scripts/ProxmoxVE/pull/5356))
|
||||||
|
- gitea: Update gitea.sh to stop update failures [@tystuyfzand](https://github.com/tystuyfzand) ([#5361](https://github.com/community-scripts/ProxmoxVE/pull/5361))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Immich: unpin release; use fetch & deploy function for update [@vhsdream](https://github.com/vhsdream) ([#5355](https://github.com/community-scripts/ProxmoxVE/pull/5355))
|
||||||
|
|
||||||
|
## 2025-06-21
|
||||||
|
|
||||||
|
## 2025-06-20
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Immich: remove unneeded tmp_file [@MickLesk](https://github.com/MickLesk) ([#5332](https://github.com/community-scripts/ProxmoxVE/pull/5332))
|
||||||
|
- Huntarr: Fix duplicate update status messages [@tremor021](https://github.com/tremor021) ([#5336](https://github.com/community-scripts/ProxmoxVE/pull/5336))
|
||||||
|
- fix planka Tags [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5311](https://github.com/community-scripts/ProxmoxVE/pull/5311))
|
||||||
|
- PLANKA: Better DB password generate [@tremor021](https://github.com/tremor021) ([#5313](https://github.com/community-scripts/ProxmoxVE/pull/5313))
|
||||||
|
- Immich: Hotfix for #5299 [@vhsdream](https://github.com/vhsdream) ([#5300](https://github.com/community-scripts/ProxmoxVE/pull/5300))
|
||||||
|
- changedetection: add msedge as Browser dependency [@Niklas04](https://github.com/Niklas04) ([#5301](https://github.com/community-scripts/ProxmoxVE/pull/5301))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- (turnkey) Add OpenLDAP as a TurnKey option [@mhaligowski](https://github.com/mhaligowski) ([#5305](https://github.com/community-scripts/ProxmoxVE/pull/5305))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- [core]: unify misc/*.func scripts with centralized logic from core.func [@MickLesk](https://github.com/MickLesk) ([#5316](https://github.com/community-scripts/ProxmoxVE/pull/5316))
|
||||||
|
- Refactor: migrate AdventureLog update to uv and GitHub release logic [@MickLesk](https://github.com/MickLesk) ([#5318](https://github.com/community-scripts/ProxmoxVE/pull/5318))
|
||||||
|
- Refactor: migrate Jupyter Notebook to uv-based installation with update support [@MickLesk](https://github.com/MickLesk) ([#5320](https://github.com/community-scripts/ProxmoxVE/pull/5320))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Argus: fix wrong port on website [@MickLesk](https://github.com/MickLesk) ([#5322](https://github.com/community-scripts/ProxmoxVE/pull/5322))
|
||||||
|
|
||||||
|
## 2025-06-19
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Ubuntu 25.04 VM [@MickLesk](https://github.com/MickLesk) ([#5284](https://github.com/community-scripts/ProxmoxVE/pull/5284))
|
||||||
|
- PLANKA ([#5277](https://github.com/community-scripts/ProxmoxVE/pull/5277))
|
||||||
|
- Wizarr ([#5273](https://github.com/community-scripts/ProxmoxVE/pull/5273))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- immich-install.sh: restore pgvector module install [@vhsdream](https://github.com/vhsdream) ([#5286](https://github.com/community-scripts/ProxmoxVE/pull/5286))
|
||||||
|
- Immich: prepare for v1.135.0 [@vhsdream](https://github.com/vhsdream) ([#5025](https://github.com/community-scripts/ProxmoxVE/pull/5025))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- [core]: Feature - Check Quorum Status in create_lxc to prevent issues [@MickLesk](https://github.com/MickLesk) ([#5278](https://github.com/community-scripts/ProxmoxVE/pull/5278))
|
||||||
|
- [core]: add validation and replace recursion for invalid inputs in adv. settings [@MickLesk](https://github.com/MickLesk) ([#5291](https://github.com/community-scripts/ProxmoxVE/pull/5291))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- cloudflare-ddns: fix typo in info-text [@LukaZagar](https://github.com/LukaZagar) ([#5263](https://github.com/community-scripts/ProxmoxVE/pull/5263))
|
||||||
|
|
||||||
|
## 2025-06-18
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- FileBrowser Quantum [@MickLesk](https://github.com/MickLesk) ([#5248](https://github.com/community-scripts/ProxmoxVE/pull/5248))
|
||||||
|
- Huntarr ([#5249](https://github.com/community-scripts/ProxmoxVE/pull/5249))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- tools.func: Standardized and Renamed Setup Functions [@MickLesk](https://github.com/MickLesk) ([#5241](https://github.com/community-scripts/ProxmoxVE/pull/5241))
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Immich: fix prompt clobber issue [@vhsdream](https://github.com/vhsdream) ([#5231](https://github.com/community-scripts/ProxmoxVE/pull/5231))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor all VM's to same logic & functions [@MickLesk](https://github.com/MickLesk) ([#5254](https://github.com/community-scripts/ProxmoxVE/pull/5254))
|
||||||
|
- upgrade old Scriptcalls to new tools.func calls [@MickLesk](https://github.com/MickLesk) ([#5242](https://github.com/community-scripts/ProxmoxVE/pull/5242))
|
||||||
|
|
||||||
## 2025-06-17
|
## 2025-06-17
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- gitea-mirror: increase build ressources [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5235](https://github.com/community-scripts/ProxmoxVE/pull/5235))
|
||||||
|
- Immich: ensure in proper working dir when updating [@vhsdream](https://github.com/vhsdream) ([#5227](https://github.com/community-scripts/ProxmoxVE/pull/5227))
|
||||||
|
- Update IP-Tag [@DesertGamer](https://github.com/DesertGamer) ([#5226](https://github.com/community-scripts/ProxmoxVE/pull/5226))
|
||||||
|
- trilium: fix update function after db changes folder [@tjcomserv](https://github.com/tjcomserv) ([#5207](https://github.com/community-scripts/ProxmoxVE/pull/5207))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- LibreTranslate: Add .env for easier configuration [@tremor021](https://github.com/tremor021) ([#5216](https://github.com/community-scripts/ProxmoxVE/pull/5216))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- IPTag: Better explanation [@MickLesk](https://github.com/MickLesk) ([#5213](https://github.com/community-scripts/ProxmoxVE/pull/5213))
|
||||||
|
|
||||||
## 2025-06-16
|
## 2025-06-16
|
||||||
|
|
||||||
### 🆕 New Scripts
|
### 🆕 New Scripts
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/2fauth_version.txt)" ]] || [[ ! -f /opt/2fauth_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null || cat /opt/2fauth_version.txt 2>/dev/null)" ]]; then
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get -y upgrade
|
$STD apt-get -y upgrade
|
||||||
@@ -45,10 +45,10 @@ function update_script() {
|
|||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
lsb-release \
|
lsb-release \
|
||||||
gnupg2
|
gnupg2
|
||||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" install_php
|
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
|
||||||
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
|
sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
|
||||||
fi
|
fi
|
||||||
fetch_and_deploy_gh_release "Bubka/2FAuth"
|
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
|
||||||
mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
|
mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
|
||||||
mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
|
mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
|
||||||
cd "/opt/2fauth" || return
|
cd "/opt/2fauth" || return
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
NODE_VERSION="22"
|
NODE_VERSION="22"
|
||||||
install_node_and_modules
|
setup_nodejs
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ -f /opt/actualbudget-data/config.json ]]; then
|
if [[ -f /opt/actualbudget-data/config.json ]]; then
|
||||||
if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then
|
if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then
|
||||||
|
|||||||
@@ -27,43 +27,51 @@ 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/seanmorley15/AdventureLog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/seanmorley15/AdventureLog/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 [[ "${RELEASE}" != "$(cat ~/.adventurelog 2>/dev/null)" ]] || [[ ! -f ~/.adventurelog ]]; then
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop adventurelog-backend
|
systemctl stop adventurelog-backend
|
||||||
systemctl stop adventurelog-frontend
|
systemctl stop adventurelog-frontend
|
||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
|
||||||
mv /opt/adventurelog/ /opt/adventurelog-backup/
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
curl -fsSL -o /opt/v${RELEASE}.zip "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip"
|
|
||||||
$STD unzip /opt/v${RELEASE}.zip -d /opt/
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
mv /opt/AdventureLog-${RELEASE} /opt/adventurelog
|
# Backend Migration
|
||||||
|
cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
|
||||||
|
cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
|
||||||
|
|
||||||
mv /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
|
|
||||||
mv /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
|
|
||||||
cd /opt/adventurelog/backend/server
|
cd /opt/adventurelog/backend/server
|
||||||
$STD pip install --upgrade pip
|
if [[ ! -x .venv/bin/python ]]; then
|
||||||
$STD pip install -r requirements.txt
|
$STD uv venv .venv
|
||||||
$STD python3 manage.py collectstatic --noinput
|
$STD .venv/bin/python -m ensurepip --upgrade
|
||||||
$STD python3 manage.py migrate
|
fi
|
||||||
|
|
||||||
mv /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
|
$STD .venv/bin/python -m pip install --upgrade pip
|
||||||
|
$STD .venv/bin/python -m pip install -r requirements.txt
|
||||||
|
$STD .venv/bin/python -m manage collectstatic --noinput
|
||||||
|
$STD .venv/bin/python -m manage migrate
|
||||||
|
|
||||||
|
# Frontend Migration
|
||||||
|
cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
|
||||||
cd /opt/adventurelog/frontend
|
cd /opt/adventurelog/frontend
|
||||||
$STD pnpm install
|
$STD pnpm i
|
||||||
$STD pnpm run build
|
$STD pnpm build
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
|
systemctl daemon-reexec
|
||||||
systemctl start adventurelog-backend
|
systemctl start adventurelog-backend
|
||||||
systemctl start adventurelog-frontend
|
systemctl start adventurelog-frontend
|
||||||
msg_ok "Started Services"
|
msg_ok "Services Started"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -rf /opt/v${RELEASE}.zip
|
rm -rf /opt/v${RELEASE}.zip
|
||||||
rm -rf /opt/adventurelog-backup
|
rm -rf /opt/adventurelog-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 ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
|||||||
45
ct/alpine-forgejo.sh
Normal file
45
ct/alpine-forgejo.sh
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
#!/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: Johann3s-H (An!ma)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://forgejo.org/
|
||||||
|
|
||||||
|
APP="Alpine-Forgejo"
|
||||||
|
var_tags="${var_tags:-alpine;git}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-256}"
|
||||||
|
var_disk="${var_disk:-1}"
|
||||||
|
var_os="${var_os:-alpine}"
|
||||||
|
var_version="${var_version:-3.21}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
msg_info "Updating Alpine Packages"
|
||||||
|
$STD apk -U upgrade
|
||||||
|
msg_ok "Updated Alpine Packages"
|
||||||
|
|
||||||
|
msg_info "Updating Forgejo"
|
||||||
|
$STD apk upgrade forgejo
|
||||||
|
msg_ok "Updated Forgejo"
|
||||||
|
|
||||||
|
msg_info "Restarting Forgejo"
|
||||||
|
$STD rc-service forgejo restart
|
||||||
|
msg_ok "Restarted Forgejo"
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
@@ -9,7 +9,7 @@ APP="Alpine"
|
|||||||
var_tags="${var_tags:-os;alpine}"
|
var_tags="${var_tags:-os;alpine}"
|
||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-1}"
|
||||||
var_ram="${var_ram:-512}"
|
var_ram="${var_ram:-512}"
|
||||||
var_disk="${var_disk:-0.5}"
|
var_disk="${var_disk:-1}"
|
||||||
var_os="${var_os:-alpine}"
|
var_os="${var_os:-alpine}"
|
||||||
var_version="${var_version:-3.21}"
|
var_version="${var_version:-3.21}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ function update_script() {
|
|||||||
$STD /opt/browserless/node_modules/playwright-core/cli.js install --with-deps
|
$STD /opt/browserless/node_modules/playwright-core/cli.js install --with-deps
|
||||||
# Update Chrome separately, as it has to be done with the force option. Otherwise the installation of other browsers will not be done if Chrome is already installed.
|
# Update Chrome separately, as it has to be done with the force option. Otherwise the installation of other browsers will not be done if Chrome is already installed.
|
||||||
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome
|
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome
|
||||||
|
$STD /opt/browserless/node_modules/playwright-core/cli.js install --force msedge
|
||||||
$STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit
|
$STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit
|
||||||
$STD npm run build --prefix /opt/browserless
|
$STD npm run build --prefix /opt/browserless
|
||||||
$STD npm run build:function --prefix /opt/browserless
|
$STD npm run build:function --prefix /opt/browserless
|
||||||
@@ -74,4 +75,4 @@ 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} 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}:5000${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/raydak-labs/configarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/raydak-labs/configarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/configarr_version.txt)" ]] || [[ ! -f /opt/configarr_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat ~/.configarr 2>/dev/null || cat /opt/configarr_version.txt 2>/dev/null)" ]]; then
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop configarr-task.timer
|
systemctl stop configarr-task.timer
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
@@ -37,7 +37,7 @@ function update_script() {
|
|||||||
mkdir -p /opt/backup/
|
mkdir -p /opt/backup/
|
||||||
mv /opt/configarr/{config.yml,secrets.yml,.env} "/opt/backup/"
|
mv /opt/configarr/{config.yml,secrets.yml,.env} "/opt/backup/"
|
||||||
rm -rf /opt/configarr
|
rm -rf /opt/configarr
|
||||||
fetch_and_deploy_gh_release "raydak-labs/configarr"
|
fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr"
|
||||||
mv /opt/backup/* /opt/configarr/
|
mv /opt/backup/* /opt/configarr/
|
||||||
cd /opt/configarr
|
cd /opt/configarr
|
||||||
$STD pnpm install
|
$STD pnpm install
|
||||||
|
|||||||
282
ct/create_lxc.sh
282
ct/create_lxc.sh
@@ -1,282 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
|
||||||
# Author: tteck (tteckster)
|
|
||||||
# Co-Author: MickLesk
|
|
||||||
# License: MIT
|
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
|
|
||||||
# This sets verbose mode if the global variable is set to "yes"
|
|
||||||
# if [ "$VERBOSE" == "yes" ]; then set -x; fi
|
|
||||||
|
|
||||||
# This function sets color variables for formatting output in the terminal
|
|
||||||
# Colors
|
|
||||||
YW=$(echo "\033[33m")
|
|
||||||
YWB=$(echo "\033[93m")
|
|
||||||
BL=$(echo "\033[36m")
|
|
||||||
RD=$(echo "\033[01;31m")
|
|
||||||
GN=$(echo "\033[1;92m")
|
|
||||||
|
|
||||||
# Formatting
|
|
||||||
CL=$(echo "\033[m")
|
|
||||||
UL=$(echo "\033[4m")
|
|
||||||
BOLD=$(echo "\033[1m")
|
|
||||||
BFR="\\r\\033[K"
|
|
||||||
HOLD=" "
|
|
||||||
TAB=" "
|
|
||||||
|
|
||||||
# Icons
|
|
||||||
CM="${TAB}✔️${TAB}${CL}"
|
|
||||||
CROSS="${TAB}✖️${TAB}${CL}"
|
|
||||||
INFO="${TAB}💡${TAB}${CL}"
|
|
||||||
|
|
||||||
# This sets error handling options and defines the error_handler function to handle errors
|
|
||||||
set -Eeuo pipefail
|
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
|
||||||
|
|
||||||
# This function handles errors
|
|
||||||
function error_handler() {
|
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
|
|
||||||
printf "\e[?25h"
|
|
||||||
local exit_code="$?"
|
|
||||||
local line_number="$1"
|
|
||||||
local command="$2"
|
|
||||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
|
||||||
echo -e "\n$error_message\n"
|
|
||||||
exit 200
|
|
||||||
}
|
|
||||||
|
|
||||||
# This function displays a spinner.
|
|
||||||
function spinner() {
|
|
||||||
local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
|
|
||||||
local spin_i=0
|
|
||||||
local interval=0.1
|
|
||||||
printf "\e[?25l"
|
|
||||||
|
|
||||||
local color="${YWB}"
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
printf "\r ${color}%s${CL}" "${frames[spin_i]}"
|
|
||||||
spin_i=$(((spin_i + 1) % ${#frames[@]}))
|
|
||||||
sleep "$interval"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# This function displays an informational message with a yellow color.
|
|
||||||
function msg_info() {
|
|
||||||
local msg="$1"
|
|
||||||
echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
|
|
||||||
spinner &
|
|
||||||
SPINNER_PID=$!
|
|
||||||
}
|
|
||||||
|
|
||||||
function msg_warn() {
|
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
|
|
||||||
printf "\e[?25h"
|
|
||||||
local msg="$1"
|
|
||||||
echo -e "${BFR}${INFO}${YWB}${msg}${CL}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# This function displays a success message with a green color.
|
|
||||||
function msg_ok() {
|
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
|
|
||||||
printf "\e[?25h"
|
|
||||||
local msg="$1"
|
|
||||||
echo -e "${BFR}${CM}${GN}${msg}${CL}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# This function displays a error message with a red color.
|
|
||||||
function msg_error() {
|
|
||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
|
|
||||||
printf "\e[?25h"
|
|
||||||
local msg="$1"
|
|
||||||
echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# This checks for the presence of valid Container Storage and Template Storage locations
|
|
||||||
msg_info "Validating Storage"
|
|
||||||
VALIDCT=$(pvesm status -content rootdir | awk 'NR>1')
|
|
||||||
if [ -z "$VALIDCT" ]; then
|
|
||||||
msg_error "Unable to detect a valid Container Storage location."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
VALIDTMP=$(pvesm status -content vztmpl | awk 'NR>1')
|
|
||||||
if [ -z "$VALIDTMP" ]; then
|
|
||||||
msg_error "Unable to detect a valid Template Storage location."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# This function is used to select the storage class and determine the corresponding storage content type and label.
|
|
||||||
function select_storage() {
|
|
||||||
local CLASS=$1
|
|
||||||
local CONTENT
|
|
||||||
local CONTENT_LABEL
|
|
||||||
case $CLASS in
|
|
||||||
container)
|
|
||||||
CONTENT='rootdir'
|
|
||||||
CONTENT_LABEL='Container'
|
|
||||||
;;
|
|
||||||
template)
|
|
||||||
CONTENT='vztmpl'
|
|
||||||
CONTENT_LABEL='Container template'
|
|
||||||
;;
|
|
||||||
*) false || {
|
|
||||||
msg_error "Invalid storage class."
|
|
||||||
exit 201
|
|
||||||
} ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# This Queries all storage locations
|
|
||||||
local -a MENU
|
|
||||||
while read -r line; do
|
|
||||||
local TAG=$(echo $line | awk '{print $1}')
|
|
||||||
local TYPE=$(echo $line | awk '{printf "%-10s", $2}')
|
|
||||||
local FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
|
|
||||||
local ITEM="Type: $TYPE Free: $FREE "
|
|
||||||
local OFFSET=2
|
|
||||||
if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
|
|
||||||
local MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
|
|
||||||
fi
|
|
||||||
MENU+=("$TAG" "$ITEM" "OFF")
|
|
||||||
done < <(pvesm status -content $CONTENT | awk 'NR>1')
|
|
||||||
|
|
||||||
# Select storage location
|
|
||||||
if [ $((${#MENU[@]} / 3)) -eq 1 ]; then
|
|
||||||
printf ${MENU[0]}
|
|
||||||
else
|
|
||||||
local STORAGE
|
|
||||||
while [ -z "${STORAGE:+x}" ]; do
|
|
||||||
STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
|
|
||||||
"Which storage pool would you like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \
|
|
||||||
16 $(($MSG_MAX_LENGTH + 23)) 6 \
|
|
||||||
"${MENU[@]}" 3>&1 1>&2 2>&3) || {
|
|
||||||
msg_error "Menu aborted."
|
|
||||||
exit 202
|
|
||||||
}
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "${CROSS}${RD} Menu aborted by user.${CL}"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
printf "%s" "$STORAGE"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
# Test if required variables are set
|
|
||||||
[[ "${CTID:-}" ]] || {
|
|
||||||
msg_error "You need to set 'CTID' variable."
|
|
||||||
exit 203
|
|
||||||
}
|
|
||||||
[[ "${PCT_OSTYPE:-}" ]] || {
|
|
||||||
msg_error "You need to set 'PCT_OSTYPE' variable."
|
|
||||||
exit 204
|
|
||||||
}
|
|
||||||
|
|
||||||
# Test if ID is valid
|
|
||||||
[ "$CTID" -ge "100" ] || {
|
|
||||||
msg_error "ID cannot be less than 100."
|
|
||||||
exit 205
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check for network connectivity (IPv4 & IPv6)
|
|
||||||
#function check_network() {
|
|
||||||
# local CHECK_URLS=("8.8.8.8" "1.1.1.1" "9.9.9.9" "2606:4700:4700::1111" "2001:4860:4860::8888" "2620:fe::fe")
|
|
||||||
#
|
|
||||||
# for url in "${CHECK_URLS[@]}"; do
|
|
||||||
# if ping -c 1 -W 2 "$url" &>/dev/null; then
|
|
||||||
# return 0 # Success: At least one connection works
|
|
||||||
# fi
|
|
||||||
# done
|
|
||||||
#
|
|
||||||
# msg_error "No network connection detected. Check your internet connection."
|
|
||||||
# exit 101
|
|
||||||
#}
|
|
||||||
|
|
||||||
# Test if ID is in use
|
|
||||||
if qm status "$CTID" &>/dev/null || pct status "$CTID" &>/dev/null; then
|
|
||||||
echo -e "ID '$CTID' is already in use."
|
|
||||||
unset CTID
|
|
||||||
msg_error "Cannot use ID that is already in use."
|
|
||||||
exit 206
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Get template storage
|
|
||||||
TEMPLATE_STORAGE=$(select_storage template)
|
|
||||||
msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage."
|
|
||||||
|
|
||||||
# Get container storage
|
|
||||||
CONTAINER_STORAGE=$(select_storage container)
|
|
||||||
msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
|
|
||||||
|
|
||||||
# Update LXC template list
|
|
||||||
msg_info "Updating LXC Template List"
|
|
||||||
#check_network
|
|
||||||
pveam update >/dev/null
|
|
||||||
msg_ok "Updated LXC Template List"
|
|
||||||
|
|
||||||
# Get LXC template string
|
|
||||||
TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
|
|
||||||
mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
|
|
||||||
[ ${#TEMPLATES[@]} -gt 0 ] || {
|
|
||||||
msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."
|
|
||||||
exit 207
|
|
||||||
}
|
|
||||||
TEMPLATE="${TEMPLATES[-1]}"
|
|
||||||
TEMPLATE_PATH="$(pvesm path $TEMPLATE_STORAGE:vztmpl/$TEMPLATE)"
|
|
||||||
# Without NAS/Mount: TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
|
|
||||||
# Check if template exists, if corrupt remove and redownload
|
|
||||||
if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE" || ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
|
|
||||||
msg_warn "Template $TEMPLATE not found in storage or seems to be corrupted. Redownloading."
|
|
||||||
[[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
|
|
||||||
|
|
||||||
# Download with 3 attempts
|
|
||||||
for attempt in {1..3}; do
|
|
||||||
msg_info "Attempt $attempt: Downloading LXC template..."
|
|
||||||
|
|
||||||
if timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
|
|
||||||
msg_ok "Template download successful."
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $attempt -eq 3 ]; then
|
|
||||||
msg_error "Three failed attempts. Aborting."
|
|
||||||
exit 208
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep $((attempt * 5))
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
msg_ok "LXC Template is ready to use."
|
|
||||||
|
|
||||||
# Check and fix subuid/subgid
|
|
||||||
grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >>/etc/subuid
|
|
||||||
grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >>/etc/subgid
|
|
||||||
|
|
||||||
# Combine all options
|
|
||||||
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
|
|
||||||
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
|
|
||||||
|
|
||||||
msg_info "Creating LXC Container"
|
|
||||||
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
|
||||||
msg_error "Container creation failed. Checking if template is corrupted."
|
|
||||||
|
|
||||||
if ! zstdcat "$TEMPLATE_PATH" | tar -tf - >/dev/null 2>&1; then
|
|
||||||
msg_error "Template appears to be corrupted. Removing and re-downloading."
|
|
||||||
rm -f "$TEMPLATE_PATH"
|
|
||||||
|
|
||||||
if ! timeout 120 pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null; then
|
|
||||||
msg_error "Failed to re-download template."
|
|
||||||
exit 208
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg_ok "Re-downloaded LXC Template"
|
|
||||||
|
|
||||||
if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
|
|
||||||
msg_error "Container creation failed after re-downloading template."
|
|
||||||
exit 200
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
msg_error "Container creation failed, but template is not corrupted."
|
|
||||||
exit 209
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created."
|
|
||||||
@@ -34,7 +34,7 @@ function update_script() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||||
PROJECT_NAME=$(</opt/fumadocs/.projectname)
|
PROJECT_NAME=$(</opt/fumadocs/.projectname)
|
||||||
PROJECT_DIR="/opt/fumadocs/${PROJECT_NAME}"
|
PROJECT_DIR="/opt/fumadocs/${PROJECT_NAME}"
|
||||||
SERVICE_NAME="fumadocs_${PROJECT_NAME}.service"
|
SERVICE_NAME="fumadocs_${PROJECT_NAME}.service"
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
|
|
||||||
APP="gitea-mirror"
|
APP="gitea-mirror"
|
||||||
var_tags="${var_tags:-mirror;gitea}"
|
var_tags="${var_tags:-mirror;gitea}"
|
||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-5}"
|
var_disk="${var_disk:-6}"
|
||||||
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}"
|
||||||
@@ -29,7 +29,7 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/arunavo4/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/arunavo4/gitea-mirror/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 [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
|
||||||
|
|
||||||
msg_info "Stopping Services"
|
msg_info "Stopping Services"
|
||||||
systemctl stop gitea-mirror
|
systemctl stop gitea-mirror
|
||||||
@@ -48,15 +48,15 @@ function update_script() {
|
|||||||
msg_ok "Installed Bun"
|
msg_ok "Installed Bun"
|
||||||
|
|
||||||
rm -rf /opt/gitea-mirror
|
rm -rf /opt/gitea-mirror
|
||||||
fetch_and_deploy_gh_release "arunavo4/gitea-mirror"
|
fetch_and_deploy_gh_release "gitea-mirror" "arunavo4/gitea-mirror"
|
||||||
|
|
||||||
msg_info "Updating and rebuilding ${APP} to v${RELEASE}"
|
msg_info "Updating and rebuilding ${APP} to v${RELEASE}"
|
||||||
cd /opt/gitea-mirror
|
cd /opt/gitea-mirror
|
||||||
$STD bun run setup
|
$STD bun run setup
|
||||||
$STD bun run build
|
$STD bun run build
|
||||||
APP_VERSION=$(grep -o '"version": *"[^"]*"' package.json | cut -d'"' -f4)
|
APP_VERSION=$(grep -o '"version": *"[^"]*"' package.json | cut -d'"' -f4)
|
||||||
sudo sed -i.bak "s|^Environment=npm_package_version=.*|Environment=npm_package_version=${APP_VERSION}|" /etc/systemd/system/gitea-mirror.service
|
sudo sed -i.bak "s|^Environment=npm_package_version=.*|Environment=npm_package_version=${APP_VERSION}|" /etc/systemd/system/gitea-mirror.service
|
||||||
msg_ok "Updated and rebuilt ${APP} to v${RELEASE}"
|
msg_ok "Updated and rebuilt ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
msg_info "Restoring Data"
|
msg_info "Restoring Data"
|
||||||
cp /opt/gitea-mirror-backup/data/* /opt/gitea-mirror/data
|
cp /opt/gitea-mirror-backup/data/* /opt/gitea-mirror/data
|
||||||
|
|||||||
@@ -29,10 +29,11 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
|
RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
|
||||||
msg_info "Updating $APP to ${RELEASE}"
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o $(basename "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64")
|
FILENAME="gitea-$RELEASE-linux-amd64"
|
||||||
|
curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o $FILENAME
|
||||||
systemctl stop gitea
|
systemctl stop gitea
|
||||||
rm -rf /usr/local/bin/gitea
|
rm -rf /usr/local/bin/gitea
|
||||||
mv gitea* /usr/local/bin/gitea
|
mv $FILENAME /usr/local/bin/gitea
|
||||||
chmod +x /usr/local/bin/gitea
|
chmod +x /usr/local/bin/gitea
|
||||||
systemctl start gitea
|
systemctl start gitea
|
||||||
msg_ok "Updated $APP Successfully"
|
msg_ok "Updated $APP Successfully"
|
||||||
|
|||||||
6
ct/headers/alpine-forgejo
Normal file
6
ct/headers/alpine-forgejo
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
___ __ _ ______ _
|
||||||
|
/ | / /___ (_)___ ___ / ____/___ _________ ____ (_)___
|
||||||
|
/ /| | / / __ \/ / __ \/ _ \______/ /_ / __ \/ ___/ __ `/ _ \ / / __ \
|
||||||
|
/ ___ |/ / /_/ / / / / / __/_____/ __/ / /_/ / / / /_/ / __/ / / /_/ /
|
||||||
|
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \____/_/ \__, /\___/_/ /\____/
|
||||||
|
/_/ /____/ /___/
|
||||||
6
ct/headers/huntarr
Normal file
6
ct/headers/huntarr
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__ __
|
||||||
|
/ /_ __ ______ / /_____ ___________
|
||||||
|
/ __ \/ / / / __ \/ __/ __ `/ ___/ ___/
|
||||||
|
/ / / / /_/ / / / / /_/ /_/ / / / /
|
||||||
|
/_/ /_/\__,_/_/ /_/\__/\__,_/_/ /_/
|
||||||
|
|
||||||
6
ct/headers/planka
Normal file
6
ct/headers/planka
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ __ ___ _ ____ __ ___
|
||||||
|
/ __ \/ / / | / | / / //_// |
|
||||||
|
/ /_/ / / / /| | / |/ / ,< / /| |
|
||||||
|
/ ____/ /___/ ___ |/ /| / /| |/ ___ |
|
||||||
|
/_/ /_____/_/ |_/_/ |_/_/ |_/_/ |_|
|
||||||
|
|
||||||
6
ct/headers/wizarr
Normal file
6
ct/headers/wizarr
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
_ ___
|
||||||
|
| | / (_)___ ____ ___________
|
||||||
|
| | /| / / /_ / / __ `/ ___/ ___/
|
||||||
|
| |/ |/ / / / /_/ /_/ / / / /
|
||||||
|
|__/|__/_/ /___/\__,_/_/ /_/
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ EOF
|
|||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/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 [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
|
||||||
|
|
||||||
msg_info "Stopping Services (Patience)"
|
msg_info "Stopping Services (Patience)"
|
||||||
systemctl stop homarr
|
systemctl stop homarr
|
||||||
@@ -100,10 +100,10 @@ EOF
|
|||||||
$STD command -v jq || $STD apt-get update && $STD apt-get install -y jq
|
$STD command -v jq || $STD apt-get update && $STD apt-get install -y jq
|
||||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||||
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
|
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
|
||||||
install_node_and_modules
|
setup_nodejs
|
||||||
|
|
||||||
rm -rf /opt/homarr
|
rm -rf /opt/homarr
|
||||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr"
|
||||||
|
|
||||||
msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
|
msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
|
||||||
rm /opt/run_homarr.sh
|
rm /opt/run_homarr.sh
|
||||||
|
|||||||
63
ct/huntarr.sh
Normal file
63
ct/huntarr.sh
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/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: BiluliB
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/plexguide/Huntarr.io
|
||||||
|
|
||||||
|
APP="huntarr"
|
||||||
|
var_tags="${var_tags:-arr}"
|
||||||
|
var_cpu="${var_cpu:-2}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
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 /opt/huntarr/main.py ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/plexguide/Huntarr.io/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
||||||
|
if [[ -f ~/.huntarr && "${RELEASE}" == "$(cat ~/.huntarr)" ]]; then
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Stopping huntarr service"
|
||||||
|
systemctl stop huntarr
|
||||||
|
msg_ok "Stopped huntarr service"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "huntarr" "plexguide/Huntarr.io"
|
||||||
|
msg_info "Configuring $APP"
|
||||||
|
cd /opt/huntarr
|
||||||
|
$STD uv pip install -r requirements.txt --python /opt/huntarr/.venv/bin/python
|
||||||
|
msg_ok "Configured $APP"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start huntarr
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
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}:9705${CL}"
|
||||||
242
ct/immich.sh
242
ct/immich.sh
@@ -27,9 +27,13 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
|
||||||
STAGING_DIR=/opt/staging
|
STAGING_DIR=/opt/staging
|
||||||
BASE_DIR=${STAGING_DIR}/base-images
|
BASE_DIR=${STAGING_DIR}/base-images
|
||||||
SOURCE_DIR=${STAGING_DIR}/image-source
|
SOURCE_DIR=${STAGING_DIR}/image-source
|
||||||
|
cd /root
|
||||||
if [[ -f ~/.intel_version ]]; then
|
if [[ -f ~/.intel_version ]]; then
|
||||||
curl -fsSLO https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile
|
curl -fsSLO https://raw.githubusercontent.com/immich-app/immich/refs/heads/main/machine-learning/Dockerfile
|
||||||
readarray -t INTEL_URLS < <(sed -n "/intel/p" ./Dockerfile | awk '{print $3}')
|
readarray -t INTEL_URLS < <(sed -n "/intel/p" ./Dockerfile | awk '{print $3}')
|
||||||
@@ -39,7 +43,7 @@ function update_script() {
|
|||||||
for url in "${INTEL_URLS[@]}"; do
|
for url in "${INTEL_URLS[@]}"; do
|
||||||
curl -fsSLO "$url"
|
curl -fsSLO "$url"
|
||||||
done
|
done
|
||||||
$STD dpkg -i ./*.deb
|
$STD apt install -y ./*.deb
|
||||||
rm ./*.deb
|
rm ./*.deb
|
||||||
msg_ok "Intel iGPU dependencies updated"
|
msg_ok "Intel iGPU dependencies updated"
|
||||||
fi
|
fi
|
||||||
@@ -176,135 +180,115 @@ function update_script() {
|
|||||||
msg_ok "Image-processing libraries compiled"
|
msg_ok "Image-processing libraries compiled"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -s 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 [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
|
||||||
msg_info "Stopping ${APP} services"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
systemctl stop immich-web
|
exit
|
||||||
systemctl stop immich-ml
|
|
||||||
msg_ok "Stopped ${APP}"
|
|
||||||
if [[ "$(cat /opt/${APP}_version.txt)" < "1.133.0" ]]; then
|
|
||||||
msg_info "Upgrading to the VectorChord PostgreSQL extension"
|
|
||||||
NUMBER="$(
|
|
||||||
sed -n '2p' <(
|
|
||||||
sudo -u postgres psql -A -d immich <<EOF
|
|
||||||
SELECT atttypmod as dimsize
|
|
||||||
FROM pg_attribute f
|
|
||||||
JOIN pg_class c ON c.oid = f.attrelid
|
|
||||||
WHERE c.relkind = 'r'::char
|
|
||||||
AND f.attnum > 0
|
|
||||||
AND c.relname = 'smart_search'::text
|
|
||||||
AND f.attname = 'embedding'::text;
|
|
||||||
EOF
|
|
||||||
)
|
|
||||||
)"
|
|
||||||
$STD sudo -u postgres psql -d immich <<EOF
|
|
||||||
DROP INDEX IF EXISTS clip_index;
|
|
||||||
DROP INDEX IF EXISTS face_index;
|
|
||||||
ALTER TABLE smart_search ALTER COLUMN embedding SET DATA TYPE real[];
|
|
||||||
ALTER TABLE face_search ALTER COLUMN embedding SET DATA TYPE real[];
|
|
||||||
EOF
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get install postgresql-16-pgvector -y
|
|
||||||
curl -fsSL https://github.com/tensorchord/VectorChord/releases/download/0.3.0/postgresql-16-vchord_0.3.0-1_amd64.deb -o vchord.deb
|
|
||||||
$STD dpkg -i vchord.deb
|
|
||||||
rm vchord.deb
|
|
||||||
sed -i "s|vectors.so|vchord.so|" /etc/postgresql/16/main/postgresql.conf
|
|
||||||
systemctl restart postgresql.service
|
|
||||||
$STD sudo -u postgres psql -d immich <<EOF
|
|
||||||
CREATE EXTENSION IF NOT EXISTS vchord CASCADE;
|
|
||||||
ALTER TABLE smart_search ALTER COLUMN embedding SET DATA TYPE vector($NUMBER);
|
|
||||||
ALTER TABLE face_search ALTER COLUMN embedding SET DATA TYPE vector(512);
|
|
||||||
EOF
|
|
||||||
$STD apt purge vectors-pg16 -y
|
|
||||||
msg_ok "Database upgrade complete"
|
|
||||||
fi
|
|
||||||
INSTALL_DIR="/opt/${APP}"
|
|
||||||
UPLOAD_DIR="$(sed -n '/^IMMICH_MEDIA_LOCATION/s/[^=]*=//p' /opt/immich/.env)"
|
|
||||||
SRC_DIR="${INSTALL_DIR}/source"
|
|
||||||
APP_DIR="${INSTALL_DIR}/app"
|
|
||||||
ML_DIR="${APP_DIR}/machine-learning"
|
|
||||||
GEO_DIR="${INSTALL_DIR}/geodata"
|
|
||||||
cp "$ML_DIR"/ml_start.sh "$INSTALL_DIR"
|
|
||||||
rm -rf "${APP_DIR:?}"/*
|
|
||||||
rm -rf "$SRC_DIR"
|
|
||||||
immich_zip=$(mktemp)
|
|
||||||
curl -fsSL "https://github.com/immich-app/immich/archive/refs/tags/v${RELEASE}.zip" -o "$immich_zip"
|
|
||||||
msg_info "Updating ${APP} web and microservices"
|
|
||||||
unzip -q "$immich_zip"
|
|
||||||
mv "$APP-$RELEASE"/ "$SRC_DIR"
|
|
||||||
mkdir -p "$ML_DIR"
|
|
||||||
cd "$SRC_DIR"/server
|
|
||||||
$STD npm install -g node-gyp node-pre-gyp
|
|
||||||
$STD npm ci
|
|
||||||
$STD npm run build
|
|
||||||
$STD npm prune --omit=dev --omit=optional
|
|
||||||
cd "$SRC_DIR"/open-api/typescript-sdk
|
|
||||||
$STD npm ci
|
|
||||||
$STD npm run build
|
|
||||||
cd "$SRC_DIR"/web
|
|
||||||
$STD npm ci
|
|
||||||
$STD npm run build
|
|
||||||
cd "$SRC_DIR"
|
|
||||||
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
|
|
||||||
cp -a web/build "$APP_DIR"/www
|
|
||||||
cp LICENSE "$APP_DIR"
|
|
||||||
msg_ok "Updated ${APP} web and microservices"
|
|
||||||
|
|
||||||
cd "$SRC_DIR"/machine-learning
|
|
||||||
$STD python3 -m venv "$ML_DIR"/ml-venv
|
|
||||||
if [[ -f ~/.openvino ]]; then
|
|
||||||
msg_info "Updating HW-accelerated machine-learning"
|
|
||||||
(
|
|
||||||
source "$ML_DIR"/ml-venv/bin/activate
|
|
||||||
$STD pip3 install -U uv
|
|
||||||
uv -q sync --extra openvino --no-cache --active
|
|
||||||
)
|
|
||||||
patchelf --clear-execstack "$ML_DIR"/ml-venv/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so
|
|
||||||
msg_ok "Updated HW-accelerated machine-learning"
|
|
||||||
else
|
|
||||||
msg_info "Updating machine-learning"
|
|
||||||
(
|
|
||||||
source "$ML_DIR"/ml-venv/bin/activate
|
|
||||||
$STD pip3 install -U uv
|
|
||||||
uv -q sync --extra cpu --no-cache --active
|
|
||||||
)
|
|
||||||
msg_ok "Updated machine-learning"
|
|
||||||
fi
|
|
||||||
cd "$SRC_DIR"
|
|
||||||
cp -a machine-learning/{ann,immich_ml} "$ML_DIR"
|
|
||||||
cp "$INSTALL_DIR"/ml_start.sh "$ML_DIR"
|
|
||||||
if [[ -f ~/.openvino ]]; then
|
|
||||||
sed -i "/intra_op/s/int = 0/int = os.cpu_count() or 0/" "$ML_DIR"/immich_ml/config.py
|
|
||||||
fi
|
|
||||||
ln -sf "$APP_DIR"/resources "$INSTALL_DIR"
|
|
||||||
cd "$APP_DIR"
|
|
||||||
grep -Rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
|
|
||||||
grep -RlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
|
|
||||||
sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
|
|
||||||
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload
|
|
||||||
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
|
|
||||||
ln -s "$GEO_DIR" "$APP_DIR"
|
|
||||||
|
|
||||||
msg_info "Updating Immich CLI"
|
|
||||||
$STD npm install --build-from-source sharp
|
|
||||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
|
||||||
$STD npm i -g @immich/cli
|
|
||||||
msg_ok "Updated Immich CLI"
|
|
||||||
|
|
||||||
sed -i "s|pgvecto.rs|vectorchord|" /opt/"${APP}"/.env
|
|
||||||
|
|
||||||
chown -R immich:immich "$INSTALL_DIR"
|
|
||||||
echo "$RELEASE" >/opt/"${APP}"_version.txt
|
|
||||||
msg_ok "Updated ${APP} to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -f "$immich_zip"
|
|
||||||
$STD apt-get -y autoremove
|
|
||||||
$STD apt-get -y autoclean
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
else
|
|
||||||
msg_ok "${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
|
msg_info "Stopping ${APP} services"
|
||||||
|
systemctl stop immich-web
|
||||||
|
systemctl stop immich-ml
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
INSTALL_DIR="/opt/${APP}"
|
||||||
|
UPLOAD_DIR="$(sed -n '/^IMMICH_MEDIA_LOCATION/s/[^=]*=//p' /opt/immich/.env)"
|
||||||
|
SRC_DIR="${INSTALL_DIR}/source"
|
||||||
|
APP_DIR="${INSTALL_DIR}/app"
|
||||||
|
ML_DIR="${APP_DIR}/machine-learning"
|
||||||
|
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) }')"
|
||||||
|
|
||||||
|
if [[ ! -f ~/.vchord_version ]] || [[ "$VCHORD_RELEASE" != "$(cat ~/.vchord_version)" ]]; then
|
||||||
|
msg_info "Updating VectorChord"
|
||||||
|
if [[ ! -f ~/.vchord_version ]] || [[ ! "$(cat ~/.vchord_version)" > "0.3.0" ]]; then
|
||||||
|
$STD sudo -u postgres pg_dumpall --clean --if-exists --username=postgres | gzip >/etc/postgresql/immich-db-vchord0.3.0.sql.gz
|
||||||
|
chown postgres /etc/postgresql/immich-db-vchord0.3.0.sql.gz
|
||||||
|
$STD sudo -u postgres gunzip --stdout /etc/postgresql/immich-db-vchord0.3.0.sql.gz |
|
||||||
|
sed -e "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
|
||||||
|
-e "/vchordrq.prewarm_dim/d" |
|
||||||
|
sudo -u postgres psql
|
||||||
|
fi
|
||||||
|
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 sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;"
|
||||||
|
systemctl restart postgresql
|
||||||
|
if [[ ! -f ~/.vchord_version ]] || [[ ! "$(cat ~/.vchord_version)" > "0.3.0" ]]; then
|
||||||
|
$STD sudo -u postgres psql -d immich -c "REINDEX DATABASE;"
|
||||||
|
fi
|
||||||
|
echo "$VCHORD_RELEASE" >~/.vchord_version
|
||||||
|
rm ./vchord.deb
|
||||||
|
msg_ok "Updated VectorChord to v${VCHORD_RELEASE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp "$ML_DIR"/ml_start.sh "$INSTALL_DIR"
|
||||||
|
rm -rf "${APP_DIR:?}"/*
|
||||||
|
mkdir -p "$ML_DIR"
|
||||||
|
rm -rf "$SRC_DIR"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "latest" "$SRC_DIR"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} web and microservices"
|
||||||
|
cd "$SRC_DIR"/server
|
||||||
|
if [[ "$RELEASE" == "1.135.1" ]]; then
|
||||||
|
rm ./src/schema/migrations/1750323941566-UnsetPrewarmDimParameter.ts
|
||||||
|
fi
|
||||||
|
$STD npm install -g node-gyp node-pre-gyp
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run build
|
||||||
|
$STD npm prune --omit=dev --omit=optional
|
||||||
|
cd "$SRC_DIR"/open-api/typescript-sdk
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run build
|
||||||
|
cd "$SRC_DIR"/web
|
||||||
|
$STD npm ci
|
||||||
|
$STD npm run build
|
||||||
|
cd "$SRC_DIR"
|
||||||
|
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
|
||||||
|
cp -a web/build "$APP_DIR"/www
|
||||||
|
cp LICENSE "$APP_DIR"
|
||||||
|
msg_ok "Updated ${APP} web and microservices"
|
||||||
|
|
||||||
|
cd "$SRC_DIR"/machine-learning
|
||||||
|
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
|
||||||
|
$STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
|
||||||
|
if [[ -f ~/.openvino ]]; then
|
||||||
|
msg_info "Updating HW-accelerated machine-learning"
|
||||||
|
/usr/local/bin/uv -q sync --extra openvino --no-cache --active
|
||||||
|
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so"
|
||||||
|
msg_ok "Updated HW-accelerated machine-learning"
|
||||||
|
else
|
||||||
|
msg_info "Updating machine-learning"
|
||||||
|
/usr/local/bin/uv -q sync --extra cpu --no-cache --active
|
||||||
|
msg_ok "Updated machine-learning"
|
||||||
|
fi
|
||||||
|
cd "$SRC_DIR"
|
||||||
|
cp -a machine-learning/{ann,immich_ml} "$ML_DIR"
|
||||||
|
mv "$INSTALL_DIR"/ml_start.sh "$ML_DIR"
|
||||||
|
if [[ -f ~/.openvino ]]; then
|
||||||
|
sed -i "/intra_op/s/int = 0/int = os.cpu_count() or 0/" "$ML_DIR"/immich_ml/config.py
|
||||||
|
fi
|
||||||
|
ln -sf "$APP_DIR"/resources "$INSTALL_DIR"
|
||||||
|
cd "$APP_DIR"
|
||||||
|
grep -Rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
|
||||||
|
grep -RlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
|
||||||
|
sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
|
||||||
|
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload
|
||||||
|
ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
|
||||||
|
ln -s "$GEO_DIR" "$APP_DIR"
|
||||||
|
|
||||||
|
msg_info "Updating Immich CLI"
|
||||||
|
$STD npm install --build-from-source sharp
|
||||||
|
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
|
||||||
|
$STD npm i -g @immich/cli
|
||||||
|
msg_ok "Updated Immich CLI"
|
||||||
|
|
||||||
|
chown -R immich:immich "$INSTALL_DIR"
|
||||||
|
echo "$RELEASE" >/opt/"${APP}"_version.txt
|
||||||
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
systemctl restart immich-ml immich-web
|
systemctl restart immich-ml immich-web
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,10 +53,10 @@ function update_script() {
|
|||||||
|
|
||||||
if [ -z "$pnpm_current" ]; then
|
if [ -z "$pnpm_current" ]; then
|
||||||
msg_error "pnpm not found. Installing version $pnpm_desired..."
|
msg_error "pnpm not found. Installing version $pnpm_desired..."
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs
|
||||||
elif ! node -e "const semver = require('semver'); process.exit(semver.satisfies('$pnpm_current', '$pnpm_desired') ? 0 : 1)"; then
|
elif ! node -e "const semver = require('semver'); process.exit(semver.satisfies('$pnpm_current', '$pnpm_desired') ? 0 : 1)"; then
|
||||||
msg_error "Updating pnpm from version $pnpm_current to $pnpm_desired..."
|
msg_error "Updating pnpm from version $pnpm_current to $pnpm_desired..."
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs
|
||||||
else
|
else
|
||||||
msg_ok "pnpm is already installed and satisfies version $pnpm_desired."
|
msg_ok "pnpm is already installed and satisfies version $pnpm_desired."
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -20,16 +20,53 @@ 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
|
||||||
|
|
||||||
msg_info "Updating ${APP} LXC"
|
INSTALL_DIR="/opt/jupyter"
|
||||||
$STD apt-get update
|
VENV_PYTHON="${INSTALL_DIR}/.venv/bin/python"
|
||||||
$STD apt-get install -y upgrade
|
VENV_JUPYTER="${INSTALL_DIR}/.venv/bin/jupyter"
|
||||||
$STD pip3 install jupyter --upgrade
|
SERVICE_FILE="/etc/systemd/system/jupyternotebook.service"
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
exit
|
if [[ ! -x "$VENV_JUPYTER" ]]; then
|
||||||
|
msg_info "Migrating to uv venv"
|
||||||
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
|
mkdir -p "$INSTALL_DIR"
|
||||||
|
cd "$INSTALL_DIR"
|
||||||
|
$STD uv venv .venv
|
||||||
|
$STD "$VENV_PYTHON" -m ensurepip --upgrade
|
||||||
|
$STD "$VENV_PYTHON" -m pip install --upgrade pip
|
||||||
|
$STD "$VENV_PYTHON" -m pip install jupyter
|
||||||
|
msg_ok "Migrated to uv and installed Jupyter"
|
||||||
|
else
|
||||||
|
msg_info "Updating Jupyter"
|
||||||
|
$STD "$VENV_PYTHON" -m pip install --upgrade pip
|
||||||
|
$STD "$VENV_PYTHON" -m pip install --upgrade jupyter
|
||||||
|
msg_ok "Jupyter updated"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -f "$SERVICE_FILE" && "$(grep ExecStart "$SERVICE_FILE")" != *".venv/bin/jupyter"* ]]; then
|
||||||
|
msg_info "Updating systemd service to use .venv"
|
||||||
|
cat <<EOF >"$SERVICE_FILE"
|
||||||
|
[Unit]
|
||||||
|
Description=Jupyter Notebook Server
|
||||||
|
After=network.target
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=${INSTALL_DIR}
|
||||||
|
ExecStart=${VENV_JUPYTER} notebook --ip=0.0.0.0 --port=8888 --allow-root
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl daemon-reexec
|
||||||
|
systemctl restart jupyternotebook
|
||||||
|
msg_ok "Service updated and restarted"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
@@ -39,4 +76,4 @@ 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} 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}:8888${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8888${CL}"
|
||||||
|
|||||||
@@ -28,17 +28,17 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/linkwarden_version.txt)" ]] || [[ ! -f /opt/linkwarden_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat /opt/linkwarden_version.txt)" ]] || [[ ! -f /opt/linkwarden_version.txt ]]; then
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop linkwarden
|
systemctl stop linkwarden
|
||||||
msg_ok "Stopped ${APP}"
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
RUST_CRATES="monolith" install_rust_and_crates
|
RUST_CRATES="monolith" setup_rust
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
msg_info "Updating ${APP} to ${RELEASE}"
|
||||||
mv /opt/linkwarden/.env /opt/.env
|
mv /opt/linkwarden/.env /opt/.env
|
||||||
rm -rf /opt/linkwarden
|
rm -rf /opt/linkwarden
|
||||||
fetch_and_deploy_gh_release "linkwarden/linkwarden"
|
fetch_and_deploy_gh_release "linkwarden" "linkwarden/linkwarden"
|
||||||
cd /opt/linkwarden
|
cd /opt/linkwarden
|
||||||
$STD yarn
|
$STD yarn
|
||||||
$STD npx playwright install-deps
|
$STD npx playwright install-deps
|
||||||
|
|||||||
@@ -20,19 +20,17 @@ 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 /root/Matterbridge ]]; then
|
if [[ ! -d /root/Matterbridge ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
$STD apt-get update
|
|
||||||
$STD apt-get upgrade -y
|
|
||||||
NODE_VERSION="22"
|
|
||||||
NODE_MODULE="matterbridge"
|
|
||||||
install_node_and_modules
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get upgrade -y
|
||||||
|
NODE_VERSION="22" NODE_MODULE="matterbridge" setup_nodejs
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
77
ct/planka.sh
Normal file
77
ct/planka.sh
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/refs/heads/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/plankanban/planka
|
||||||
|
|
||||||
|
APP="PLANKA"
|
||||||
|
var_tags="${var_tags:-Todo,kanban}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
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/planka.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/plankanban/planka/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.planka 2>/dev/null)" ]] || [[ ! -f ~/.planka ]]; then
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop planka
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
|
mkdir -p /opt/planka-backup
|
||||||
|
mkdir -p /opt/planka-backup/favicons
|
||||||
|
mkdir -p /opt/planka-backup/user-avatars
|
||||||
|
mkdir -p /opt/planka-backup/background-images
|
||||||
|
mkdir -p /opt/planka-backup/attachments
|
||||||
|
mv /opt/planka/planka/.env /opt/planka-backup
|
||||||
|
[ -n "$(ls -A /opt/planka/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/planka/public/favicons/* /opt/planka-backup/favicons/
|
||||||
|
[ -n "$(ls -A /opt/planka/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/planka/public/user-avatars/* /opt/planka-backup/user-avatars/
|
||||||
|
[ -n "$(ls -A /opt/planka/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/planka/public/background-images/* /opt/planka-backup/background-images/
|
||||||
|
[ -n "$(ls -A /opt/planka/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/planka/private/attachments/* /opt/planka-backup/attachments/
|
||||||
|
rm -rf /opt/planka
|
||||||
|
fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
|
||||||
|
cd /opt/planka/planka
|
||||||
|
$STD npm install
|
||||||
|
mv /opt/planka-backup/.env /opt/planka/planka/
|
||||||
|
[ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/planka/public/favicons/
|
||||||
|
[ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/planka/public/user-avatars/
|
||||||
|
[ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/planka/public/background-images/
|
||||||
|
[ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/planka/private/attachments/
|
||||||
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start planka
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:1337${CL}"
|
||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if fetch_and_deploy_gh_release "YuukanOO/seelf"; then
|
if fetch_and_deploy_gh_release "seelf" "YuukanOO/seelf"; then
|
||||||
msg_ok "$APP already at the latest version. No update required."
|
msg_ok "$APP already at the latest version. No update required."
|
||||||
else
|
else
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
|
|||||||
@@ -30,9 +30,9 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/CrazyWolf13/streamlink-webui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/CrazyWolf13/streamlink-webui/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 ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
|
||||||
msg_info "Starting Update"
|
msg_info "Starting Update"
|
||||||
|
|
||||||
msg_info "Stopping $APP"
|
msg_info "Stopping $APP"
|
||||||
systemctl stop ${APP}
|
systemctl stop ${APP}
|
||||||
msg_ok "Stopped $APP"
|
msg_ok "Stopped $APP"
|
||||||
@@ -40,9 +40,9 @@ function update_script() {
|
|||||||
rm -rf /opt/${APP}
|
rm -rf /opt/${APP}
|
||||||
NODE_VERSION="22"
|
NODE_VERSION="22"
|
||||||
NODE_MODULE="npm,yarn"
|
NODE_MODULE="npm,yarn"
|
||||||
install_node_and_modules
|
setup_nodejs
|
||||||
setup_uv
|
setup_uv
|
||||||
fetch_and_deploy_gh_release "CrazyWolf13/streamlink-webui"
|
fetch_and_deploy_gh_release "streamlink-webui" "CrazyWolf13/streamlink-webui"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
$STD uv venv /opt/"${APP}"/backend/src/.venv
|
$STD uv venv /opt/"${APP}"/backend/src/.venv
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ function update_script() {
|
|||||||
if dpkg -l | grep -q "openjdk-17-jre"; then
|
if dpkg -l | grep -q "openjdk-17-jre"; then
|
||||||
$STD apt-get remove -y openjdk-17-jre
|
$STD apt-get remove -y openjdk-17-jre
|
||||||
fi
|
fi
|
||||||
JAVA_VERSION=21 install_java
|
JAVA_VERSION=21 setup_java
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/suwayomi-server_version.txt)" ]] || [[ ! -f /opt/suwayomi-server_version.txt ]]; then
|
if [[ "${RELEASE}" != "$(cat /opt/suwayomi-server_version.txt)" ]] || [[ ! -f /opt/suwayomi-server_version.txt ]]; then
|
||||||
msg_info "Updating $APP"
|
msg_info "Updating $APP"
|
||||||
|
|||||||
@@ -29,38 +29,55 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi
|
if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
if [[ "v${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if [[ "v${RELEASE}" != "$(cat /opt/${APP}_version.txt 2>/dev/null)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||||
msg_info "Stopping ${APP}"
|
|
||||||
systemctl stop trilium
|
if [[ -d /opt/trilium/db ]]; then
|
||||||
sleep 1
|
DB_PATH="/opt/trilium/db"
|
||||||
msg_ok "Stopped ${APP}"
|
DB_RESTORE_PATH="/opt/trilium/db"
|
||||||
|
elif [[ -d /opt/trilium/assets/db ]]; then
|
||||||
msg_info "Updating to ${RELEASE}"
|
DB_PATH="/opt/trilium/assets/db"
|
||||||
mkdir -p /opt/trilium_backup
|
DB_RESTORE_PATH="/opt/trilium/assets/db"
|
||||||
mv /opt/trilium/db /opt/trilium_backup/
|
|
||||||
rm -rf /opt/trilium
|
|
||||||
cd /tmp
|
|
||||||
curl -fsSL "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o $(basename "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz")
|
|
||||||
tar -xf TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz
|
|
||||||
mv TriliumNextNotes-Server-$RELEASE-linux-x64 /opt/trilium
|
|
||||||
cp -r /opt/trilium_backup/db /opt/trilium/
|
|
||||||
echo "v${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated to ${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
|
||||||
rm -rf /tmp/TriliumNextNotes-Server-${RELEASE}-linux-x64.tar.xz
|
|
||||||
rm -rf /opt/trilium_backup
|
|
||||||
msg_ok "Cleaned"
|
|
||||||
|
|
||||||
msg_info "Starting ${APP}"
|
|
||||||
systemctl start trilium
|
|
||||||
sleep 1
|
|
||||||
msg_ok "Started ${APP}"
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_error "Database not found in either /opt/trilium/db or /opt/trilium/assets/db"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
exit
|
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
systemctl stop trilium
|
||||||
|
sleep 1
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
msg_info "Updating to ${RELEASE}"
|
||||||
|
mkdir -p /opt/trilium_backup
|
||||||
|
cp -r "${DB_PATH}" /opt/trilium_backup/
|
||||||
|
rm -rf /opt/trilium
|
||||||
|
cd /tmp
|
||||||
|
curl -fsSL "https://github.com/TriliumNext/trilium/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz"
|
||||||
|
tar -xf "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz"
|
||||||
|
mv "TriliumNextNotes-Server-${RELEASE}-linux-x64" /opt/trilium
|
||||||
|
|
||||||
|
# Restore database
|
||||||
|
mkdir -p "$(dirname "${DB_RESTORE_PATH}")"
|
||||||
|
cp -r /opt/trilium_backup/$(basename "${DB_PATH}") "${DB_RESTORE_PATH}"
|
||||||
|
|
||||||
|
echo "v${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated to ${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf "/tmp/TriliumNextNotes-Server-${RELEASE}-linux-x64.tar.xz"
|
||||||
|
rm -rf /opt/trilium_backup
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start trilium
|
||||||
|
sleep 1
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
79
ct/wizarr.sh
Normal file
79
ct/wizarr.sh
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
#!/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: vhsdream
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/wizarrrr/wizarr
|
||||||
|
|
||||||
|
APP="Wizarr"
|
||||||
|
var_tags="${var_tags:-media;arr}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-1024}"
|
||||||
|
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 [[ ! -d /opt/wizarr ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/wizarrrr/wizarr/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat ~/.wizarr 2>/dev/null)" ]] || [[ ! -f ~/.wizarr ]]; then
|
||||||
|
msg_info "Stopping $APP"
|
||||||
|
systemctl stop wizarr
|
||||||
|
msg_ok "Stopped $APP"
|
||||||
|
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
BACKUP_FILE="/opt/wizarr_backup_$(date +%F).tar.gz"
|
||||||
|
$STD tar -czf "$BACKUP_FILE" /opt/wizarr/{.env,start.sh} /opt/wizarr/database/ &>/dev/null
|
||||||
|
msg_ok "Backup Created"
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
fetch_and_deploy_gh_release "wizarr" "wizarrrr/wizarr"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
cd /opt/wizarr
|
||||||
|
uv -q sync --locked
|
||||||
|
$STD uv -q run pybabel compile -d app/translations
|
||||||
|
$STD npm --prefix app/static install
|
||||||
|
$STD npm --prefix app/static run build:css
|
||||||
|
mkdir -p ./.cache
|
||||||
|
$STD tar -xf "$BACKUP_FILE" --directory=/
|
||||||
|
$STD uv -q run flask db upgrade
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting $APP"
|
||||||
|
systemctl start wizarr
|
||||||
|
msg_ok "Started $APP"
|
||||||
|
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf "$BACKUP_FILE"
|
||||||
|
rm /tmp/"$RELEASE".zip
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
msg_ok "Update Successful"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5690${CL}"
|
||||||
6
frontend/public/json/add-iptag.json
generated
6
frontend/public/json/add-iptag.json
generated
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox VE LXC IP-Tag",
|
"name": "Proxmox VE LXC Tag",
|
||||||
"slug": "add-iptag",
|
"slug": "add-iptag",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
@@ -12,8 +12,8 @@
|
|||||||
"documentation": null,
|
"documentation": null,
|
||||||
"website": null,
|
"website": null,
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/proxmox.svg",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/proxmox.svg",
|
||||||
"config_path": "",
|
"config_path": "/opt/iptag/iptag.conf",
|
||||||
"description": "This script automatically adds IP address as tags to LXC containers using a Systemd service. The service also updates the tags if a LXC IP address is changed.",
|
"description": "This script automatically adds IP address as tags to LXC containers or VM's using a systemd service. The service also updates the tags if a LXC/VM IP address is changed.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
|
|||||||
2
frontend/public/json/alpine.json
generated
2
frontend/public/json/alpine.json
generated
@@ -21,7 +21,7 @@
|
|||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 1,
|
"cpu": 1,
|
||||||
"ram": 512,
|
"ram": 512,
|
||||||
"hdd": 0.5,
|
"hdd": 1,
|
||||||
"os": "alpine",
|
"os": "alpine",
|
||||||
"version": "3.21"
|
"version": "3.21"
|
||||||
}
|
}
|
||||||
|
|||||||
2
frontend/public/json/argus.json
generated
2
frontend/public/json/argus.json
generated
@@ -8,7 +8,7 @@
|
|||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 8080,
|
||||||
"documentation": "https://release-argus.io/docs/overview/",
|
"documentation": "https://release-argus.io/docs/overview/",
|
||||||
"website": "https://release-argus.io/",
|
"website": "https://release-argus.io/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/argus.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/argus.webp",
|
||||||
|
|||||||
2
frontend/public/json/cloudflare-ddns.json
generated
2
frontend/public/json/cloudflare-ddns.json
generated
@@ -37,7 +37,7 @@
|
|||||||
"type": "warning"
|
"type": "warning"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"text": "To update the configuration edit `/etc/systemd/system/cloudflare-ddns.service`. After edit please restard with `systemctl restart cloudflare-ddns`",
|
"text": "To update the configuration edit `/etc/systemd/system/cloudflare-ddns.service`. After edit please restart with `systemctl restart cloudflare-ddns`",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
47
frontend/public/json/filebrowser-quantum.json
generated
Normal file
47
frontend/public/json/filebrowser-quantum.json
generated
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"name": "FileBrowser Quantum",
|
||||||
|
"slug": "filebrowser-quantum",
|
||||||
|
"categories": [
|
||||||
|
1,
|
||||||
|
11
|
||||||
|
],
|
||||||
|
"date_created": "2025-06-18",
|
||||||
|
"type": "addon",
|
||||||
|
"updateable": false,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8080,
|
||||||
|
"documentation": "https://github.com/gtsteffaniak/filebrowser/wiki/Getting-Started",
|
||||||
|
"website": "https://github.com/gtsteffaniak/filebrowser",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/filebrowser-quantum.webp",
|
||||||
|
"config_path": "/usr/local/community-scripts/fq-config.yaml",
|
||||||
|
"description": "FileBrowser Quantum provides an easy way to access and manage your files from the web. It has has a web page interface that allows you to create secure shared links, users with their own specific permissions and settings, and offers a great viewing experience for many file types. This version is called Quantum because it packs tons of advanced features into a tiny easy to run file. Unlike the majority of alternative options, FileBrowser Quantum is simple to install and easy to configure.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "tools/addon/filebrowser-quantum.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": null,
|
||||||
|
"ram": null,
|
||||||
|
"hdd": null,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "tools/addon/filebrowser-quantum.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": null,
|
||||||
|
"ram": null,
|
||||||
|
"hdd": null,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": "admin",
|
||||||
|
"password": "helper-scripts.com"
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
13
frontend/public/json/forgejo.json
generated
13
frontend/public/json/forgejo.json
generated
@@ -25,8 +25,19 @@
|
|||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "alpine",
|
||||||
|
"script": "ct/alpine-forgejo.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 256,
|
||||||
|
"hdd": 1,
|
||||||
|
"os": "alpine",
|
||||||
|
"version": "3.21"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
|
|||||||
6
frontend/public/json/gitea-mirror.json
generated
6
frontend/public/json/gitea-mirror.json
generated
@@ -19,9 +19,9 @@
|
|||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/gitea-mirror.sh",
|
"script": "ct/gitea-mirror.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 1,
|
"cpu": 2,
|
||||||
"ram": 1024,
|
"ram": 2048,
|
||||||
"hdd": 5,
|
"hdd": 6,
|
||||||
"os": "Debian",
|
"os": "Debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
|
|||||||
35
frontend/public/json/huntarr.json
generated
Normal file
35
frontend/public/json/huntarr.json
generated
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Huntarr",
|
||||||
|
"slug": "huntarr",
|
||||||
|
"categories": [
|
||||||
|
14
|
||||||
|
],
|
||||||
|
"date_created": "2025-06-18",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 9705,
|
||||||
|
"documentation": "https://github.com/plexguide/Huntarr.io/wiki",
|
||||||
|
"config_path": "/opt/huntarr",
|
||||||
|
"website": "https://github.com/plexguide/Huntarr.io",
|
||||||
|
"logo": "https://raw.githubusercontent.com/plexguide/Huntarr.io/refs/heads/main/frontend/static/logo/Huntarr.svg",
|
||||||
|
"description": "Huntarr is a tool that automates the search for missing or low-quality media content in your collection. It works seamlessly with applications like Sonarr, Radarr, Lidarr, Readarr, and Whisparr, enhancing their functionality with continuous background scans to identify and update missed or outdated content. Through a user-friendly web interface accessible on port 9705, Huntarr provides real-time statistics, log views, and extensive configuration options. The software is especially useful for users who want to keep their media library up to date by automatically searching for missing episodes or higher-quality versions. Huntarr is well-suited for self-hosted environments and can easily run in LXC containers or Docker setups.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/huntarr.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
4
frontend/public/json/immich.json
generated
4
frontend/public/json/immich.json
generated
@@ -43,6 +43,10 @@
|
|||||||
{
|
{
|
||||||
"text": "To change upload location, edit 'IMMICH_MEDIA_LOCATION' in `/opt/immich/.env`, and create the symlink 'upload' in /opt/immich/app & /opt/immich/app/machine-learning to your new upload location",
|
"text": "To change upload location, edit 'IMMICH_MEDIA_LOCATION' in `/opt/immich/.env`, and create the symlink 'upload' in /opt/immich/app & /opt/immich/app/machine-learning to your new upload location",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Logs: `/var/log/immich`",
|
||||||
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
2
frontend/public/json/libretranslate.json
generated
2
frontend/public/json/libretranslate.json
generated
@@ -12,7 +12,7 @@
|
|||||||
"documentation": "https://github.com/LibreTranslate/LibreTranslate?tab=readme-ov-file#settings--flags",
|
"documentation": "https://github.com/LibreTranslate/LibreTranslate?tab=readme-ov-file#settings--flags",
|
||||||
"website": "https://libretranslate.com/",
|
"website": "https://libretranslate.com/",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/libretranslate.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/libretranslate.webp",
|
||||||
"config_path": "",
|
"config_path": "/opt/libretranslate/.env",
|
||||||
"description": "Free and Open Source Machine Translation API, entirely self-hosted. Unlike other APIs, it doesn't rely on proprietary providers such as Google or Azure to perform translations. Instead, its translation engine is powered by the open source Argos Translate library.",
|
"description": "Free and Open Source Machine Translation API, entirely self-hosted. Unlike other APIs, it doesn't rely on proprietary providers such as Google or Azure to perform translations. Instead, its translation engine is powered by the open source Argos Translate library.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
|
|||||||
4
frontend/public/json/mariadb.json
generated
4
frontend/public/json/mariadb.json
generated
@@ -46,6 +46,10 @@
|
|||||||
{
|
{
|
||||||
"text": "This script requires some extra steps after the installation, Please checkout the 'documentation'",
|
"text": "This script requires some extra steps after the installation, Please checkout the 'documentation'",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Access Adminer Web UI at `http://<CONTAINER_IP>/adminer.php`",
|
||||||
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
40
frontend/public/json/planka.json
generated
Normal file
40
frontend/public/json/planka.json
generated
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "PLANKA",
|
||||||
|
"slug": "planka",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2025-06-19",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 1337,
|
||||||
|
"documentation": "https://docs.planka.cloud/",
|
||||||
|
"website": "https://planka.app/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/planka.webp",
|
||||||
|
"config_path": "/opt/planka/planka/.env",
|
||||||
|
"description": "Planka is a powerful, project management platform that transforms how teams collaborate. Create projects with multiple boards, organize tasks with intuitive drag-and-drop cards, attach files, write rich markdown descriptions, set due dates, assign team members, and keep conversations flowing with comments and labels—all with seamless real-time updates and smart notifications.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/planka.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Type `cat ~/planka.creds` inside LXC to see admin user and database credentials.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
2
frontend/public/json/trilium.json
generated
2
frontend/public/json/trilium.json
generated
@@ -10,7 +10,7 @@
|
|||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8080,
|
"interface_port": 8080,
|
||||||
"documentation": "https://triliumnext.github.io/Docs/",
|
"documentation": "https://triliumnext.github.io/Docs/",
|
||||||
"website": "https://github.com/TriliumNext/Notes",
|
"website": "https://github.com/TriliumNext/trilium",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/triliumnext.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/triliumnext.webp",
|
||||||
"config_path": "/root/trilium-data/config.ini",
|
"config_path": "/root/trilium-data/config.ini",
|
||||||
"description": "TriliumNext is an newer Fork of Trilium. TriliumNext is an open-source note-taking and personal knowledge management application. It allows users to organize and manage their notes, ideas, and information in a single place, using a hierarchical tree-like structure. Trilium offers a range of features, including rich text formatting, links, images, and attachments, making it easy to create and structure notes. The software is designed to be flexible and customizable, with a range of customization options and plugins available, including themes, export options, and more. Trilium is a self-hosted solution, and can be run on a local machine or a cloud-based server, providing users with full control over their notes and information.",
|
"description": "TriliumNext is an newer Fork of Trilium. TriliumNext is an open-source note-taking and personal knowledge management application. It allows users to organize and manage their notes, ideas, and information in a single place, using a hierarchical tree-like structure. Trilium offers a range of features, including rich text formatting, links, images, and attachments, making it easy to create and structure notes. The software is designed to be flexible and customizable, with a range of customization options and plugins available, including themes, export options, and more. Trilium is a self-hosted solution, and can be run on a local machine or a cloud-based server, providing users with full control over their notes and information.",
|
||||||
|
|||||||
40
frontend/public/json/ubuntu2504-vm.json
generated
Normal file
40
frontend/public/json/ubuntu2504-vm.json
generated
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "Ubuntu 25.04",
|
||||||
|
"slug": "ubuntu2504-vm",
|
||||||
|
"categories": [
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"date_created": "2025-06-19",
|
||||||
|
"type": "vm",
|
||||||
|
"updateable": false,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": null,
|
||||||
|
"website": "https://ubuntu.com/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/ubuntu.webp",
|
||||||
|
"config_path": "",
|
||||||
|
"description": "Ubuntu is a distribution based on Debian, designed to have regular releases and a consistent user experience.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "vm/ubuntu2504-vm.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "after installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
782
frontend/public/json/versions.json
generated
782
frontend/public/json/versions.json
generated
File diff suppressed because it is too large
Load Diff
36
frontend/public/json/wizarr.json
generated
Normal file
36
frontend/public/json/wizarr.json
generated
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"name": "Wizarr",
|
||||||
|
"slug": "wizarr",
|
||||||
|
"categories": [
|
||||||
|
14,
|
||||||
|
13
|
||||||
|
],
|
||||||
|
"date_created": "2025-06-19",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 5690,
|
||||||
|
"documentation": "https://docs.wizarr.dev/",
|
||||||
|
"website": "https://docs.wizarr.dev/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/wizarr.webp",
|
||||||
|
"config_path": "/opt/wizarr/.env",
|
||||||
|
"description": "Wizarr is an automatic user invitation system for Plex, Jellyfin and Emby. Create a unique link and share it to a user and they will automatically be invited to your media Server",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/wizarr.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -19,9 +19,9 @@ $STD apt-get install -y \
|
|||||||
nginx
|
nginx
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" install_php
|
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
|
||||||
install_composer
|
setup_composer
|
||||||
install_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Setting up Database"
|
msg_info "Setting up Database"
|
||||||
DB_NAME=2fauth_db
|
DB_NAME=2fauth_db
|
||||||
@@ -38,7 +38,7 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
|
|||||||
} >>~/2FAuth.creds
|
} >>~/2FAuth.creds
|
||||||
msg_ok "Set up Database"
|
msg_ok "Set up Database"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "Bubka/2FAuth"
|
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
|
||||||
|
|
||||||
msg_info "Setup 2FAuth"
|
msg_info "Setup 2FAuth"
|
||||||
cd /opt/2fauth
|
cd /opt/2fauth
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ msg_info "Installing Actual Budget"
|
|||||||
cd /opt
|
cd /opt
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
NODE_VERSION="22"
|
NODE_VERSION="22"
|
||||||
install_node_and_modules
|
setup_nodejs
|
||||||
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
|
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
|
||||||
chown -R root:root /opt/actualbudget-data
|
chown -R root:root /opt/actualbudget-data
|
||||||
chmod -R 755 /opt/actualbudget-data
|
chmod -R 755 /opt/actualbudget-data
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
# Copyright (c) 2021-2025 tteck
|
||||||
# Author: tteck
|
# Author: MickLesk (CanbiZ)
|
||||||
# Co-Author: 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://github.com/seanmorley15/AdventureLog
|
# Source: https://github.com/seanmorley15/AdventureLog
|
||||||
|
|
||||||
@@ -18,13 +17,12 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
gdal-bin \
|
gdal-bin \
|
||||||
libgdal-dev \
|
libgdal-dev \
|
||||||
git \
|
git
|
||||||
python3-venv \
|
|
||||||
python3-pip
|
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" install_node_and_modules
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
PG_VERSION="16" PG_MODULES="postgis" install_postgresql
|
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||||
|
PG_VERSION="16" PG_MODULES="postgis" setup_postgresql
|
||||||
|
|
||||||
msg_info "Set up PostgreSQL Database"
|
msg_info "Set up PostgreSQL Database"
|
||||||
DB_NAME="adventurelog_db"
|
DB_NAME="adventurelog_db"
|
||||||
@@ -46,15 +44,12 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
|
|||||||
} >>~/adventurelog.creds
|
} >>~/adventurelog.creds
|
||||||
msg_ok "Set up PostgreSQL"
|
msg_ok "Set up PostgreSQL"
|
||||||
|
|
||||||
|
fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
|
||||||
|
|
||||||
msg_info "Installing AdventureLog (Patience)"
|
msg_info "Installing AdventureLog (Patience)"
|
||||||
DJANGO_ADMIN_USER="djangoadmin"
|
DJANGO_ADMIN_USER="djangoadmin"
|
||||||
DJANGO_ADMIN_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
DJANGO_ADMIN_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
|
||||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
LOCAL_IP="$(hostname -I | awk '{print $1}')"
|
||||||
cd /opt
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/seanmorley15/AdventureLog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
|
|
||||||
$STD unzip v${RELEASE}.zip
|
|
||||||
mv AdventureLog-${RELEASE} /opt/adventurelog
|
|
||||||
cat <<EOF >/opt/adventurelog/backend/server/.env
|
cat <<EOF >/opt/adventurelog/backend/server/.env
|
||||||
PGHOST='localhost'
|
PGHOST='localhost'
|
||||||
PGDATABASE='${DB_NAME}'
|
PGDATABASE='${DB_NAME}'
|
||||||
@@ -79,11 +74,13 @@ DISABLE_REGISTRATION=False
|
|||||||
EOF
|
EOF
|
||||||
cd /opt/adventurelog/backend/server
|
cd /opt/adventurelog/backend/server
|
||||||
mkdir -p /opt/adventurelog/backend/server/media
|
mkdir -p /opt/adventurelog/backend/server/media
|
||||||
$STD pip install --upgrade pip
|
$STD uv venv /opt/adventurelog/backend/server/.venv
|
||||||
$STD pip install -r requirements.txt
|
$STD /opt/adventurelog/backend/server/.venv/bin/python -m ensurepip --upgrade
|
||||||
$STD python3 manage.py collectstatic --noinput
|
$STD /opt/adventurelog/backend/server/.venv/bin/python -m pip install --upgrade pip
|
||||||
$STD python3 manage.py migrate
|
$STD /opt/adventurelog/backend/server/.venv/bin/python -m pip install -r requirements.txt
|
||||||
$STD python3 manage.py download-countries
|
$STD /opt/adventurelog/backend/server/.venv/bin/python -m manage collectstatic --noinput
|
||||||
|
$STD /opt/adventurelog/backend/server/.venv/bin/python -m manage migrate
|
||||||
|
$STD /opt/adventurelog/backend/server/.venv/bin/python -m manage download-countries
|
||||||
cat <<EOF >/opt/adventurelog/frontend/.env
|
cat <<EOF >/opt/adventurelog/frontend/.env
|
||||||
PUBLIC_SERVER_URL=http://$LOCAL_IP:8000
|
PUBLIC_SERVER_URL=http://$LOCAL_IP:8000
|
||||||
BODY_SIZE_LIMIT=Infinity
|
BODY_SIZE_LIMIT=Infinity
|
||||||
@@ -92,11 +89,11 @@ EOF
|
|||||||
cd /opt/adventurelog/frontend
|
cd /opt/adventurelog/frontend
|
||||||
$STD pnpm i
|
$STD pnpm i
|
||||||
$STD pnpm build
|
$STD pnpm build
|
||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
|
|
||||||
msg_ok "Installed AdventureLog"
|
msg_ok "Installed AdventureLog"
|
||||||
|
|
||||||
msg_info "Setting up Django Admin"
|
msg_info "Setting up Django Admin"
|
||||||
$STD python3 /opt/adventurelog/backend/server/manage.py shell <<EOF
|
cd /opt/adventurelog/backend/server
|
||||||
|
$STD .venv/bin/python -m manage shell <<EOF
|
||||||
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('$DJANGO_ADMIN_USER', password='$DJANGO_ADMIN_PASS')
|
user = UserModel.objects.create_user('$DJANGO_ADMIN_USER', password='$DJANGO_ADMIN_PASS')
|
||||||
@@ -120,7 +117,7 @@ After=network.target postgresql.service
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/adventurelog/backend/server
|
WorkingDirectory=/opt/adventurelog/backend/server
|
||||||
ExecStart=python3 manage.py runserver 0.0.0.0:8000
|
ExecStart=/opt/adventurelog/backend/server/.venv/bin/python -m manage runserver 0.0.0.0:8000
|
||||||
Restart=always
|
Restart=always
|
||||||
EnvironmentFile=/opt/adventurelog/backend/server/.env
|
EnvironmentFile=/opt/adventurelog/backend/server/.env
|
||||||
|
|
||||||
@@ -149,7 +146,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -rf /opt/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"
|
||||||
|
|||||||
29
install/alpine-forgejo-install.sh
Normal file
29
install/alpine-forgejo-install.sh
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: Johann3s-H (An!ma)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://forgejo.org/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Forgejo"
|
||||||
|
$STD apk add --no-cache forgejo
|
||||||
|
msg_ok "Installed Forgejo"
|
||||||
|
|
||||||
|
msg_info "Enabling Forgejo Service"
|
||||||
|
$STD rc-update add forgejo default
|
||||||
|
msg_ok "Enabled Forgejo Service"
|
||||||
|
|
||||||
|
msg_info "Starting Forgejo"
|
||||||
|
$STD service forgejo start
|
||||||
|
msg_ok "Started Forgejo"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
@@ -38,7 +38,7 @@ $STD apt-get install -y \
|
|||||||
default-jdk
|
default-jdk
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
install_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Setup Apache Tomcat"
|
msg_info "Setup Apache Tomcat"
|
||||||
RELEASE=$(curl -fsSL https://dlcdn.apache.org/tomcat/tomcat-9/ | grep -oP '(?<=href=")v[^"/]+(?=/")' | sed 's/^v//' | sort -V | tail -n1)
|
RELEASE=$(curl -fsSL https://dlcdn.apache.org/tomcat/tomcat-9/ | grep -oP '(?<=href=")v[^"/]+(?=/")' | sed 's/^v//' | sort -V | tail -n1)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ $STD apt-get install -y \
|
|||||||
python3-regex
|
python3-regex
|
||||||
msg_ok "Installed Python Dependencies"
|
msg_ok "Installed Python Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing Playwright"
|
msg_info "Installing Playwright"
|
||||||
$STD pip install playwright
|
$STD pip install playwright
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ $STD apt-get install -y \
|
|||||||
php-{pgsql,dom}
|
php-{pgsql,dom}
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PG_VERSION="16" install_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL Database"
|
msg_info "Setting up PostgreSQL Database"
|
||||||
DB_NAME=baikal
|
DB_NAME=baikal
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ $STD apt-get install -y \
|
|||||||
musl-dev
|
musl-dev
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PG_VERSION="16" install_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
install_go
|
setup_go
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
|
||||||
msg_info "Installing bitmagnet v${RELEASE}"
|
msg_info "Installing bitmagnet v${RELEASE}"
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ $STD apt-get install -y \
|
|||||||
make
|
make
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
install_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Setting up Database"
|
msg_info "Setting up Database"
|
||||||
DB_NAME=bookstack
|
DB_NAME=bookstack
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing ByteStash"
|
msg_info "Installing ByteStash"
|
||||||
JWT_SECRET=$(openssl rand -base64 32 | tr -d '/+=')
|
JWT_SECRET=$(openssl rand -base64 32 | tr -d '/+=')
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ msg_ok "Installed Caddy"
|
|||||||
|
|
||||||
read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
|
read -r -p "${TAB3}Would you like to install xCaddy Addon? <y/N> " prompt
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
install_go
|
setup_go
|
||||||
msg_info "Setup xCaddy"
|
msg_info "Setup xCaddy"
|
||||||
$STD apt-get install -y git
|
$STD apt-get install -y git
|
||||||
cd /opt
|
cd /opt
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ $STD apt-get install -y \
|
|||||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||||
msg_ok "Setup Python3"
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing Change Detection"
|
msg_info "Installing Change Detection"
|
||||||
mkdir /opt/changedetection
|
mkdir /opt/changedetection
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
install_go
|
setup_go
|
||||||
|
|
||||||
msg_info "Configure Application"
|
msg_info "Configure Application"
|
||||||
var_cf_api_token="default"
|
var_cf_api_token="default"
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ $STD apt-get install -y \
|
|||||||
git
|
git
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_MODULE="pnpm@latest" install_node_and_modules
|
NODE_MODULE="pnpm@latest" setup_nodejs
|
||||||
fetch_and_deploy_gh_release "raydak-labs/configarr"
|
fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr"
|
||||||
|
|
||||||
msg_info "Setup ${APPLICATION}"
|
msg_info "Setup ${APPLICATION}"
|
||||||
cat <<EOF >/opt/configarr/.env
|
cat <<EOF >/opt/configarr/.env
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing Cronicle Primary Server"
|
msg_info "Installing Cronicle Primary Server"
|
||||||
LATEST=$(curl -fsSL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
LATEST=$(curl -fsSL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Setup Cross-Seed"
|
msg_info "Setup Cross-Seed"
|
||||||
$STD npm install cross-seed@latest -g
|
$STD npm install cross-seed@latest -g
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ $STD apt-get install -y \
|
|||||||
git
|
git
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
read -p "${TAB3}Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice
|
read -p "${TAB3}Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
msg_info "Installing Dashy ${RELEASE} (Patience)"
|
msg_info "Installing Dashy ${RELEASE} (Patience)"
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ $STD apt-get install -y \
|
|||||||
make
|
make
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
|
||||||
PG_VERSION="16" install_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL"
|
msg_info "Setting up PostgreSQL"
|
||||||
DB_NAME="docmost_db"
|
DB_NAME="docmost_db"
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ $STD apt-get install -y \
|
|||||||
python3-bcrypt
|
python3-bcrypt
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="turbo@1.9.3" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="turbo@1.9.3" setup_nodejs
|
||||||
PG_VERSION="16" install_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL"
|
msg_info "Setting up PostgreSQL"
|
||||||
DB_NAME="documenso_db"
|
DB_NAME="documenso_db"
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ $STD apt-get install -y \
|
|||||||
debconf-utils
|
debconf-utils
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
install_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Setting up Database"
|
msg_info "Setting up Database"
|
||||||
ROOT_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
ROOT_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ $STD apt-get install -y \
|
|||||||
debconf-utils
|
debconf-utils
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||||
|
|
||||||
read -p "${TAB3}Please enter the name for your server: " servername
|
read -p "${TAB3}Please enter the name for your server: " servername
|
||||||
|
|
||||||
@@ -57,8 +57,8 @@ cd /opt/synapse-admin
|
|||||||
$STD yarn global add serve
|
$STD yarn global add serve
|
||||||
$STD yarn install --ignore-engines
|
$STD yarn install --ignore-engines
|
||||||
$STD yarn build
|
$STD yarn build
|
||||||
mv ./dist ../ && \
|
mv ./dist ../ &&
|
||||||
rm -rf * && \
|
rm -rf * &&
|
||||||
mv ../dist ./
|
mv ../dist ./
|
||||||
msg_ok "Installed Element Synapse"
|
msg_ok "Installed Element Synapse"
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ $STD apt-get install -y \
|
|||||||
xdg-utils
|
xdg-utils
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||||
|
|
||||||
msg_info "Setup Excalidraw"
|
msg_info "Setup Excalidraw"
|
||||||
temp_file=$(mktemp)
|
temp_file=$(mktemp)
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ $STD apt-get install -y \
|
|||||||
composer
|
composer
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
install_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Setting up database"
|
msg_info "Setting up database"
|
||||||
DB_NAME=firefly
|
DB_NAME=firefly
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="20" install_node_and_modules
|
NODE_VERSION="20" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing FlowiseAI (Patience)"
|
msg_info "Installing FlowiseAI (Patience)"
|
||||||
$STD npm install -g flowise \
|
$STD npm install -g flowise \
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ $STD apt-get install -y \
|
|||||||
libapache2-mod-php
|
libapache2-mod-php
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
PG_VERSION="16" install_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL"
|
msg_info "Setting up PostgreSQL"
|
||||||
DB_NAME=freshrss
|
DB_NAME=freshrss
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ $STD apt-get install -y {python3,python3-dev,python3-setuptools,python3-distutil
|
|||||||
$STD pip install --upgrade pip
|
$STD pip install --upgrade pip
|
||||||
msg_ok "Setup Python3"
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing go2rtc"
|
msg_info "Installing go2rtc"
|
||||||
mkdir -p /usr/local/go2rtc/bin
|
mkdir -p /usr/local/go2rtc/bin
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ $STD apt-get install -y \
|
|||||||
ca-certificates
|
ca-certificates
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing Fumadocs"
|
msg_info "Installing Fumadocs"
|
||||||
mkdir -p /opt/fumadocs
|
mkdir -p /opt/fumadocs
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ $STD apt-get install -y \
|
|||||||
libcap2-bin
|
libcap2-bin
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
install_go
|
setup_go
|
||||||
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
msg_info "Setting up gatus v${RELEASE}"
|
msg_info "Setting up gatus v${RELEASE}"
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ $STD apt-get install -y \
|
|||||||
ca-certificates
|
ca-certificates
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
install_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Configuring Database"
|
msg_info "Configuring Database"
|
||||||
DB_NAME=ghost
|
DB_NAME=ghost
|
||||||
@@ -37,7 +37,7 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
|
|||||||
} >>~/ghost.creds
|
} >>~/ghost.creds
|
||||||
msg_ok "Configured MySQL"
|
msg_ok "Configured MySQL"
|
||||||
|
|
||||||
NODE_VERSION="20" install_node_and_modules
|
NODE_VERSION="20" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing Ghost CLI"
|
msg_info "Installing Ghost CLI"
|
||||||
$STD npm install ghost-cli@latest -g
|
$STD npm install ghost-cli@latest -g
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ ln -sf /opt/bun/bin/bun /usr/local/bin/bun
|
|||||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bunx
|
ln -sf /opt/bun/bin/bun /usr/local/bin/bunx
|
||||||
msg_ok "Installed Bun"
|
msg_ok "Installed Bun"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "arunavo4/gitea-mirror"
|
fetch_and_deploy_gh_release "gitea-mirror" "arunavo4/gitea-mirror"
|
||||||
|
|
||||||
msg_info "Installing gitea-mirror"
|
msg_info "Installing gitea-mirror"
|
||||||
cd /opt/gitea-mirror
|
cd /opt/gitea-mirror
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ $STD apt-get install -y \
|
|||||||
libapache2-mod-php
|
libapache2-mod-php
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
install_mariadb
|
setup_mariadb
|
||||||
|
|
||||||
msg_info "Setting up database"
|
msg_info "Setting up database"
|
||||||
DB_NAME=glpi_db
|
DB_NAME=glpi_db
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ $STD apt-get install -y \
|
|||||||
build-essential
|
build-essential
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
install_go
|
setup_go
|
||||||
NODE_VERSION="22" install_node_and_modules
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Setup ${APPLICATION} (Patience)"
|
msg_info "Setup ${APPLICATION} (Patience)"
|
||||||
temp_file=$(mktemp)
|
temp_file=$(mktemp)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
MONGO_VERSION="7.0" install_mongodb
|
MONGO_VERSION="7.0" setup_mongodb
|
||||||
|
|
||||||
msg_info "Setup Graylog Data Node"
|
msg_info "Setup Graylog Data Node"
|
||||||
PASSWORD_SECRET=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
|
PASSWORD_SECRET=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ $STD apt-get install -y \
|
|||||||
python3.11-venv
|
python3.11-venv
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing Grist"
|
msg_info "Installing Grist"
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/gristlabs/grist-core/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/gristlabs/grist-core/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1
|
|||||||
$STD dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
|
$STD dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="20" install_node_and_modules
|
NODE_VERSION="20" setup_nodejs
|
||||||
|
|
||||||
msg_info "Setup ${APPLICATION}"
|
msg_info "Setup ${APPLICATION}"
|
||||||
temp_file=$(mktemp)
|
temp_file=$(mktemp)
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ msg_ok "Installed Dependencies"
|
|||||||
|
|
||||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
|
||||||
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
|
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
|
||||||
install_node_and_modules
|
setup_nodejs
|
||||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
|
fetch_and_deploy_gh_release "homarr" "homarr-labs/homarr"
|
||||||
|
|
||||||
msg_info "Installing Homarr (Patience)"
|
msg_info "Installing Homarr (Patience)"
|
||||||
cd /opt
|
cd /opt
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y jq
|
$STD apt-get install -y jq
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
|
||||||
|
|
||||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
|||||||
49
install/huntarr-install.sh
Normal file
49
install/huntarr-install.sh
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
|
# Author: BiluliB
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/plexguide/Huntarr.io
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get install -y jq
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
fetch_and_deploy_gh_release "huntarr" "plexguide/Huntarr.io"
|
||||||
|
|
||||||
|
msg_info "Configure Huntarr"
|
||||||
|
$STD uv venv /opt/huntarr/.venv
|
||||||
|
$STD uv pip install --python /opt/huntarr/.venv/bin/python -r /opt/huntarr/requirements.txt
|
||||||
|
msg_ok "Configured Huntrarr"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/huntarr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Huntarr Service
|
||||||
|
After=network.target
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/huntarr
|
||||||
|
ExecStart=/opt/huntarr/.venv/bin/python /opt/huntarr/main.py
|
||||||
|
Restart=always
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now huntarr
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -13,6 +13,8 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
|
setup_uv
|
||||||
|
|
||||||
msg_info "Configuring apt and installing dependencies"
|
msg_info "Configuring apt and installing dependencies"
|
||||||
echo "deb http://deb.debian.org/debian testing main contrib" >/etc/apt/sources.list.d/immich.list
|
echo "deb http://deb.debian.org/debian testing main contrib" >/etc/apt/sources.list.d/immich.list
|
||||||
cat <<EOF >/etc/apt/preferences.d/immich
|
cat <<EOF >/etc/apt/preferences.d/immich
|
||||||
@@ -27,7 +29,6 @@ $STD apt-get install --no-install-recommends -y \
|
|||||||
redis \
|
redis \
|
||||||
autoconf \
|
autoconf \
|
||||||
build-essential \
|
build-essential \
|
||||||
python3-venv \
|
|
||||||
python3-dev \
|
python3-dev \
|
||||||
cmake \
|
cmake \
|
||||||
jq \
|
jq \
|
||||||
@@ -63,6 +64,7 @@ $STD apt-get install --no-install-recommends -y \
|
|||||||
mesa-utils \
|
mesa-utils \
|
||||||
mesa-va-drivers \
|
mesa-va-drivers \
|
||||||
mesa-vulkan-drivers \
|
mesa-vulkan-drivers \
|
||||||
|
ocl-icd-libopencl1 \
|
||||||
tini \
|
tini \
|
||||||
zlib1g
|
zlib1g
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
@@ -84,21 +86,17 @@ ln -s /usr/lib/jellyfin-ffmpeg/ffmpeg /usr/bin/ffmpeg
|
|||||||
ln -s /usr/lib/jellyfin-ffmpeg/ffprobe /usr/bin/ffprobe
|
ln -s /usr/lib/jellyfin-ffmpeg/ffprobe /usr/bin/ffprobe
|
||||||
msg_ok "Dependencies Installed"
|
msg_ok "Dependencies Installed"
|
||||||
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
read -r -p "Install OpenVINO dependencies for Intel HW-accelerated machine-learning? y/N " prompt
|
||||||
PG_VERSION="16" install_postgresql
|
|
||||||
|
|
||||||
read -r -p "${TAB3}Install OpenVINO dependencies for Intel HW-accelerated machine-learning? " prompt
|
|
||||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing OpenVINO dependencies"
|
msg_info "Installing OpenVINO dependencies"
|
||||||
touch ~/.openvino
|
touch ~/.openvino
|
||||||
$STD apt-get -y install --no-install-recommends ocl-icd-libopencl1
|
|
||||||
tmp_dir=$(mktemp -d)
|
tmp_dir=$(mktemp -d)
|
||||||
$STD pushd "$tmp_dir"
|
$STD pushd "$tmp_dir"
|
||||||
curl -fsSL https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17384.11/intel-igc-core_1.0.17384.11_amd64.deb -O
|
curl -fsSLO https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17384.11/intel-igc-core_1.0.17384.11_amd64.deb
|
||||||
curl -fsSL https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17384.11/intel-igc-opencl_1.0.17384.11_amd64.deb -O
|
curl -fsSLO https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.17384.11/intel-igc-opencl_1.0.17384.11_amd64.deb
|
||||||
curl -fsSL https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/intel-opencl-icd_24.31.30508.7_amd64.deb -O
|
curl -fsSLO https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/intel-opencl-icd_24.31.30508.7_amd64.deb
|
||||||
curl -fsSL https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/libigdgmm12_22.4.1_amd64.deb -O
|
curl -fsSLO https://github.com/intel/compute-runtime/releases/download/24.31.30508.7/libigdgmm12_22.4.1_amd64.deb
|
||||||
$STD dpkg -i ./*.deb
|
$STD apt install -y ./*.deb
|
||||||
$STD popd
|
$STD popd
|
||||||
rm -rf "$tmp_dir"
|
rm -rf "$tmp_dir"
|
||||||
dpkg -l | grep "intel-opencl-icd" | awk '{print $3}' >~/.intel_version
|
dpkg -l | grep "intel-opencl-icd" | awk '{print $3}' >~/.intel_version
|
||||||
@@ -112,11 +110,15 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
|
|||||||
msg_ok "Installed OpenVINO dependencies"
|
msg_ok "Installed OpenVINO dependencies"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
PG_VERSION="16" PG_MODULES="pgvector" setup_postgresql
|
||||||
|
|
||||||
msg_info "Setting up Postgresql Database"
|
msg_info "Setting up Postgresql Database"
|
||||||
$STD apt-get install postgresql-16-pgvector
|
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/0.3.0/postgresql-16-vchord_0.3.0-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 dpkg -i vchord.deb
|
$STD apt install -y ./vchord.deb
|
||||||
rm vchord.deb
|
rm vchord.deb
|
||||||
|
echo "$VCHORD_RELEASE" >~/.vchord_version
|
||||||
DB_NAME="immich"
|
DB_NAME="immich"
|
||||||
DB_USER="immich"
|
DB_USER="immich"
|
||||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c18)
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c18)
|
||||||
@@ -271,11 +273,6 @@ rm -rf "$SOURCE"/build
|
|||||||
} >~/.immich_library_revisions
|
} >~/.immich_library_revisions
|
||||||
msg_ok "Custom Photo-processing Library Compiled"
|
msg_ok "Custom Photo-processing Library Compiled"
|
||||||
|
|
||||||
msg_info "Installing ${APPLICATION} (more patience please)"
|
|
||||||
tmp_file=$(mktemp)
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
curl -fsSL "https://github.com/immich-app/immich/archive/refs/tags/v${RELEASE}.zip" -o "$tmp_file"
|
|
||||||
unzip -q "$tmp_file"
|
|
||||||
INSTALL_DIR="/opt/${APPLICATION}"
|
INSTALL_DIR="/opt/${APPLICATION}"
|
||||||
UPLOAD_DIR="${INSTALL_DIR}/upload"
|
UPLOAD_DIR="${INSTALL_DIR}/upload"
|
||||||
SRC_DIR="${INSTALL_DIR}/source"
|
SRC_DIR="${INSTALL_DIR}/source"
|
||||||
@@ -283,9 +280,12 @@ 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"
|
||||||
mkdir -p "$INSTALL_DIR"
|
mkdir -p "$INSTALL_DIR"
|
||||||
mv "$APPLICATION-$RELEASE"/ "$SRC_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" "latest" "$SRC_DIR"
|
||||||
|
|
||||||
|
msg_info "Installing ${APPLICATION} (more patience please)"
|
||||||
|
|
||||||
cd "$SRC_DIR"/server
|
cd "$SRC_DIR"/server
|
||||||
$STD npm install -g node-gyp node-pre-gyp
|
$STD npm install -g node-gyp node-pre-gyp
|
||||||
$STD npm ci
|
$STD npm ci
|
||||||
@@ -304,23 +304,16 @@ cp LICENSE "$APP_DIR"
|
|||||||
msg_ok "Installed Immich Web Components"
|
msg_ok "Installed Immich Web Components"
|
||||||
|
|
||||||
cd "$SRC_DIR"/machine-learning
|
cd "$SRC_DIR"/machine-learning
|
||||||
$STD python3 -m venv "$ML_DIR/ml-venv"
|
export VIRTUAL_ENV="${ML_DIR}/ml-venv"
|
||||||
|
$STD uv venv "$VIRTUAL_ENV"
|
||||||
if [[ -f ~/.openvino ]]; then
|
if [[ -f ~/.openvino ]]; then
|
||||||
msg_info "Installing HW-accelerated machine-learning"
|
msg_info "Installing HW-accelerated machine-learning"
|
||||||
(
|
uv -q sync --extra openvino --no-cache --active
|
||||||
source "$ML_DIR"/ml-venv/bin/activate
|
patchelf --clear-execstack "${VIRTUAL_ENV}/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so"
|
||||||
$STD pip3 install uv
|
|
||||||
uv -q sync --extra openvino --no-cache --active
|
|
||||||
)
|
|
||||||
patchelf --clear-execstack "$ML_DIR"/ml-venv/lib/python3.11/site-packages/onnxruntime/capi/onnxruntime_pybind11_state.cpython-311-x86_64-linux-gnu.so
|
|
||||||
msg_ok "Installed HW-accelerated machine-learning"
|
msg_ok "Installed HW-accelerated machine-learning"
|
||||||
else
|
else
|
||||||
msg_info "Installing machine-learning"
|
msg_info "Installing machine-learning"
|
||||||
(
|
uv -q sync --extra cpu --no-cache --active
|
||||||
source "$ML_DIR"/ml-venv/bin/activate
|
|
||||||
$STD pip3 install uv
|
|
||||||
uv -q sync --extra cpu --no-cache --active
|
|
||||||
)
|
|
||||||
msg_ok "Installed machine-learning"
|
msg_ok "Installed machine-learning"
|
||||||
fi
|
fi
|
||||||
cd "$SRC_DIR"
|
cd "$SRC_DIR"
|
||||||
@@ -351,7 +344,9 @@ URL_LIST=(
|
|||||||
https://download.geonames.org/export/dump/cities500.zip
|
https://download.geonames.org/export/dump/cities500.zip
|
||||||
https://raw.githubusercontent.com/nvkelso/natural-earth-vector/v5.1.2/geojson/ne_10m_admin_0_countries.geojson
|
https://raw.githubusercontent.com/nvkelso/natural-earth-vector/v5.1.2/geojson/ne_10m_admin_0_countries.geojson
|
||||||
)
|
)
|
||||||
echo "${URL_LIST[@]}" | xargs -n1 -P 8 wget -q
|
for geo in "${URL_LIST[@]}"; do
|
||||||
|
curl -fsSLO "$geo"
|
||||||
|
done
|
||||||
unzip -q cities500.zip
|
unzip -q cities500.zip
|
||||||
date --iso-8601=seconds | tr -d "\n" >geodata-date.txt
|
date --iso-8601=seconds | tr -d "\n" >geodata-date.txt
|
||||||
rm cities500.zip
|
rm cities500.zip
|
||||||
@@ -361,7 +356,6 @@ msg_ok "Installed GeoNames data"
|
|||||||
|
|
||||||
mkdir -p /var/log/immich
|
mkdir -p /var/log/immich
|
||||||
touch /var/log/immich/{web.log,ml.log}
|
touch /var/log/immich/{web.log,ml.log}
|
||||||
echo "$RELEASE" >/opt/"${APPLICATION}"_version.txt
|
|
||||||
msg_ok "Installed ${APPLICATION}"
|
msg_ok "Installed ${APPLICATION}"
|
||||||
|
|
||||||
msg_info "Creating user, env file, scripts & services"
|
msg_info "Creating user, env file, scripts & services"
|
||||||
@@ -390,13 +384,13 @@ cat <<EOF >"${ML_DIR}"/ml_start.sh
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
cd ${ML_DIR}
|
cd ${ML_DIR}
|
||||||
. ml-venv/bin/activate
|
. ${VIRTUAL_ENV}/bin/activate
|
||||||
|
|
||||||
set -a
|
set -a
|
||||||
. ${INSTALL_DIR}/.env
|
. ${INSTALL_DIR}/.env
|
||||||
set +a
|
set +a
|
||||||
|
|
||||||
python -m immich_ml
|
python3 -m immich_ml
|
||||||
EOF
|
EOF
|
||||||
chmod +x "$ML_DIR"/ml_start.sh
|
chmod +x "$ML_DIR"/ml_start.sh
|
||||||
cat <<EOF >/etc/systemd/system/"${APPLICATION}"-web.service
|
cat <<EOF >/etc/systemd/system/"${APPLICATION}"-web.service
|
||||||
@@ -453,7 +447,6 @@ motd_ssh
|
|||||||
customize
|
customize
|
||||||
|
|
||||||
msg_info "Cleaning up"
|
msg_info "Cleaning up"
|
||||||
rm -f "$tmp_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"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ msg_info "Installing Dependencies"
|
|||||||
$STD apt-get install -y ca-certificates
|
$STD apt-get install -y ca-certificates
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing ioBroker (Patience)"
|
msg_info "Installing ioBroker (Patience)"
|
||||||
$STD bash <(curl -fsSL https://iobroker.net/install.sh)
|
$STD bash <(curl -fsSL https://iobroker.net/install.sh)
|
||||||
|
|||||||
@@ -19,14 +19,12 @@ $STD apt-get install -y \
|
|||||||
build-essential
|
build-essential
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
git clone -q https://github.com/Fallenbagel/jellyseerr.git /opt/jellyseerr
|
git clone -q https://github.com/Fallenbagel/jellyseerr.git /opt/jellyseerr
|
||||||
cd /opt/jellyseerr
|
cd /opt/jellyseerr
|
||||||
$STD git checkout main
|
$STD git checkout main
|
||||||
|
|
||||||
pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/jellyseerr/package.json)
|
pnpm_desired=$(grep -Po '"pnpm":\s*"\K[^"]+' /opt/jellyseerr/package.json)
|
||||||
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="pnpm@$pnpm_desired" setup_nodejs
|
||||||
|
|
||||||
msg_info "Installing Jellyseerr (Patience)"
|
msg_info "Installing Jellyseerr (Patience)"
|
||||||
export CYPRESS_INSTALL_BINARY=0
|
export CYPRESS_INSTALL_BINARY=0
|
||||||
|
|||||||
@@ -13,15 +13,19 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
$STD apt-get install -y \
|
|
||||||
python3 \
|
|
||||||
python3-pip
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Setting up Jupyter Notebook"
|
msg_info "Installing Jupyter"
|
||||||
$STD pip3 install jupyter
|
mkdir -p /opt/jupyter
|
||||||
msg_ok "Setup Jupyter Notebook"
|
cd /opt/jupyter
|
||||||
|
$STD uv venv /opt/jupyter/.venv
|
||||||
|
$STD /opt/jupyter/.venv/bin/python -m ensurepip --upgrade
|
||||||
|
$STD /opt/jupyter/.venv/bin/python -m pip install --upgrade pip
|
||||||
|
$STD /opt/jupyter/.venv/bin/python -m pip install jupyter
|
||||||
|
ln -s /opt/jupyter/.venv/bin/jupyter /usr/local/bin/jupyter
|
||||||
|
ln -s /opt/jupyter/.venv/bin/jupyter-lab /usr/local/bin/jupyter-lab
|
||||||
|
ln -s /opt/jupyter/.venv/bin/jupyter-notebook /usr/local/bin/jupyter-notebook
|
||||||
|
msg_ok "Installed Jupyter"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/jupyternotebook.service
|
cat <<EOF >/etc/systemd/system/jupyternotebook.service
|
||||||
@@ -31,7 +35,8 @@ After=network.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
ExecStart=jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root
|
WorkingDirectory=/opt/jupyter
|
||||||
|
ExecStart=/opt/jupyter/.venv/bin/jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=10
|
RestartSec=10
|
||||||
|
|
||||||
@@ -39,6 +44,7 @@ RestartSec=10
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now jupyternotebook
|
systemctl enable -q --now jupyternotebook
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ sed -i \
|
|||||||
/etc/meilisearch.toml
|
/etc/meilisearch.toml
|
||||||
msg_ok "Installed Meilisearch"
|
msg_ok "Installed Meilisearch"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||||
$STD npm install -g corepack@0.31.0
|
$STD npm install -g corepack@0.31.0
|
||||||
|
|
||||||
msg_info "Installing karakeep"
|
msg_info "Installing karakeep"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ $STD apt-get install -y \
|
|||||||
lsb-release
|
lsb-release
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
install_mysql
|
setup_mysql
|
||||||
|
|
||||||
msg_info "Adding PHP8.4 Repository"
|
msg_info "Adding PHP8.4 Repository"
|
||||||
$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ $STD apt-get install -y \
|
|||||||
lsb-release
|
lsb-release
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||||
PG_VERSION="16" install_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
|
|
||||||
msg_info "Setup PHP8.4 Repository"
|
msg_info "Setup PHP8.4 Repository"
|
||||||
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ $STD apt-get install -y \
|
|||||||
msg_ok "Setup Python3"
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
setup_uv
|
setup_uv
|
||||||
fetch_and_deploy_gh_release "LibreTranslate/LibreTranslate"
|
fetch_and_deploy_gh_release "libretranslate" "LibreTranslate/LibreTranslate"
|
||||||
|
|
||||||
msg_info "Setup LibreTranslate (Patience)"
|
msg_info "Setup LibreTranslate (Patience)"
|
||||||
cd /opt/libretranslate
|
cd /opt/libretranslate
|
||||||
@@ -43,6 +43,10 @@ $STD uv pip install "numpy<2"
|
|||||||
$STD uv pip install .
|
$STD uv pip install .
|
||||||
$STD uv pip install libretranslate
|
$STD uv pip install libretranslate
|
||||||
$STD .venv/bin/python scripts/install_models.py
|
$STD .venv/bin/python scripts/install_models.py
|
||||||
|
|
||||||
|
cat <<EOF >/opt/libretranslate/.env
|
||||||
|
LT_PORT=5000
|
||||||
|
EOF
|
||||||
msg_ok "Installed LibreTranslate"
|
msg_ok "Installed LibreTranslate"
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
@@ -56,6 +60,7 @@ User=root
|
|||||||
Type=idle
|
Type=idle
|
||||||
Restart=always
|
Restart=always
|
||||||
Environment="PATH=/usr/local/lib/python3.11/dist-packages/libretranslate"
|
Environment="PATH=/usr/local/lib/python3.11/dist-packages/libretranslate"
|
||||||
|
EnvironmentFile=/opt/libretranslate/.env
|
||||||
ExecStart=/opt/libretranslate/.venv/bin/python3 /opt/libretranslate/.venv/bin/libretranslate --host * --update-models
|
ExecStart=/opt/libretranslate/.venv/bin/python3 /opt/libretranslate/.venv/bin/libretranslate --host * --update-models
|
||||||
ExecReload=/bin/kill -s HUP
|
ExecReload=/bin/kill -s HUP
|
||||||
KillMode=mixed
|
KillMode=mixed
|
||||||
|
|||||||
@@ -19,9 +19,9 @@ $STD apt-get install -y \
|
|||||||
build-essential
|
build-essential
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||||
PG_VERSION="16" install_postgresql
|
PG_VERSION="16" setup_postgresql
|
||||||
RUST_CRATES="monolith" install_rust_and_crates
|
RUST_CRATES="monolith" setup_rust
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL DB"
|
msg_info "Setting up PostgreSQL DB"
|
||||||
DB_NAME=linkwardendb
|
DB_NAME=linkwardendb
|
||||||
@@ -44,11 +44,11 @@ msg_ok "Set up PostgreSQL DB"
|
|||||||
|
|
||||||
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
read -r -p "${TAB3}Would you like to add Adminer? <y/N> " prompt
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
install_adminer
|
setup_adminer
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Installing Linkwarden (Patience)"
|
msg_info "Installing Linkwarden (Patience)"
|
||||||
fetch_and_deploy_gh_release "linkwarden/linkwarden"
|
fetch_and_deploy_gh_release "linkwarden" "linkwarden/linkwarden"
|
||||||
cd /opt/linkwarden
|
cd /opt/linkwarden
|
||||||
$STD yarn
|
$STD yarn
|
||||||
$STD npx playwright install-deps
|
$STD npx playwright install-deps
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ $STD apt-get install -y gcc
|
|||||||
$STD apt-get install -y ca-certificates
|
$STD apt-get install -y ca-certificates
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" install_node_and_modules
|
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
|
||||||
|
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -fsSL https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
msg_info "Installing Mafl v${RELEASE}"
|
msg_info "Installing Mafl v${RELEASE}"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="22" install_node_and_modules
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
msg_info "Setup MagicMirror"
|
msg_info "Setup MagicMirror"
|
||||||
temp_file=$(mktemp)
|
temp_file=$(mktemp)
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
NODE_VERSION="20" install_node_and_modules
|
NODE_VERSION="20" setup_nodejs
|
||||||
MYSQL_VERSION="8.0" install_mysql
|
MYSQL_VERSION="8.0" setup_mysql
|
||||||
|
|
||||||
msg_info "Setting up Database"
|
msg_info "Setting up Database"
|
||||||
DB_NAME="mmdl"
|
DB_NAME="mmdl"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user