Compare commits

..

2 Commits

Author SHA1 Message Date
13af56a077 better verbose output 2025-07-22 11:47:41 +02:00
513f618f38 tools.func: increase setup_php function 2025-07-22 11:43:59 +02:00
48 changed files with 435 additions and 1261 deletions

77
.github/workflows/frontend-cicd.yml generated vendored
View File

@ -24,87 +24,12 @@ concurrency:
cancel-in-progress: false
jobs:
test-json-files:
runs-on: ubuntu-latest
defaults:
run:
working-directory: frontend
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Test JSON files
run: |
python3 << 'EOF'
import json
import glob
import os
import sys
def test_json_files():
# Change to the correct directory
json_dir = "public/json"
if not os.path.exists(json_dir):
print(f"❌ Directory not found: {json_dir}")
return False
# Find all JSON files
pattern = os.path.join(json_dir, "*.json")
json_files = glob.glob(pattern)
if not json_files:
print(f"⚠️ No JSON files found in {json_dir}")
return True
print(f"Testing {len(json_files)} JSON files for valid syntax...")
invalid_files = []
for file_path in json_files:
try:
with open(file_path, 'r', encoding='utf-8') as f:
json.load(f)
print(f"✅ Valid JSON: {file_path}")
except json.JSONDecodeError as e:
print(f"❌ Invalid JSON syntax in: {file_path}")
print(f" Error: {e}")
invalid_files.append(file_path)
except Exception as e:
print(f"⚠️ Error reading: {file_path}")
print(f" Error: {e}")
invalid_files.append(file_path)
print("\n=== JSON Validation Summary ===")
print(f"Total files tested: {len(json_files)}")
print(f"Valid files: {len(json_files) - len(invalid_files)}")
print(f"Invalid files: {len(invalid_files)}")
if invalid_files:
print("\n❌ Found invalid JSON file(s):")
for file_path in invalid_files:
print(f" - {file_path}")
return False
else:
print("\n✅ All JSON files have valid syntax!")
return True
if __name__ == "__main__":
success = test_json_files()
sys.exit(0 if success else 1)
EOF
build:
if: github.repository == 'community-scripts/ProxmoxVE'
needs: test-json-files
runs-on: ubuntu-latest
defaults:
run:
working-directory: frontend
working-directory: frontend # Set default working directory for all run steps
steps:
- name: Checkout
uses: actions/checkout@v4

View File

