mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-02-13 08:43:25 +01:00
Compare commits
78 Commits
fix/netbir
...
fix/sqlser
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1b9feadfbc | ||
|
|
10938cb3c2 | ||
|
|
524ad21c26 | ||
|
|
c8b278f26f | ||
|
|
a6f0d7233e | ||
|
|
079a436286 | ||
|
|
1c2ed6ff10 | ||
|
|
c1d7f23a17 | ||
|
|
fdbe48badb | ||
|
|
d09dd0b664 | ||
|
|
cba6717469 | ||
|
|
0a12acf6bd | ||
|
|
4e4defa236 | ||
|
|
c15f69712f | ||
|
|
b53a731c42 | ||
|
|
ddfe9166a1 | ||
|
|
1b1c84ad4f | ||
|
|
db69c7b0f8 | ||
|
|
53b3b4bf9f | ||
|
|
8fadcc0130 | ||
|
|
5aff8dc2f1 | ||
|
|
e7ed841361 | ||
|
|
7e49c222e5 | ||
|
|
9f31012598 | ||
|
|
811062f958 | ||
|
|
893b0bfb4a | ||
|
|
f34f994560 | ||
|
|
216b389635 | ||
|
|
d062baf8c9 | ||
|
|
e09e244c3d | ||
|
|
2645f4cf4d | ||
|
|
a0b55b6934 | ||
|
|
b263dc25fe | ||
|
|
ac308c931e | ||
|
|
a16dfb6d82 | ||
|
|
63e9bc3729 | ||
|
|
3735f9251b | ||
|
|
fc2559c702 | ||
|
|
5f2d463408 | ||
|
|
69e0dc6968 | ||
|
|
fccb8a923a | ||
|
|
53dbb9d705 | ||
|
|
236c5296b8 | ||
|
|
76c7e3a67f | ||
|
|
4dbb139c60 | ||
|
|
c581704fdd | ||
|
|
e0641d1573 | ||
|
|
058e860f6d | ||
|
|
2b87aa6d52 | ||
|
|
9640caf7bc | ||
|
|
fc044a73ca | ||
|
|
c97ccbe9bb | ||
|
|
5f69d8c315 | ||
|
|
e8cc7ce8ff | ||
|
|
1357a6f26e | ||
|
|
d2da5af858 | ||
|
|
14755d5efe | ||
|
|
927c3a7c48 | ||
|
|
9ed365e9eb | ||
|
|
d5cdfc7405 | ||
|
|
3d2bc05092 | ||
|
|
a330afde03 | ||
|
|
f19bc7722b | ||
|
|
03571fb26c | ||
|
|
c58ca1a70a | ||
|
|
157e69b365 | ||
|
|
ee3e53a1a2 | ||
|
|
c2cb89ddc5 | ||
|
|
d21df736fd | ||
|
|
59e27bfc8a | ||
|
|
43d76b6ea7 | ||
|
|
7715a02f05 | ||
|
|
c29dfa7a29 | ||
|
|
1439d98ec4 | ||
|
|
44ad9370b6 | ||
|
|
4e96bb664f | ||
|
|
57c9308326 | ||
|
|
f07c221ca4 |
12
.github/workflows/update-versions-github.yml
generated
vendored
12
.github/workflows/update-versions-github.yml
generated
vendored
@@ -89,9 +89,15 @@ jobs:
|
|||||||
slug=$(jq -r '.slug // empty' "$json_file" 2>/dev/null)
|
slug=$(jq -r '.slug // empty' "$json_file" 2>/dev/null)
|
||||||
[[ -z "$slug" ]] && continue
|
[[ -z "$slug" ]] && continue
|
||||||
|
|
||||||
# Find corresponding install script
|
# Find corresponding script (install script or addon script)
|
||||||
install_script="install/${slug}-install.sh"
|
install_script=""
|
||||||
[[ ! -f "$install_script" ]] && continue
|
if [[ -f "install/${slug}-install.sh" ]]; then
|
||||||
|
install_script="install/${slug}-install.sh"
|
||||||
|
elif [[ -f "tools/addon/${slug}.sh" ]]; then
|
||||||
|
install_script="tools/addon/${slug}.sh"
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
# Look for fetch_and_deploy_gh_release calls
|
# Look for fetch_and_deploy_gh_release calls
|
||||||
# Pattern: fetch_and_deploy_gh_release "app" "owner/repo" ["mode"] ["version"]
|
# Pattern: fetch_and_deploy_gh_release "app" "owner/repo" ["mode"] ["version"]
|
||||||
|
|||||||
95
CHANGELOG.md
95
CHANGELOG.md
@@ -401,14 +401,107 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
## 2026-02-12
|
||||||
|
|
||||||
|
## 2026-02-11
|
||||||
|
|
||||||
|
### 🆕 New Scripts
|
||||||
|
|
||||||
|
- Draw.io ([#11788](https://github.com/community-scripts/ProxmoxVE/pull/11788))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- dispatcharr: include port 9191 in success-message [@MickLesk](https://github.com/MickLesk) ([#11808](https://github.com/community-scripts/ProxmoxVE/pull/11808))
|
||||||
|
- fix: make donetick 0.1.71 compatible [@tomfrenzel](https://github.com/tomfrenzel) ([#11804](https://github.com/community-scripts/ProxmoxVE/pull/11804))
|
||||||
|
- Kasm: Support new version URL format without hash suffix [@MickLesk](https://github.com/MickLesk) ([#11787](https://github.com/community-scripts/ProxmoxVE/pull/11787))
|
||||||
|
- LibreTranslate: Remove Torch [@tremor021](https://github.com/tremor021) ([#11783](https://github.com/community-scripts/ProxmoxVE/pull/11783))
|
||||||
|
- Snowshare: fix update script [@TuroYT](https://github.com/TuroYT) ([#11726](https://github.com/community-scripts/ProxmoxVE/pull/11726))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- [Feature] OpenCloud: support PosixFS Collaborative Mode [@vhsdream](https://github.com/vhsdream) ([#11806](https://github.com/community-scripts/ProxmoxVE/pull/11806))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- core: respect EDITOR variable for config editing [@ls-root](https://github.com/ls-root) ([#11693](https://github.com/community-scripts/ProxmoxVE/pull/11693))
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
- Fix formatting in kutt.json notes section [@tiagodenoronha](https://github.com/tiagodenoronha) ([#11774](https://github.com/community-scripts/ProxmoxVE/pull/11774))
|
||||||
|
|
||||||
|
## 2026-02-10
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- Immich: Pin version to 2.5.6 [@vhsdream](https://github.com/vhsdream) ([#11775](https://github.com/community-scripts/ProxmoxVE/pull/11775))
|
||||||
|
- Libretranslate: Fix setuptools [@tremor021](https://github.com/tremor021) ([#11772](https://github.com/community-scripts/ProxmoxVE/pull/11772))
|
||||||
|
- Element Synapse: prevent systemd invoke failure during apt install [@MickLesk](https://github.com/MickLesk) ([#11758](https://github.com/community-scripts/ProxmoxVE/pull/11758))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- Refactor: Slskd & Soularr [@vhsdream](https://github.com/vhsdream) ([#11674](https://github.com/community-scripts/ProxmoxVE/pull/11674))
|
||||||
|
|
||||||
|
### 🗑️ Deleted Scripts
|
||||||
|
|
||||||
|
- move paperless-exporter from LXC to addon ([#11737](https://github.com/community-scripts/ProxmoxVE/pull/11737))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- feat: improve storage parsing & add guestname [@carlosmaroot](https://github.com/carlosmaroot) ([#11752](https://github.com/community-scripts/ProxmoxVE/pull/11752))
|
||||||
|
|
||||||
|
### 📂 Github
|
||||||
|
|
||||||
|
- Github-Version Workflow: include addon scripts in extraction [@MickLesk](https://github.com/MickLesk) ([#11757](https://github.com/community-scripts/ProxmoxVE/pull/11757))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- #### 📝 Script Information
|
||||||
|
|
||||||
|
- Snowshare: fix typo in config file path on website [@BirdMakingStuff](https://github.com/BirdMakingStuff) ([#11754](https://github.com/community-scripts/ProxmoxVE/pull/11754))
|
||||||
|
|
||||||
## 2026-02-09
|
## 2026-02-09
|
||||||
|
|
||||||
### 🚀 Updated Scripts
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
- #### 🐞 Bug Fixes
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
- tracearr: prepare for next stable release [@durzo](https://github.com/durzo) ([#11673](https://github.com/community-scripts/ProxmoxVE/pull/11673))
|
- several scripts: add --clear to uv venv calls for uv 0.10 compatibility [@MickLesk](https://github.com/MickLesk) ([#11723](https://github.com/community-scripts/ProxmoxVE/pull/11723))
|
||||||
|
- Koillection: ensure setup_composer is in update script [@MickLesk](https://github.com/MickLesk) ([#11734](https://github.com/community-scripts/ProxmoxVE/pull/11734))
|
||||||
- PeaNUT: symlink server.js after update [@vhsdream](https://github.com/vhsdream) ([#11696](https://github.com/community-scripts/ProxmoxVE/pull/11696))
|
- PeaNUT: symlink server.js after update [@vhsdream](https://github.com/vhsdream) ([#11696](https://github.com/community-scripts/ProxmoxVE/pull/11696))
|
||||||
|
- Umlautadaptarr: use release appsettings.json instead of hardcoded copy [@MickLesk](https://github.com/MickLesk) ([#11725](https://github.com/community-scripts/ProxmoxVE/pull/11725))
|
||||||
|
- tracearr: prepare for next stable release [@durzo](https://github.com/durzo) ([#11673](https://github.com/community-scripts/ProxmoxVE/pull/11673))
|
||||||
|
|
||||||
|
- #### ✨ New Features
|
||||||
|
|
||||||
|
- remove whiptail from update scripts for unattended update support [@MickLesk](https://github.com/MickLesk) ([#11712](https://github.com/community-scripts/ProxmoxVE/pull/11712))
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- Refactor: FileFlows [@tremor021](https://github.com/tremor021) ([#11108](https://github.com/community-scripts/ProxmoxVE/pull/11108))
|
||||||
|
- Refactor: wger [@MickLesk](https://github.com/MickLesk) ([#11722](https://github.com/community-scripts/ProxmoxVE/pull/11722))
|
||||||
|
- Nginx-UI: better User Handling | ACME [@MickLesk](https://github.com/MickLesk) ([#11715](https://github.com/community-scripts/ProxmoxVE/pull/11715))
|
||||||
|
- NginxProxymanager: use better-sqlite3 [@MickLesk](https://github.com/MickLesk) ([#11708](https://github.com/community-scripts/ProxmoxVE/pull/11708))
|
||||||
|
|
||||||
|
### 💾 Core
|
||||||
|
|
||||||
|
- #### 🔧 Refactor
|
||||||
|
|
||||||
|
- hwaccel: add libmfx-gen1.2 to Intel Arc setup for QSV support [@MickLesk](https://github.com/MickLesk) ([#11707](https://github.com/community-scripts/ProxmoxVE/pull/11707))
|
||||||
|
|
||||||
|
### 🧰 Tools
|
||||||
|
|
||||||
|
- #### 🐞 Bug Fixes
|
||||||
|
|
||||||
|
- addons: ensure curl is installed before use [@MickLesk](https://github.com/MickLesk) ([#11718](https://github.com/community-scripts/ProxmoxVE/pull/11718))
|
||||||
|
- Netbird (addon): add systemd ordering to start after Docker [@MickLesk](https://github.com/MickLesk) ([#11716](https://github.com/community-scripts/ProxmoxVE/pull/11716))
|
||||||
|
|
||||||
### ❔ Uncategorized
|
### ❔ Uncategorized
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ function update_script() {
|
|||||||
cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
|
cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
|
||||||
cd /opt/adventurelog/backend/server
|
cd /opt/adventurelog/backend/server
|
||||||
if [[ ! -x .venv/bin/python ]]; then
|
if [[ ! -x .venv/bin/python ]]; then
|
||||||
$STD uv venv .venv
|
$STD uv venv --clear .venv
|
||||||
$STD .venv/bin/python -m ensurepip --upgrade
|
$STD .venv/bin/python -m ensurepip --upgrade
|
||||||
fi
|
fi
|
||||||
$STD .venv/bin/python -m pip install --upgrade pip
|
$STD .venv/bin/python -m pip install --upgrade pip
|
||||||
|
|||||||
@@ -20,28 +20,9 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
if ! apk -e info newt >/dev/null 2>&1; then
|
header_info
|
||||||
apk add -q newt
|
$STD apk -U upgrade
|
||||||
fi
|
msg_ok "Updated successfully!"
|
||||||
while true; do
|
|
||||||
CHOICE=$(
|
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 1 \
|
|
||||||
"1" "Check for Docker Updates" 3>&2 2>&1 1>&3
|
|
||||||
)
|
|
||||||
exit_status=$?
|
|
||||||
if [ $exit_status == 1 ]; then
|
|
||||||
clear
|
|
||||||
exit-script
|
|
||||||
fi
|
|
||||||
header_info
|
|
||||||
case $CHOICE in
|
|
||||||
1)
|
|
||||||
$STD apk -U upgrade
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,43 +20,32 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
if ! apk -e info newt >/dev/null 2>&1; then
|
|
||||||
apk add -q newt
|
|
||||||
fi
|
|
||||||
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||||
while true; do
|
|
||||||
CHOICE=$(
|
CHOICE=$(msg_menu "Grafana Update Options" \
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
|
"1" "Check for Grafana Updates" \
|
||||||
"1" "Check for Grafana Updates" \
|
"2" "Allow 0.0.0.0 for listening" \
|
||||||
"2" "Allow 0.0.0.0 for listening" \
|
"3" "Allow only ${LXCIP} for listening")
|
||||||
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
|
|
||||||
)
|
case $CHOICE in
|
||||||
exit_status=$?
|
1)
|
||||||
if [ $exit_status == 1 ]; then
|
$STD apk -U upgrade
|
||||||
clear
|
msg_ok "Updated successfully!"
|
||||||
exit-script
|
exit
|
||||||
fi
|
;;
|
||||||
header_info
|
2)
|
||||||
case $CHOICE in
|
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana
|
||||||
1)
|
service grafana restart
|
||||||
$STD apk -U upgrade
|
msg_ok "Allowed listening on all interfaces!"
|
||||||
msg_ok "Updated successfully!"
|
exit
|
||||||
exit
|
;;
|
||||||
;;
|
3)
|
||||||
2)
|
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana
|
||||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/grafana
|
service grafana restart
|
||||||
service grafana restart
|
msg_ok "Allowed listening only on ${LXCIP}!"
|
||||||
msg_ok "Allowed listening on all interfaces!"
|
exit
|
||||||
exit
|
;;
|
||||||
;;
|
esac
|
||||||
3)
|
|
||||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/grafana
|
|
||||||
service grafana restart
|
|
||||||
msg_ok "Allowed listening only on ${LXCIP}!"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,43 +20,32 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
if ! apk -e info newt >/dev/null 2>&1; then
|
|
||||||
apk add -q newt
|
|
||||||
fi
|
|
||||||
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||||
while true; do
|
|
||||||
CHOICE=$(
|
CHOICE=$(msg_menu "Loki Update Options" \
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
|
"1" "Check for Loki Updates" \
|
||||||
"1" "Check for Loki Updates" \
|
"2" "Allow 0.0.0.0 for listening" \
|
||||||
"2" "Allow 0.0.0.0 for listening" \
|
"3" "Allow only ${LXCIP} for listening")
|
||||||
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
|
|
||||||
)
|
case $CHOICE in
|
||||||
exit_status=$?
|
1)
|
||||||
if [ $exit_status == 1 ]; then
|
$STD apk -U upgrade
|
||||||
clear
|
msg_ok "Updated successfully!"
|
||||||
exit-script
|
exit
|
||||||
fi
|
;;
|
||||||
header_info
|
2)
|
||||||
case $CHOICE in
|
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki
|
||||||
1)
|
service loki restart
|
||||||
$STD apk -U upgrade
|
msg_ok "Allowed listening on all interfaces!"
|
||||||
msg_ok "Updated successfully!"
|
exit
|
||||||
exit
|
;;
|
||||||
;;
|
3)
|
||||||
2)
|
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki
|
||||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=0.0.0.0/g" /etc/conf.d/loki
|
service loki restart
|
||||||
service loki restart
|
msg_ok "Allowed listening only on ${LXCIP}!"
|
||||||
msg_ok "Allowed listening on all interfaces!"
|
exit
|
||||||
exit
|
;;
|
||||||
;;
|
esac
|
||||||
3)
|
|
||||||
sed -i -e "s/cfg:server.http_addr=.*/cfg:server.http_addr=$LXCIP/g" /etc/conf.d/loki
|
|
||||||
service loki restart
|
|
||||||
msg_ok "Allowed listening only on ${LXCIP}!"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,33 +24,31 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if ! apk -e info newt >/dev/null 2>&1; then
|
|
||||||
apk add -q newt
|
CHOICE=$(msg_menu "Nextcloud Options" \
|
||||||
fi
|
"1" "Update Alpine Packages" \
|
||||||
while true; do
|
"2" "Nextcloud Login Credentials" \
|
||||||
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 3 \
|
"3" "Renew Self-signed Certificate")
|
||||||
"1" "Nextcloud Login Credentials" ON \
|
|
||||||
"2" "Renew Self-signed Certificate" OFF \
|
case $CHOICE in
|
||||||
3>&1 1>&2 2>&3)
|
1)
|
||||||
exit_status=$?
|
msg_info "Updating Alpine Packages"
|
||||||
if [ $exit_status == 1 ]; then
|
$STD apk -U upgrade
|
||||||
clear
|
msg_ok "Updated Alpine Packages"
|
||||||
exit-script
|
msg_ok "Updated successfully!"
|
||||||
fi
|
exit
|
||||||
header_info
|
;;
|
||||||
case $CHOICE in
|
2)
|
||||||
1)
|
cat nextcloud.creds
|
||||||
cat nextcloud.creds
|
exit
|
||||||
exit
|
;;
|
||||||
;;
|
3)
|
||||||
2)
|
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nextcloud-selfsigned.key -out /etc/ssl/certs/nextcloud-selfsigned.crt -subj "/C=US/O=Nextcloud/OU=Domain Control Validated/CN=nextcloud.local" >/dev/null 2>&1
|
||||||
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout /etc/ssl/private/nextcloud-selfsigned.key -out /etc/ssl/certs/nextcloud-selfsigned.crt -subj "/C=US/O=Nextcloud/OU=Domain Control Validated/CN=nextcloud.local" >/dev/null 2>&1
|
rc-service nginx restart
|
||||||
rc-service nginx restart
|
msg_ok "Renewed self-signed certificate"
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
|
||||||
exit 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -20,47 +20,36 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
if ! apk -e info newt >/dev/null 2>&1; then
|
|
||||||
apk add -q newt
|
|
||||||
fi
|
|
||||||
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||||
while true; do
|
|
||||||
CHOICE=$(
|
CHOICE=$(msg_menu "Redis Management" \
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Redis Management" --menu "Select option" 11 58 3 \
|
"1" "Update Redis" \
|
||||||
"1" "Update Redis" \
|
"2" "Allow 0.0.0.0 for listening" \
|
||||||
"2" "Allow 0.0.0.0 for listening" \
|
"3" "Allow only ${LXCIP} for listening")
|
||||||
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
|
|
||||||
)
|
case $CHOICE in
|
||||||
exit_status=$?
|
1)
|
||||||
if [ $exit_status == 1 ]; then
|
msg_info "Updating Redis"
|
||||||
clear
|
apk update && apk upgrade redis
|
||||||
exit-script
|
rc-service redis restart
|
||||||
fi
|
msg_ok "Updated successfully!"
|
||||||
header_info
|
exit
|
||||||
case $CHOICE in
|
;;
|
||||||
1)
|
2)
|
||||||
msg_info "Updating Redis"
|
msg_info "Setting Redis to listen on all interfaces"
|
||||||
apk update && apk upgrade redis
|
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf
|
||||||
rc-service redis restart
|
rc-service redis restart
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Redis now listens on all interfaces!"
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
2)
|
3)
|
||||||
msg_info "Setting Redis to listen on all interfaces"
|
msg_info "Setting Redis to listen only on ${LXCIP}"
|
||||||
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/redis.conf
|
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/redis.conf
|
||||||
rc-service redis restart
|
rc-service redis restart
|
||||||
msg_ok "Redis now listens on all interfaces!"
|
msg_ok "Redis now listens only on ${LXCIP}!"
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
3)
|
esac
|
||||||
msg_info "Setting Redis to listen only on ${LXCIP}"
|
|
||||||
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/redis.conf
|
|
||||||
rc-service redis restart
|
|
||||||
msg_ok "Redis now listens only on ${LXCIP}!"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -20,48 +20,37 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
if ! apk -e info newt >/dev/null 2>&1; then
|
|
||||||
apk add -q newt
|
|
||||||
fi
|
|
||||||
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
LXCIP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||||
while true; do
|
|
||||||
CHOICE=$(
|
CHOICE=$(msg_menu "Valkey Management" \
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Valkey Management" --menu "Select option" 11 58 3 \
|
"1" "Update Valkey" \
|
||||||
"1" "Update Valkey" \
|
"2" "Allow 0.0.0.0 for listening" \
|
||||||
"2" "Allow 0.0.0.0 for listening" \
|
"3" "Allow only ${LXCIP} for listening")
|
||||||
"3" "Allow only ${LXCIP} for listening" 3>&2 2>&1 1>&3
|
|
||||||
)
|
case $CHOICE in
|
||||||
exit_status=$?
|
1)
|
||||||
if [ $exit_status == 1 ]; then
|
msg_info "Updating Valkey"
|
||||||
clear
|
apk update && apk upgrade valkey
|
||||||
exit-script
|
rc-service valkey restart
|
||||||
fi
|
msg_ok "Updated Valkey"
|
||||||
header_info
|
msg_ok "Updated successfully!"
|
||||||
case $CHOICE in
|
exit
|
||||||
1)
|
;;
|
||||||
msg_info "Updating Valkey"
|
2)
|
||||||
apk update && apk upgrade valkey
|
msg_info "Setting Valkey to listen on all interfaces"
|
||||||
rc-service valkey restart
|
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf
|
||||||
msg_ok "Updated Valkey"
|
rc-service valkey restart
|
||||||
msg_ok "Updated successfully!"
|
msg_ok "Valkey now listens on all interfaces!"
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
2)
|
3)
|
||||||
msg_info "Setting Valkey to listen on all interfaces"
|
msg_info "Setting Valkey to listen only on ${LXCIP}"
|
||||||
sed -i 's/^bind .*/bind 0.0.0.0/' /etc/valkey/valkey.conf
|
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf
|
||||||
rc-service valkey restart
|
rc-service valkey restart
|
||||||
msg_ok "Valkey now listens on all interfaces!"
|
msg_ok "Valkey now listens only on ${LXCIP}!"
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
3)
|
esac
|
||||||
msg_info "Setting Valkey to listen only on ${LXCIP}"
|
|
||||||
sed -i "s/^bind .*/bind ${LXCIP}/" /etc/valkey/valkey.conf
|
|
||||||
rc-service valkey restart
|
|
||||||
msg_ok "Valkey now listens only on ${LXCIP}!"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -20,45 +20,38 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
if ! apk -e info newt >/dev/null 2>&1; then
|
CHOICE=$(msg_menu "Vaultwarden Update Options" \
|
||||||
apk add -q newt
|
"1" "Update Vaultwarden" \
|
||||||
fi
|
"2" "Reset ADMIN_TOKEN")
|
||||||
while true; do
|
|
||||||
CHOICE=$(
|
case $CHOICE in
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 2 \
|
1)
|
||||||
"1" "Update Vaultwarden" \
|
$STD apk -U upgrade
|
||||||
"2" "Reset ADMIN_TOKEN" 3>&2 2>&1 1>&3
|
rc-service vaultwarden restart -q
|
||||||
)
|
msg_ok "Updated successfully!"
|
||||||
exit_status=$?
|
exit
|
||||||
if [ $exit_status == 1 ]; then
|
;;
|
||||||
clear
|
2)
|
||||||
exit-script
|
if [[ "${PHS_SILENT:-0}" == "1" ]]; then
|
||||||
|
msg_warn "Reset ADMIN_TOKEN requires interactive mode, skipping."
|
||||||
|
exit
|
||||||
fi
|
fi
|
||||||
header_info
|
read -r -s -p "Setup your ADMIN_TOKEN (make it strong): " NEWTOKEN
|
||||||
case $CHOICE in
|
echo ""
|
||||||
1)
|
if [[ -n "$NEWTOKEN" ]]; then
|
||||||
$STD apk -U upgrade
|
if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi
|
||||||
rc-service vaultwarden restart -q
|
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
|
||||||
msg_ok "Updated successfully!"
|
if [[ ! -f /var/lib/vaultwarden/config.json ]]; then
|
||||||
exit
|
sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden
|
||||||
;;
|
else
|
||||||
2)
|
sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json
|
||||||
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Setup your ADMIN_TOKEN (make it strong)" 10 58 3>&1 1>&2 2>&3); then
|
|
||||||
if [[ -z "$NEWTOKEN" ]]; then exit-script; fi
|
|
||||||
if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi
|
|
||||||
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
|
|
||||||
if [[ ! -f /var/lib/vaultwarden/config.json ]]; then
|
|
||||||
sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden
|
|
||||||
else
|
|
||||||
sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json
|
|
||||||
fi
|
|
||||||
rc-service vaultwarden restart -q
|
|
||||||
fi
|
fi
|
||||||
clear
|
rc-service vaultwarden restart -q
|
||||||
exit
|
msg_ok "Admin token updated"
|
||||||
;;
|
fi
|
||||||
esac
|
exit
|
||||||
done
|
;;
|
||||||
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -20,28 +20,10 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
if ! apk -e info newt >/dev/null 2>&1; then
|
header_info
|
||||||
apk add -q newt
|
$STD apk -U upgrade
|
||||||
fi
|
msg_ok "Updated successfully!"
|
||||||
while true; do
|
exit 0
|
||||||
CHOICE=$(
|
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 1 \
|
|
||||||
"1" "Check for Zigbee2MQTT Updates" 3>&2 2>&1 1>&3
|
|
||||||
)
|
|
||||||
exit_status=$?
|
|
||||||
if [ $exit_status == 1 ]; then
|
|
||||||
clear
|
|
||||||
exit-script
|
|
||||||
fi
|
|
||||||
header_info
|
|
||||||
case $CHOICE in
|
|
||||||
1)
|
|
||||||
$STD apk -U upgrade
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
14
ct/alpine.sh
14
ct/alpine.sh
@@ -20,18 +20,10 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
UPD=$(
|
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \
|
|
||||||
"1" "Check for Alpine Updates" ON \
|
|
||||||
3>&1 1>&2 2>&3
|
|
||||||
)
|
|
||||||
|
|
||||||
header_info
|
header_info
|
||||||
if [ "$UPD" == "1" ]; then
|
$STD apk -U upgrade
|
||||||
$STD apk -U upgrade
|
msg_ok "Updated successfully!"
|
||||||
msg_ok "Updated successfully!"
|
exit 0
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ function update_script() {
|
|||||||
msg_info "Updating Autocaliweb"
|
msg_info "Updating Autocaliweb"
|
||||||
cd "$INSTALL_DIR"
|
cd "$INSTALL_DIR"
|
||||||
if [[ ! -d "$VIRTUAL_ENV" ]]; then
|
if [[ ! -d "$VIRTUAL_ENV" ]]; then
|
||||||
$STD uv venv "$VIRTUAL_ENV"
|
$STD uv venv --clear "$VIRTUAL_ENV"
|
||||||
fi
|
fi
|
||||||
$STD uv sync --all-extras --active
|
$STD uv sync --all-extras --active
|
||||||
cd "$INSTALL_DIR"/koreader/plugins
|
cd "$INSTALL_DIR"/koreader/plugins
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ function update_script() {
|
|||||||
chmod 775 /opt/bazarr /var/lib/bazarr/
|
chmod 775 /opt/bazarr /var/lib/bazarr/
|
||||||
# Always ensure venv exists
|
# Always ensure venv exists
|
||||||
if [[ ! -d /opt/bazarr/venv/ ]]; then
|
if [[ ! -d /opt/bazarr/venv/ ]]; then
|
||||||
$STD uv venv /opt/bazarr/venv --python 3.12
|
$STD uv venv --clear /opt/bazarr/venv --python 3.12
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Always check and fix service file if needed
|
# Always check and fix service file if needed
|
||||||
|
|||||||
@@ -23,10 +23,9 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
|
UPD=$(msg_menu "Cronicle Update Options" \
|
||||||
"1" "Update ${APP}" ON \
|
"1" "Update ${APP}" \
|
||||||
"2" "Install ${APP} Worker" OFF \
|
"2" "Install ${APP} Worker")
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
|
|
||||||
if [ "$UPD" == "1" ]; then
|
if [ "$UPD" == "1" ]; then
|
||||||
if [[ ! -d /opt/cronicle ]]; then
|
if [[ ! -d /opt/cronicle ]]; then
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ function update_script() {
|
|||||||
|
|
||||||
cd /opt/dispatcharr
|
cd /opt/dispatcharr
|
||||||
rm -rf .venv
|
rm -rf .venv
|
||||||
$STD uv venv
|
$STD uv venv --clear
|
||||||
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
|
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
|
||||||
$STD uv pip install gunicorn gevent celery redis daphne
|
$STD uv pip install gunicorn gevent celery redis daphne
|
||||||
msg_ok "Updated Dispatcharr Backend"
|
msg_ok "Updated Dispatcharr Backend"
|
||||||
@@ -144,4 +144,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}${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9191${CL}"
|
||||||
|
|||||||
@@ -35,13 +35,14 @@ function update_script() {
|
|||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Backing Up Configurations"
|
msg_info "Backing Up Configurations"
|
||||||
mv /opt/donetick/config/selfhosted.yml /opt/donetick/donetick.db /opt
|
mv /opt/donetick/config/selfhosted.yaml /opt/donetick/donetick.db /opt
|
||||||
msg_ok "Backed Up Configurations"
|
msg_ok "Backed Up Configurations"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "donetick" "donetick/donetick" "prebuild" "latest" "/opt/donetick" "donetick_Linux_x86_64.tar.gz"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "donetick" "donetick/donetick" "prebuild" "latest" "/opt/donetick" "donetick_Linux_x86_64.tar.gz"
|
||||||
|
|
||||||
msg_info "Restoring Configurations"
|
msg_info "Restoring Configurations"
|
||||||
mv /opt/selfhosted.yml /opt/donetick/config
|
mv /opt/selfhosted.yaml /opt/donetick/config
|
||||||
|
sed -i '/capacitor:\/\/localhost/d' /opt/donetick/config/selfhosted.yaml
|
||||||
mv /opt/donetick.db /opt/donetick
|
mv /opt/donetick.db /opt/donetick
|
||||||
msg_ok "Restored Configurations"
|
msg_ok "Restored Configurations"
|
||||||
|
|
||||||
|
|||||||
58
ct/drawio.sh
Normal file
58
ct/drawio.sh
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.drawio.com/
|
||||||
|
|
||||||
|
APP="DrawIO"
|
||||||
|
var_tags="${var_tags:-diagrams}"
|
||||||
|
var_cpu="${var_cpu:-1}"
|
||||||
|
var_ram="${var_ram:-2048}"
|
||||||
|
var_disk="${var_disk:-4}"
|
||||||
|
var_os="${var_os:-debian}"
|
||||||
|
var_version="${var_version:-13}"
|
||||||
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
|
|
||||||
|
header_info "$APP"
|
||||||
|
variables
|
||||||
|
color
|
||||||
|
catch_errors
|
||||||
|
|
||||||
|
function update_script() {
|
||||||
|
header_info
|
||||||
|
check_container_storage
|
||||||
|
check_container_resources
|
||||||
|
if [[ ! -f /var/lib/tomcat11/webapps/draw.war ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_for_gh_release "drawio" "jgraph/drawio"; then
|
||||||
|
msg_info "Stopping service"
|
||||||
|
systemctl stop tomcat11
|
||||||
|
msg_ok "Service stopped"
|
||||||
|
|
||||||
|
msg_info "Updating Debian LXC"
|
||||||
|
$STD apt update
|
||||||
|
$STD apt upgrade -y
|
||||||
|
msg_ok "Updated Debian LXC"
|
||||||
|
|
||||||
|
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "drawio" "jgraph/drawio" "singlefile" "latest" "/var/lib/tomcat11/webapps" "draw.war"
|
||||||
|
|
||||||
|
msg_info "Starting service"
|
||||||
|
systemctl start tomcat11
|
||||||
|
msg_ok "Service started"
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/draw${CL}"
|
||||||
@@ -61,7 +61,7 @@ function update_script() {
|
|||||||
msg_info "Updating Backend"
|
msg_info "Updating Backend"
|
||||||
cd /opt/endurain/backend
|
cd /opt/endurain/backend
|
||||||
$STD poetry export -f requirements.txt --output requirements.txt --without-hashes
|
$STD poetry export -f requirements.txt --output requirements.txt --without-hashes
|
||||||
$STD uv venv
|
$STD uv venv --clear
|
||||||
$STD uv pip install -r requirements.txt
|
$STD uv pip install -r requirements.txt
|
||||||
msg_ok "Backend Updated"
|
msg_ok "Backend Updated"
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ function update_script() {
|
|||||||
rm -rf "$VENV_PATH"
|
rm -rf "$VENV_PATH"
|
||||||
mkdir -p /opt/esphome
|
mkdir -p /opt/esphome
|
||||||
cd /opt/esphome
|
cd /opt/esphome
|
||||||
$STD uv venv "$VENV_PATH"
|
$STD uv venv --clear "$VENV_PATH"
|
||||||
$STD "$VENV_PATH/bin/python" -m ensurepip --upgrade
|
$STD "$VENV_PATH/bin/python" -m ensurepip --upgrade
|
||||||
$STD "$VENV_PATH/bin/python" -m pip install --upgrade pip
|
$STD "$VENV_PATH/bin/python" -m pip install --upgrade pip
|
||||||
$STD "$VENV_PATH/bin/python" -m pip install esphome tornado esptool
|
$STD "$VENV_PATH/bin/python" -m pip install esphome tornado esptool
|
||||||
|
|||||||
@@ -37,17 +37,12 @@ function update_script() {
|
|||||||
msg_info "Stopped Service"
|
msg_info "Stopped Service"
|
||||||
|
|
||||||
msg_info "Creating Backup"
|
msg_info "Creating Backup"
|
||||||
|
ls /opt/*.tar.gz &>/dev/null && rm -f /opt/*.tar.gz
|
||||||
backup_filename="/opt/${APP}_backup_$(date +%F).tar.gz"
|
backup_filename="/opt/${APP}_backup_$(date +%F).tar.gz"
|
||||||
tar -czf "$backup_filename" -C /opt/fileflows Data
|
tar -czf "$backup_filename" -C /opt/fileflows Data
|
||||||
msg_ok "Backup Created"
|
msg_ok "Backup Created"
|
||||||
|
|
||||||
msg_info "Updating $APP to latest version"
|
fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows"
|
||||||
temp_file=$(mktemp)
|
|
||||||
curl -fsSL https://fileflows.com/downloads/zip -o "$temp_file"
|
|
||||||
$STD unzip -o -d /opt/fileflows "$temp_file"
|
|
||||||
rm -rf "$temp_file"
|
|
||||||
rm -rf "$backup_filename"
|
|
||||||
msg_ok "Updated $APP to latest version"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start fileflows
|
systemctl start fileflows
|
||||||
|
|||||||
@@ -31,18 +31,27 @@ function update_script() {
|
|||||||
|
|
||||||
APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
|
APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
|
||||||
if [[ $APP_VERSION =~ ^2\. ]]; then
|
if [[ $APP_VERSION =~ ^2\. ]]; then
|
||||||
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ VERSION 2.x DETECTED" --yesno \
|
if [[ "${PHS_SILENT:-0}" == "1" ]]; then
|
||||||
"WARNING: Version $APP_VERSION detected!\n\nUpdating from version 2.x will CLEAR ALL CONFIGURATION.\n\nThis includes:\n• API tokens\n• User settings\n• Repository configurations\n• All custom settings\n\nDo you want to continue with the update process?" 15 70 --defaultno; then
|
msg_warn "Version $APP_VERSION detected. Major version upgrade requires interactive confirmation, skipping."
|
||||||
|
exit 75
|
||||||
|
fi
|
||||||
|
msg_warn "WARNING: Version $APP_VERSION detected!"
|
||||||
|
msg_warn "Updating from version 2.x will CLEAR ALL CONFIGURATION."
|
||||||
|
msg_warn "This includes: API tokens, User settings, Repository configurations, All custom settings"
|
||||||
|
echo ""
|
||||||
|
read -r -p "Do you want to continue? (y/N): " CONFIRM
|
||||||
|
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
msg_warn "FINAL WARNING: This update WILL clear all configuration!"
|
||||||
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ FINAL CONFIRMATION" --yesno \
|
msg_warn "Please ensure you have backed up API tokens, custom configurations, and repository settings."
|
||||||
"FINAL WARNING: This update WILL clear all configuration!\n\nBEFORE PROCEEDING, please:\n\n• Copy API tokens to a safe location\n• Backup any custom configurations\n• Note down repository settings\n\nThis action CANNOT be undone!" 18 70 --defaultno; then
|
echo ""
|
||||||
whiptail --backtitle "Gitea Mirror Update" --title "Update Cancelled" --msgbox "Update process cancelled. Please backup your configuration before proceeding." 8 60
|
read -r -p "Final confirmation - proceed? (y/N): " CONFIRM2
|
||||||
|
if [[ ! "$CONFIRM2" =~ ^[Yy]$ ]]; then
|
||||||
|
msg_info "Update cancelled. Please backup your configuration before proceeding."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
whiptail --backtitle "Gitea Mirror Update" --title "Proceeding with Update" --msgbox \
|
msg_info "Proceeding with version $APP_VERSION update. All configuration will be cleared as warned."
|
||||||
"Proceeding with version $APP_VERSION update.\n\nAll configuration will be cleared as warned." 8 50
|
|
||||||
rm -rf /opt/gitea-mirror
|
rm -rf /opt/gitea-mirror
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
6
ct/headers/drawio
Normal file
6
ct/headers/drawio
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
____ ________
|
||||||
|
/ __ \_________ __ __/ _/ __ \
|
||||||
|
/ / / / ___/ __ `/ | /| / // // / / /
|
||||||
|
/ /_/ / / / /_/ /| |/ |/ // // /_/ /
|
||||||
|
/_____/_/ \__,_/ |__/|__/___/\____/
|
||||||
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
____ __ __ ____ __ _ _________ __ ______ __
|
|
||||||
/ __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ / __ \____ _____ ___ _____/ /__ __________ / | / / ____/ |/ / / ____/ ______ ____ _____/ /____ _____
|
|
||||||
/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /_/ / __ `/ __ \/ _ \/ ___/ / _ \/ ___/ ___/_____/ |/ / / __ | /_____/ __/ | |/_/ __ \/ __ \/ ___/ __/ _ \/ ___/
|
|
||||||
/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ ____/ /_/ / /_/ / __/ / / / __(__ |__ )_____/ /| / /_/ // /_____/ /____> </ /_/ / /_/ / / / /_/ __/ /
|
|
||||||
/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ /_/ \__,_/ .___/\___/_/ /_/\___/____/____/ /_/ |_/\____//_/|_| /_____/_/|_/ .___/\____/_/ \__/\___/_/
|
|
||||||
/_/ /_/
|
|
||||||
@@ -27,12 +27,11 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
|
UPD=$(msg_menu "Home Assistant Update Options" \
|
||||||
"1" "Update ALL Containers" ON \
|
"1" "Update ALL Containers" \
|
||||||
"2" "Remove ALL Unused Images" OFF \
|
"2" "Remove ALL Unused Images" \
|
||||||
"3" "Install HACS" OFF \
|
"3" "Install HACS" \
|
||||||
"4" "Install FileBrowser" OFF \
|
"4" "Install FileBrowser")
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
|
|
||||||
if [ "$UPD" == "1" ]; then
|
if [ "$UPD" == "1" ]; then
|
||||||
msg_info "Updating All Containers"
|
msg_info "Updating All Containers"
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ EOF
|
|||||||
msg_ok "Image-processing libraries up to date"
|
msg_ok "Image-processing libraries up to date"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE="2.5.5"
|
RELEASE="2.5.6"
|
||||||
if check_for_gh_release "Immich" "immich-app/immich" "${RELEASE}"; then
|
if check_for_gh_release "Immich" "immich-app/immich" "${RELEASE}"; then
|
||||||
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
|
if [[ $(cat ~/.immich) > "2.5.1" ]]; then
|
||||||
msg_info "Enabling Maintenance Mode"
|
msg_info "Enabling Maintenance Mode"
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ function update_script() {
|
|||||||
PYTHON_VERSION="3.12" setup_uv
|
PYTHON_VERSION="3.12" setup_uv
|
||||||
mkdir -p "$INSTALL_DIR"
|
mkdir -p "$INSTALL_DIR"
|
||||||
cd "$INSTALL_DIR"
|
cd "$INSTALL_DIR"
|
||||||
$STD uv venv .venv
|
$STD uv venv --clear .venv
|
||||||
$STD "$VENV_PYTHON" -m ensurepip --upgrade
|
$STD "$VENV_PYTHON" -m ensurepip --upgrade
|
||||||
$STD "$VENV_PYTHON" -m pip install --upgrade pip
|
$STD "$VENV_PYTHON" -m pip install --upgrade pip
|
||||||
$STD "$VENV_PYTHON" -m pip install jupyter
|
$STD "$VENV_PYTHON" -m pip install jupyter
|
||||||
|
|||||||
11
ct/kasm.sh
11
ct/kasm.sh
@@ -34,10 +34,19 @@ function update_script() {
|
|||||||
CURRENT_VERSION=$(readlink -f /opt/kasm/current | awk -F'/' '{print $4}')
|
CURRENT_VERSION=$(readlink -f /opt/kasm/current | awk -F'/' '{print $4}')
|
||||||
KASM_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_[0-9]+\.[0-9]+\.[0-9]+\.[a-z0-9]+\.tar\.gz' | head -n 1)
|
KASM_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_[0-9]+\.[0-9]+\.[0-9]+\.[a-z0-9]+\.tar\.gz' | head -n 1)
|
||||||
if [[ -z "$KASM_URL" ]]; then
|
if [[ -z "$KASM_URL" ]]; then
|
||||||
|
SERVICE_IMAGE_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_service_images_amd64_[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz' | head -n 1)
|
||||||
|
if [[ -n "$SERVICE_IMAGE_URL" ]]; then
|
||||||
|
KASM_VERSION=$(echo "$SERVICE_IMAGE_URL" | sed -E 's/.*kasm_release_service_images_amd64_([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
||||||
|
KASM_URL="https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}.tar.gz"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
KASM_VERSION=$(echo "$KASM_URL" | sed -E 's/.*kasm_release_([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$KASM_URL" ]] || [[ -z "$KASM_VERSION" ]]; then
|
||||||
msg_error "Unable to detect latest Kasm release URL."
|
msg_error "Unable to detect latest Kasm release URL."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
KASM_VERSION=$(echo "$KASM_URL" | sed -E 's/.*kasm_release_([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
|
||||||
msg_info "Checked for new version"
|
msg_info "Checked for new version"
|
||||||
|
|
||||||
msg_info "Removing outdated docker-compose plugin"
|
msg_info "Removing outdated docker-compose plugin"
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ function update_script() {
|
|||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
PHP_VERSION="8.5" PHP_APACHE="YES" setup_php
|
PHP_VERSION="8.5" PHP_APACHE="YES" setup_php
|
||||||
|
setup_composer
|
||||||
|
|
||||||
msg_info "Creating a backup"
|
msg_info "Creating a backup"
|
||||||
mv /opt/koillection/ /opt/koillection-backup
|
mv /opt/koillection/ /opt/koillection-backup
|
||||||
msg_ok "Backup created"
|
msg_ok "Backup created"
|
||||||
|
|||||||
23
ct/loki.sh
23
ct/loki.sh
@@ -29,21 +29,13 @@ function update_script() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
while true; do
|
CHOICE=$(msg_menu "Loki Update Options" \
|
||||||
CHOICE=$(
|
"1" "Update Loki & Promtail" \
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --menu "Select option" 11 58 3 \
|
"2" "Allow 0.0.0.0 for listening" \
|
||||||
"1" "Update Loki & Promtail" \
|
"3" "Allow only ${LOCAL_IP} for listening")
|
||||||
"2" "Allow 0.0.0.0 for listening" \
|
|
||||||
"3" "Allow only ${LOCAL_IP} for listening" 3>&2 2>&1 1>&3
|
case $CHOICE in
|
||||||
)
|
1)
|
||||||
exit_status=$?
|
|
||||||
if [ $exit_status == 1 ]; then
|
|
||||||
clear
|
|
||||||
exit-script
|
|
||||||
fi
|
|
||||||
header_info
|
|
||||||
case $CHOICE in
|
|
||||||
1)
|
|
||||||
msg_info "Stopping Loki"
|
msg_info "Stopping Loki"
|
||||||
systemctl stop loki
|
systemctl stop loki
|
||||||
if systemctl is-active --quiet promtail 2>/dev/null || dpkg -s promtail >/dev/null 2>&1; then
|
if systemctl is-active --quiet promtail 2>/dev/null || dpkg -s promtail >/dev/null 2>&1; then
|
||||||
@@ -85,7 +77,6 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,21 +24,9 @@ function update_script() {
|
|||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Meilisearch Update" --radiolist --cancel-button Exit-Script "Spacebar = Select" 10 58 2 \
|
setup_meilisearch
|
||||||
"1" "Update Meilisearch" ON \
|
|
||||||
"2" "Update Meilisearch-UI" OFF \
|
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
|
|
||||||
if [ "$UPD" == "1" ]; then
|
if [[ -d /opt/meilisearch-ui ]]; then
|
||||||
setup_meilisearch
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$UPD" == "2" ]; then
|
|
||||||
if [[ ! -d /opt/meilisearch-ui ]]; then
|
|
||||||
msg_error "No Meilisearch-UI Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
if check_for_gh_release "meilisearch-ui" "riccox/meilisearch-ui"; then
|
if check_for_gh_release "meilisearch-ui" "riccox/meilisearch-ui"; then
|
||||||
msg_info "Stopping Meilisearch-UI"
|
msg_info "Stopping Meilisearch-UI"
|
||||||
systemctl stop meilisearch-ui
|
systemctl stop meilisearch-ui
|
||||||
@@ -58,10 +46,11 @@ function update_script() {
|
|||||||
msg_info "Starting Meilisearch-UI"
|
msg_info "Starting Meilisearch-UI"
|
||||||
systemctl start meilisearch-ui
|
systemctl start meilisearch-ui
|
||||||
msg_ok "Started Meilisearch-UI"
|
msg_ok "Started Meilisearch-UI"
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
fi
|
||||||
exit
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -28,12 +28,6 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_error "This script is currently disabled due to an external issue with the OpenResty APT repository."
|
|
||||||
msg_error "The repository's GPG key uses SHA-1 signatures, which are no longer accepted by Debian as of February 1, 2026."
|
|
||||||
msg_error "The issue is tracked in openresty/openresty#1097"
|
|
||||||
msg_error "For more details, see: https://github.com/community-scripts/ProxmoxVE/issues/11406"
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
|
if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
|
||||||
msg_error "Wrong Debian version detected!"
|
msg_error "Wrong Debian version detected!"
|
||||||
msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
msg_error "Please create a snapshot first. You must upgrade your LXC to Debian Trixie before updating. Visit: https://github.com/community-scripts/ProxmoxVE/discussions/7489"
|
||||||
@@ -145,15 +139,17 @@ function update_script() {
|
|||||||
"database": {
|
"database": {
|
||||||
"engine": "knex-native",
|
"engine": "knex-native",
|
||||||
"knex": {
|
"knex": {
|
||||||
"client": "sqlite3",
|
"client": "better-sqlite3",
|
||||||
"connection": {
|
"connection": {
|
||||||
"filename": "/data/database.sqlite"
|
"filename": "/data/database.sqlite"
|
||||||
}
|
},
|
||||||
|
"useNullAsDefault": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
sed -i 's/"client": "sqlite3"/"client": "better-sqlite3"/' /app/config/production.json
|
||||||
cd /app
|
cd /app
|
||||||
$STD yarn install --network-timeout 600000
|
$STD yarn install --network-timeout 600000
|
||||||
msg_ok "Initialized Backend"
|
msg_ok "Initialized Backend"
|
||||||
|
|||||||
@@ -27,10 +27,9 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
|
UPD=$(msg_menu "Node-Red Update Options" \
|
||||||
"1" "Update ${APP}" ON \
|
"1" "Update ${APP}" \
|
||||||
"2" "Install Themes" OFF \
|
"2" "Install Themes")
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
if [ "$UPD" == "1" ]; then
|
if [ "$UPD" == "1" ]; then
|
||||||
NODE_VERSION="22" setup_nodejs
|
NODE_VERSION="22" setup_nodejs
|
||||||
|
|
||||||
@@ -49,32 +48,31 @@ function update_script() {
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
if [ "$UPD" == "2" ]; then
|
if [ "$UPD" == "2" ]; then
|
||||||
THEME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NODE-RED THEMES" --radiolist --cancel-button Exit-Script "Choose Theme" 15 58 6 \
|
THEME=$(msg_menu "Node-Red Themes" \
|
||||||
"aurora" "" OFF \
|
"midnight-red" "Midnight Red (default)" \
|
||||||
"cobalt2" "" OFF \
|
"aurora" "Aurora" \
|
||||||
"dark" "" OFF \
|
"cobalt2" "Cobalt2" \
|
||||||
"dracula" "" OFF \
|
"dark" "Dark" \
|
||||||
"espresso-libre" "" OFF \
|
"dracula" "Dracula" \
|
||||||
"github-dark" "" OFF \
|
"espresso-libre" "Espresso Libre" \
|
||||||
"github-dark-default" "" OFF \
|
"github-dark" "GitHub Dark" \
|
||||||
"github-dark-dimmed" "" OFF \
|
"github-dark-default" "GitHub Dark Default" \
|
||||||
"midnight-red" "" ON \
|
"github-dark-dimmed" "GitHub Dark Dimmed" \
|
||||||
"monoindustrial" "" OFF \
|
"monoindustrial" "Monoindustrial" \
|
||||||
"monokai" "" OFF \
|
"monokai" "Monokai" \
|
||||||
"monokai-dimmed" "" OFF \
|
"monokai-dimmed" "Monokai Dimmed" \
|
||||||
"noctis" "" OFF \
|
"noctis" "Noctis" \
|
||||||
"oceanic-next" "" OFF \
|
"oceanic-next" "Oceanic Next" \
|
||||||
"oled" "" OFF \
|
"oled" "OLED" \
|
||||||
"one-dark-pro" "" OFF \
|
"one-dark-pro" "One Dark Pro" \
|
||||||
"one-dark-pro-darker" "" OFF \
|
"one-dark-pro-darker" "One Dark Pro Darker" \
|
||||||
"solarized-dark" "" OFF \
|
"solarized-dark" "Solarized Dark" \
|
||||||
"solarized-light" "" OFF \
|
"solarized-light" "Solarized Light" \
|
||||||
"tokyo-night" "" OFF \
|
"tokyo-night" "Tokyo Night" \
|
||||||
"tokyo-night-light" "" OFF \
|
"tokyo-night-light" "Tokyo Night Light" \
|
||||||
"tokyo-night-storm" "" OFF \
|
"tokyo-night-storm" "Tokyo Night Storm" \
|
||||||
"totallyinformation" "" OFF \
|
"totallyinformation" "TotallyInformation" \
|
||||||
"zenburn" "" OFF \
|
"zenburn" "Zenburn")
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
header_info
|
header_info
|
||||||
msg_info "Installing ${THEME} Theme"
|
msg_info "Installing ${THEME} Theme"
|
||||||
cd /root/.node-red
|
cd /root/.node-red
|
||||||
|
|||||||
@@ -20,32 +20,21 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE MODE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 14 60 2 \
|
|
||||||
"1" "Check for Alpine Updates" OFF \
|
|
||||||
"2" "Update NPMplus Docker Container" ON \
|
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
|
|
||||||
header_info "$APP"
|
header_info "$APP"
|
||||||
|
|
||||||
case "$UPD" in
|
msg_info "Updating Alpine OS"
|
||||||
"1")
|
$STD apk -U upgrade
|
||||||
msg_info "Updating Alpine OS"
|
msg_ok "System updated"
|
||||||
$STD apk -U upgrade
|
|
||||||
msg_ok "System updated"
|
msg_info "Pulling latest NPMplus container image"
|
||||||
exit
|
cd /opt
|
||||||
;;
|
$STD docker compose pull
|
||||||
"2")
|
msg_info "Recreating container"
|
||||||
msg_info "Updating NPMplus Container"
|
$STD docker compose up -d
|
||||||
cd /opt
|
msg_ok "Updated NPMplus container"
|
||||||
msg_info "Pulling latest container image"
|
|
||||||
$STD docker compose pull
|
msg_ok "Updated successfully!"
|
||||||
msg_info "Recreating container"
|
exit
|
||||||
$STD docker compose up -d
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
exit 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE="v5.0.2"
|
RELEASE="v5.0.2"
|
||||||
if check_for_gh_release "opencloud" "opencloud-eu/opencloud" "${RELEASE}"; then
|
if check_for_gh_release "OpenCloud" "opencloud-eu/opencloud" "${RELEASE}"; then
|
||||||
msg_info "Stopping services"
|
msg_info "Stopping services"
|
||||||
systemctl stop opencloud opencloud-wopi
|
systemctl stop opencloud opencloud-wopi
|
||||||
msg_ok "Stopped services"
|
msg_ok "Stopped services"
|
||||||
@@ -38,9 +38,21 @@ function update_script() {
|
|||||||
msg_info "Updating packages"
|
msg_info "Updating packages"
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get dist-upgrade -y
|
$STD apt-get dist-upgrade -y
|
||||||
|
ensure_dependencies "inotify-tools"
|
||||||
msg_ok "Updated packages"
|
msg_ok "Updated packages"
|
||||||
|
|
||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "opencloud" "opencloud-eu/opencloud" "singlefile" "${RELEASE}" "/usr/bin" "opencloud-*-linux-amd64"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "OpenCloud" "opencloud-eu/opencloud" "singlefile" "${RELEASE}" "/usr/bin" "opencloud-*-linux-amd64"
|
||||||
|
|
||||||
|
if ! grep -q 'POSIX_WATCH' /etc/opencloud/opencloud.env; then
|
||||||
|
sed -i '/^## External/i ## Uncomment below to enable PosixFS Collaborative Mode\
|
||||||
|
## Increase inotify watch/instance limits on your PVE host:\
|
||||||
|
### sysctl -w fs.inotify.max_user_watches=1048576\
|
||||||
|
### sysctl -w fs.inotify.max_user_instances=1024\
|
||||||
|
# STORAGE_USERS_POSIX_ENABLE_COLLABORATION=true\
|
||||||
|
# STORAGE_USERS_POSIX_WATCH_TYPE=inotifywait\
|
||||||
|
# STORAGE_USERS_POSIX_WATCH_FS=true\
|
||||||
|
# STORAGE_USERS_POSIX_WATCH_PATH=<path-to-storage-or-bind-mount>' /etc/opencloud/opencloud.env
|
||||||
|
fi
|
||||||
|
|
||||||
msg_info "Starting services"
|
msg_info "Starting services"
|
||||||
systemctl start opencloud opencloud-wopi
|
systemctl start opencloud opencloud-wopi
|
||||||
|
|||||||
@@ -29,10 +29,9 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select \nplexupdate info >> https://github.com/mrworf/plexupdate" 10 59 2 \
|
UPD=$(msg_menu "Plex Update Options" \
|
||||||
"1" "Update LXC" ON \
|
"1" "Update LXC" \
|
||||||
"2" "Install plexupdate" OFF \
|
"2" "Install plexupdate")
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
if [ "$UPD" == "1" ]; then
|
if [ "$UPD" == "1" ]; then
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating ${APP} LXC"
|
||||||
$STD apt update
|
$STD apt update
|
||||||
|
|||||||
@@ -27,12 +27,11 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
|
UPD=$(msg_menu "Home Assistant Update Options" \
|
||||||
"1" "Update system and containers" ON \
|
"1" "Update system and containers" \
|
||||||
"2" "Install HACS" OFF \
|
"2" "Install HACS" \
|
||||||
"3" "Install FileBrowser" OFF \
|
"3" "Install FileBrowser" \
|
||||||
"4" "Remove ALL Unused Images" OFF \
|
"4" "Remove ALL Unused Images")
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
|
|
||||||
if [ "$UPD" == "1" ]; then
|
if [ "$UPD" == "1" ]; then
|
||||||
msg_info "Updating ${APP} LXC"
|
msg_info "Updating ${APP} LXC"
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: Andy Grunwald (andygrunwald)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/hansmi/prometheus-paperless-exporter
|
|
||||||
|
|
||||||
APP="Prometheus-Paperless-NGX-Exporter"
|
|
||||||
var_tags="${var_tags:-monitoring;alerting}"
|
|
||||||
var_cpu="${var_cpu:-1}"
|
|
||||||
var_ram="${var_ram:-256}"
|
|
||||||
var_disk="${var_disk:-2}"
|
|
||||||
var_os="${var_os:-debian}"
|
|
||||||
var_version="${var_version:-13}"
|
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
|
||||||
|
|
||||||
header_info "$APP"
|
|
||||||
variables
|
|
||||||
color
|
|
||||||
catch_errors
|
|
||||||
|
|
||||||
function update_script() {
|
|
||||||
header_info
|
|
||||||
check_container_storage
|
|
||||||
check_container_resources
|
|
||||||
if [[ ! -f /etc/systemd/system/prometheus-paperless-ngx-exporter.service ]]; then
|
|
||||||
msg_error "No ${APP} Installation Found!"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
if check_for_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter"; then
|
|
||||||
msg_info "Stopping Service"
|
|
||||||
systemctl stop prometheus-paperless-ngx-exporter
|
|
||||||
msg_ok "Stopped Service"
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
|
||||||
systemctl start prometheus-paperless-ngx-exporter
|
|
||||||
msg_ok "Started Service"
|
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
fi
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
start
|
|
||||||
build_container
|
|
||||||
description
|
|
||||||
|
|
||||||
msg_ok "Completed successfully!\n"
|
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8081/metrics${CL}"
|
|
||||||
@@ -41,7 +41,7 @@ function update_script() {
|
|||||||
rm -rf "$PVE_VENV_PATH"
|
rm -rf "$PVE_VENV_PATH"
|
||||||
mkdir -p /opt/prometheus-pve-exporter
|
mkdir -p /opt/prometheus-pve-exporter
|
||||||
cd /opt/prometheus-pve-exporter
|
cd /opt/prometheus-pve-exporter
|
||||||
$STD uv venv "$PVE_VENV_PATH"
|
$STD uv venv --clear "$PVE_VENV_PATH"
|
||||||
$STD "$PVE_VENV_PATH/bin/python" -m ensurepip --upgrade
|
$STD "$PVE_VENV_PATH/bin/python" -m ensurepip --upgrade
|
||||||
$STD "$PVE_VENV_PATH/bin/python" -m pip install --upgrade pip
|
$STD "$PVE_VENV_PATH/bin/python" -m pip install --upgrade pip
|
||||||
$STD "$PVE_VENV_PATH/bin/python" -m pip install prometheus-pve-exporter
|
$STD "$PVE_VENV_PATH/bin/python" -m pip install prometheus-pve-exporter
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ function update_script() {
|
|||||||
# Always ensure venv exists
|
# Always ensure venv exists
|
||||||
if [[ ! -d /opt/sabnzbd/venv ]]; then
|
if [[ ! -d /opt/sabnzbd/venv ]]; then
|
||||||
msg_info "Migrating SABnzbd to uv virtual environment"
|
msg_info "Migrating SABnzbd to uv virtual environment"
|
||||||
$STD uv venv /opt/sabnzbd/venv
|
$STD uv venv --clear /opt/sabnzbd/venv
|
||||||
msg_ok "Created uv venv at /opt/sabnzbd/venv"
|
msg_ok "Created uv venv at /opt/sabnzbd/venv"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating Scraparr"
|
msg_info "Updating Scraparr"
|
||||||
cd /opt/scraparr
|
cd /opt/scraparr
|
||||||
$STD uv venv /opt/scraparr/.venv
|
$STD uv venv --clear /opt/scraparr/.venv
|
||||||
$STD /opt/scraparr/.venv/bin/python -m ensurepip --upgrade
|
$STD /opt/scraparr/.venv/bin/python -m ensurepip --upgrade
|
||||||
$STD /opt/scraparr/.venv/bin/python -m pip install --upgrade pip
|
$STD /opt/scraparr/.venv/bin/python -m pip install --upgrade pip
|
||||||
$STD /opt/scraparr/.venv/bin/python -m pip install -r /opt/scraparr/src/scraparr/requirements.txt
|
$STD /opt/scraparr/.venv/bin/python -m pip install -r /opt/scraparr/src/scraparr/requirements.txt
|
||||||
|
|||||||
89
ct/slskd.sh
89
ct/slskd.sh
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: vhsdream
|
# Author: vhsdream
|
||||||
# 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/slskd/slskd, https://soularr.net
|
# Source: https://github.com/slskd/slskd, https://github.com/mrusse/soularr
|
||||||
|
|
||||||
APP="slskd"
|
APP="slskd"
|
||||||
var_tags="${var_tags:-arr;p2p}"
|
var_tags="${var_tags:-arr;p2p}"
|
||||||
@@ -24,50 +24,65 @@ function update_script() {
|
|||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -d /opt/slskd ]] || [[ ! -d /opt/soularr ]]; then
|
if [[ ! -d /opt/slskd ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No Slskd Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/slskd/slskd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
if check_for_gh_release "Slskd" "slskd/slskd"; then
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
msg_info "Stopping Service(s)"
|
||||||
msg_info "Stopping Service"
|
systemctl stop slskd
|
||||||
systemctl stop slskd soularr.timer soularr.service
|
[[ -f /etc/systemd/system/soularr.service ]] && systemctl stop soularr.timer soularr.service
|
||||||
msg_info "Stopped Service"
|
msg_ok "Stopped Service(s)"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
msg_info "Backing up config"
|
||||||
tmp_file=$(mktemp)
|
cp /opt/slskd/config/slskd.yml /opt/slskd.yml.bak
|
||||||
curl -fsSL "https://github.com/slskd/slskd/releases/download/${RELEASE}/slskd-${RELEASE}-linux-x64.zip" -o $tmp_file
|
msg_ok "Backed up config"
|
||||||
$STD unzip -oj $tmp_file slskd -d /opt/${APP}
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Slskd" "slskd/slskd" "prebuild" "latest" "/opt/slskd" "slskd-*-linux-x64.zip"
|
||||||
|
|
||||||
|
msg_info "Restoring config"
|
||||||
|
mv /opt/slskd.yml.bak /opt/slskd/config/slskd.yml
|
||||||
|
msg_ok "Restored config"
|
||||||
|
|
||||||
|
msg_info "Starting Service(s)"
|
||||||
systemctl start slskd
|
systemctl start slskd
|
||||||
msg_ok "Started Service"
|
[[ -f /etc/systemd/system/soularr.service ]] && systemctl start soularr.timer
|
||||||
rm -rf $tmp_file
|
msg_ok "Started Service(s)"
|
||||||
else
|
msg_ok "Updated Slskd successfully!"
|
||||||
msg_ok "No ${APP} update required. ${APP} is already at v${RELEASE}"
|
|
||||||
fi
|
fi
|
||||||
msg_info "Updating Soularr"
|
[[ -d /opt/soularr ]] && if check_for_gh_release "Soularr" "mrusse/soularr"; then
|
||||||
cp /opt/soularr/config.ini /opt/config.ini.bak
|
if systemctl is-active soularr.timer >/dev/null; then
|
||||||
cp /opt/soularr/run.sh /opt/run.sh.bak
|
msg_info "Stopping Timer and Service"
|
||||||
cd /tmp
|
systemctl stop soularr.timer soularr.service
|
||||||
rm -rf /opt/soularr
|
msg_ok "Stopped Timer and Service"
|
||||||
curl -fsSL -o main.zip https://github.com/mrusse/soularr/archive/refs/heads/main.zip
|
fi
|
||||||
$STD unzip main.zip
|
|
||||||
mv soularr-main /opt/soularr
|
|
||||||
cd /opt/soularr
|
|
||||||
$STD pip install -r requirements.txt
|
|
||||||
mv /opt/config.ini.bak /opt/soularr/config.ini
|
|
||||||
mv /opt/run.sh.bak /opt/soularr/run.sh
|
|
||||||
rm -rf /tmp/main.zip
|
|
||||||
msg_ok "Updated soularr"
|
|
||||||
|
|
||||||
msg_info "Starting soularr timer"
|
msg_info "Backing up Soularr config"
|
||||||
systemctl start soularr.timer
|
cp /opt/soularr/config.ini /opt/soularr_config.ini.bak
|
||||||
msg_ok "Started soularr timer"
|
cp /opt/soularr/run.sh /opt/soularr_run.sh.bak
|
||||||
exit
|
msg_ok "Backed up Soularr config"
|
||||||
|
|
||||||
|
PYTHON_VERSION="3.11" setup_uv
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "Soularr" "mrusse/soularr" "tarball" "latest" "/opt/soularr"
|
||||||
|
msg_info "Updating Soularr"
|
||||||
|
cd /opt/soularr
|
||||||
|
$STD uv venv -c venv
|
||||||
|
$STD source venv/bin/activate
|
||||||
|
$STD uv pip install -r requirements.txt
|
||||||
|
deactivate
|
||||||
|
msg_ok "Updated Soularr"
|
||||||
|
|
||||||
|
msg_info "Restoring Soularr config"
|
||||||
|
mv /opt/soularr_config.ini.bak /opt/soularr/config.ini
|
||||||
|
mv /opt/soularr_run.sh.bak /opt/soularr/run.sh
|
||||||
|
msg_ok "Restored Soularr config"
|
||||||
|
|
||||||
|
msg_info "Starting Soularr Timer"
|
||||||
|
systemctl restart soularr.timer
|
||||||
|
msg_ok "Started Soularr Timer"
|
||||||
|
msg_ok "Updated Soularr successfully!"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -33,7 +33,15 @@ function update_script() {
|
|||||||
systemctl stop snowshare
|
systemctl stop snowshare
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "snowshare" "TuroYT/snowshare" "tarball"
|
msg_info "Backing up uploads"
|
||||||
|
[ -d /opt/snowshare/uploads ] && cp -a /opt/snowshare/uploads /opt/.snowshare_uploads_backup
|
||||||
|
msg_ok "Uploads backed up"
|
||||||
|
|
||||||
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "snowshare" "TuroYT/snowshare" "tarball"
|
||||||
|
|
||||||
|
msg_info "Restoring uploads"
|
||||||
|
[ -d /opt/.snowshare_uploads_backup ] && rm -rf /opt/snowshare/uploads && cp -a /opt/.snowshare_uploads_backup /opt/snowshare/uploads
|
||||||
|
msg_ok "Uploads restored"
|
||||||
|
|
||||||
msg_info "Updating Snowshare"
|
msg_info "Updating Snowshare"
|
||||||
cd /opt/snowshare
|
cd /opt/snowshare
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function update_script() {
|
|||||||
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "streamlink-webui" "CrazyWolf13/streamlink-webui" "tarball"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "streamlink-webui" "CrazyWolf13/streamlink-webui" "tarball"
|
||||||
|
|
||||||
msg_info "Updating streamlink-webui"
|
msg_info "Updating streamlink-webui"
|
||||||
$STD uv venv /opt/streamlink-webui/backend/src/.venv
|
$STD uv venv --clear /opt/streamlink-webui/backend/src/.venv
|
||||||
source /opt/streamlink-webui/backend/src/.venv/bin/activate
|
source /opt/streamlink-webui/backend/src/.venv/bin/activate
|
||||||
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/streamlink-webui/backend/src/.venv
|
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/streamlink-webui/backend/src/.venv
|
||||||
cd /opt/streamlink-webui/frontend/src
|
cd /opt/streamlink-webui/frontend/src
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ function update_script() {
|
|||||||
cp -r /opt/tandoor.bak/{config,api,mediafiles,staticfiles} /opt/tandoor/
|
cp -r /opt/tandoor.bak/{config,api,mediafiles,staticfiles} /opt/tandoor/
|
||||||
mv /opt/tandoor.bak/.env /opt/tandoor/.env
|
mv /opt/tandoor.bak/.env /opt/tandoor/.env
|
||||||
cd /opt/tandoor
|
cd /opt/tandoor
|
||||||
$STD uv venv .venv --python=python3
|
$STD uv venv --clear .venv --python=python3
|
||||||
$STD uv pip install -r requirements.txt --python .venv/bin/python
|
$STD uv pip install -r requirements.txt --python .venv/bin/python
|
||||||
cd /opt/tandoor/vue3
|
cd /opt/tandoor/vue3
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
|
|||||||
@@ -33,7 +33,9 @@ function update_script() {
|
|||||||
systemctl stop umlautadaptarr
|
systemctl stop umlautadaptarr
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
cp /opt/UmlautAdaptarr/appsettings.json /opt/UmlautAdaptarr/appsettings.json.bak
|
||||||
fetch_and_deploy_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr" "prebuild" "latest" "/opt/UmlautAdaptarr" "linux-x64.zip"
|
fetch_and_deploy_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr" "prebuild" "latest" "/opt/UmlautAdaptarr" "linux-x64.zip"
|
||||||
|
cp /opt/UmlautAdaptarr/appsettings.json.bak /opt/UmlautAdaptarr/appsettings.json
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start umlautadaptarr
|
systemctl start umlautadaptarr
|
||||||
|
|||||||
@@ -31,11 +31,9 @@ function update_script() {
|
|||||||
VAULT=$(get_latest_github_release "dani-garcia/vaultwarden")
|
VAULT=$(get_latest_github_release "dani-garcia/vaultwarden")
|
||||||
WVRELEASE=$(get_latest_github_release "dani-garcia/bw_web_builds")
|
WVRELEASE=$(get_latest_github_release "dani-garcia/bw_web_builds")
|
||||||
|
|
||||||
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 3 \
|
UPD=$(msg_menu "Vaultwarden Update Options" \
|
||||||
"1" "VaultWarden $VAULT" ON \
|
"1" "Update VaultWarden + Web-Vault" \
|
||||||
"2" "Web-Vault $WVRELEASE" OFF \
|
"2" "Set Admin Token")
|
||||||
"3" "Set Admin Token" OFF \
|
|
||||||
3>&1 1>&2 2>&3)
|
|
||||||
|
|
||||||
if [ "$UPD" == "1" ]; then
|
if [ "$UPD" == "1" ]; then
|
||||||
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
|
if check_for_gh_release "vaultwarden" "dani-garcia/vaultwarden"; then
|
||||||
@@ -59,14 +57,10 @@ function update_script() {
|
|||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start vaultwarden
|
systemctl start vaultwarden
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
else
|
else
|
||||||
msg_ok "VaultWarden is already up-to-date"
|
msg_ok "VaultWarden is already up-to-date"
|
||||||
fi
|
fi
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$UPD" == "2" ]; then
|
|
||||||
if check_for_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds"; then
|
if check_for_gh_release "vaultwarden_webvault" "dani-garcia/bw_web_builds"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop vaultwarden
|
systemctl stop vaultwarden
|
||||||
@@ -84,16 +78,22 @@ function update_script() {
|
|||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl start vaultwarden
|
systemctl start vaultwarden
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
msg_ok "Updated successfully!"
|
|
||||||
else
|
else
|
||||||
msg_ok "Web-Vault is already up-to-date"
|
msg_ok "Web-Vault is already up-to-date"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
msg_ok "Updated successfully!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$UPD" == "3" ]; then
|
if [ "$UPD" == "2" ]; then
|
||||||
if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Set the ADMIN_TOKEN" 10 58 3>&1 1>&2 2>&3); then
|
if [[ "${PHS_SILENT:-0}" == "1" ]]; then
|
||||||
if [[ -z "$NEWTOKEN" ]]; then exit; fi
|
msg_warn "Set Admin Token requires interactive mode, skipping."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
read -r -s -p "Set the ADMIN_TOKEN: " NEWTOKEN
|
||||||
|
echo ""
|
||||||
|
if [[ -n "$NEWTOKEN" ]]; then
|
||||||
ensure_dependencies argon2
|
ensure_dependencies argon2
|
||||||
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -t 2 -m 16 -p 4 -l 64 -e)
|
TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -t 2 -m 16 -p 4 -l 64 -e)
|
||||||
sed -i "s|ADMIN_TOKEN=.*|ADMIN_TOKEN='${TOKEN}'|" /opt/vaultwarden/.env
|
sed -i "s|ADMIN_TOKEN=.*|ADMIN_TOKEN='${TOKEN}'|" /opt/vaultwarden/.env
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Updating Warracker"
|
msg_info "Updating Warracker"
|
||||||
cd /opt/warracker/backend
|
cd /opt/warracker/backend
|
||||||
$STD uv venv .venv
|
$STD uv venv --clear .venv
|
||||||
$STD source .venv/bin/activate
|
$STD source .venv/bin/activate
|
||||||
$STD uv pip install -r requirements.txt
|
$STD uv pip install -r requirements.txt
|
||||||
msg_ok "Updated Warracker"
|
msg_ok "Updated Warracker"
|
||||||
|
|||||||
64
ct/wger.sh
64
ct/wger.sh
@@ -7,9 +7,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
|
|||||||
|
|
||||||
APP="wger"
|
APP="wger"
|
||||||
var_tags="${var_tags:-management;fitness}"
|
var_tags="${var_tags:-management;fitness}"
|
||||||
var_cpu="${var_cpu:-1}"
|
var_cpu="${var_cpu:-2}"
|
||||||
var_ram="${var_ram:-1024}"
|
var_ram="${var_ram:-2048}"
|
||||||
var_disk="${var_disk:-6}"
|
var_disk="${var_disk:-8}"
|
||||||
var_os="${var_os:-debian}"
|
var_os="${var_os:-debian}"
|
||||||
var_version="${var_version:-13}"
|
var_version="${var_version:-13}"
|
||||||
var_unprivileged="${var_unprivileged:-1}"
|
var_unprivileged="${var_unprivileged:-1}"
|
||||||
@@ -23,38 +23,44 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -d /home/wger ]]; then
|
|
||||||
|
if [[ ! -d /opt/wger ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
|
||||||
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
if check_for_gh_release "wger" "wger-project/wger"; then
|
||||||
msg_info "Stopping Service"
|
msg_info "Stopping Service"
|
||||||
systemctl stop wger
|
systemctl stop redis-server nginx celery celery-beat wger
|
||||||
msg_ok "Stopped Service"
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
msg_info "Updating $APP to v${RELEASE}"
|
msg_info "Backing up Data"
|
||||||
temp_file=$(mktemp)
|
cp -r /opt/wger/media /opt/wger_media_backup
|
||||||
curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$temp_file"
|
cp /opt/wger/.env /opt/wger_env_backup
|
||||||
tar xzf "$temp_file"
|
msg_ok "Backed up Data"
|
||||||
cp -rf wger-"$RELEASE"/* /home/wger/src
|
|
||||||
cd /home/wger/src
|
|
||||||
$STD pip install -r requirements_prod.txt --ignore-installed
|
|
||||||
$STD pip install -e .
|
|
||||||
$STD python3 manage.py migrate
|
|
||||||
$STD python3 manage.py collectstatic --no-input
|
|
||||||
$STD yarn install
|
|
||||||
$STD yarn build:css:sass
|
|
||||||
rm -rf "$temp_file"
|
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
|
||||||
msg_ok "Updated $APP to v${RELEASE}"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wger" "wger-project/wger" "tarball"
|
||||||
systemctl start wger
|
|
||||||
msg_ok "Started Service"
|
msg_info "Restoring Data"
|
||||||
msg_ok "Updated successfully!"
|
cp -r /opt/wger_media_backup/. /opt/wger/media
|
||||||
else
|
cp /opt/wger_env_backup /opt/wger/.env
|
||||||
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
rm -rf /opt/wger_media_backup /opt/wger_env_backup
|
||||||
|
|
||||||
|
msg_ok "Restored Data"
|
||||||
|
|
||||||
|
msg_info "Updating wger"
|
||||||
|
cd /opt/wger
|
||||||
|
set -a && source /opt/wger/.env && set +a
|
||||||
|
export DJANGO_SETTINGS_MODULE=settings.main
|
||||||
|
$STD uv pip install .
|
||||||
|
$STD uv run python manage.py migrate
|
||||||
|
$STD uv run python manage.py collectstatic --no-input
|
||||||
|
msg_ok "Updated wger"
|
||||||
|
|
||||||
|
msg_info "Starting Services"
|
||||||
|
systemctl start redis-server nginx celery celery-beat wger
|
||||||
|
msg_ok "Started Services"
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
@@ -63,7 +69,7 @@ start
|
|||||||
build_container
|
build_container
|
||||||
description
|
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}:3000${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
|
|||||||
35
frontend/public/json/drawio.json
Normal file
35
frontend/public/json/drawio.json
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "Draw.IO",
|
||||||
|
"slug": "drawio",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2026-02-11",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8080,
|
||||||
|
"documentation": "https://www.drawio.com/doc/",
|
||||||
|
"website": "https://www.drawio.com/",
|
||||||
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/draw-io.webp",
|
||||||
|
"config_path": "",
|
||||||
|
"description": "draw.io is a configurable diagramming and whiteboarding application, jointly owned and developed by draw.io Ltd (previously named JGraph) and draw.io AG.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/drawio.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "13"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"generated": "2026-02-09T06:27:10Z",
|
"generated": "2026-02-12T06:25:40Z",
|
||||||
"versions": [
|
"versions": [
|
||||||
{
|
{
|
||||||
"slug": "2fauth",
|
"slug": "2fauth",
|
||||||
@@ -15,6 +15,13 @@
|
|||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-12-08T14:34:55Z"
|
"date": "2025-12-08T14:34:55Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"slug": "adguardhome-sync",
|
||||||
|
"repo": "bakito/adguardhome-sync",
|
||||||
|
"version": "v0.8.2",
|
||||||
|
"pinned": false,
|
||||||
|
"date": "2025-10-24T17:13:47Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"slug": "adventurelog",
|
"slug": "adventurelog",
|
||||||
"repo": "seanmorley15/adventurelog",
|
"repo": "seanmorley15/adventurelog",
|
||||||
@@ -109,9 +116,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "bentopdf",
|
"slug": "bentopdf",
|
||||||
"repo": "alam00000/bentopdf",
|
"repo": "alam00000/bentopdf",
|
||||||
"version": "v2.1.0",
|
"version": "v2.2.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-02T14:30:55Z"
|
"date": "2026-02-09T07:07:40Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "beszel",
|
"slug": "beszel",
|
||||||
@@ -200,16 +207,16 @@
|
|||||||
{
|
{
|
||||||
"slug": "comfyui",
|
"slug": "comfyui",
|
||||||
"repo": "comfyanonymous/ComfyUI",
|
"repo": "comfyanonymous/ComfyUI",
|
||||||
"version": "v0.12.3",
|
"version": "v0.13.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-05T07:04:07Z"
|
"date": "2026-02-10T20:27:38Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "commafeed",
|
"slug": "commafeed",
|
||||||
"repo": "Athou/commafeed",
|
"repo": "Athou/commafeed",
|
||||||
"version": "6.1.1",
|
"version": "6.2.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-26T15:14:16Z"
|
"date": "2026-02-09T19:44:58Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "configarr",
|
"slug": "configarr",
|
||||||
@@ -235,16 +242,16 @@
|
|||||||
{
|
{
|
||||||
"slug": "cronicle",
|
"slug": "cronicle",
|
||||||
"repo": "jhuckaby/Cronicle",
|
"repo": "jhuckaby/Cronicle",
|
||||||
"version": "v0.9.105",
|
"version": "v0.9.106",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-05T18:16:11Z"
|
"date": "2026-02-11T17:11:46Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "cryptpad",
|
"slug": "cryptpad",
|
||||||
"repo": "cryptpad/cryptpad",
|
"repo": "cryptpad/cryptpad",
|
||||||
"version": "2025.9.0",
|
"version": "2026.2.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-10-22T10:06:29Z"
|
"date": "2026-02-11T15:39:05Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "dawarich",
|
"slug": "dawarich",
|
||||||
@@ -256,44 +263,51 @@
|
|||||||
{
|
{
|
||||||
"slug": "discopanel",
|
"slug": "discopanel",
|
||||||
"repo": "nickheyer/discopanel",
|
"repo": "nickheyer/discopanel",
|
||||||
"version": "v1.0.35",
|
"version": "v1.0.36",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-02T05:20:12Z"
|
"date": "2026-02-09T21:15:44Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "dispatcharr",
|
"slug": "dispatcharr",
|
||||||
"repo": "Dispatcharr/Dispatcharr",
|
"repo": "Dispatcharr/Dispatcharr",
|
||||||
"version": "v0.18.1",
|
"version": "v0.19.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-27T17:09:11Z"
|
"date": "2026-02-10T21:18:10Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "docmost",
|
"slug": "docmost",
|
||||||
"repo": "docmost/docmost",
|
"repo": "docmost/docmost",
|
||||||
"version": "v0.25.2",
|
"version": "v0.25.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-06T19:50:55Z"
|
"date": "2026-02-10T02:58:23Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "domain-locker",
|
"slug": "domain-locker",
|
||||||
"repo": "Lissy93/domain-locker",
|
"repo": "Lissy93/domain-locker",
|
||||||
"version": "v0.1.2",
|
"version": "v0.1.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-11-14T22:08:23Z"
|
"date": "2026-02-11T10:03:32Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "domain-monitor",
|
"slug": "domain-monitor",
|
||||||
"repo": "Hosteroid/domain-monitor",
|
"repo": "Hosteroid/domain-monitor",
|
||||||
"version": "v1.1.1",
|
"version": "v1.1.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-11-18T11:32:30Z"
|
"date": "2026-02-11T15:48:18Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "donetick",
|
"slug": "donetick",
|
||||||
"repo": "donetick/donetick",
|
"repo": "donetick/donetick",
|
||||||
"version": "v0.1.64",
|
"version": "v0.1.71",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-10-03T05:18:24Z"
|
"date": "2026-02-11T06:01:13Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"slug": "drawio",
|
||||||
|
"repo": "jgraph/drawio",
|
||||||
|
"version": "v29.3.6",
|
||||||
|
"pinned": false,
|
||||||
|
"date": "2026-01-28T18:25:02Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "duplicati",
|
"slug": "duplicati",
|
||||||
@@ -319,9 +333,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "endurain",
|
"slug": "endurain",
|
||||||
"repo": "endurain-project/endurain",
|
"repo": "endurain-project/endurain",
|
||||||
"version": "v0.17.3",
|
"version": "v0.17.4",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-23T22:02:05Z"
|
"date": "2026-02-11T04:54:22Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "ersatztv",
|
"slug": "ersatztv",
|
||||||
@@ -533,6 +547,13 @@
|
|||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-07T04:44:20Z"
|
"date": "2026-02-07T04:44:20Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"slug": "immich-public-proxy",
|
||||||
|
"repo": "alangrainger/immich-public-proxy",
|
||||||
|
"version": "v1.15.1",
|
||||||
|
"pinned": false,
|
||||||
|
"date": "2026-01-26T08:04:27Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"slug": "inspircd",
|
"slug": "inspircd",
|
||||||
"repo": "inspircd/inspircd",
|
"repo": "inspircd/inspircd",
|
||||||
@@ -550,16 +571,23 @@
|
|||||||
{
|
{
|
||||||
"slug": "invoiceninja",
|
"slug": "invoiceninja",
|
||||||
"repo": "invoiceninja/invoiceninja",
|
"repo": "invoiceninja/invoiceninja",
|
||||||
"version": "v5.12.55",
|
"version": "v5.12.57",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-05T01:06:15Z"
|
"date": "2026-02-11T23:08:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "jackett",
|
"slug": "jackett",
|
||||||
"repo": "Jackett/Jackett",
|
"repo": "Jackett/Jackett",
|
||||||
"version": "v0.24.1074",
|
"version": "v0.24.1098",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-09T06:01:19Z"
|
"date": "2026-02-12T05:56:25Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"slug": "jellystat",
|
||||||
|
"repo": "CyferShepard/Jellystat",
|
||||||
|
"version": "V1.1.8",
|
||||||
|
"pinned": false,
|
||||||
|
"date": "2026-02-08T08:15:00Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "joplin-server",
|
"slug": "joplin-server",
|
||||||
@@ -599,9 +627,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "keycloak",
|
"slug": "keycloak",
|
||||||
"repo": "keycloak/keycloak",
|
"repo": "keycloak/keycloak",
|
||||||
"version": "26.5.2",
|
"version": "26.5.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-23T14:26:58Z"
|
"date": "2026-02-10T07:30:08Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "kimai",
|
"slug": "kimai",
|
||||||
@@ -634,9 +662,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "kometa",
|
"slug": "kometa",
|
||||||
"repo": "Kometa-Team/Kometa",
|
"repo": "Kometa-Team/Kometa",
|
||||||
"version": "v2.2.2",
|
"version": "v2.3.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-10-06T21:31:07Z"
|
"date": "2026-02-09T21:26:56Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "komga",
|
"slug": "komga",
|
||||||
@@ -683,9 +711,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "libretranslate",
|
"slug": "libretranslate",
|
||||||
"repo": "LibreTranslate/LibreTranslate",
|
"repo": "LibreTranslate/LibreTranslate",
|
||||||
"version": "v1.8.4",
|
"version": "v1.9.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-02T17:45:16Z"
|
"date": "2026-02-10T19:05:48Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "lidarr",
|
"slug": "lidarr",
|
||||||
@@ -718,9 +746,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "lubelogger",
|
"slug": "lubelogger",
|
||||||
"repo": "hargata/lubelog",
|
"repo": "hargata/lubelog",
|
||||||
"version": "v1.5.8",
|
"version": "v1.6.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-26T18:18:03Z"
|
"date": "2026-02-10T20:16:32Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "mafl",
|
"slug": "mafl",
|
||||||
@@ -739,9 +767,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "mail-archiver",
|
"slug": "mail-archiver",
|
||||||
"repo": "s1t5/mail-archiver",
|
"repo": "s1t5/mail-archiver",
|
||||||
"version": "2601.3",
|
"version": "2602.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-25T12:52:24Z"
|
"date": "2026-02-11T06:23:11Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "managemydamnlife",
|
"slug": "managemydamnlife",
|
||||||
@@ -753,9 +781,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "manyfold",
|
"slug": "manyfold",
|
||||||
"repo": "manyfold3d/manyfold",
|
"repo": "manyfold3d/manyfold",
|
||||||
"version": "v0.132.0",
|
"version": "v0.132.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-29T13:53:21Z"
|
"date": "2026-02-09T22:02:28Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "mealie",
|
"slug": "mealie",
|
||||||
@@ -767,9 +795,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "mediamanager",
|
"slug": "mediamanager",
|
||||||
"repo": "maxdorninger/MediaManager",
|
"repo": "maxdorninger/MediaManager",
|
||||||
"version": "v1.12.2",
|
"version": "v1.12.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-08T19:18:29Z"
|
"date": "2026-02-11T16:45:40Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "mediamtx",
|
"slug": "mediamtx",
|
||||||
@@ -816,9 +844,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "myip",
|
"slug": "myip",
|
||||||
"repo": "jason5ng32/MyIP",
|
"repo": "jason5ng32/MyIP",
|
||||||
"version": "v5.2.0",
|
"version": "v5.2.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-05T05:56:57Z"
|
"date": "2026-02-10T07:38:47Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "mylar3",
|
"slug": "mylar3",
|
||||||
@@ -837,9 +865,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "navidrome",
|
"slug": "navidrome",
|
||||||
"repo": "navidrome/navidrome",
|
"repo": "navidrome/navidrome",
|
||||||
"version": "v0.60.2",
|
"version": "v0.60.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-07T19:42:33Z"
|
"date": "2026-02-10T23:55:04Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "netbox",
|
"slug": "netbox",
|
||||||
@@ -848,6 +876,13 @@
|
|||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-03T13:54:26Z"
|
"date": "2026-02-03T13:54:26Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"slug": "nextcloud-exporter",
|
||||||
|
"repo": "xperimental/nextcloud-exporter",
|
||||||
|
"version": "v0.9.0",
|
||||||
|
"pinned": false,
|
||||||
|
"date": "2025-10-12T20:03:10Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"slug": "nginx-ui",
|
"slug": "nginx-ui",
|
||||||
"repo": "0xJacky/nginx-ui",
|
"repo": "0xJacky/nginx-ui",
|
||||||
@@ -963,9 +998,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "pangolin",
|
"slug": "pangolin",
|
||||||
"repo": "fosrl/pangolin",
|
"repo": "fosrl/pangolin",
|
||||||
"version": "1.15.2",
|
"version": "1.15.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-05T19:23:58Z"
|
"date": "2026-02-12T06:10:19Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "paperless-ai",
|
"slug": "paperless-ai",
|
||||||
@@ -1012,16 +1047,16 @@
|
|||||||
{
|
{
|
||||||
"slug": "pelican-panel",
|
"slug": "pelican-panel",
|
||||||
"repo": "pelican-dev/panel",
|
"repo": "pelican-dev/panel",
|
||||||
"version": "v1.0.0-beta31",
|
"version": "v1.0.0-beta32",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-18T22:43:24Z"
|
"date": "2026-02-09T22:15:44Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "pelican-wings",
|
"slug": "pelican-wings",
|
||||||
"repo": "pelican-dev/wings",
|
"repo": "pelican-dev/wings",
|
||||||
"version": "v1.0.0-beta22",
|
"version": "v1.0.0-beta23",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-18T22:38:36Z"
|
"date": "2026-02-09T22:10:26Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "pf2etools",
|
"slug": "pf2etools",
|
||||||
@@ -1037,12 +1072,19 @@
|
|||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-12-01T05:07:31Z"
|
"date": "2025-12-01T05:07:31Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"slug": "pihole-exporter",
|
||||||
|
"repo": "eko/pihole-exporter",
|
||||||
|
"version": "v1.2.0",
|
||||||
|
"pinned": false,
|
||||||
|
"date": "2025-07-29T19:15:37Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"slug": "planka",
|
"slug": "planka",
|
||||||
"repo": "plankanban/planka",
|
"repo": "plankanban/planka",
|
||||||
"version": "v2.0.0-rc.4",
|
"version": "v2.0.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-09-04T12:41:17Z"
|
"date": "2026-02-11T13:50:10Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "plant-it",
|
"slug": "plant-it",
|
||||||
@@ -1089,9 +1131,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "prometheus-alertmanager",
|
"slug": "prometheus-alertmanager",
|
||||||
"repo": "prometheus/alertmanager",
|
"repo": "prometheus/alertmanager",
|
||||||
"version": "v0.31.0",
|
"version": "v0.31.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-02T13:34:15Z"
|
"date": "2026-02-11T21:28:26Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "prometheus-blackbox-exporter",
|
"slug": "prometheus-blackbox-exporter",
|
||||||
@@ -1131,9 +1173,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "pulse",
|
"slug": "pulse",
|
||||||
"repo": "rcourtman/Pulse",
|
"repo": "rcourtman/Pulse",
|
||||||
"version": "v5.1.5",
|
"version": "v5.1.9",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-08T12:19:53Z"
|
"date": "2026-02-11T15:34:40Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "pve-scripts-local",
|
"slug": "pve-scripts-local",
|
||||||
@@ -1149,6 +1191,13 @@
|
|||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-11-19T23:54:34Z"
|
"date": "2025-11-19T23:54:34Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"slug": "qbittorrent-exporter",
|
||||||
|
"repo": "martabal/qbittorrent-exporter",
|
||||||
|
"version": "v1.13.2",
|
||||||
|
"pinned": false,
|
||||||
|
"date": "2025-12-13T22:59:03Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"slug": "qdrant",
|
"slug": "qdrant",
|
||||||
"repo": "qdrant/qdrant",
|
"repo": "qdrant/qdrant",
|
||||||
@@ -1180,9 +1229,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "rdtclient",
|
"slug": "rdtclient",
|
||||||
"repo": "rogerfar/rdt-client",
|
"repo": "rogerfar/rdt-client",
|
||||||
"version": "v2.0.119",
|
"version": "v2.0.120",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-10-13T23:15:11Z"
|
"date": "2026-02-12T02:53:51Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "reactive-resume",
|
"slug": "reactive-resume",
|
||||||
@@ -1236,16 +1285,16 @@
|
|||||||
{
|
{
|
||||||
"slug": "scanopy",
|
"slug": "scanopy",
|
||||||
"repo": "scanopy/scanopy",
|
"repo": "scanopy/scanopy",
|
||||||
"version": "v0.14.3",
|
"version": "v0.14.4",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-04T01:41:01Z"
|
"date": "2026-02-10T03:57:28Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "scraparr",
|
"slug": "scraparr",
|
||||||
"repo": "thecfu/scraparr",
|
"repo": "thecfu/scraparr",
|
||||||
"version": "v2.2.5",
|
"version": "v3.0.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-10-07T12:34:31Z"
|
"date": "2026-02-11T17:42:23Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "seelf",
|
"slug": "seelf",
|
||||||
@@ -1282,6 +1331,13 @@
|
|||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-16T12:08:28Z"
|
"date": "2026-01-16T12:08:28Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"slug": "slskd",
|
||||||
|
"repo": "slskd/slskd",
|
||||||
|
"version": "0.24.3",
|
||||||
|
"pinned": false,
|
||||||
|
"date": "2026-01-15T14:40:15Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"slug": "snipeit",
|
"slug": "snipeit",
|
||||||
"repo": "grokability/snipe-it",
|
"repo": "grokability/snipe-it",
|
||||||
@@ -1292,9 +1348,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "snowshare",
|
"slug": "snowshare",
|
||||||
"repo": "TuroYT/snowshare",
|
"repo": "TuroYT/snowshare",
|
||||||
"version": "v1.2.12",
|
"version": "v1.3.5",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-30T13:35:56Z"
|
"date": "2026-02-11T10:24:51Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "sonarr",
|
"slug": "sonarr",
|
||||||
@@ -1327,9 +1383,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "stirling-pdf",
|
"slug": "stirling-pdf",
|
||||||
"repo": "Stirling-Tools/Stirling-PDF",
|
"repo": "Stirling-Tools/Stirling-PDF",
|
||||||
"version": "v2.4.5",
|
"version": "v2.4.6",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-06T23:12:20Z"
|
"date": "2026-02-12T00:01:19Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "streamlink-webui",
|
"slug": "streamlink-webui",
|
||||||
@@ -1418,9 +1474,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "tracearr",
|
"slug": "tracearr",
|
||||||
"repo": "connorgallopo/Tracearr",
|
"repo": "connorgallopo/Tracearr",
|
||||||
"version": "v1.4.12",
|
"version": "v1.4.17",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-28T23:29:37Z"
|
"date": "2026-02-11T01:33:21Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "tracktor",
|
"slug": "tracktor",
|
||||||
@@ -1432,9 +1488,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "traefik",
|
"slug": "traefik",
|
||||||
"repo": "traefik/traefik",
|
"repo": "traefik/traefik",
|
||||||
"version": "v3.6.7",
|
"version": "v3.6.8",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-14T14:11:45Z"
|
"date": "2026-02-11T16:44:37Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "trilium",
|
"slug": "trilium",
|
||||||
@@ -1446,9 +1502,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "trip",
|
"slug": "trip",
|
||||||
"repo": "itskovacs/TRIP",
|
"repo": "itskovacs/TRIP",
|
||||||
"version": "1.39.0",
|
"version": "1.40.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-07T16:59:51Z"
|
"date": "2026-02-10T20:12:53Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "tududi",
|
"slug": "tududi",
|
||||||
@@ -1509,9 +1565,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "vaultwarden",
|
"slug": "vaultwarden",
|
||||||
"repo": "dani-garcia/vaultwarden",
|
"repo": "dani-garcia/vaultwarden",
|
||||||
"version": "1.35.2",
|
"version": "1.35.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-09T18:37:04Z"
|
"date": "2026-02-10T20:37:03Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "victoriametrics",
|
"slug": "victoriametrics",
|
||||||
@@ -1523,9 +1579,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "vikunja",
|
"slug": "vikunja",
|
||||||
"repo": "go-vikunja/vikunja",
|
"repo": "go-vikunja/vikunja",
|
||||||
"version": "v1.0.0",
|
"version": "v1.1.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-28T11:12:59Z"
|
"date": "2026-02-09T10:34:29Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "wallabag",
|
"slug": "wallabag",
|
||||||
@@ -1537,9 +1593,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "wallos",
|
"slug": "wallos",
|
||||||
"repo": "ellite/Wallos",
|
"repo": "ellite/Wallos",
|
||||||
"version": "v4.6.0",
|
"version": "v4.6.1",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-12-20T15:57:51Z"
|
"date": "2026-02-10T21:06:46Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "wanderer",
|
"slug": "wanderer",
|
||||||
@@ -1572,9 +1628,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "wavelog",
|
"slug": "wavelog",
|
||||||
"repo": "wavelog/wavelog",
|
"repo": "wavelog/wavelog",
|
||||||
"version": "2.2.2",
|
"version": "2.3",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-12-31T16:53:34Z"
|
"date": "2026-02-11T15:46:40Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "wealthfolio",
|
"slug": "wealthfolio",
|
||||||
@@ -1590,19 +1646,26 @@
|
|||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2025-11-11T14:30:28Z"
|
"date": "2025-11-11T14:30:28Z"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"slug": "wger",
|
||||||
|
"repo": "wger-project/wger",
|
||||||
|
"version": "2.4",
|
||||||
|
"pinned": false,
|
||||||
|
"date": "2026-01-18T12:12:02Z"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"slug": "wikijs",
|
"slug": "wikijs",
|
||||||
"repo": "requarks/wiki",
|
"repo": "requarks/wiki",
|
||||||
"version": "v2.5.311",
|
"version": "v2.5.312",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-08T09:50:00Z"
|
"date": "2026-02-12T02:45:22Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "wishlist",
|
"slug": "wishlist",
|
||||||
"repo": "cmintey/wishlist",
|
"repo": "cmintey/wishlist",
|
||||||
"version": "v0.59.0",
|
"version": "v0.60.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-19T16:42:14Z"
|
"date": "2026-02-10T04:05:26Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "wizarr",
|
"slug": "wizarr",
|
||||||
@@ -1628,9 +1691,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "yubal",
|
"slug": "yubal",
|
||||||
"repo": "guillevc/yubal",
|
"repo": "guillevc/yubal",
|
||||||
"version": "v0.4.2",
|
"version": "v0.5.0",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-02-08T21:35:13Z"
|
"date": "2026-02-09T22:11:32Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "zigbee2mqtt",
|
"slug": "zigbee2mqtt",
|
||||||
@@ -1642,9 +1705,9 @@
|
|||||||
{
|
{
|
||||||
"slug": "zipline",
|
"slug": "zipline",
|
||||||
"repo": "diced/zipline",
|
"repo": "diced/zipline",
|
||||||
"version": "v4.4.1",
|
"version": "v4.4.2",
|
||||||
"pinned": false,
|
"pinned": false,
|
||||||
"date": "2026-01-20T01:29:01Z"
|
"date": "2026-02-11T04:58:54Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"slug": "zitadel",
|
"slug": "zitadel",
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "Kutt needs so be served with an SSL certificate for its login to work. During install, you will be prompted to choose if you want to have Caddy installed for SSL termination or if you want to use your own reverse proxy (in that case point your reverse porxy to port 3000).",
|
"text": "Kutt needs so be served with an SSL certificate for its login to work. During install, you will be prompted to choose if you want to have Caddy installed for SSL termination or if you want to use your own reverse proxy (in that case point your reverse proxy to port 3000).",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -28,10 +28,14 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": "admin",
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "On first visit, the setup wizard will guide you to create an admin account and configure ACME email.",
|
||||||
|
"type": "warning"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"text": "Nginx runs on ports 80/443, Nginx UI management interface on port 9000.",
|
"text": "Nginx runs on ports 80/443, Nginx UI management interface on port 9000.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
@@ -39,10 +43,6 @@
|
|||||||
{
|
{
|
||||||
"text": "SSL certificates can be managed automatically with Let's Encrypt integration.",
|
"text": "SSL certificates can be managed automatically with Let's Encrypt integration.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "Initial Login data: `cat ~/nginx-ui.creds`",
|
|
||||||
"type": "info"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,10 +30,14 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": "admin@example.com",
|
"username": null,
|
||||||
"password": "changeme"
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "On first launch, a setup wizard will guide you through creating an admin account. There are no default credentials.",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"text": "You can install the specific one certbot you prefer, or you can Running /app/scripts/install-certbot-plugins within the Nginx Proxy Manager (NPM) LXC shell will install many common plugins. Important: This script does not install all Certbot plugins, as some require additional, external system dependencies (like specific packages for certain DNS providers). These external dependencies must be manually installed within the LXC container before you can successfully install and use the corresponding Certbot plugin. Consult the plugin's documentation for required packages.",
|
"text": "You can install the specific one certbot you prefer, or you can Running /app/scripts/install-certbot-plugins within the Nginx Proxy Manager (NPM) LXC shell will install many common plugins. Important: This script does not install all Certbot plugins, as some require additional, external system dependencies (like specific packages for certain DNS providers). These external dependencies must be manually installed within the LXC container before you can successfully install and use the corresponding Certbot plugin. Consult the plugin's documentation for required packages.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
|
|||||||
@@ -1,44 +1,35 @@
|
|||||||
{
|
{
|
||||||
"name": "Prometheus Paperless NGX Exporter",
|
"name": "Prometheus Paperless NGX Exporter",
|
||||||
"slug": "prometheus-paperless-ngx-exporter",
|
"slug": "prometheus-paperless-ngx-exporter",
|
||||||
"categories": [
|
"categories": [
|
||||||
9
|
9
|
||||||
],
|
],
|
||||||
"date_created": "2025-02-07",
|
"date_created": "2025-02-07",
|
||||||
"type": "ct",
|
"type": "addon",
|
||||||
"updateable": true,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8081,
|
"interface_port": 8081,
|
||||||
"documentation": null,
|
"documentation": "https://github.com/hansmi/prometheus-paperless-exporter",
|
||||||
"website": "https://github.com/hansmi/prometheus-paperless-exporter",
|
"website": "https://github.com/hansmi/prometheus-paperless-exporter",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paperless-ngx.webp",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/paperless-ngx.webp",
|
||||||
"config_path": "",
|
"config_path": "/etc/prometheus-paperless-ngx-exporter/config.env",
|
||||||
"description": "Prometheus metrics exporter for Paperless-NGX, a document management system transforming physical documents into a searchable online archive. The exporter relies on Paperless' REST API.",
|
"description": "Prometheus metrics exporter for Paperless-NGX, a document management system transforming physical documents into a searchable online archive. The exporter relies on Paperless' REST API.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/prometheus-paperless-ngx-exporter.sh",
|
"script": "tools/addon/prometheus-paperless-ngx-exporter.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 1,
|
"cpu": null,
|
||||||
"ram": 256,
|
"ram": null,
|
||||||
"hdd": 2,
|
"hdd": null,
|
||||||
"os": "debian",
|
"os": null,
|
||||||
"version": "13"
|
"version": null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": null,
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": []
|
||||||
{
|
|
||||||
"text": "Please adjust the Paperless URL in the systemd unit file: /etc/systemd/system/prometheus-paperless-ngx-exporter.service",
|
|
||||||
"type": "info"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "Please adjust the Paperless authentication token in the configuration file: /etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file",
|
|
||||||
"type": "info"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "slskd",
|
"name": "Slskd",
|
||||||
"slug": "slskd",
|
"slug": "slskd",
|
||||||
"categories": [
|
"categories": [
|
||||||
11
|
11
|
||||||
@@ -35,10 +35,6 @@
|
|||||||
{
|
{
|
||||||
"text": "See /opt/slskd/config/slskd.yml to add your Soulseek credentials",
|
"text": "See /opt/slskd/config/slskd.yml to add your Soulseek credentials",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
},
|
|
||||||
{
|
|
||||||
"text": "This LXC includes Soularr; it needs to be configured (/opt/soularr/config.ini) before it will work",
|
|
||||||
"type": "info"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 3000,
|
"interface_port": 3000,
|
||||||
"documentation": "https://github.com/TuroYT/snowshare",
|
"documentation": "https://github.com/TuroYT/snowshare",
|
||||||
"config_path": "/opt/snowshare/.env",
|
"config_path": "/opt/snowshare.env",
|
||||||
"website": "https://github.com/TuroYT/snowshare",
|
"website": "https://github.com/TuroYT/snowshare",
|
||||||
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/snowshare.png",
|
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/snowshare.png",
|
||||||
"description": "A modern, secure file and link sharing platform built with Next.js, Prisma, and NextAuth. Share URLs, code snippets, and files with customizable expiration, privacy, and QR codes.",
|
"description": "A modern, secure file and link sharing platform built with Next.js, Prisma, and NextAuth. Share URLs, code snippets, and files with customizable expiration, privacy, and QR codes.",
|
||||||
|
|||||||
@@ -32,6 +32,10 @@
|
|||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "SQL Server (2025) SQLPAL is incompatible with Proxmox VE 9 (Kernel 6.12+) in LXC containers. Use a VM instead or the SQL-Server 2022 LXC.",
|
||||||
|
"type": "warning"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"text": "If you choose not to run the installation setup, execute: `/opt/mssql/bin/mssql-conf setup` in LXC shell.",
|
"text": "If you choose not to run the installation setup, execute: `/opt/mssql/bin/mssql-conf setup` in LXC shell.",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
|
|||||||
@@ -19,9 +19,9 @@
|
|||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/wger.sh",
|
"script": "ct/wger.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 1,
|
"cpu": 2,
|
||||||
"ram": 1024,
|
"ram": 2048,
|
||||||
"hdd": 6,
|
"hdd": 8,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "13"
|
"version": "13"
|
||||||
}
|
}
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
},
|
},
|
||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "Enable proxy support by uncommenting this line in `/home/wger/src/settings.py` and pointing it to your URL: `# CSRF_TRUSTED_ORIGINS = ['http://127.0.0.1', 'https://my.domain.example.com']`, then restart the service `systemctl restart wger`.",
|
"text": "This LXC also runs Celery and Redis to synchronize workouts and ingredients",
|
||||||
"type": "info"
|
"type": "info"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ 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 uv venv /opt/adventurelog/backend/server/.venv
|
$STD uv venv --clear /opt/adventurelog/backend/server/.venv
|
||||||
$STD /opt/adventurelog/backend/server/.venv/bin/python -m ensurepip --upgrade
|
$STD /opt/adventurelog/backend/server/.venv/bin/python -m ensurepip --upgrade
|
||||||
$STD /opt/adventurelog/backend/server/.venv/bin/python -m pip install --upgrade pip
|
$STD /opt/adventurelog/backend/server/.venv/bin/python -m pip install --upgrade pip
|
||||||
$STD /opt/adventurelog/backend/server/.venv/bin/python -m pip install -r requirements.txt
|
$STD /opt/adventurelog/backend/server/.venv/bin/python -m pip install -r requirements.txt
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ echo "${KEPUB_VERSION#v}" >"$INSTALL_DIR"/KEPUBIFY_RELEASE
|
|||||||
sed 's/^/v/' ~/.autocaliweb >"$INSTALL_DIR"/ACW_RELEASE
|
sed 's/^/v/' ~/.autocaliweb >"$INSTALL_DIR"/ACW_RELEASE
|
||||||
|
|
||||||
cd "$INSTALL_DIR"
|
cd "$INSTALL_DIR"
|
||||||
$STD uv venv "$VIRTUAL_ENV"
|
$STD uv venv --clear "$VIRTUAL_ENV"
|
||||||
$STD uv sync --all-extras --active
|
$STD uv sync --all-extras --active
|
||||||
cat <<EOF >./dirs.json
|
cat <<EOF >./dirs.json
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy" "tarball"
|
|||||||
msg_info "Installing Babybuddy"
|
msg_info "Installing Babybuddy"
|
||||||
mkdir -p /opt/data
|
mkdir -p /opt/data
|
||||||
cd /opt/babybuddy
|
cd /opt/babybuddy
|
||||||
$STD uv venv .venv
|
$STD uv venv --clear .venv
|
||||||
$STD source .venv/bin/activate
|
$STD source .venv/bin/activate
|
||||||
$STD uv pip install -r requirements.txt
|
$STD uv pip install -r requirements.txt
|
||||||
cp babybuddy/settings/production.example.py babybuddy/settings/production.py
|
cp babybuddy/settings/production.example.py babybuddy/settings/production.py
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ msg_info "Installing Bazarr"
|
|||||||
mkdir -p /var/lib/bazarr/
|
mkdir -p /var/lib/bazarr/
|
||||||
chmod 775 /opt/bazarr /var/lib/bazarr/
|
chmod 775 /opt/bazarr /var/lib/bazarr/
|
||||||
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
|
||||||
$STD uv venv /opt/bazarr/venv --python 3.12
|
$STD uv venv --clear /opt/bazarr/venv --python 3.12
|
||||||
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
|
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
|
||||||
msg_ok "Installed Bazarr"
|
msg_ok "Installed Bazarr"
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ PYTHON_VERSION="3.12" setup_uv
|
|||||||
fetch_and_deploy_gh_release "ComfyUI" "comfyanonymous/ComfyUI" "tarball" "latest" "/opt/ComfyUI"
|
fetch_and_deploy_gh_release "ComfyUI" "comfyanonymous/ComfyUI" "tarball" "latest" "/opt/ComfyUI"
|
||||||
|
|
||||||
msg_info "Python dependencies"
|
msg_info "Python dependencies"
|
||||||
$STD uv venv "/opt/ComfyUI/venv"
|
$STD uv venv --clear "/opt/ComfyUI/venv"
|
||||||
|
|
||||||
if [[ "${comfyui_gpu_type,,}" == "nvidia" ]]; then
|
if [[ "${comfyui_gpu_type,,}" == "nvidia" ]]; then
|
||||||
pytorch_url="https://download.pytorch.org/whl/cu130"
|
pytorch_url="https://download.pytorch.org/whl/cu130"
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr" "tarball"
|
|||||||
|
|
||||||
msg_info "Installing Python Dependencies with uv"
|
msg_info "Installing Python Dependencies with uv"
|
||||||
cd /opt/dispatcharr
|
cd /opt/dispatcharr
|
||||||
$STD uv venv
|
$STD uv venv --clear
|
||||||
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
|
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
|
||||||
$STD uv pip install gunicorn gevent celery redis daphne
|
$STD uv pip install gunicorn gevent celery redis daphne
|
||||||
msg_ok "Installed Python Dependencies"
|
msg_ok "Installed Python Dependencies"
|
||||||
|
|||||||
25
install/drawio-install.sh
Normal file
25
install/drawio-install.sh
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
|
# Author: Slaviša Arežina (tremor021)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.drawio.com/
|
||||||
|
|
||||||
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
setup_hwaccel
|
||||||
|
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt install -y tomcat11
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "drawio" "jgraph/drawio" "singlefile" "latest" "/var/lib/tomcat11/webapps" "draw.war"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
cleanup_lxc
|
||||||
@@ -31,8 +31,10 @@ setup_deb822_repo "matrix-org" \
|
|||||||
"main"
|
"main"
|
||||||
echo "matrix-synapse-py3 matrix-synapse/server-name string $servername" | debconf-set-selections
|
echo "matrix-synapse-py3 matrix-synapse/server-name string $servername" | debconf-set-selections
|
||||||
echo "matrix-synapse-py3 matrix-synapse/report-stats boolean false" | debconf-set-selections
|
echo "matrix-synapse-py3 matrix-synapse/report-stats boolean false" | debconf-set-selections
|
||||||
|
echo "exit 101" >/usr/sbin/policy-rc.d
|
||||||
|
chmod +x /usr/sbin/policy-rc.d
|
||||||
$STD apt install matrix-synapse-py3 -y
|
$STD apt install matrix-synapse-py3 -y
|
||||||
systemctl stop matrix-synapse
|
rm -f /usr/sbin/policy-rc.d
|
||||||
sed -i 's/127.0.0.1/0.0.0.0/g' /etc/matrix-synapse/homeserver.yaml
|
sed -i 's/127.0.0.1/0.0.0.0/g' /etc/matrix-synapse/homeserver.yaml
|
||||||
sed -i 's/'\''::1'\'', //g' /etc/matrix-synapse/homeserver.yaml
|
sed -i 's/'\''::1'\'', //g' /etc/matrix-synapse/homeserver.yaml
|
||||||
SECRET=$(openssl rand -hex 32)
|
SECRET=$(openssl rand -hex 32)
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ $STD uv tool update-shell
|
|||||||
export PATH="/root/.local/bin:$PATH"
|
export PATH="/root/.local/bin:$PATH"
|
||||||
$STD poetry self add poetry-plugin-export
|
$STD poetry self add poetry-plugin-export
|
||||||
$STD poetry export -f requirements.txt --output requirements.txt --without-hashes
|
$STD poetry export -f requirements.txt --output requirements.txt --without-hashes
|
||||||
$STD uv venv
|
$STD uv venv --clear
|
||||||
$STD uv pip install -r requirements.txt
|
$STD uv pip install -r requirements.txt
|
||||||
msg_ok "Setup Backend"
|
msg_ok "Setup Backend"
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ msg_info "Setting up Virtual Environment"
|
|||||||
mkdir -p /opt/esphome
|
mkdir -p /opt/esphome
|
||||||
mkdir -p /root/config
|
mkdir -p /root/config
|
||||||
cd /opt/esphome
|
cd /opt/esphome
|
||||||
$STD uv venv /opt/esphome/.venv
|
$STD uv venv --clear /opt/esphome/.venv
|
||||||
$STD /opt/esphome/.venv/bin/python -m ensurepip --upgrade
|
$STD /opt/esphome/.venv/bin/python -m ensurepip --upgrade
|
||||||
$STD /opt/esphome/.venv/bin/python -m pip install --upgrade pip
|
$STD /opt/esphome/.venv/bin/python -m pip install --upgrade pip
|
||||||
$STD /opt/esphome/.venv/bin/python -m pip install esphome tornado esptool
|
$STD /opt/esphome/.venv/bin/python -m pip install esphome tornado esptool
|
||||||
|
|||||||
@@ -15,31 +15,30 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y \
|
$STD apt install -y \
|
||||||
ffmpeg \
|
ffmpeg \
|
||||||
jq \
|
|
||||||
imagemagick
|
imagemagick
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
setup_hwaccel
|
setup_hwaccel
|
||||||
|
|
||||||
msg_info "Installing ASP.NET Core Runtime"
|
msg_info "Installing ASP.NET Core Runtime"
|
||||||
curl -fsSL https://packages.microsoft.com/config/debian/13/packages-microsoft-prod.deb -o packages-microsoft-prod.deb
|
setup_deb822_repo \
|
||||||
$STD dpkg -i packages-microsoft-prod.deb
|
"microsoft" \
|
||||||
rm -rf packages-microsoft-prod.deb
|
"https://packages.microsoft.com/keys/microsoft-2025.asc" \
|
||||||
$STD apt-get update
|
"https://packages.microsoft.com/debian/13/prod/" \
|
||||||
$STD apt-get install -y aspnetcore-runtime-8.0
|
"trixie"
|
||||||
|
$STD apt install -y aspnetcore-runtime-8.0
|
||||||
msg_ok "Installed ASP.NET Core Runtime"
|
msg_ok "Installed ASP.NET Core Runtime"
|
||||||
|
|
||||||
|
fetch_and_deploy_from_url "https://fileflows.com/downloads/zip" "/opt/fileflows"
|
||||||
|
|
||||||
msg_info "Setup FileFlows"
|
msg_info "Setup FileFlows"
|
||||||
$STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg
|
$STD ln -svf /usr/bin/ffmpeg /usr/local/bin/ffmpeg
|
||||||
$STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe
|
$STD ln -svf /usr/bin/ffprobe /usr/local/bin/ffprobe
|
||||||
temp_file=$(mktemp)
|
cd /opt/fileflows/Server
|
||||||
curl -fsSL https://fileflows.com/downloads/zip -o "$temp_file"
|
dotnet FileFlows.Server.dll --systemd install --root true
|
||||||
$STD unzip -d /opt/fileflows "$temp_file"
|
|
||||||
$STD bash -c "cd /opt/fileflows/Server && dotnet FileFlows.Server.dll --systemd install --root true"
|
|
||||||
systemctl enable -q --now fileflows
|
systemctl enable -q --now fileflows
|
||||||
rm -f "$temp_file"
|
|
||||||
msg_ok "Setup FileFlows"
|
msg_ok "Setup FileFlows"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ PYTHON_VERSION="3.12" setup_uv
|
|||||||
fetch_and_deploy_gh_release "huntarr" "plexguide/Huntarr.io" "tarball"
|
fetch_and_deploy_gh_release "huntarr" "plexguide/Huntarr.io" "tarball"
|
||||||
|
|
||||||
msg_info "Configure Huntarr"
|
msg_info "Configure Huntarr"
|
||||||
$STD uv venv /opt/huntarr/.venv
|
$STD uv venv --clear /opt/huntarr/.venv
|
||||||
$STD uv pip install --python /opt/huntarr/.venv/bin/python -r /opt/huntarr/requirements.txt
|
$STD uv pip install --python /opt/huntarr/.venv/bin/python -r /opt/huntarr/requirements.txt
|
||||||
msg_ok "Configured Huntrarr"
|
msg_ok "Configured Huntrarr"
|
||||||
|
|
||||||
|
|||||||
@@ -289,7 +289,7 @@ ML_DIR="${APP_DIR}/machine-learning"
|
|||||||
GEO_DIR="${INSTALL_DIR}/geodata"
|
GEO_DIR="${INSTALL_DIR}/geodata"
|
||||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
|
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v2.5.5" "$SRC_DIR"
|
fetch_and_deploy_gh_release "Immich" "immich-app/immich" "tarball" "v2.5.6" "$SRC_DIR"
|
||||||
PNPM_VERSION="$(jq -r '.packageManager | split("@")[1]' ${SRC_DIR}/package.json)"
|
PNPM_VERSION="$(jq -r '.packageManager | split("@")[1]' ${SRC_DIR}/package.json)"
|
||||||
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
NODE_VERSION="24" NODE_MODULE="pnpm@${PNPM_VERSION}" setup_nodejs
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ PYTHON_VERSION="3.12" setup_uv
|
|||||||
msg_info "Installing Jupyter"
|
msg_info "Installing Jupyter"
|
||||||
mkdir -p /opt/jupyter
|
mkdir -p /opt/jupyter
|
||||||
cd /opt/jupyter
|
cd /opt/jupyter
|
||||||
$STD uv venv /opt/jupyter/.venv
|
$STD uv venv --clear /opt/jupyter/.venv
|
||||||
$STD /opt/jupyter/.venv/bin/python -m ensurepip --upgrade
|
$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 --upgrade pip
|
||||||
$STD /opt/jupyter/.venv/bin/python -m pip install jupyter
|
$STD /opt/jupyter/.venv/bin/python -m pip install jupyter
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ fetch_and_deploy_gh_release "kapowarr" "Casvt/Kapowarr" "tarball"
|
|||||||
|
|
||||||
msg_info "Setup Kapowarr"
|
msg_info "Setup Kapowarr"
|
||||||
cd /opt/kapowarr
|
cd /opt/kapowarr
|
||||||
$STD uv venv .venv
|
$STD uv venv --clear .venv
|
||||||
$STD source .venv/bin/activate
|
$STD source .venv/bin/activate
|
||||||
$STD uv pip install --upgrade pip
|
$STD uv pip install --upgrade pip
|
||||||
$STD uv pip install --no-cache-dir -r requirements.txt
|
$STD uv pip install --no-cache-dir -r requirements.txt
|
||||||
|
|||||||
@@ -20,10 +20,19 @@ msg_ok "Installed Docker"
|
|||||||
msg_info "Detecting latest Kasm Workspaces release"
|
msg_info "Detecting latest Kasm Workspaces release"
|
||||||
KASM_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_[0-9]+\.[0-9]+\.[0-9]+\.[a-z0-9]+\.tar\.gz' | head -n 1)
|
KASM_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_[0-9]+\.[0-9]+\.[0-9]+\.[a-z0-9]+\.tar\.gz' | head -n 1)
|
||||||
if [[ -z "$KASM_URL" ]]; then
|
if [[ -z "$KASM_URL" ]]; then
|
||||||
|
SERVICE_IMAGE_URL=$(curl -fsSL "https://www.kasm.com/downloads" | tr '\n' ' ' | grep -oE 'https://kasm-static-content[^"]*kasm_release_service_images_amd64_[0-9]+\.[0-9]+\.[0-9]+\.tar\.gz' | head -n 1)
|
||||||
|
if [[ -n "$SERVICE_IMAGE_URL" ]]; then
|
||||||
|
KASM_VERSION=$(echo "$SERVICE_IMAGE_URL" | sed -E 's/.*kasm_release_service_images_amd64_([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
||||||
|
KASM_URL="https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}.tar.gz"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
KASM_VERSION=$(echo "$KASM_URL" | sed -E 's/.*kasm_release_([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$KASM_URL" ]] || [[ -z "$KASM_VERSION" ]]; then
|
||||||
msg_error "Unable to detect latest Kasm release URL."
|
msg_error "Unable to detect latest Kasm release URL."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
KASM_VERSION=$(echo "$KASM_URL" | sed -E 's/.*kasm_release_([0-9]+\.[0-9]+\.[0-9]+).*/\1/')
|
|
||||||
msg_ok "Detected Kasm Workspaces version $KASM_VERSION"
|
msg_ok "Detected Kasm Workspaces version $KASM_VERSION"
|
||||||
|
|
||||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://www.kasmweb.com/)."
|
msg_warn "WARNING: This script will run an external installer from a third-party source (https://www.kasmweb.com/)."
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ $STD useradd librenms -d /opt/librenms -M -r -s "$(which bash)"
|
|||||||
mkdir -p /opt/librenms/{rrd,logs,bootstrap/cache,storage,html}
|
mkdir -p /opt/librenms/{rrd,logs,bootstrap/cache,storage,html}
|
||||||
cd /opt/librenms
|
cd /opt/librenms
|
||||||
APP_KEY=$(openssl rand -base64 40 | tr -dc 'a-zA-Z0-9')
|
APP_KEY=$(openssl rand -base64 40 | tr -dc 'a-zA-Z0-9')
|
||||||
$STD uv venv .venv
|
$STD uv venv --clear .venv
|
||||||
$STD source .venv/bin/activate
|
$STD source .venv/bin/activate
|
||||||
$STD uv pip install -r requirements.txt
|
$STD uv pip install -r requirements.txt
|
||||||
cat <<EOF >/opt/librenms/.env
|
cat <<EOF >/opt/librenms/.env
|
||||||
|
|||||||
@@ -37,18 +37,13 @@ PYTHON_VERSION="3.12" setup_uv
|
|||||||
fetch_and_deploy_gh_release "libretranslate" "LibreTranslate/LibreTranslate" "tarball"
|
fetch_and_deploy_gh_release "libretranslate" "LibreTranslate/LibreTranslate" "tarball"
|
||||||
|
|
||||||
msg_info "Setup LibreTranslate (Patience)"
|
msg_info "Setup LibreTranslate (Patience)"
|
||||||
TORCH_VERSION=$(grep -Eo '"torch ==[0-9]+\.[0-9]+\.[0-9]+' /opt/libretranslate/pyproject.toml |
|
|
||||||
tail -n1 | sed 's/.*==//')
|
|
||||||
if [[ -z "$TORCH_VERSION" ]]; then
|
|
||||||
TORCH_VERSION="2.5.0"
|
|
||||||
fi
|
|
||||||
cd /opt/libretranslate
|
cd /opt/libretranslate
|
||||||
$STD uv venv .venv --python 3.12
|
$STD uv venv --clear .venv --python 3.12
|
||||||
$STD source .venv/bin/activate
|
$STD source .venv/bin/activate
|
||||||
$STD uv pip install --upgrade pip setuptools
|
$STD uv pip install --upgrade pip
|
||||||
|
$STD uv pip install "setuptools<81"
|
||||||
$STD uv pip install Babel==2.12.1
|
$STD uv pip install Babel==2.12.1
|
||||||
$STD .venv/bin/python scripts/compile_locales.py
|
$STD .venv/bin/python scripts/compile_locales.py
|
||||||
$STD uv pip install "torch==${TORCH_VERSION}" --extra-index-url https://download.pytorch.org/whl/cpu
|
|
||||||
$STD uv pip install "numpy<2"
|
$STD uv pip install "numpy<2"
|
||||||
$STD uv pip install .
|
$STD uv pip install .
|
||||||
$STD uv pip install libretranslate
|
$STD uv pip install libretranslate
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ msg_ok "Set up PostgreSQL"
|
|||||||
msg_info "Setting up Virtual Environment"
|
msg_info "Setting up Virtual Environment"
|
||||||
mkdir -p /opt/litellm
|
mkdir -p /opt/litellm
|
||||||
cd /opt/litellm
|
cd /opt/litellm
|
||||||
$STD uv venv /opt/litellm/.venv
|
$STD uv venv --clear /opt/litellm/.venv
|
||||||
$STD /opt/litellm/.venv/bin/python -m ensurepip --upgrade
|
$STD /opt/litellm/.venv/bin/python -m ensurepip --upgrade
|
||||||
$STD /opt/litellm/.venv/bin/python -m pip install --upgrade pip
|
$STD /opt/litellm/.venv/bin/python -m pip install --upgrade pip
|
||||||
$STD /opt/litellm/.venv/bin/python -m pip install litellm[proxy] prisma
|
$STD /opt/litellm/.venv/bin/python -m pip install litellm[proxy] prisma
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ fetch_and_deploy_gh_release "mylar3" "mylar3/mylar3" "tarball"
|
|||||||
|
|
||||||
msg_info "Installing ${APPLICATION}"
|
msg_info "Installing ${APPLICATION}"
|
||||||
mkdir -p /opt/mylar3-data
|
mkdir -p /opt/mylar3-data
|
||||||
$STD uv venv /opt/mylar3/.venv
|
$STD uv venv --clear /opt/mylar3/.venv
|
||||||
$STD /opt/mylar3/.venv/bin/python -m ensurepip --upgrade
|
$STD /opt/mylar3/.venv/bin/python -m ensurepip --upgrade
|
||||||
$STD /opt/mylar3/.venv/bin/python -m pip install --upgrade pip
|
$STD /opt/mylar3/.venv/bin/python -m pip install --upgrade pip
|
||||||
$STD /opt/mylar3/.venv/bin/python -m pip install --no-cache-dir -r /opt/mylar3/requirements.txt
|
$STD /opt/mylar3/.venv/bin/python -m pip install --no-cache-dir -r /opt/mylar3/requirements.txt
|
||||||
|
|||||||
@@ -30,29 +30,19 @@ msg_ok "Installed Nginx UI"
|
|||||||
msg_info "Configuring Nginx UI"
|
msg_info "Configuring Nginx UI"
|
||||||
mkdir -p /usr/local/etc/nginx-ui
|
mkdir -p /usr/local/etc/nginx-ui
|
||||||
cat <<EOF >/usr/local/etc/nginx-ui/app.ini
|
cat <<EOF >/usr/local/etc/nginx-ui/app.ini
|
||||||
[server]
|
|
||||||
HttpHost = 0.0.0.0
|
|
||||||
HttpPort = 9000
|
|
||||||
RunMode = release
|
|
||||||
JwtSecret = $(openssl rand -hex 32)
|
|
||||||
|
|
||||||
[nginx]
|
|
||||||
AccessLogPath = /var/log/nginx/access.log
|
|
||||||
ErrorLogPath = /var/log/nginx/error.log
|
|
||||||
ConfigDir = /etc/nginx
|
|
||||||
PIDPath = /run/nginx.pid
|
|
||||||
TestConfigCmd = nginx -t
|
|
||||||
ReloadCmd = nginx -s reload
|
|
||||||
RestartCmd = systemctl restart nginx
|
|
||||||
|
|
||||||
[app]
|
[app]
|
||||||
PageSize = 10
|
PageSize = 10
|
||||||
|
|
||||||
|
[server]
|
||||||
|
Host = 0.0.0.0
|
||||||
|
Port = 9000
|
||||||
|
RunMode = release
|
||||||
|
|
||||||
[cert]
|
[cert]
|
||||||
Email =
|
HTTPChallengePort = 9180
|
||||||
CADir =
|
|
||||||
RenewalInterval = 7
|
[terminal]
|
||||||
RecursiveNameservers =
|
StartCmd = login
|
||||||
EOF
|
EOF
|
||||||
msg_ok "Configured Nginx UI"
|
msg_ok "Configured Nginx UI"
|
||||||
|
|
||||||
@@ -78,17 +68,6 @@ EOF
|
|||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
|
|
||||||
msg_info "Creating Initial Admin User"
|
|
||||||
systemctl start nginx-ui
|
|
||||||
sleep 3
|
|
||||||
systemctl stop nginx-ui
|
|
||||||
sleep 1
|
|
||||||
/usr/local/bin/nginx-ui reset-password --config /usr/local/etc/nginx-ui/app.ini &>/tmp/nginx-ui-reset.log || true
|
|
||||||
ADMIN_PASS=$(grep -oP 'Password: \K\S+' /tmp/nginx-ui-reset.log || echo "admin")
|
|
||||||
echo -e "Nginx-UI Credentials\nUsername: admin\nPassword: $ADMIN_PASS" >~/nginx-ui.creds
|
|
||||||
rm -f /tmp/nginx-ui-reset.log
|
|
||||||
msg_ok "Created Initial Admin User"
|
|
||||||
|
|
||||||
msg_info "Starting Service"
|
msg_info "Starting Service"
|
||||||
systemctl enable -q --now nginx-ui
|
systemctl enable -q --now nginx-ui
|
||||||
rm -rf /etc/nginx/sites-enabled/default
|
rm -rf /etc/nginx/sites-enabled/default
|
||||||
|
|||||||
@@ -130,10 +130,11 @@ if [ ! -f /app/config/production.json ]; then
|
|||||||
"database": {
|
"database": {
|
||||||
"engine": "knex-native",
|
"engine": "knex-native",
|
||||||
"knex": {
|
"knex": {
|
||||||
"client": "sqlite3",
|
"client": "better-sqlite3",
|
||||||
"connection": {
|
"connection": {
|
||||||
"filename": "/data/database.sqlite"
|
"filename": "/data/database.sqlite"
|
||||||
}
|
},
|
||||||
|
"useNullAsDefault": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,10 @@ for server in "${servers[@]}"; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
msg_info "Installing dependencies"
|
||||||
|
$STD apt install -y inotify-tools
|
||||||
|
msg_ok "Installed dependencies"
|
||||||
|
|
||||||
msg_info "Installing Collabora Online"
|
msg_info "Installing Collabora Online"
|
||||||
curl -fsSL https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg -o /etc/apt/keyrings/collaboraonline-release-keyring.gpg
|
curl -fsSL https://collaboraoffice.com/downloads/gpg/collaboraonline-release-keyring.gpg -o /etc/apt/keyrings/collaboraonline-release-keyring.gpg
|
||||||
cat <<EOF >/etc/apt/sources.list.d/colloboraonline.sources
|
cat <<EOF >/etc/apt/sources.list.d/colloboraonline.sources
|
||||||
@@ -148,8 +152,15 @@ COLLABORATION_JWT_SECRET=
|
|||||||
# FRONTEND_FULL_TEXT_SEARCH_ENABLED=true
|
# FRONTEND_FULL_TEXT_SEARCH_ENABLED=true
|
||||||
# SEARCH_EXTRACTOR_TIKA_TIKA_URL=<your-tika-url>
|
# SEARCH_EXTRACTOR_TIKA_TIKA_URL=<your-tika-url>
|
||||||
|
|
||||||
## External storage test - Only NFS v4.2+ is supported
|
## Uncomment below to enable PosixFS Collaborative Mode
|
||||||
## User files
|
## Increase inotify watch/instance limits on your PVE host:
|
||||||
|
### sysctl -w fs.inotify.max_user_watches=1048576
|
||||||
|
### sysctl -w fs.inotify.max_user_instances=1024
|
||||||
|
# STORAGE_USERS_POSIX_ENABLE_COLLABORATION=true
|
||||||
|
# STORAGE_USERS_POSIX_WATCH_TYPE=inotifywait
|
||||||
|
# STORAGE_USERS_POSIX_WATCH_FS=true
|
||||||
|
# STORAGE_USERS_POSIX_WATCH_PATH=<path-to-storage-or-bind-mount>
|
||||||
|
## User files location - experimental - use at your own risk! - ZFS, NFS v4.2+ supported - CIFS/SMB not supported
|
||||||
# STORAGE_USERS_POSIX_ROOT=<path-to-your-bind_mount>
|
# STORAGE_USERS_POSIX_ROOT=<path-to-your-bind_mount>
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
|
||||||
# Author: Andy Grunwald (andygrunwald)
|
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
# Source: https://github.com/hansmi/prometheus-paperless-exporter
|
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
||||||
color
|
|
||||||
verb_ip6
|
|
||||||
catch_errors
|
|
||||||
setting_up_container
|
|
||||||
network_check
|
|
||||||
update_os
|
|
||||||
|
|
||||||
fetch_and_deploy_gh_release "prom-paperless-exp" "hansmi/prometheus-paperless-exporter" "binary"
|
|
||||||
|
|
||||||
msg_info "Configuring Prometheus Paperless NGX Exporter"
|
|
||||||
mkdir -p /etc/prometheus-paperless-ngx-exporter
|
|
||||||
echo "SECRET_AUTH_TOKEN" >/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
|
|
||||||
msg_ok "Configured Prometheus Paperless NGX Exporter"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
|
||||||
cat <<EOF >/etc/systemd/system/prometheus-paperless-ngx-exporter.service
|
|
||||||
[Unit]
|
|
||||||
Description=Prometheus Paperless NGX Exporter
|
|
||||||
Wants=network-online.target
|
|
||||||
After=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
User=root
|
|
||||||
Restart=always
|
|
||||||
Type=simple
|
|
||||||
ExecStart=/usr/bin/prometheus-paperless-exporter \
|
|
||||||
--paperless_url=http://paperless.example.org \
|
|
||||||
--paperless_auth_token_file=/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
|
|
||||||
ExecReload=/bin/kill -HUP \$MAINPID
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
systemctl enable -q --now prometheus-paperless-ngx-exporter
|
|
||||||
msg_ok "Created Service"
|
|
||||||
|
|
||||||
motd_ssh
|
|
||||||
customize
|
|
||||||
cleanup_lxc
|
|
||||||
@@ -19,7 +19,7 @@ msg_info "Installing Prometheus Proxmox VE Exporter"
|
|||||||
mkdir -p /opt/prometheus-pve-exporter
|
mkdir -p /opt/prometheus-pve-exporter
|
||||||
cd /opt/prometheus-pve-exporter
|
cd /opt/prometheus-pve-exporter
|
||||||
|
|
||||||
$STD uv venv /opt/prometheus-pve-exporter/.venv
|
$STD uv venv --clear /opt/prometheus-pve-exporter/.venv
|
||||||
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m ensurepip --upgrade
|
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m ensurepip --upgrade
|
||||||
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m pip install --upgrade pip
|
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m pip install --upgrade pip
|
||||||
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m pip install prometheus-pve-exporter
|
$STD /opt/prometheus-pve-exporter/.venv/bin/python -m pip install prometheus-pve-exporter
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ msg_ok "Setup Unrar"
|
|||||||
fetch_and_deploy_gh_release "sabnzbd-org" "sabnzbd/sabnzbd" "prebuild" "latest" "/opt/sabnzbd" "SABnzbd-*-src.tar.gz"
|
fetch_and_deploy_gh_release "sabnzbd-org" "sabnzbd/sabnzbd" "prebuild" "latest" "/opt/sabnzbd" "SABnzbd-*-src.tar.gz"
|
||||||
|
|
||||||
msg_info "Installing SABnzbd"
|
msg_info "Installing SABnzbd"
|
||||||
$STD uv venv /opt/sabnzbd/venv
|
$STD uv venv --clear /opt/sabnzbd/venv
|
||||||
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
$STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
|
||||||
msg_ok "Installed SABnzbd"
|
msg_ok "Installed SABnzbd"
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ fetch_and_deploy_gh_release "scrappar" "thecfu/scraparr" "tarball" "latest" "/op
|
|||||||
|
|
||||||
msg_info "Installing Scraparr"
|
msg_info "Installing Scraparr"
|
||||||
cd /opt/scraparr
|
cd /opt/scraparr
|
||||||
$STD uv venv /opt/scraparr/.venv
|
$STD uv venv --clear /opt/scraparr/.venv
|
||||||
$STD /opt/scraparr/.venv/bin/python -m ensurepip --upgrade
|
$STD /opt/scraparr/.venv/bin/python -m ensurepip --upgrade
|
||||||
$STD /opt/scraparr/.venv/bin/python -m pip install --upgrade pip
|
$STD /opt/scraparr/.venv/bin/python -m pip install --upgrade pip
|
||||||
$STD /opt/scraparr/.venv/bin/python -m pip install -r /opt/scraparr/src/scraparr/requirements.txt
|
$STD /opt/scraparr/.venv/bin/python -m pip install -r /opt/scraparr/src/scraparr/requirements.txt
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ msg_ok "Built Shelfmark frontend"
|
|||||||
|
|
||||||
msg_info "Configuring Shelfmark"
|
msg_info "Configuring Shelfmark"
|
||||||
cd /opt/shelfmark
|
cd /opt/shelfmark
|
||||||
$STD uv venv ./venv
|
$STD uv venv --clear ./venv
|
||||||
$STD source ./venv/bin/activate
|
$STD source ./venv/bin/activate
|
||||||
$STD uv pip install -r ./requirements-base.txt
|
$STD uv pip install -r ./requirements-base.txt
|
||||||
[[ "$DEPLOYMENT_TYPE" == "1" ]] && $STD uv pip install -r ./requirements-shelfmark.txt
|
[[ "$DEPLOYMENT_TYPE" == "1" ]] && $STD uv pip install -r ./requirements-shelfmark.txt
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
# Copyright (c) 2021-2026 community-scripts ORG
|
# Copyright (c) 2021-2026 community-scripts ORG
|
||||||
# Author: vhsdream
|
# Author: vhsdream
|
||||||
# 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/slskd/slskd/, https://soularr.net
|
# Source: https://github.com/slskd/slskd/, https://github.com/mrusse/soularr
|
||||||
|
|
||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||||
color
|
color
|
||||||
@@ -13,71 +13,71 @@ setting_up_container
|
|||||||
network_check
|
network_check
|
||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
fetch_and_deploy_gh_release "Slskd" "slskd/slskd" "prebuild" "latest" "/opt/slskd" "slskd-*-linux-x64.zip"
|
||||||
$STD apt install -y \
|
|
||||||
python3-pip
|
|
||||||
msg_ok "Installed Dependencies"
|
|
||||||
|
|
||||||
msg_info "Setup ${APPLICATION}"
|
msg_info "Configuring Slskd"
|
||||||
tmp_file=$(mktemp)
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/slskd/slskd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
curl -fsSL "https://github.com/slskd/slskd/releases/download/${RELEASE}/slskd-${RELEASE}-linux-x64.zip" -o $tmp_file
|
|
||||||
$STD unzip $tmp_file -d /opt/${APPLICATION}
|
|
||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
|
||||||
JWT_KEY=$(openssl rand -base64 44)
|
JWT_KEY=$(openssl rand -base64 44)
|
||||||
SLSKD_API_KEY=$(openssl rand -base64 44)
|
SLSKD_API_KEY=$(openssl rand -base64 44)
|
||||||
cp /opt/${APPLICATION}/config/slskd.example.yml /opt/${APPLICATION}/config/slskd.yml
|
cp /opt/slskd/config/slskd.example.yml /opt/slskd/config/slskd.yml
|
||||||
sed -i \
|
sed -i \
|
||||||
-e "\|web:|,\|cidr|s|^#||" \
|
-e '/web:/,/cidr/s/^# //' \
|
||||||
-e "\|https:|,\|5031|s|false|true|" \
|
-e '/https:/,/port: 5031/s/false/true/' \
|
||||||
|
-e '/port: 5030/,/socket/s/,.*$//' \
|
||||||
|
-e '/content_path:/,/authentication/s/false/true/' \
|
||||||
-e "\|api_keys|,\|cidr|s|<some.*$|$SLSKD_API_KEY|; \
|
-e "\|api_keys|,\|cidr|s|<some.*$|$SLSKD_API_KEY|; \
|
||||||
s|role: readonly|role: readwrite|; \
|
s|role: readonly|role: readwrite|; \
|
||||||
s|0.0.0.0/0,::/0|& # Replace this with your subnet|" \
|
s|0.0.0.0/0,::/0|& # Replace this with your subnet|" \
|
||||||
-e "\|soulseek|,\|write_queue|s|^#||" \
|
|
||||||
-e "\|jwt:|,\|ttl|s|key: ~|key: $JWT_KEY|" \
|
-e "\|jwt:|,\|ttl|s|key: ~|key: $JWT_KEY|" \
|
||||||
-e "s|^ picture|# picture|" \
|
-e '/soulseek/,/write_queue/s/^# //' \
|
||||||
/opt/${APPLICATION}/config/slskd.yml
|
-e 's/^.*picture/#&/' /opt/slskd/config/slskd.yml
|
||||||
msg_ok "Setup ${APPLICATION}"
|
msg_ok "Configured Slskd"
|
||||||
|
|
||||||
msg_info "Installing Soularr"
|
read -rp "${TAB3}Do you want to install Soularr? y/N " soularr
|
||||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
if [[ ${soularr,,} =~ ^(y|yes)$ ]]; then
|
||||||
cd /tmp
|
PYTHON_VERSION="3.11" setup_uv
|
||||||
curl -fsSL -o main.zip https://github.com/mrusse/soularr/archive/refs/heads/main.zip
|
fetch_and_deploy_gh_release "Soularr" "mrusse/soularr" "tarball" "latest" "/opt/soularr"
|
||||||
$STD unzip main.zip
|
cd /opt/soularr
|
||||||
mv soularr-main /opt/soularr
|
$STD uv venv venv
|
||||||
cd /opt/soularr
|
$STD source venv/bin/activate
|
||||||
$STD pip install -r requirements.txt
|
$STD uv pip install -r requirements.txt
|
||||||
sed -i \
|
sed -i \
|
||||||
-e "\|[Slskd]|,\|host_url|s|yourslskdapikeygoeshere|$SLSKD_API_KEY|" \
|
-e "\|[Slskd]|,\|host_url|s|yourslskdapikeygoeshere|$SLSKD_API_KEY|" \
|
||||||
-e "/host_url/s/slskd/localhost/" \
|
-e "/host_url/s/slskd/localhost/" \
|
||||||
/opt/soularr/config.ini
|
/opt/soularr/config.ini
|
||||||
sed -i \
|
cat <<EOF >/opt/soularr/run.sh
|
||||||
-e "/#This\|#Default\|INTERVAL/{N;d;}" \
|
#!/usr/bin/env bash
|
||||||
-e "/while\|#Pass/d" \
|
|
||||||
-e "\|python|s|app|opt/soularr|; s|python|python3|" \
|
|
||||||
-e "/dt/,+2d" \
|
|
||||||
/opt/soularr/run.sh
|
|
||||||
sed -i -E "/(soularr.py)/s/.{5}$//; /if/,/fi/s/.{4}//" /opt/soularr/run.sh
|
|
||||||
chmod +x /opt/soularr/run.sh
|
|
||||||
msg_ok "Installed Soularr"
|
|
||||||
|
|
||||||
msg_info "Creating Services"
|
if ps aux | grep "[s]oularr.py" >/dev/null; then
|
||||||
cat <<EOF >/etc/systemd/system/${APPLICATION}.service
|
echo "Soularr is already running. Exiting..."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
source /opt/soularr/venv/bin/activate
|
||||||
|
uv run python3 -u /opt/soularr/soularr.py --config-dir /opt/soularr
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
chmod +x /opt/soularr/run.sh
|
||||||
|
deactivate
|
||||||
|
msg_ok "Installed Soularr"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/slskd.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=${APPLICATION} Service
|
Description=Slskd Service
|
||||||
After=network.target
|
After=network.target
|
||||||
Wants=network.target
|
Wants=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
WorkingDirectory=/opt/${APPLICATION}
|
WorkingDirectory=/opt/slskd
|
||||||
ExecStart=/opt/${APPLICATION}/slskd --config /opt/${APPLICATION}/config/slskd.yml
|
ExecStart=/opt/slskd/slskd --config /opt/slskd/config/slskd.yml
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/soularr.timer
|
if [[ -d /opt/soularr ]]; then
|
||||||
|
cat <<EOF >/etc/systemd/system/soularr.timer
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Soularr service timer
|
Description=Soularr service timer
|
||||||
RefuseManualStart=no
|
RefuseManualStart=no
|
||||||
@@ -85,15 +85,15 @@ RefuseManualStop=no
|
|||||||
|
|
||||||
[Timer]
|
[Timer]
|
||||||
Persistent=true
|
Persistent=true
|
||||||
# run every 5 minutes
|
# run every 10 minutes
|
||||||
OnCalendar=*-*-* *:0/5:00
|
OnCalendar=*-*-* *:0/10:00
|
||||||
Unit=soularr.service
|
Unit=soularr.service
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=timers.target
|
WantedBy=timers.target
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cat <<EOF >/etc/systemd/system/soularr.service
|
cat <<EOF >/etc/systemd/system/soularr.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Soularr service
|
Description=Soularr service
|
||||||
After=network.target slskd.service
|
After=network.target slskd.service
|
||||||
@@ -106,10 +106,9 @@ ExecStart=/bin/bash -c /opt/soularr/run.sh
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now ${APPLICATION}
|
msg_warn "Add your Lidarr API key to Soularr in '/opt/soularr/config.ini', then run 'systemctl enable --now soularr.timer'"
|
||||||
systemctl enable -q soularr.timer
|
fi
|
||||||
rm -rf $tmp_file
|
systemctl enable -q --now slskd
|
||||||
rm -rf /tmp/main.zip
|
|
||||||
msg_ok "Created Services"
|
msg_ok "Created Services"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ msg_ok "Installed LibreOffice Components"
|
|||||||
|
|
||||||
msg_info "Installing Python Dependencies"
|
msg_info "Installing Python Dependencies"
|
||||||
mkdir -p /tmp/stirling-pdf
|
mkdir -p /tmp/stirling-pdf
|
||||||
$STD uv venv /opt/.venv
|
$STD uv venv --clear /opt/.venv
|
||||||
export PATH="/opt/.venv/bin:$PATH"
|
export PATH="/opt/.venv/bin:$PATH"
|
||||||
source /opt/.venv/bin/activate
|
source /opt/.venv/bin/activate
|
||||||
$STD uv pip install --upgrade pip
|
$STD uv pip install --upgrade pip
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ fetch_and_deploy_gh_release "streamlink-webui" "CrazyWolf13/streamlink-webui" "t
|
|||||||
|
|
||||||
msg_info "Setup ${APPLICATION}"
|
msg_info "Setup ${APPLICATION}"
|
||||||
mkdir -p "/opt/${APPLICATION}-download"
|
mkdir -p "/opt/${APPLICATION}-download"
|
||||||
$STD uv venv /opt/"${APPLICATION}"/backend/src/.venv
|
$STD uv venv --clear /opt/"${APPLICATION}"/backend/src/.venv
|
||||||
source /opt/"${APPLICATION}"/backend/src/.venv/bin/activate
|
source /opt/"${APPLICATION}"/backend/src/.venv/bin/activate
|
||||||
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/"${APPLICATION}"/backend/src/.venv
|
$STD uv pip install -r /opt/streamlink-webui/backend/src/requirements.txt --python=/opt/"${APPLICATION}"/backend/src/.venv
|
||||||
cd /opt/"${APPLICATION}"/frontend/src
|
cd /opt/"${APPLICATION}"/frontend/src
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ SECRET_KEY=$(openssl rand -base64 45 | sed 's/\//\\\//g')
|
|||||||
msg_info "Setup Tandoor"
|
msg_info "Setup Tandoor"
|
||||||
mkdir -p /opt/tandoor/{config,api,mediafiles,staticfiles}
|
mkdir -p /opt/tandoor/{config,api,mediafiles,staticfiles}
|
||||||
cd /opt/tandoor
|
cd /opt/tandoor
|
||||||
$STD uv venv .venv --python=python3
|
$STD uv venv --clear .venv --python=python3
|
||||||
$STD uv pip install -r requirements.txt --python .venv/bin/python
|
$STD uv pip install -r requirements.txt --python .venv/bin/python
|
||||||
cd /opt/tandoor/vue3
|
cd /opt/tandoor/vue3
|
||||||
$STD yarn install
|
$STD yarn install
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ cd /opt/Tautulli
|
|||||||
TAUTULLI_VERSION=$(get_latest_github_release "Tautulli/Tautulli" "false")
|
TAUTULLI_VERSION=$(get_latest_github_release "Tautulli/Tautulli" "false")
|
||||||
echo "${TAUTULLI_VERSION}" >/opt/Tautulli/version.txt
|
echo "${TAUTULLI_VERSION}" >/opt/Tautulli/version.txt
|
||||||
echo "master" >/opt/Tautulli/branch.txt
|
echo "master" >/opt/Tautulli/branch.txt
|
||||||
$STD uv venv
|
$STD uv venv --clear
|
||||||
$STD source /opt/Tautulli/.venv/bin/activate
|
$STD source /opt/Tautulli/.venv/bin/activate
|
||||||
$STD uv pip install -r requirements.txt
|
$STD uv pip install -r requirements.txt
|
||||||
$STD uv pip install pyopenssl
|
$STD uv pip install pyopenssl
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ msg_ok "Built Frontend"
|
|||||||
|
|
||||||
msg_info "Setting up Backend"
|
msg_info "Setting up Backend"
|
||||||
cd /opt/trip/backend
|
cd /opt/trip/backend
|
||||||
$STD uv venv /opt/trip/.venv
|
$STD uv venv --clear /opt/trip/.venv
|
||||||
$STD uv pip install --python /opt/trip/.venv/bin/python -r trip/requirements.txt
|
$STD uv pip install --python /opt/trip/.venv/bin/python -r trip/requirements.txt
|
||||||
msg_ok "Set up Backend"
|
msg_ok "Set up Backend"
|
||||||
|
|
||||||
|
|||||||
@@ -27,68 +27,6 @@ msg_ok "Installed Dependencies"
|
|||||||
|
|
||||||
fetch_and_deploy_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr" "prebuild" "latest" "/opt/UmlautAdaptarr" "linux-x64.zip"
|
fetch_and_deploy_gh_release "UmlautAdaptarr" "PCJones/Umlautadaptarr" "prebuild" "latest" "/opt/UmlautAdaptarr" "linux-x64.zip"
|
||||||
|
|
||||||
msg_info "Setting up UmlautAdaptarr"
|
|
||||||
cat <<EOF >/opt/UmlautAdaptarr/appsettings.json
|
|
||||||
{
|
|
||||||
"Logging": {
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Information",
|
|
||||||
"Microsoft.AspNetCore": "Warning"
|
|
||||||
},
|
|
||||||
"Console": {
|
|
||||||
"TimestampFormat": "yyyy-MM-dd HH:mm:ss::"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"AllowedHosts": "*",
|
|
||||||
"Kestrel": {
|
|
||||||
"Endpoints": {
|
|
||||||
"Http": {
|
|
||||||
"Url": "http://[::]:5005"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Settings": {
|
|
||||||
"UserAgent": "UmlautAdaptarr/1.0",
|
|
||||||
"UmlautAdaptarrApiHost": "https://umlautadaptarr.pcjones.de/api/v1",
|
|
||||||
"IndexerRequestsCacheDurationInMinutes": 12
|
|
||||||
},
|
|
||||||
"Sonarr": [
|
|
||||||
{
|
|
||||||
"Enabled": false,
|
|
||||||
"Name": "Sonarr",
|
|
||||||
"Host": "http://192.168.1.100:8989",
|
|
||||||
"ApiKey": "dein_sonarr_api_key"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"Radarr": [
|
|
||||||
{
|
|
||||||
"Enabled": false,
|
|
||||||
"Name": "Radarr",
|
|
||||||
"Host": "http://192.168.1.101:7878",
|
|
||||||
"ApiKey": "dein_radarr_api_key"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"Lidarr": [
|
|
||||||
{
|
|
||||||
"Enabled": false,
|
|
||||||
"Host": "http://192.168.1.102:8686",
|
|
||||||
"ApiKey": "dein_lidarr_api_key"
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"Readarr": [
|
|
||||||
{
|
|
||||||
"Enabled": false,
|
|
||||||
"Host": "http://192.168.1.103:8787",
|
|
||||||
"ApiKey": "dein_readarr_api_key"
|
|
||||||
},
|
|
||||||
],
|
|
||||||
"IpLeakTest": {
|
|
||||||
"Enabled": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
msg_ok "Setup UmlautAdaptarr"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
cat <<EOF >/etc/systemd/system/umlautadaptarr.service
|
cat <<EOF >/etc/systemd/system/umlautadaptarr.service
|
||||||
[Unit]
|
[Unit]
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ fetch_and_deploy_gh_release "warracker" "sassanix/Warracker" "tarball" "latest"
|
|||||||
|
|
||||||
msg_info "Installing Warracker"
|
msg_info "Installing Warracker"
|
||||||
cd /opt/warracker/backend
|
cd /opt/warracker/backend
|
||||||
$STD uv venv .venv
|
$STD uv venv --clear .venv
|
||||||
$STD source .venv/bin/activate
|
$STD source .venv/bin/activate
|
||||||
$STD uv pip install -r requirements.txt
|
$STD uv pip install -r requirements.txt
|
||||||
mv /opt/warracker/env.example /opt/.env
|
mv /opt/warracker/env.example /opt/.env
|
||||||
|
|||||||
@@ -15,92 +15,167 @@ update_os
|
|||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt install -y \
|
$STD apt install -y \
|
||||||
git \
|
build-essential \
|
||||||
apache2 \
|
nginx \
|
||||||
libapache2-mod-wsgi-py3
|
redis-server \
|
||||||
|
libpq-dev
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Python"
|
NODE_VERSION="22" NODE_MODULE="sass" setup_nodejs
|
||||||
$STD apt install -y python3-pip
|
setup_uv
|
||||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
PG_VERSION="16" setup_postgresql
|
||||||
msg_ok "Installed Python"
|
PG_DB_NAME="wger" PG_DB_USER="wger" setup_postgresql_db
|
||||||
|
fetch_and_deploy_gh_release "wger" "wger-project/wger" "tarball"
|
||||||
NODE_VERSION="22" NODE_MODULE="yarn,sass" setup_nodejs
|
|
||||||
|
|
||||||
msg_info "Setting up wger"
|
msg_info "Setting up wger"
|
||||||
$STD adduser wger --disabled-password --gecos ""
|
mkdir -p /opt/wger/{static,media}
|
||||||
mkdir /home/wger/db
|
chmod o+w /opt/wger/media
|
||||||
touch /home/wger/db/database.sqlite
|
cd /opt/wger
|
||||||
chown :www-data -R /home/wger/db
|
$STD corepack enable
|
||||||
chmod g+w /home/wger/db /home/wger/db/database.sqlite
|
$STD npm install
|
||||||
mkdir /home/wger/{static,media}
|
$STD npm run build:css:sass
|
||||||
chmod o+w /home/wger/media
|
$STD uv venv
|
||||||
temp_dir=$(mktemp -d)
|
$STD uv pip install . --group docker
|
||||||
cd "$temp_dir"
|
SECRET_KEY=$(openssl rand -base64 40)
|
||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
|
cat <<EOF >/opt/wger/.env
|
||||||
curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$RELEASE.tar.gz"
|
DJANGO_SETTINGS_MODULE=settings.main
|
||||||
tar xzf "$RELEASE".tar.gz
|
PYTHONPATH=/opt/wger
|
||||||
mv wger-"$RELEASE" /home/wger/src
|
|
||||||
cd /home/wger/src
|
|
||||||
$STD pip install -r requirements_prod.txt --ignore-installed
|
|
||||||
$STD pip install -e .
|
|
||||||
$STD wger create-settings --database-path /home/wger/db/database.sqlite
|
|
||||||
sed -i "s#home/wger/src/media#home/wger/media#g" /home/wger/src/settings.py
|
|
||||||
sed -i "/MEDIA_ROOT = '\/home\/wger\/media'/a STATIC_ROOT = '/home/wger/static'" /home/wger/src/settings.py
|
|
||||||
$STD wger bootstrap
|
|
||||||
$STD python3 manage.py collectstatic
|
|
||||||
rm -rf "$temp_dir"
|
|
||||||
echo "${RELEASE}" >/opt/wger_version.txt
|
|
||||||
msg_ok "Finished setting up wger"
|
|
||||||
|
|
||||||
msg_info "Creating Service"
|
DJANGO_DB_ENGINE=django.db.backends.postgresql
|
||||||
cat <<EOF >/etc/apache2/sites-available/wger.conf
|
DJANGO_DB_DATABASE=${PG_DB_NAME}
|
||||||
<Directory /home/wger/src>
|
DJANGO_DB_USER=${PG_DB_USER}
|
||||||
<Files wsgi.py>
|
DJANGO_DB_PASSWORD=${PG_DB_PASS}
|
||||||
Require all granted
|
DJANGO_DB_HOST=localhost
|
||||||
</Files>
|
DJANGO_DB_PORT=5432
|
||||||
</Directory>
|
DATABASE_URL=postgresql://${PG_DB_USER}:${PG_DB_PASS}@localhost:5432/${PG_DB_NAME}
|
||||||
|
|
||||||
<VirtualHost *:80>
|
DJANGO_MEDIA_ROOT=/opt/wger/media
|
||||||
WSGIApplicationGroup %{GLOBAL}
|
DJANGO_STATIC_ROOT=/opt/wger/static
|
||||||
WSGIDaemonProcess wger python-path=/home/wger/src python-home=/home/wger
|
DJANGO_STATIC_URL=/static/
|
||||||
WSGIProcessGroup wger
|
|
||||||
WSGIScriptAlias / /home/wger/src/wger/wsgi.py
|
|
||||||
WSGIPassAuthorization On
|
|
||||||
|
|
||||||
Alias /static/ /home/wger/static/
|
ALLOWED_HOSTS=${LOCAL_IP},localhost,127.0.0.1
|
||||||
<Directory /home/wger/static>
|
CSRF_TRUSTED_ORIGINS=http://${LOCAL_IP}:3000
|
||||||
Require all granted
|
|
||||||
</Directory>
|
|
||||||
|
|
||||||
Alias /media/ /home/wger/media/
|
USE_X_FORWARDED_HOST=True
|
||||||
<Directory /home/wger/media>
|
SECURE_PROXY_SSL_HEADER=HTTP_X_FORWARDED_PROTO,http
|
||||||
Require all granted
|
|
||||||
</Directory>
|
|
||||||
|
|
||||||
ErrorLog /var/log/apache2/wger-error.log
|
DJANGO_CACHE_BACKEND=django_redis.cache.RedisCache
|
||||||
CustomLog /var/log/apache2/wger-access.log combined
|
DJANGO_CACHE_LOCATION=redis://127.0.0.1:6379/1
|
||||||
</VirtualHost>
|
DJANGO_CACHE_TIMEOUT=300
|
||||||
|
DJANGO_CACHE_CLIENT_CLASS=django_redis.client.DefaultClient
|
||||||
|
AXES_CACHE_ALIAS=default
|
||||||
|
|
||||||
|
USE_CELERY=True
|
||||||
|
CELERY_BROKER=redis://127.0.0.1:6379/2
|
||||||
|
CELERY_BACKEND=redis://127.0.0.1:6379/2
|
||||||
|
|
||||||
|
SITE_URL=http://${LOCAL_IP}:3000
|
||||||
|
SECRET_KEY=${SECRET_KEY}
|
||||||
EOF
|
EOF
|
||||||
$STD a2dissite 000-default.conf
|
set -a && source /opt/wger/.env && set +a
|
||||||
$STD a2ensite wger
|
$STD uv run wger bootstrap
|
||||||
systemctl restart apache2
|
$STD uv run python manage.py collectstatic --no-input
|
||||||
|
cat <<EOF | uv run python manage.py shell
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
User = get_user_model()
|
||||||
|
|
||||||
|
user, created = User.objects.get_or_create(
|
||||||
|
username="admin",
|
||||||
|
defaults={"email": "admin@localhost"},
|
||||||
|
)
|
||||||
|
|
||||||
|
if created:
|
||||||
|
user.set_password("${PG_DB_PASS}")
|
||||||
|
user.is_superuser = True
|
||||||
|
user.is_staff = True
|
||||||
|
user.save()
|
||||||
|
EOF
|
||||||
|
msg_ok "Set up wger"
|
||||||
|
msg_info "Creating Config and Services"
|
||||||
cat <<EOF >/etc/systemd/system/wger.service
|
cat <<EOF >/etc/systemd/system/wger.service
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=wger Service
|
Description=wger Gunicorn
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
|
||||||
User=root
|
User=root
|
||||||
ExecStart=/usr/local/bin/wger start -a 0.0.0.0 -p 3000
|
WorkingDirectory=/opt/wger
|
||||||
|
EnvironmentFile=/opt/wger/.env
|
||||||
|
ExecStart=/opt/wger/.venv/bin/gunicorn \
|
||||||
|
--bind 127.0.0.1:8000 \
|
||||||
|
--workers 3 \
|
||||||
|
--threads 2 \
|
||||||
|
--timeout 120 \
|
||||||
|
wger.wsgi:application
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
systemctl enable -q --now wger
|
cat <<EOF >/etc/systemd/system/celery.service
|
||||||
msg_ok "Created Service"
|
[Unit]
|
||||||
|
Description=wger Celery Worker
|
||||||
|
After=network.target redis-server.service
|
||||||
|
Requires=redis-server.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/wger
|
||||||
|
EnvironmentFile=/opt/wger/.env
|
||||||
|
ExecStart=/opt/wger/.venv/bin/celery -A wger worker -l info
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
mkdir -p /var/lib/wger/celery
|
||||||
|
chmod 700 /var/lib/wger/celery
|
||||||
|
cat <<EOF >/etc/systemd/system/celery-beat.service
|
||||||
|
[Unit]
|
||||||
|
Description=wger Celery Beat
|
||||||
|
After=network.target redis-server.service
|
||||||
|
Requires=redis-server.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
WorkingDirectory=/opt/wger
|
||||||
|
EnvironmentFile=/opt/wger/.env
|
||||||
|
ExecStart=/opt/wger/.venv/bin/celery -A wger beat -l info \
|
||||||
|
--schedule /var/lib/wger/celery/celerybeat-schedule
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
cat <<'EOF' >/etc/nginx/sites-available/wger
|
||||||
|
server {
|
||||||
|
listen 3000;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
client_max_body_size 20M;
|
||||||
|
|
||||||
|
location /static/ {
|
||||||
|
alias /opt/wger/static/;
|
||||||
|
expires 30d;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /media/ {
|
||||||
|
alias /opt/wger/media/;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:8000;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_redirect off;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
$STD rm -f /etc/nginx/sites-enabled/default
|
||||||
|
$STD ln -sf /etc/nginx/sites-available/wger /etc/nginx/sites-enabled/wger
|
||||||
|
systemctl enable -q --now redis-server nginx wger celery celery-beat
|
||||||
|
systemctl restart nginx
|
||||||
|
msg_ok "Created Config and Services"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|||||||
@@ -3078,10 +3078,10 @@ settings_menu() {
|
|||||||
|
|
||||||
case "$choice" in
|
case "$choice" in
|
||||||
1) diagnostics_menu ;;
|
1) diagnostics_menu ;;
|
||||||
2) nano /usr/local/community-scripts/default.vars ;;
|
2) ${EDITOR:-nano} /usr/local/community-scripts/default.vars ;;
|
||||||
3)
|
3)
|
||||||
if [ -f "$(get_app_defaults_path)" ]; then
|
if [ -f "$(get_app_defaults_path)" ]; then
|
||||||
nano "$(get_app_defaults_path)"
|
${EDITOR:-nano} "$(get_app_defaults_path)"
|
||||||
else
|
else
|
||||||
# Back was selected (no app.vars available)
|
# Back was selected (no app.vars available)
|
||||||
return
|
return
|
||||||
@@ -3318,6 +3318,70 @@ configure_ssh_settings() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# msg_menu()
|
||||||
|
#
|
||||||
|
# - Displays a numbered menu for update_script() functions
|
||||||
|
# - In silent mode (PHS_SILENT=1): auto-selects the default option
|
||||||
|
# - In interactive mode: shows menu via read with 10s timeout + default fallback
|
||||||
|
# - Usage: CHOICE=$(msg_menu "Title" "tag1" "Description 1" "tag2" "Desc 2" ...)
|
||||||
|
# - The first item is always the default
|
||||||
|
# - Returns the selected tag to stdout
|
||||||
|
# - If no valid selection or timeout, returns the default (first) tag
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
msg_menu() {
|
||||||
|
local title="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
# Parse items into parallel arrays: tags[] and descriptions[]
|
||||||
|
local -a tags=()
|
||||||
|
local -a descs=()
|
||||||
|
while [[ $# -ge 2 ]]; do
|
||||||
|
tags+=("$1")
|
||||||
|
descs+=("$2")
|
||||||
|
shift 2
|
||||||
|
done
|
||||||
|
|
||||||
|
local default_tag="${tags[0]}"
|
||||||
|
local count=${#tags[@]}
|
||||||
|
|
||||||
|
# Silent mode: return default immediately
|
||||||
|
if [[ -n "${PHS_SILENT+x}" ]] && [[ "${PHS_SILENT}" == "1" ]]; then
|
||||||
|
echo "$default_tag"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Display menu to /dev/tty so it doesn't get captured by command substitution
|
||||||
|
{
|
||||||
|
echo ""
|
||||||
|
msg_custom "📋" "${BL}" "${title}"
|
||||||
|
echo ""
|
||||||
|
for i in "${!tags[@]}"; do
|
||||||
|
local marker=" "
|
||||||
|
[[ $i -eq 0 ]] && marker="* "
|
||||||
|
printf "${TAB3}${marker}%s) %s\n" "${tags[$i]}" "${descs[$i]}"
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
} >/dev/tty
|
||||||
|
|
||||||
|
local selection=""
|
||||||
|
read -r -t 10 -p "${TAB3}Select [default=${default_tag}, timeout 10s]: " selection </dev/tty >/dev/tty || true
|
||||||
|
|
||||||
|
# Validate selection
|
||||||
|
if [[ -n "$selection" ]]; then
|
||||||
|
for tag in "${tags[@]}"; do
|
||||||
|
if [[ "$selection" == "$tag" ]]; then
|
||||||
|
echo "$selection"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
msg_warn "Invalid selection '${selection}' - using default: ${default_tag}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$default_tag"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# start()
|
# start()
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -3595,6 +3595,7 @@ _setup_intel_arc() {
|
|||||||
$STD apt -y install \
|
$STD apt -y install \
|
||||||
intel-media-va-driver-non-free \
|
intel-media-va-driver-non-free \
|
||||||
intel-opencl-icd \
|
intel-opencl-icd \
|
||||||
|
libmfx-gen1.2 \
|
||||||
vainfo \
|
vainfo \
|
||||||
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
||||||
|
|
||||||
@@ -3621,6 +3622,7 @@ _setup_intel_arc() {
|
|||||||
intel-media-va-driver-non-free \
|
intel-media-va-driver-non-free \
|
||||||
ocl-icd-libopencl1 \
|
ocl-icd-libopencl1 \
|
||||||
libvpl2 \
|
libvpl2 \
|
||||||
|
libmfx-gen1.2 \
|
||||||
vainfo \
|
vainfo \
|
||||||
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
intel-gpu-tools 2>/dev/null || msg_warn "Some Intel Arc packages failed"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -79,11 +79,24 @@ EOF
|
|||||||
header_info
|
header_info
|
||||||
msg "Installing NetBird..."
|
msg "Installing NetBird..."
|
||||||
pct exec "$CTID" -- bash -c '
|
pct exec "$CTID" -- bash -c '
|
||||||
|
if ! command -v curl &>/dev/null; then
|
||||||
|
apt-get update -qq
|
||||||
|
apt-get install -y curl >/dev/null
|
||||||
|
fi
|
||||||
apt install -y ca-certificates gpg &>/dev/null
|
apt install -y ca-certificates gpg &>/dev/null
|
||||||
curl -fsSL "https://pkgs.netbird.io/debian/public.key" | gpg --dearmor >/usr/share/keyrings/netbird-archive-keyring.gpg
|
curl -fsSL "https://pkgs.netbird.io/debian/public.key" | gpg --dearmor >/usr/share/keyrings/netbird-archive-keyring.gpg
|
||||||
echo "deb [signed-by=/usr/share/keyrings/netbird-archive-keyring.gpg] https://pkgs.netbird.io/debian stable main" >/etc/apt/sources.list.d/netbird.list
|
echo "deb [signed-by=/usr/share/keyrings/netbird-archive-keyring.gpg] https://pkgs.netbird.io/debian stable main" >/etc/apt/sources.list.d/netbird.list
|
||||||
apt-get update &>/dev/null
|
apt-get update &>/dev/null
|
||||||
apt-get install -y netbird-ui &>/dev/null
|
apt-get install -y netbird-ui &>/dev/null
|
||||||
|
if systemctl list-unit-files docker.service &>/dev/null; then
|
||||||
|
mkdir -p /etc/systemd/system/netbird.service.d
|
||||||
|
cat <<OVERRIDE >/etc/systemd/system/netbird.service.d/after-docker.conf
|
||||||
|
[Unit]
|
||||||
|
After=docker.service
|
||||||
|
Wants=docker.service
|
||||||
|
OVERRIDE
|
||||||
|
systemctl daemon-reload
|
||||||
|
fi
|
||||||
'
|
'
|
||||||
msg "\e[1;32m ✔ Installed NetBird.\e[0m"
|
msg "\e[1;32m ✔ Installed NetBird.\e[0m"
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|||||||
@@ -89,6 +89,12 @@ if ! dig +short pkgs.tailscale.com | grep -qvE "^127\.|^0\.0\.0\.0$"; then
|
|||||||
echo "nameserver 1.1.1.1" >"$ORIG_RESOLV"
|
echo "nameserver 1.1.1.1" >"$ORIG_RESOLV"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! command -v curl &>/dev/null; then
|
||||||
|
echo "[INFO] curl not found, installing..."
|
||||||
|
apt-get update -qq
|
||||||
|
apt-get install -y curl >/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
curl -fsSL https://pkgs.tailscale.com/stable/${ID}/${VER}.noarmor.gpg \
|
curl -fsSL https://pkgs.tailscale.com/stable/${ID}/${VER}.noarmor.gpg \
|
||||||
| tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
|
| tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user