@ -10,82 +10,14 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-07-25
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich v1.136.0 [@vhsdream](https://github.com/vhsdream) ([#6219](https://github.com/community-scripts/ProxmoxVE/pull/6219))
- Wizarr: use absolute path to uv [@vhsdream](https://github.com/vhsdream) ([#6221](https://github.com/community-scripts/ProxmoxVE/pull/6221))
## 2025-07-24
### 🆕 New Scripts
- Alpine TeamSpeak Server [@tremor021](https://github.com/tremor021) ([#6201](https://github.com/community-scripts/ProxmoxVE/pull/6201))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- Immich: Pin Version to v1.135.3 [@MickLesk](https://github.com/MickLesk) ([#6212](https://github.com/community-scripts/ProxmoxVE/pull/6212))
- Habitica: force npm to 10 [@MickLesk](https://github.com/MickLesk) ([#6192](https://github.com/community-scripts/ProxmoxVE/pull/6192))
- sabnzbd: add uv setup in update [@MickLesk](https://github.com/MickLesk) ([#6191](https://github.com/community-scripts/ProxmoxVE/pull/6191))
- #### ✨ New Features
- SnipeIT - Update dependencies [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#6217](https://github.com/community-scripts/ProxmoxVE/pull/6217))
- Refactor: VictoriaMetrics [@tremor021](https://github.com/tremor021) ([#6210](https://github.com/community-scripts/ProxmoxVE/pull/6210))
- Headscale: Add headscale-admin UI as option [@tremor021](https://github.com/tremor021) ([#6205](https://github.com/community-scripts/ProxmoxVE/pull/6205))
- #### 🔧 Refactor
- Refactor: Gokapi [@tremor021](https://github.com/tremor021) ([#6197](https://github.com/community-scripts/ProxmoxVE/pull/6197))
- Refactor: duplicati [@tremor021](https://github.com/tremor021) ([#6202](https://github.com/community-scripts/ProxmoxVE/pull/6202))
- Refactor: go2rtc [@tremor021](https://github.com/tremor021) ([#6198](https://github.com/community-scripts/ProxmoxVE/pull/6198))
- Refactor: Headscale [@tremor021](https://github.com/tremor021) ([#6180](https://github.com/community-scripts/ProxmoxVE/pull/6180))
## 2025-07-23
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- documenso: remove customerId by creating initial user [@MickLesk](https://github.com/MickLesk) ([#6171](https://github.com/community-scripts/ProxmoxVE/pull/6171))
## 2025-07-22
### 🆕 New Scripts
- Salt ([#6116](https://github.com/community-scripts/ProxmoxVE/pull/6116))
- LinkStack ([#6137](https://github.com/community-scripts/ProxmoxVE/pull/6137))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- tools.func - fix typo for target_file [@tjcomserv](https://github.com/tjcomserv) ([#6156](https://github.com/community-scripts/ProxmoxVE/pull/6156))
- fix(nginxproxymanager.sh): Set the version number before build. [@JMarcosHP](https://github.com/JMarcosHP) ([#6139](https://github.com/community-scripts/ProxmoxVE/pull/6139))
- #### ✨ New Features
- Fixed the previous fix of the anti-nag hook and propagated fixes everywhere [@imcrazytwkr](https://github.com/imcrazytwkr) ([#6162](https://github.com/community-scripts/ProxmoxVE/pull/6162))
- [core]: Improved LXC Container Startup Handling [@MickLesk](https://github.com/MickLesk) ([#6142](https://github.com/community-scripts/ProxmoxVE/pull/6142))
- wallos: add cron in installer for yearly cost [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6133](https://github.com/community-scripts/ProxmoxVE/pull/6133))
- #### 💥 Breaking Changes
- gitea-mirror: add: migration to 3.0 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6138](https://github.com/community-scripts/ProxmoxVE/pull/6138))
- #### 🔧 Refactor
- [core]: tools.func: increase setup_php function [@MickLesk](https://github.com/MickLesk) ([#6141](https://github.com/community-scripts/ProxmoxVE/pull/6141))
### 🌐 Website
- Bump form-data from 4.0.3 to 4.0.4 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#6150](https://github.com/community-scripts/ProxmoxVE/pull/6150))
## 2025-07-21
### 🆕 New Scripts

View File

@ -1,58 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: tremor021 (Slaviša Arežina)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://teamspeak.com/en/
APP="Alpine-TeamSpeak-Server"
var_tags="${var_tags:-alpine;communication}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-256}"
var_disk="${var_disk:-2}"
var_os="${var_os:-alpine}"
var_version="${var_version:-3.22}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
if [[ ! -d /opt/teamspeak-server ]]; then
msg_error "No ${APP} Installation Found!"
exit 1
fi
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n '/teamspeak3-server_linux_amd64-/ { s/.*teamspeak3-server_linux_amd64-\([0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p; q }')
if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then
msg_info "Updating ${APP} LXC"
$STD apk -U upgrade
$STD service teamspeak stop
curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
tar -xf ./ts3server.tar.bz2
cp -ru teamspeak3-server_linux_amd64/* /opt/teamspeak-server/
rm -f ~/ts3server.tar.bz*
rm -rf teamspeak3-server_linux_amd64
echo "${RELEASE}" >~/.teamspeak-server
$STD service teamspeak start
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit 0
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}${IP}:9987${CL}"

View File

@ -1,56 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Lucas Zampieri (zampierilucas) | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Cleanuparr/Cleanuparr
APP="Cleanuparr"
var_tags="${var_tags:-arr}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f /opt/cleanuparr/Cleanuparr ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Cleanuparr/Cleanuparr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.Cleanuparr 2>/dev/null)" ]] || [[ ! -f ~/.Cleanuparr ]]; then
msg_info "Stopping ${APP}"
systemctl stop cleanuparr
msg_ok "Stopped ${APP}"
fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "$RELEASE" "/opt/cleanuparr" "*linux-amd64.zip"
msg_info "Starting ${APP}"
systemctl start cleanuparr
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:11011${CL}"

View File

@ -27,19 +27,25 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
if [[ "${RELEASE}" != "$(cat ~/.duplicati)" ]] || [[ ! -f ~/.duplicati ]]; then
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping $APP"
systemctl stop duplicati
msg_ok "Stopped $APP"
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
msg_info "Updating $APP to v${RELEASE}"
curl -fsSL "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" -o $(basename "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb")
$STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start duplicati
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -rf ~/duplicati-${RELEASE}-linux-x64-gui.deb
msg_ok "Cleanup Completed"
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"

View File

@ -28,26 +28,6 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
if [[ $APP_VERSION =~ ^2\. ]]; then
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ VERSION 2.x DETECTED" --yesno \
"WARNING: Version $APP_VERSION detected!\n\nUpdating from version 2.x will CLEAR ALL CONFIGURATION.\n\nThis includes:\n• API tokens\n• User settings\n• Repository configurations\n• All custom settings\n\nDo you want to continue with the update process?" 15 70 --defaultno
then
exit 0
fi
if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️ FINAL CONFIRMATION" --yesno \
"FINAL WARNING: This update WILL clear all configuration!\n\nBEFORE PROCEEDING, please:\n\n• Copy API tokens to a safe location\n• Backup any custom configurations\n• Note down repository settings\n\nThis action CANNOT be undone!" 18 70 --defaultno
then
whiptail --backtitle "Gitea Mirror Update" --title "Update Cancelled" --msgbox "Update process cancelled. Please backup your configuration before proceeding." 8 60
exit 0
fi
whiptail --backtitle "Gitea Mirror Update" --title "Proceeding with Update" --msgbox \
"Proceeding with version $APP_VERSION update.\n\nAll configuration will be cleared as warned." 8 50
rm -rf /opt/gitea-mirror
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then

View File

@ -27,23 +27,14 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/AlexxIT/go2rtc/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.go2rtc 2>/dev/null)" ]] || [[ ! -f ~/.go2rtc ]]; then
msg_info "Stopping service"
systemctl stop go2rtc
msg_ok "Stopped service"
fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64"
msg_info "Starting service"
systemctl start go2rtc
msg_ok "Started service"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
msg_info "Updating $APP"
systemctl stop go2rtc
cd /opt/go2rtc
rm go2rtc_linux_amd64
curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64" -o $(basename "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64")
chmod +x go2rtc_linux_amd64
systemctl start go2rtc
msg_ok "Updated $APP"
exit
}

View File

@ -27,27 +27,8 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if [[ -f /opt/${APP}_version.txt ]]; then
mv /opt/${APP}_version ~/.gokapi
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/Gokapi/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.gokapi 2>/dev/null)" ]] || [[ ! -f ~/.gokapi ]]; then
msg_info "Stopping ${APP}"
systemctl stop gokapi
msg_ok "Stopped ${APP}"
fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "gokapi-linux_amd64.zip"
msg_info "Starting ${APP}"
systemctl start gokapi
msg_ok "Started ${APP}"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
msg_error "Currently we don't provide an update function for this ${APP}."
exit
}
start
@ -57,4 +38,4 @@ 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}:53842/setup${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:53842/setup${CL}"

View File

@ -1,6 +0,0 @@
___ __ _ ______ _____ __ _____
/ | / /___ (_)___ ___ /_ __/__ ____ _____ ___ / ___/____ ___ ____ _/ /__ / ___/___ ______ _____ _____
/ /| | / / __ \/ / __ \/ _ \______/ / / _ \/ __ `/ __ `__ \\__ \/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/
/ ___ |/ / /_/ / / / / / __/_____/ / / __/ /_/ / / / / / /__/ / /_/ / __/ /_/ / ,< /_____/__/ / __/ / | |/ / __/ /
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_| /____/\___/_/ |___/\___/_/
/_/ /_/

View File

@ -1,6 +0,0 @@
________
/ ____/ /__ ____ _____ __ ______ ____ _________
/ / / / _ \/ __ `/ __ \/ / / / __ \/ __ `/ ___/ ___/
/ /___/ / __/ /_/ / / / / /_/ / /_/ / /_/ / / / /
\____/_/\___/\__,_/_/ /_/\__,_/ .___/\__,_/_/ /_/
/_/

View File

@ -1,6 +0,0 @@
__ _ __ _____ __ __
/ / (_)___ / /__/ ___// /_____ ______/ /__
/ / / / __ \/ //_/\__ \/ __/ __ `/ ___/ //_/
/ /___/ / / / / ,< ___/ / /_/ /_/ / /__/ ,<
/_____/_/_/ /_/_/|_|/____/\__/\__,_/\___/_/|_|

View File

@ -1,6 +0,0 @@
_____ ____
/ ___/____ _/ / /_
\__ \/ __ `/ / __/
___/ / /_/ / / /_
/____/\__,_/_/\__/

View File

@ -27,18 +27,18 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if [[ -f /opt/${APP}_version.txt ]]; then
mv /opt/"${APP}_version.txt" ~/.headscale
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ "${RELEASE}" != "$(cat ~/.headscale 2>/dev/null)" ]] || [[ ! -f ~/.headscale ]]; then
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
msg_info "Stopping ${APP}"
systemctl stop headscale
msg_ok "Stopped ${APP}"
fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
msg_info "Updating $APP to v${RELEASE}"
curl -fsSL "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb")
dpkg -i headscale_${RELEASE}_linux_amd64.deb
rm headscale_${RELEASE}_linux_amd64.deb
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to ${RELEASE}"
msg_info "Starting ${APP}"
# Temporary fix until headscale project resolves service getting disabled on updates.

View File

@ -58,8 +58,7 @@ function update_script() {
done
msg_ok "Image-processing libraries updated"
fi
RELEASE="1.136.0"
#RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
msg_ok "No update required. ${APP} is already at v${RELEASE}"
exit
@ -103,7 +102,7 @@ function update_script() {
mkdir -p "$ML_DIR"
rm -rf "$SRC_DIR"
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.136.0" "$SRC_DIR"
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "latest" "$SRC_DIR"
msg_info "Updating ${APP} web and microservices"
cd "$SRC_DIR"/server
@ -121,7 +120,7 @@ function update_script() {
$STD npm ci
$STD npm run build
cd "$SRC_DIR"
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,bin/start.sh} "$APP_DIR"/
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
cp -a web/build "$APP_DIR"/www
cp LICENSE "$APP_DIR"
cd "$APP_DIR"

View File

@ -1,43 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Omar Minaya | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://linkstack.org/
APP="LinkStack"
var_tags="${var_tags:-os}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-5}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -f ~/.linkstack ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
PHP_VERSION="8.3" PHP_MODULE="sqlite3" PHP_APACHE="YES" setup_php
msg_warn "LinkStack should be updated via the user interface."
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"

View File

@ -46,8 +46,6 @@ function update_script() {
msg_info "Building Frontend"
(
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
cd ./frontend || exit
$STD pnpm install
$STD pnpm upgrade
@ -74,6 +72,8 @@ function update_script() {
ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
ln -sf /usr/local/openresty/nginx/ /etc/nginx
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
for NGINX_CONF in $NGINX_CONFS; do

View File

@ -34,7 +34,6 @@ function update_script() {
msg_ok "No update required. ${APP} is already at ${RELEASE}"
exit
fi
setup_uv
msg_info "Updating $APP to ${RELEASE}"
systemctl stop sabnzbd
cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)

View File

@ -1,50 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/saltstack/salt
APP="Salt"
var_tags="${var_tags:-automations}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-3}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /etc/salt ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
if [[ ! -f /~.salt ]] || [[ "${RELEASE}" != "$(cat /~.salt)" ]]; then
msg_info "Updating $APP to ${RELEASE}"
sed -i "s/^\(Pin: version \).*/\1${RELEASE}/" /etc/apt/preferences.d/salt-pin-1001
$STD apt-get update
$STD apt-get upgrade -y
echo "${RELEASE}" >/~.salt
msg_ok "Updated ${APP} to ${RELEASE}"
else
msg_ok "${APP} is already up to date (${RELEASE})"
fi
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"

View File

@ -27,25 +27,31 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f ~/.victoriametrics ]] || [[ "${RELEASE}" != "$(cat ~/.victoriametrics)" ]]; then
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping $APP"
systemctl stop victoriametrics
[[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl stop victoriametrics-logs
msg_ok "Stopped $APP"
fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "victoria-metrics-linux-amd64-v+([0-9.]).tar.gz"
fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "vmutils-linux-amd64-v+([0-9.]).tar.gz"
fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
msg_info "Updating ${APP} to v${RELEASE}"
temp_dir=$(mktemp -d)
cd $temp_dir
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz")
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz")
find /opt/victoriametrics -maxdepth 1 -type f -executable -delete
tar -xf victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
tar -xf vmutils-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
chmod +x /opt/victoriametrics/*
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"
systemctl start victoriametrics
[[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl start victoriametrics-logs
msg_ok "Started $APP"
msg_info "Cleaning Up"
rm -rf $temp_dir
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"

View File

@ -45,13 +45,13 @@ function update_script() {
msg_info "Updating $APP to v${RELEASE}"
cd /opt/wizarr
/usr/local/bin/uv -q sync --locked
$STD /usr/local/bin/uv -q run pybabel compile -d app/translations
uv -q sync --locked
$STD uv -q run pybabel compile -d app/translations
$STD npm --prefix app/static install
$STD npm --prefix app/static run build:css
mkdir -p ./.cache
$STD tar -xf "$BACKUP_FILE" --directory=/
$STD /usr/local/bin/uv -q run flask db upgrade
$STD uv -q run flask db upgrade
msg_ok "Updated $APP to v${RELEASE}"
msg_info "Starting $APP"

View File

@ -7749,9 +7749,9 @@
}
},
"node_modules/form-data": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz",
"integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==",
"dev": true,
"license": "MIT",
"dependencies": {

View File

@ -1,35 +0,0 @@
{
"name": "Cleanuparr",
"slug": "cleanuparr",
"categories": [
14
],
"date_created": "2025-07-23",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 11011,
"documentation": "https://cleanuparr.github.io/Cleanuparr/docs/",
"website": "https://github.com/Cleanuparr/Cleanuparr",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/cleanuparr.webp",
"config_path": "/opt/cleanuparr/config",
"description": "Cleanuparr is a tool for automating the cleanup of unwanted or blocked files in Sonarr, Radarr, and supported download clients like qBittorrent, Transmission, and Deluge. It removes incomplete, blocked, or malicious downloads and can trigger replacement searches to ensure your media library stays complete and up-to-date.",
"install_methods": [
{
"type": "default",
"script": "ct/cleanuparr.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -35,10 +35,6 @@
{
"text": "Configuration settings: `/etc/headscale/config.yaml`",
"type": "info"
},
{
"text": "Access headscale-admin UI via `http://<LXC-IP>/admin/`",
"type": "info"
}
]
}

View File

@ -1,44 +0,0 @@
{
"name": "LinkStack",
"slug": "linkstack",
"categories": [
9
],
"date_created": "2025-07-22",
"type": "ct",
"updateable": true,
"privileged": false,
"config_path": "/var/www/html/linkstack/.env",
"interface_port": 80,
"documentation": "https://docs.linkstack.org/",
"website": "https://linkstack.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/linkstack.webp",
"description": "LinkStack is an open-source, self-hosted alternative to Linktree, allowing users to create a customizable profile page to share multiple links, hosted on their own server.",
"install_methods": [
{
"type": "default",
"script": "ct/linkstack.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 5,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "LinkStack can be updated via the user interface.",
"type": "info"
},
{
"text": "Complete setup via the web interface at http://<container-ip>/. Check installation logs: `cat ~/linkstack-install.log`",
"type": "info"
}
]
}

View File

@ -33,7 +33,7 @@
},
"notes": [
{
"text": "Create Proxmox-API-Token first: `https://github.com/rcourtman/Pulse?tab=readme-ov-file#creating-api-token`",
"text": "Create Proxmox-API-Token first: `https://github.com/rcourtman/Pulse?tab=readme-ov-file#creating-a-proxmox-api-token`",
"type": "Info"
},
{

View File

@ -1,35 +0,0 @@
{
"name": "Salt",
"slug": "salt",
"categories": [
19
],
"date_created": "2025-07-22",
"type": "ct",
"updateable": true,
"privileged": false,
"config_path": "/opt/salt/.env",
"interface_port": 3000,
"documentation": "https://docs.saltproject.io/salt/install-guide/en/latest/",
"website": "https://saltproject.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/salt.webp",
"description": "SaltStack Salt is a software for automating the management and configuration of IT infrastructure and applications. It is an event-driven automation tool and framework used to deploy, configure, and manage complex IT systems. Its primary functions include configuration management, where it ensures consistent configurations and manages operating system deployment and software installation. It also automates and orchestrates routine IT processes and can create self-aware, self-healing systems.",
"install_methods": [
{
"type": "default",
"script": "ct/salt.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 3,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@ -1,55 +1,40 @@
{
"name": "Teamspeak-Server",
"slug": "teamspeak-server",
"categories": [
24
],
"date_created": "2025-07-21",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 9987,
"documentation": "https://support.teamspeak.com/hc/en-us/categories/360000302017-TeamSpeak-3",
"website": "https://teamspeak.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/teamspeak-light.webp",
"config_path": "",
"description": "TeamSpeak is a voice over IP (VoIP) application, primarily used by gamers and teams to chat in real time on dedicated servers. It delivers crystalclear, lowlatency voice communication.",
"install_methods": [
{
"type": "default",
"script": "ct/teamspeak-server.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
"name": "Teamspeak-Server",
"slug": "teamspeak-server",
"categories": [
24
],
"date_created": "2025-07-21",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 9987,
"documentation": "https://support.teamspeak.com/hc/en-us/categories/360000302017-TeamSpeak-3",
"website": "https://teamspeak.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/teamspeak-light.webp",
"config_path": "",
"description": "TeamSpeak is a voice over IP (VoIP) application, primarily used by gamers and teams to chat in real time on dedicated servers. It delivers crystalclear, lowlatency voice communication.",
"install_methods": [
{
"type": "default",
"script": "ct/teamspeak-server.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
{
"type": "alpine",
"script": "ct/alpine-teamspeak-server.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 2,
"os": "alpine",
"version": "3.22"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Use `journalctl -u teamspeak-server.service` inside Debian LXC console to check for admin credentials!",
"type": "info"
},
{
"text": "Use `cat /var/log/teamspeak.err.log` inside Alpine LXC console to check for admin credentials!",
"type": "info"
}
]
"notes": [
{
"text": "Use `journalctl -u teamspeak-server.service` inside LXC console to check for admin credentials!",
"type": "info"
}
]
}

View File

@ -1,243 +1,13 @@
[
{
"name": "Brandawg93/PeaNUT",
"version": "v5.10.0",
"date": "2025-07-24T23:33:09Z"
},
{
"name": "coder/code-server",
"version": "v4.102.2",
"date": "2025-07-24T22:42:01Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.87.0-pre",
"date": "2025-07-24T18:25:57Z"
},
{
"name": "linuxserver/Heimdall",
"version": "v2.7.3",
"date": "2025-07-24T18:07:21Z"
},
{
"name": "docker/compose",
"version": "v2.39.1",
"date": "2025-07-24T17:02:01Z"
},
{
"name": "wizarrrr/wizarr",
"version": "2025.7.7",
"date": "2025-07-24T16:44:19Z"
},
{
"name": "immich-app/immich",
"version": "v1.136.0",
"date": "2025-07-24T16:42:30Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-cellulite-1",
"date": "2025-07-24T16:32:57Z"
},
{
"name": "grokability/snipe-it",
"version": "v8.2.1",
"date": "2025-07-24T14:37:54Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v1.1.0",
"date": "2025-07-24T14:08:58Z"
},
{
"name": "glpi-project/glpi",
"version": "10.0.19",
"date": "2025-07-16T09:45:14Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.2.5",
"date": "2025-07-24T11:52:16Z"
},
{
"name": "keycloak/keycloak",
"version": "26.3.2",
"date": "2025-07-24T10:14:27Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.3.0p35-rc2",
"date": "2025-07-24T07:00:54Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.10.0",
"date": "2025-07-24T06:15:19Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2187",
"date": "2025-07-24T05:56:26Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.21",
"date": "2025-07-17T04:46:25Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "advplyr/audiobookshelf",
"version": "v2.26.3",
"date": "2025-07-23T23:16:46Z"
},
{
"name": "minio/minio",
"version": "RELEASE.2025-07-23T15-54-02Z",
"date": "2025-07-23T20:35:39Z"
},
{
"name": "grafana/grafana",
"version": "v12.1.0",
"date": "2025-07-23T19:35:52Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.16.0-beta6",
"date": "2025-07-23T19:18:14Z"
},
{
"name": "fallenbagel/jellyseerr",
"version": "preview-plex-home-profile",
"date": "2025-07-23T16:40:31Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.516.1",
"date": "2025-07-23T14:16:23Z"
},
{
"name": "traefik/traefik",
"version": "v3.5.0",
"date": "2025-07-23T14:06:54Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.26.2.10099",
"date": "2025-06-11T20:10:39Z"
},
{
"name": "Prowlarr/Prowlarr",
"version": "v1.37.0.5076",
"date": "2025-06-04T11:04:53Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.103.2",
"date": "2025-07-22T11:22:26Z"
},
{
"name": "zabbix/zabbix",
"version": "7.4.1rc1",
"date": "2025-07-23T11:54:39Z"
},
{
"name": "cockpit-project/cockpit",
"version": "343",
"date": "2025-07-23T11:21:34Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.85",
"date": "2025-07-22T23:49:53Z"
},
{
"name": "raydak-labs/configarr",
"version": "v1.13.7",
"date": "2025-07-22T20:41:45Z"
},
{
"name": "ollama/ollama",
"version": "v0.9.7-rc1",
"date": "2025-07-11T22:15:00Z"
},
{
"name": "TasmoAdmin/TasmoAdmin",
"version": "v4.3.1",
"date": "2025-07-22T20:10:08Z"
},
{
"name": "esphome/esphome",
"version": "2025.7.3",
"date": "2025-07-22T20:09:49Z"
},
{
"name": "rcourtman/Pulse",
"version": "v3.42.0",
"date": "2025-07-14T22:07:28Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.24.6",
"date": "2025-07-22T17:14:21Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "21.0.2",
"date": "2025-07-22T16:58:05Z"
},
{
"name": "PCJones/UmlautAdaptarr",
"version": "v0.7.3",
"date": "2025-07-22T14:39:54Z"
},
{
"name": "element-hq/synapse",
"version": "v1.134.0",
"date": "2025-07-15T13:43:39Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.4.4",
"date": "2025-07-22T13:08:15Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.1.6",
"date": "2025-07-22T12:22:34Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.11",
"date": "2025-07-22T12:11:38Z"
},
{
"name": "home-assistant/core",
"version": "2025.7.3",
"date": "2025-07-22T08:30:59Z"
},
{
"name": "mattermost/mattermost",
"version": "v9.11.18",
"date": "2025-07-22T06:18:08Z"
},
{
"name": "adityachandelgit/BookLore",
"version": "v0.34.1",
"date": "2025-07-22T05:57:50Z"
},
{
"name": "lazy-media/Reactive-Resume",
"version": "v1.2.2",
"date": "2025-07-22T03:12:54Z"
"version": "v2.26.2",
"date": "2025-07-21T22:47:38Z"
},
{
"name": "ellite/Wallos",
@ -254,16 +24,36 @@
"version": "v1.64.0",
"date": "2025-07-21T20:56:33Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.4.0p8",
"date": "2025-07-21T19:25:40Z"
},
{
"name": "mongodb/mongo",
"version": "r8.2.0-rc0",
"date": "2025-07-21T19:07:52Z"
},
{
"name": "fallenbagel/jellyseerr",
"version": "v2.7.2",
"date": "2025-07-21T18:19:05Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.24.5",
"date": "2025-07-21T17:04:25Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.37.2",
"date": "2025-07-21T14:08:35Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.102.4",
"date": "2025-07-17T11:27:58Z"
},
{
"name": "tobychui/zoraxy",
"version": "v3.2.5r2",
@ -284,6 +74,16 @@
"version": "pmm-6401-v1.122.0",
"date": "2025-07-21T10:40:07Z"
},
{
"name": "zabbix/zabbix",
"version": "7.0.17rc2",
"date": "2025-07-21T10:37:33Z"
},
{
"name": "linuxserver/Heimdall",
"version": "v2.7.1",
"date": "2025-07-21T09:13:14Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.30.0",
@ -299,11 +99,41 @@
"version": "5.0.0",
"date": "2025-07-21T07:16:58Z"
},
{
"name": "mattermost/mattermost",
"version": "preview-v0.1",
"date": "2025-06-27T14:35:47Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2178",
"date": "2025-07-21T05:53:32Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v1.6.4",
"date": "2025-07-21T05:53:30Z"
},
{
"name": "lazy-media/Reactive-Resume",
"version": "1.2.1",
"date": "2025-07-21T03:40:58Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.2.21",
"date": "2025-07-17T04:46:25Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "21.0.2",
"date": "2025-07-20T17:02:07Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@9.1.4",
@ -314,11 +144,21 @@
"version": "sdk/v0.26.0",
"date": "2025-07-20T13:26:30Z"
},
{
"name": "wizarrrr/wizarr",
"version": "2025.7.6",
"date": "2025-07-20T13:02:43Z"
},
{
"name": "OliveTin/OliveTin",
"version": "2025.7.19",
"date": "2025-07-20T09:44:35Z"
},
{
"name": "semaphoreui/semaphore",
"version": "v2.16.0-beta1",
"date": "2025-07-20T09:43:36Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.2-rc.2",
@ -334,6 +174,16 @@
"version": "v2.11.5",
"date": "2025-07-20T03:14:42Z"
},
{
"name": "adityachandelgit/BookLore",
"version": "v0.34.0",
"date": "2025-07-19T22:17:45Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.1.5",
"date": "2025-07-19T21:50:47Z"
},
{
"name": "pelican-dev/panel",
"version": "v1.0.0-beta23",
@ -364,6 +214,36 @@
"version": "v0.29.0",
"date": "2025-07-19T08:54:54Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.2.4",
"date": "2025-07-19T07:42:25Z"
},
{
"name": "esphome/esphome",
"version": "2025.7.2",
"date": "2025-07-19T00:05:00Z"
},
{
"name": "minio/minio",
"version": "RELEASE.2025-07-18T21-56-31Z",
"date": "2025-07-18T23:56:46Z"
},
{
"name": "Brandawg93/PeaNUT",
"version": "v5.9.4",
"date": "2025-07-18T21:50:31Z"
},
{
"name": "rcourtman/Pulse",
"version": "v3.42.0",
"date": "2025-07-14T22:07:28Z"
},
{
"name": "keycloak/keycloak",
"version": "26.2.6",
"date": "2025-07-17T11:16:34Z"
},
{
"name": "theonedev/onedev",
"version": "v12.0.1",
@ -384,16 +264,41 @@
"version": "e6.0.0-M1.202507-rc.1",
"date": "2025-07-18T07:48:52Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-chat-completions-with-filters-0",
"date": "2025-07-16T08:54:57Z"
},
{
"name": "ollama/ollama",
"version": "v0.9.7-rc1",
"date": "2025-07-11T22:15:00Z"
},
{
"name": "cross-seed/cross-seed",
"version": "v6.13.1",
"date": "2025-07-17T21:36:42Z"
},
{
"name": "coder/code-server",
"version": "v4.102.1",
"date": "2025-07-17T21:20:36Z"
},
{
"name": "duplicati/duplicati",
"version": "v2.1.1.0-2.1.1.0_experimental_2025-07-17",
"date": "2025-07-17T20:11:33Z"
},
{
"name": "grafana/grafana",
"version": "v12.0.2+security-01",
"date": "2025-07-17T19:13:19Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.83",
"date": "2025-07-17T17:48:01Z"
},
{
"name": "wavelog/wavelog",
"version": "2.0.7",
@ -434,6 +339,11 @@
"version": "v1.27.1",
"date": "2025-07-16T13:29:00Z"
},
{
"name": "glpi-project/glpi",
"version": "10.0.19",
"date": "2025-07-16T09:45:14Z"
},
{
"name": "NLnetLabs/unbound",
"version": "release-1.23.1",
@ -464,6 +374,16 @@
"version": "6.8.2",
"date": "2025-07-15T15:14:16Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.519",
"date": "2025-07-15T14:43:59Z"
},
{
"name": "element-hq/synapse",
"version": "v1.134.0",
"date": "2025-07-15T13:43:39Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.7",
@ -504,6 +424,11 @@
"version": "v3.5.0",
"date": "2025-07-14T16:54:21Z"
},
{
"name": "home-assistant/core",
"version": "2025.7.2",
"date": "2025-07-14T11:29:58Z"
},
{
"name": "homebridge/homebridge",
"version": "v1.11.0",
@ -564,6 +489,16 @@
"version": "flowise@3.0.4",
"date": "2025-07-11T13:26:54Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v10.9.0",
"date": "2025-07-11T12:57:54Z"
},
{
"name": "traefik/traefik",
"version": "v3.4.4",
"date": "2025-07-11T08:41:34Z"
},
{
"name": "outline/outline",
"version": "v0.85.1",
@ -579,6 +514,11 @@
"version": "v2.13.0",
"date": "2025-07-10T19:27:54Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.10",
"date": "2025-07-10T12:04:30Z"
},
{
"name": "NginxProxyManager/nginx-proxy-manager",
"version": "v2.12.6",
@ -594,6 +534,11 @@
"version": "4.5.2",
"date": "2025-07-09T19:08:28Z"
},
{
"name": "raydak-labs/configarr",
"version": "v1.13.6",
"date": "2025-07-09T17:23:01Z"
},
{
"name": "hargata/lubelog",
"version": "v1.4.9",
@ -620,15 +565,40 @@
"date": "2025-06-26T14:34:19Z"
},
{
"name": "mysql/mysql-server",
"version": "mysql-cluster-9.4.0",
"date": "2025-07-09T08:35:30Z"
"name": "cockpit-project/cockpit",
"version": "342",
"date": "2025-07-09T08:48:21Z"
},
{
"name": "Prowlarr/Prowlarr",
"version": "v1.37.0.5076",
"date": "2025-06-04T11:04:53Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.26.2.10099",
"date": "2025-06-11T20:10:39Z"
},
{
"name": "grokability/snipe-it",
"version": "v8.1.18",
"date": "2025-07-08T20:36:37Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v1.0.2",
"date": "2025-07-08T19:14:31Z"
},
{
"name": "TwiN/gatus",
"version": "v5.20.0",
"date": "2025-07-08T16:27:11Z"
},
{
"name": "docker/compose",
"version": "v2.38.2",
"date": "2025-07-08T09:35:14Z"
},
{
"name": "photoprism/photoprism",
"version": "250707-d28b3101e",
@ -779,6 +749,16 @@
"version": "v1.3.8",
"date": "2025-06-29T07:41:53Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.6.3",
"date": "2025-06-27T14:01:06Z"
},
{
"name": "tailscale/tailscale",
"version": "v1.84.3",
"date": "2025-06-26T16:31:57Z"
},
{
"name": "node-red/node-red",
"version": "4.1.0-beta.2",
@ -824,6 +804,11 @@
"version": "v2.0.114",
"date": "2025-06-21T11:20:21Z"
},
{
"name": "immich-app/immich",
"version": "v1.135.3",
"date": "2025-06-20T20:19:20Z"
},
{
"name": "Sonarr/Sonarr",
"version": "v4.0.15.2941",
@ -1114,6 +1099,11 @@
"version": "v2.0.1727",
"date": "2025-04-21T17:53:05Z"
},
{
"name": "TasmoAdmin/TasmoAdmin",
"version": "v4.3.0",
"date": "2025-04-21T17:44:40Z"
},
{
"name": "caddyserver/caddy",
"version": "v2.10.0",
@ -1159,6 +1149,11 @@
"version": "v2.2.0",
"date": "2025-03-31T21:31:48Z"
},
{
"name": "mysql/mysql-server",
"version": "mysql-cluster-9.3.0",
"date": "2025-03-31T07:42:45Z"
},
{
"name": "louislam/dockge",
"version": "1.5.0",
@ -1294,6 +1289,11 @@
"version": "v0.5.7",
"date": "2025-01-17T15:57:17Z"
},
{
"name": "PCJones/UmlautAdaptarr",
"version": "0.7.2",
"date": "2025-01-13T22:17:18Z"
},
{
"name": "go-vikunja/vikunja",
"version": "v0.24.6",

View File

@ -1,69 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: tremor021 (Slaviša Arežina)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://teamspeak.com/en/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing dependencies"
$STD apk add --no-cache \
ca-certificates \
libstdc++ \
libc6-compat
msg_ok "Installed dependencies"
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n '/teamspeak3-server_linux_amd64-/ { s/.*teamspeak3-server_linux_amd64-\([0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p; q }')
msg_info "Installing Teamspeak Server v${RELEASE}"
mkdir -p /opt/teamspeak-server
cd /opt/teamspeak-server
curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
tar xf ts3server.tar.bz2 --strip-components=1
mkdir -p logs data lib
mv *.so lib
touch data/ts3server.sqlitedb data/query_ip_blacklist.txt data/query_ip_whitelist.txt .ts3server_license_accepted
echo "${RELEASE}" >~/.teamspeak-server
msg_ok "Installed TeamSpeak Server v${RELEASE}"
msg_info "Enabling TeamSpeak Server Service"
cat <<EOF >/etc/init.d/teamspeak
#!/sbin/openrc-run
name="TeamSpeak Server"
description="TeamSpeak 3 Server"
command="/opt/teamspeak-server/ts3server_startscript.sh"
command_args="start"
output_log="/var/log/teamspeak.out.log"
error_log="/var/log/teamspeak.err.log"
command_background=true
pidfile="/run/teamspeak-server.pid"
directory="/opt/teamspeak-server"
depend() {
need net
use dns
}
EOF
chmod +x /etc/init.d/teamspeak
$STD rc-update add teamspeak default
msg_ok "Enabled TeamSpeak Server Service"
msg_info "Starting TeamSpeak Server"
$STD service teamspeak start
msg_ok "Started TeamSpeak Server"
motd_ssh
customize
msg_info "Cleaning up"
rm -r ts3server.tar.bz* LICENSE* CHANGELOG doc serverquerydocs tsdns redist
$STD apk cache clean
msg_ok "Cleaned"

View File

@ -1,46 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Lucas Zampieri (zampierilucas) | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/Cleanuparr/Cleanuparr
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-amd64.zip"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/cleanuparr.service
[Unit]
Description=Cleanuparr Daemon
After=syslog.target network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/cleanuparr
ExecStart=/opt/cleanuparr/Cleanuparr
Restart=on-failure
RestartSec=5
Environment="PORT=11011"
Environment="CONFIG_DIR=/opt/cleanuparr/config"
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now cleanuparr
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -79,7 +79,7 @@ msg_ok "Installed Documenso"
msg_info "Create User"
PASSWORD_HASH=$(python3 -c "import bcrypt; print(bcrypt.hashpw(b'helper-scripts', bcrypt.gensalt(rounds=12)).decode())")
$STD sudo -u postgres psql -d documenso_db -c "INSERT INTO \"User\" (name, email, \"emailVerified\", password, \"identityProvider\", roles, \"createdAt\", \"lastSignedIn\", \"updatedAt\") VALUES ('helper-scripts', 'helper-scripts@local.com', '2025-01-20 17:14:45.058', '$PASSWORD_HASH', 'DOCUMENSO', ARRAY['USER', 'ADMIN']::\"Role\"[], '2025-01-20 16:04:05.543', '2025-01-20 16:14:55.249', '2025-01-20 16:14:55.25') RETURNING id;"
$STD sudo -u postgres psql -d documenso_db -c "INSERT INTO \"User\" (name, email, \"emailVerified\", password, \"identityProvider\", roles, \"createdAt\", \"lastSignedIn\", \"updatedAt\", \"customerId\") VALUES ('helper-scripts', 'helper-scripts@local.com', '2025-01-20 17:14:45.058', '$PASSWORD_HASH', 'DOCUMENSO', ARRAY['USER', 'ADMIN']::\"Role\"[], '2025-01-20 16:04:05.543', '2025-01-20 16:14:55.249', '2025-01-20 16:14:55.25', NULL) RETURNING id;"
$STD npm run prisma:migrate-deploy
msg_ok "User created"

View File

@ -20,16 +20,19 @@ $STD apt-get install -y \
libfontconfig1
msg_ok "Installed Dependencies"
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
msg_info "Setting up Duplicati"
RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
curl -fsSL "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" -o "duplicati-${RELEASE}-linux-x64-gui.deb"
$STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb
echo "${RELEASE}" >/opt/Duplicati_version.txt
msg_ok "Finished setting up Duplicati"
msg_info "Configuring duplicati"
DECRYPTKEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
{
echo "Admin password = ${ADMINPASS}"
echo "Database encryption key = ${DECRYPTKEY}"
} >>~/duplicati.creds
msg_ok "Configured duplicati"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/duplicati.service
@ -51,6 +54,10 @@ motd_ssh
customize
msg_info "Cleaning up"
rm -f duplicati-${RELEASE}-linux-x64-gui.deb
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"
motd_ssh
customize

View File

@ -42,7 +42,10 @@ if [[ "$CTTYPE" == "0" ]]; then
fi
msg_ok "Set Up Hardware Acceleration"
#RELEASE=$(curl -fsSL https://api.github.com/repos/blakeblackshear/frigate/releases/latest | jq -r '.tag_name')
msg_ok "Stop spinner to prevent segmentation fault"
msg_info "Installing Frigate v0.14.1 (Perseverance)"
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
cd ~
mkdir -p /opt/frigate/models
curl -fsSL "https://github.com/blakeblackshear/frigate/archive/refs/tags/v0.14.1.tar.gz" -o "frigate.tar.gz"

View File

@ -13,10 +13,15 @@ setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64"
msg_info "Installing go2rtc"
mkdir -p /opt/go2rtc
cd /opt/go2rtc
curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64" -o "go2rtc_linux_amd64"
chmod +x go2rtc_linux_amd64
msg_ok "Installed go2rtc"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/go2rtc.service
service_path="/etc/systemd/system/go2rtc.service"
echo "[Unit]
Description=go2rtc service
After=network.target
@ -27,8 +32,7 @@ User=root
ExecStart=/opt/go2rtc/go2rtc_linux_amd64
[Install]
WantedBy=multi-user.target
EOF
WantedBy=multi-user.target" >$service_path
systemctl enable -q --now go2rtc
msg_ok "Created Service"

View File

@ -13,12 +13,14 @@ setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "gokapi-linux_amd64.zip"
msg_info "Configuring Gokapi"
msg_info "Installing Gokapi"
LATEST=$(curl -fsSL https://api.github.com/repos/Forceu/Gokapi/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
mkdir -p /opt/gokapi/{data,config}
curl -fsSL "https://github.com/Forceu/Gokapi/releases/download/$LATEST/gokapi-linux_amd64.zip" -o "gokapi-linux_amd64.zip"
$STD unzip gokapi-linux_amd64.zip -d /opt/gokapi
rm gokapi-linux_amd64.zip
chmod +x /opt/gokapi/gokapi-linux_amd64
msg_ok "Configured Gokapi"
msg_ok "Installed Gokapi"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/gokapi.service

View File

@ -22,17 +22,16 @@ curl -fsSL "http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1
$STD dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
msg_ok "Installed Dependencies"
NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha,npm@10" setup_nodejs
NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha" setup_nodejs
fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica"
msg_info "Setup ${APPLICATION}"
cd /opt/habitica
$STD npm i
$STD npm run postinstall
cp config.json.example config.json
$STD npm run client:build
$STD gulp build:prod
cp config.json.example config.json
msg_ok "Setup ${APPLICATION}"
msg_info "Creating Service"

View File

@ -13,53 +13,19 @@ setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
read -r -p "${TAB3}Would you like to add headscale-admin UI? <y/N> " prompt
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
msg_info "Configuring headscale-admin"
$STD apt-get install -y caddy
$STD caddy stop
rm /etc/caddy/Caddyfile
cat <<'EOF' >/etc/caddy/Caddyfile
:{$PORT:80}
handle_path /admin* {
root * /opt/headscale-admin
encode gzip zstd
# Correct MIME types for JS/WASM
header {
@js_files path *.js
@wasm_files path *.wasm
Content-Type @js_files application/javascript
Content-Type @wasm_files application/wasm
X-Content-Type-Options nosniff
}
# Fallback for SPA routing
try_files {path} {path}/ index.html
file_server
}
EOF
caddy fmt --overwrite /etc/caddy/Caddyfile
systemctl start caddy
msg_ok "Configured headscale-admin"
fi
msg_info "Starting service"
RELEASE=$(curl -fsSL https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Installing ${APPLICATION} v${RELEASE}"
curl -fsSL "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb" -o "headscale_${RELEASE}_linux_amd64.deb"
$STD dpkg -i headscale_${RELEASE}_linux_amd64.deb
systemctl enable -q --now headscale
msg_ok "Service started"
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed ${APPLICATION} v${RELEASE}"
motd_ssh
customize
msg_info "Cleaning up"
rm headscale_${RELEASE}_linux_amd64.deb
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -283,7 +283,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p "$INSTALL_DIR"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${ML_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.136.0" "$SRC_DIR"
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "latest" "$SRC_DIR"
msg_info "Installing ${APPLICATION} (more patience please)"

View File

@ -1,48 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: Omar Minaya | MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://linkstack.org/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
PHP_VERSION="8.3" PHP_MODULE="sqlite3" PHP_APACHE="YES" setup_php
fetch_and_deploy_gh_release "linkstack" "linkstackorg/linkstack" "prebuild" "latest" "/var/www/html/linkstack" "linkstack.zip"
msg_info "Configuring LinkStack"
$STD a2enmod rewrite
chown -R www-data:www-data /var/www/html/linkstack
chmod -R 755 /var/www/html/linkstack
cat <<EOF >/etc/apache2/sites-available/linkstack.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/linkstack
ErrorLog /var/log/apache2/linkstack-error.log
CustomLog /var/log/apache2/linkstack-access.log combined
<Directory /var/www/html/linkstack/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
EOF
$STD a2dissite 000-default.conf
$STD a2ensite linkstack.conf
$STD systemctl restart apache2
msg_ok "Configured LinkStack"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -1,44 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: bvdberg01
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/saltstack/salt
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get install -y jq
msg_ok "Installed Dependencies"
msg_info "Setup Salt Repo"
mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public -o /etc/apt/keyrings/salt-archive-keyring.pgp
curl -fsSL https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.sources -o /etc/apt/sources.list.d/salt.sources
$STD apt-get update
msg_ok "Setup Salt Repo"
msg_info "Installing Salt"
RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
cat <<EOF >/etc/apt/preferences.d/salt-pin-1001
Package: salt-*
Pin: version ${RELEASE}
Pin-Priority: 1001
EOF
$STD apt-get install -y salt-master
echo "${RELEASE}" >/~.salt
msg_ok "Installed Salt"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@ -18,7 +18,7 @@ $STD apt-get install -y \
composer \
git \
nginx \
php8.2-{bcmath,common,ctype,ldap,curl,fileinfo,fpm,gd,iconv,intl,mbstring,mysql,soap,xml,xsl,zip,cli}
php8.2-{bcmath,common,ctype,curl,fileinfo,fpm,gd,iconv,intl,mbstring,mysql,soap,xml,xsl,zip,cli}
msg_ok "Installed Dependencies"
setup_mariadb

View File

@ -13,13 +13,15 @@ setting_up_container
network_check
update_os
fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "victoria-metrics-linux-amd64-v+([0-9.]).tar.gz"
fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "vmutils-linux-amd64-v+([0-9.]).tar.gz"
fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
msg_info "Setup VictoriaMetrics"
temp_dir=$(mktemp -d)
cd $temp_dir
mkdir -p /opt/victoriametrics/data
RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz" -o "victoria-metrics-linux-amd64-v${RELEASE}.tar.gz"
curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz" -o "vmutils-linux-amd64-v${RELEASE}.tar.gz"
tar -xf victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
tar -xf vmutils-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
chmod +x /opt/victoriametrics/*
msg_ok "Setup VictoriaMetrics"
@ -35,26 +37,10 @@ User=root
WorkingDirectory=/opt/victoriametrics
ExecStart=/opt/victoriametrics/victoria-metrics-prod --storageDataPath="/opt/victoriametrics/data"
[Install]
WantedBy=multi-user.target
EOF
cat <<EOF >/etc/systemd/system/victoriametrics-logs.service
[Unit]
Description=VictoriaMetrics Service
[Service]
Type=simple
Restart=always
User=root
WorkingDirectory=/opt/victoriametrics
ExecStart=/opt/victoriametrics/victoria-logs-prod
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now victoriametrics
systemctl enable -q --now victoriametrics-logs
msg_ok "Created Service"
motd_ssh

View File

@ -23,12 +23,12 @@ fetch_and_deploy_gh_release "wizarr" "wizarrrr/wizarr"
msg_info "Configure ${APPLICATION}"
cd /opt/wizarr
/usr/local/bin/uv -q sync --locked
$STD /usr/local/bin/uv -q run pybabel compile -d app/translations
uv -q sync --locked
$STD uv -q run pybabel compile -d app/translations
$STD npm --prefix app/static install
$STD npm --prefix app/static run build:css
mkdir -p ./.cache
$STD /usr/local/bin/uv -q run flask db upgrade
$STD uv -q run flask db upgrade
msg_ok "Configure ${APPLICATION}"
msg_info "Creating env, start script and service"

View File

@ -1201,52 +1201,7 @@ EOF
# This starts the container and executes <app>-install.sh
msg_info "Starting LXC Container"
pct start "$CTID"
# wait for status 'running'
for i in {1..10}; do
if pct status "$CTID" | grep -q "status: running"; then
msg_ok "Started LXC Container"
break
fi
sleep 1
if [ "$i" -eq 10 ]; then
msg_error "LXC Container did not reach running state"
exit 1
fi
done
if [ "$var_os" != "alpine" ]; then
msg_info "Waiting for network in LXC container"
for i in {1..10}; do
if pct exec "$CTID" -- ping -c1 -W1 deb.debian.org >/dev/null 2>&1; then
msg_ok "Network in LXC is reachable"
break
fi
if [ "$i" -lt 10 ]; then
msg_warn "No network yet in LXC (try $i/10) waiting..."
sleep 3
else
msg_error "No network in LXC after waiting."
read -r -p "Set fallback DNS (1.1.1.1/8.8.8.8)? [y/N]: " choice
case "$choice" in
[yY]*)
pct set "$CTID" --nameserver 1.1.1.1
pct set "$CTID" --nameserver 8.8.8.8
if pct exec "$CTID" -- ping -c1 -W1 deb.debian.org >/dev/null 2>&1; then
msg_ok "Network reachable after DNS fallback"
else
msg_error "Still no network/DNS in LXC! Aborting customization."
exit 1
fi
;;
*)
msg_error "Aborted by user no DNS fallback set."
exit 1
;;
esac
fi
done
fi
msg_ok "Started LXC Container"
msg_info "Customizing LXC Container"
: "${tz:=Etc/UTC}"
@ -1256,7 +1211,7 @@ EOF
http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
EOF'
pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses jq >/dev/null"
pct exec "$CTID" -- ash -c "apk add bash newt curl openssh nano mc ncurses >/dev/null"
else
sleep 3
pct exec "$CTID" -- bash -c "sed -i '/$LANG/ s/^# //' /etc/locale.gen"
@ -1274,7 +1229,7 @@ EOF'
msg_warn "Skipping timezone setup zone '$tz' not found in container"
fi
pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 jq >/dev/null"
pct exec "$CTID" -- bash -c "apt-get update >/dev/null && apt-get install -y sudo curl mc gnupg2 >/dev/null"
fi
msg_ok "Customized LXC Container"

View File

@ -438,15 +438,14 @@ function setup_php() {
# install apache2 with PHP support if requested
if [[ "$PHP_APACHE" == "YES" ]]; then
if ! dpkg -l | grep -q "libapache2-mod-php${PHP_VERSION}"; then
msg_info "Installing Apache with PHP${PHP_VERSION} support"
$STD apt-get install -y apache2 libapache2-mod-php${PHP_VERSION}
else
msg_info "Apache with PHP${PHP_VERSION} already installed skipping install"
$STD msg_info "Installing Apache with PHP${PHP_VERSION} support"
$STD apt-get install -y apache2 libapache2-mod-php"${PHP_VERSION}"
$STD msg_ok "Setup Apache with PHP${PHP_VERSION}"
fi
fi
# setup / update PHP modules
$STD apt-get install -y $MODULE_LIST
$STD apt-get install -y "$MODULE_LIST"
msg_ok "Setup PHP $PHP_VERSION"
# optional stop old PHP-FPM service
@ -485,13 +484,14 @@ function setup_php() {
# enable and restart PHP-FPM if requested
if [[ "$PHP_FPM" == "YES" ]]; then
if systemctl list-unit-files | grep -q "php${PHP_VERSION}-fpm.service"; then
$STD systemctl enable php${PHP_VERSION}-fpm
$STD systemctl restart php${PHP_VERSION}-fpm
$STD systemctl enable php"${PHP_VERSION}"-fpm
$STD systemctl restart php"${PHP_VERSION}"-fpm
else
msg_warn "FPM requested but service php${PHP_VERSION}-fpm not found"
fi
fi
}
# ------------------------------------------------------------------------------
# Installs or updates Composer globally.
#
@ -807,7 +807,7 @@ function fetch_and_deploy_gh_release() {
local max_retries=3 retry_delay=2 attempt=1 success=false resp http_code
while ((attempt <= max_retries)); do
resp=$(curl $api_timeout -fsSL -w "%{http_code}" -o /tmp/gh_rel.json "${header[@]}" "$api_url") && success=true && break
resp=$(curl "$api_timeout" -fsSL -w "%{http_code}" -o /tmp/gh_rel.json "${header[@]}" "$api_url") && success=true && break
sleep "$retry_delay"
((attempt++))
done
@ -845,7 +845,7 @@ function fetch_and_deploy_gh_release() {
[[ -z "$url" ]] && url="https://github.com/$repo/archive/refs/tags/v$version.tar.gz"
filename="${app_lc}-${version}.tar.gz"
curl $download_timeout -fsSL -o "$tmpdir/$filename" "$url" || {
curl "$download_timeout" -fsSL -o "$tmpdir/$filename" "$url" || {
msg_error "Download failed: $url"
rm -rf "$tmpdir"
return 1
@ -901,7 +901,7 @@ function fetch_and_deploy_gh_release() {
fi
filename="${url_match##*/}"
curl $download_timeout -fsSL -o "$tmpdir/$filename" "$url_match" || {
curl "$download_timeout" -fsSL -o "$tmpdir/$filename" "$url_match" || {
msg_error "Download failed: $url_match"
rm -rf "$tmpdir"
return 1
@ -944,7 +944,7 @@ function fetch_and_deploy_gh_release() {
}
filename="${asset_url##*/}"
curl $download_timeout -fsSL -o "$tmpdir/$filename" "$asset_url" || {
curl "$download_timeout" -fsSL -o "$tmpdir/$filename" "$asset_url" || {
msg_error "Download failed: $asset_url"
rm -rf "$tmpdir"
return 1
@ -1020,7 +1020,7 @@ function fetch_and_deploy_gh_release() {
local target_file="$app"
[[ "$use_filename" == "true" ]] && target_file="$filename"
curl $download_timeout -fsSL -o "$target/$target_file" "$asset_url" || {
curl "$download_timeout" -fsSL -o "$target/$target_file" "$asset_url" || {
msg_error "Download failed: $asset_url"
rm -rf "$tmpdir"
return 1

View File

@ -113,22 +113,24 @@ EOF
;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_info "Disabling subscription nag"
echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
msg_ok "Disabled subscription nag (Delete browser cache)"
;;
no)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_error "Selected no to Disabling subscription nag"
;;
esac
apt --reinstall install proxmox-widget-toolkit &>/dev/null
if [[ ! -f /etc/apt/apt.conf.d/no-nag-script ]]; then
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_info "Disabling subscription nag"
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script
apt --reinstall install proxmox-widget-toolkit &>/dev/null
msg_ok "Disabled subscription nag (Delete browser cache)"
;;
no)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_error "Selected no to Disabling subscription nag"
;;
esac
fi
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Backup Server now?" 11 58 2 \
"yes" " " \

View File

@ -9,10 +9,10 @@ header_info() {
cat <<"EOF"
____ __ _________ ____ __ ____ __ ____
/ __ \/ |/ / ____/ / __ \____ _____/ /_ / _/___ _____/ /_____ _/ / /
/ /_/ / /|_/ / / __ / /_/ / __ \/ ___/ __/ / // __ \/ ___/ __/ __ `/ / /
/ ____/ / / / /_/ / / ____/ /_/ (__ ) /_ _/ // / / (__ ) /_/ /_/ / / /
/_/ /_/ /_/\____/ /_/ \____/____/\__/ /___/_/ /_/____/\__/\__,_/_/_/
/ /_/ / /|_/ / / __ / /_/ / __ \/ ___/ __/ / // __ \/ ___/ __/ __ `/ / /
/ ____/ / / / /_/ / / ____/ /_/ (__ ) /_ _/ // / / (__ ) /_/ /_/ / / /
/_/ /_/ /_/\____/ /_/ \____/____/\__/ /___/_/ /_/____/\__/\__,_/_/_/
EOF
}
@ -112,25 +112,27 @@ EOF
;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_info "Disabling subscription nag"
# Normal GUI (proxmox-widget-toolkit)
echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
# JS library used when accessing via mobile device browser
echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; then echo 'Removing subscription nag from mobile UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script-pmgmanagerlib-mobile
msg_ok "Disabled subscription nag (Delete browser cache)"
;;
no)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_error "Selected no to disabling subscription nag"
;;
esac
apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null
if [[ ! -f /etc/apt/apt.conf.d/no-nag-script ]]; then
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu "This will disable the nag message reminding you to purchase a subscription every time you log in to the web interface.\n \nDisable subscription nag?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_info "Disabling subscription nag"
# Normal GUI:
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/.*data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script
# JS-Library used when accessing via mobile device browser
echo "DPkg::Post-Invoke { \"dpkg -V pmg-gui | grep -q '/pmgmanagerlib-mobile\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from Mobile UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; }; fi\"; };" >>/etc/apt/apt.conf.d/no-nag-script
apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null
msg_ok "Disabled subscription nag (Delete browser cache)"
;;
no)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_error "Selected no to disabling subscription nag"
;;
esac
fi
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Mail Gateway now?" 11 58 2 \
"yes" " " \

View File

@ -140,7 +140,7 @@ EOF
yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
msg_info "Disabling subscription nag"
echo "DPkg::Post-Invoke { \"if [ -s /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && ! grep -q -F 'NoMoreNagging' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; then echo 'Removing subscription nag from UI...'; sed -i '/data\.status/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; fi\" };" >/etc/apt/apt.conf.d/no-nag-script
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit 2>/dev/null && [ -f /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js ] && echo 'Removing subscription nag from UI...' && sed -i '/data\.status/{s/\!/=/;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js\"; };" >/etc/apt/apt.conf.d/no-nag-script
msg_ok "Disabled subscription nag (Delete browser cache)"
;;
no)