Compare commits

...

42 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
f19659bea0 Update CHANGELOG.md (#7274)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-29 00:13:05 +00:00
community-scripts-pr-app[bot]
9cfb549dca Update versions.json (#7273)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-29 02:12:39 +02:00
community-scripts-pr-app[bot]
ba09cbd9cc Update CHANGELOG.md (#7270)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-28 21:28:55 +00:00
community-scripts-pr-app[bot]
bc4d09b073 Update CHANGELOG.md (#7269)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-28 21:27:41 +00:00
Chris
fb2d91abe7 MMDL: add build-essential as dep (#7266)
- fixes #7265?
2025-08-28 23:27:16 +02:00
Slaviša Arežina
5146385f4c Remove hoarder (#7260) 2025-08-28 21:21:21 +02:00
community-scripts-pr-app[bot]
346a8e140c Update CHANGELOG.md (#7259)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-28 13:44:07 +00:00
Slaviša Arežina
42aa8f8868 Update keycloak.json (#7256) 2025-08-28 15:43:42 +02:00
community-scripts-pr-app[bot]
459772162f Update CHANGELOG.md (#7257)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-28 12:44:25 +00:00
CanbiZ
1d65650d28 [core]: feature - check_for_gh_release as update-handler (#7254) 2025-08-28 14:43:56 +02:00
community-scripts-pr-app[bot]
a2099bc195 Update versions.json (#7255)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-28 14:05:06 +02:00
community-scripts-pr-app[bot]
896545ab1b Update CHANGELOG.md (#7251)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-28 09:23:55 +00:00
CanbiZ
522f427677 Flaresolverr: Pin to 3.3.25 (Python Issue) (#7248) 2025-08-28 11:23:35 +02:00
community-scripts-pr-app[bot]
5d70455d93 Update CHANGELOG.md (#7250)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-28 09:23:18 +00:00
community-scripts-pr-app[bot]
01a91d8b4f Update date in json (#7249)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-08-28 09:23:13 +00:00
push-app-to-main[bot]
f66a60ee47 MediaManager (#7238) 2025-08-28 11:22:51 +02:00
community-scripts-pr-app[bot]
b4e74b2a17 Update CHANGELOG.md (#7247)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-28 05:18:17 +00:00
moshekv
644e5900d9 add support for multiple ip addresses in monitor-all.sh (#7244) 2025-08-28 07:17:58 +02:00
community-scripts-pr-app[bot]
3f3f536ebe Update CHANGELOG.md (#7246)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-28 00:12:52 +00:00
community-scripts-pr-app[bot]
baa39d05a5 Update versions.json (#7245)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-28 02:12:30 +02:00
community-scripts-pr-app[bot]
a85bca7326 Update versions.json (#7237)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-27 14:05:38 +02:00
community-scripts-pr-app[bot]
6defba8ab3 Update CHANGELOG.md (#7235)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-27 07:51:51 +00:00
CanbiZ
59f6329e85 searxng: improve installation (#7233) 2025-08-27 09:51:28 +02:00
CanbiZ
856c724b5d Update homebox service paths in homebox.sh 2025-08-27 09:38:14 +02:00
community-scripts-pr-app[bot]
67a20a9b4a Update CHANGELOG.md (#7234)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-27 07:33:10 +00:00
CanbiZ
27cd66f48a Homebox: Fix Update Script (#7232)
* Homebox: Fix Update Script

* Update homebox.sh to improve executable removal logic
2025-08-27 09:32:45 +02:00
community-scripts-pr-app[bot]
d25a12c87e Update CHANGELOG.md (#7230)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-27 00:14:23 +00:00
community-scripts-pr-app[bot]
e24315c50b Update versions.json (#7229)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-27 02:14:00 +02:00
community-scripts-pr-app[bot]
753ed67b50 Update CHANGELOG.md (#7223)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 13:13:41 +00:00
CanbiZ
d6e498050f Refactor: Post-PBS Script (#7213) 2025-08-26 15:13:16 +02:00
community-scripts-pr-app[bot]
4a69a7b39f Update CHANGELOG.md (#7222)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 12:15:48 +00:00
community-scripts-pr-app[bot]
1dcde93b4a Update date in json (#7221)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-08-26 12:15:18 +00:00
push-app-to-main[bot]
663c6570f4 tracktor (#7190)
* 'Add new script'

* Update tracktor.sh

* Update tracktor.json

---------

Co-authored-by: push-app-to-main[bot] <203845782+push-app-to-main[bot]@users.noreply.github.com>
Co-authored-by: Slaviša Arežina <58952836+tremor021@users.noreply.github.com>
2025-08-26 14:14:52 +02:00
community-scripts-pr-app[bot]
6a17e25871 Update CHANGELOG.md (#7220)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 12:10:28 +00:00
Slaviša Arežina
e609552cec Update docs URL (#7201) 2025-08-26 14:10:01 +02:00
community-scripts-pr-app[bot]
bd4b781c9e Update CHANGELOG.md (#7219)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 12:07:45 +00:00
CanbiZ
7eb6715a1f PBS: Upgrade Script for v4 (#7214)
* Refactor: Post-PBS Script

* PBS4-Upgrade-Script

* Remove unintended changes to post-pbs-install.sh
2025-08-26 14:07:16 +02:00
community-scripts-pr-app[bot]
aa0190978f Update versions.json (#7218)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 14:06:17 +02:00
community-scripts-pr-app[bot]
e0f5e588e0 Update CHANGELOG.md (#7217)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-26 12:05:55 +00:00
CanbiZ
3949e2e049 Refactor: Post-PMG-Script (#7212) 2025-08-26 14:05:30 +02:00
community-scripts-pr-app[bot]
ab4560b879 Update date in json (#7216)
Co-authored-by: GitHub Actions <github-actions[bot]@users.noreply.github.com>
2025-08-26 11:09:30 +00:00
CanbiZ
b8f854e7ad Create searxng.json 2025-08-26 13:08:56 +02:00
94 changed files with 2073 additions and 1078 deletions

View File

@@ -10,8 +10,64 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-08-29
## 2025-08-28
### 🆕 New Scripts
- MediaManager ([#7238](https://github.com/community-scripts/ProxmoxVE/pull/7238))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- MMDL: add build-essential as dep [@vhsdream](https://github.com/vhsdream) ([#7266](https://github.com/community-scripts/ProxmoxVE/pull/7266))
- #### ✨ New Features
- add support for multiple ip addresses in monitor-all.sh [@moshekv](https://github.com/moshekv) ([#7244](https://github.com/community-scripts/ProxmoxVE/pull/7244))
- [core]: feature - check_for_gh_release as update-handler [@MickLesk](https://github.com/MickLesk) ([#7254](https://github.com/community-scripts/ProxmoxVE/pull/7254))
- #### 💥 Breaking Changes
- Flaresolverr: Pin to 3.3.25 (Python Issue) [@MickLesk](https://github.com/MickLesk) ([#7248](https://github.com/community-scripts/ProxmoxVE/pull/7248))
### 🌐 Website
- #### 📝 Script Information
- Keycloak: Update website [@tremor021](https://github.com/tremor021) ([#7256](https://github.com/community-scripts/ProxmoxVE/pull/7256))
## 2025-08-27
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- searxng: improve installation [@MickLesk](https://github.com/MickLesk) ([#7233](https://github.com/community-scripts/ProxmoxVE/pull/7233))
- Homebox: Fix Update Script [@MickLesk](https://github.com/MickLesk) ([#7232](https://github.com/community-scripts/ProxmoxVE/pull/7232))
## 2025-08-26
### 🆕 New Scripts
- tracktor ([#7190](https://github.com/community-scripts/ProxmoxVE/pull/7190))
- PBS: Upgrade Script for v4 [@MickLesk](https://github.com/MickLesk) ([#7214](https://github.com/community-scripts/ProxmoxVE/pull/7214))
### 🚀 Updated Scripts
- #### ✨ New Features
- Refactor: Post-PBS-Script [@MickLesk](https://github.com/MickLesk) ([#7213](https://github.com/community-scripts/ProxmoxVE/pull/7213))
- Refactor: Post-PMG-Script [@MickLesk](https://github.com/MickLesk) ([#7212](https://github.com/community-scripts/ProxmoxVE/pull/7212))
### 🌐 Website
- #### 📝 Script Information
- [website] Update documentation URLs [@tremor021](https://github.com/tremor021) ([#7201](https://github.com/community-scripts/ProxmoxVE/pull/7201))
## 2025-08-25
### 🆕 New Scripts

View File

@@ -35,7 +35,7 @@ function update_script() {
msg_ok "Stopped service"
rm -rf /opt/flaresolverr
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.3.25" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
msg_info "Starting service"
systemctl start flaresolverr

View File

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

6
ct/headers/mediamanager Normal file
View File

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

6
ct/headers/tracktor Normal file
View File

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

View File

@@ -1,85 +0,0 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 tteck
# Author: MickLesk (Canbiz) & vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://hoarder.app/
APP="Hoarder"
var_tags="${var_tags:-bookmark}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/hoarder ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/hoarder-app/hoarder/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
PREV_RELEASE=$(cat /opt/${APP}_version.txt)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then
msg_info "Stopping Services"
systemctl stop hoarder-web hoarder-workers hoarder-browser
msg_ok "Stopped Services"
msg_info "Updating ${APP} to v${RELEASE}"
if [[ $(corepack -v) < "0.31.0" ]]; then
$STD npm install -g corepack@0.31.0
fi
if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
$STD apt-get install -y graphicsmagick ghostscript
fi
cd /opt
if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
mkdir -p /etc/hoarder
mv /opt/hoarder/.env /etc/hoarder/hoarder.env
fi
rm -rf /opt/hoarder
curl -fsSL "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
$STD unzip v"${RELEASE}".zip
mv karakeep-"${RELEASE}" /opt/hoarder
cd /opt/hoarder/apps/web
$STD pnpm install --frozen-lockfile
$STD pnpm exec next build --experimental-build-mode compile
cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
cd /opt/hoarder/apps/workers
$STD pnpm install --frozen-lockfile
export DATA_DIR=/opt/hoarder_data
cd /opt/hoarder/packages/db
$STD pnpm migrate
sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env
msg_ok "Updated ${APP} to v${RELEASE}"
msg_info "Starting Services"
systemctl start hoarder-browser hoarder-workers hoarder-web
msg_ok "Started Services"
msg_info "Cleaning up"
rm -R /opt/v"${RELEASE}".zip
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}."
fi
exit
}
start
build_container
description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"

View File

@@ -27,8 +27,9 @@ function update_script() {
exit
fi
if [[ -x /opt/homebox ]]; then
sed -i 's|/opt\b|/opt/homebox|g' /etc/systemd/system/homebox.service
sed -i 's|^ExecStart=/opt/homebox$|ExecStart=/opt/homebox/homebox|' /etc/systemd/system/homebox.service
sed -i 's|WorkingDirectory=/opt$|WorkingDirectory=/opt/homebox|' /etc/systemd/system/homebox.service
sed -i 's|ExecStart=/opt/homebox$|ExecStart=/opt/homebox/homebox|' /etc/systemd/system/homebox.service
sed -i 's|EnvironmentFile=/opt/.env$|EnvironmentFile=/opt/homebox/.env|' /etc/systemd/system/homebox.service
systemctl daemon-reload
fi
@@ -38,7 +39,9 @@ function update_script() {
systemctl stop homebox
msg_ok "${APP} Stopped"
[ -x /opt/homebox ] && rm -f /opt/homebox
if [ -f /opt/homebox ] && [ -x /opt/homebox ]; then
rm -f /opt/homebox
fi
fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz"
chmod +x /opt/homebox/homebox
[ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env

79
ct/mediamanager.sh Normal file
View File

@@ -0,0 +1,79 @@
#!/usr/bin/env bash
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2025 community-scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/maxdorninger/MediaManager
APP="MediaManager"
var_tags="${var_tags:-arr}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-3072}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/mediamanager ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
setup_uv
RELEASE=$(curl -fsSL https://api.github.com/repos/maxdorninger/MediaManager/releases/latest | jq '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.mediamanager 2>/dev/null)" ]] || [[ ! -f ~/.mediamanager ]]; then
msg_info "Stopping Service"
systemctl stop mediamanager
msg_ok "Stopped Service"
fetch_and_deploy_gh_release "MediaManager" "maxdorninger/MediaManager" "tarball" "latest" "/opt/mediamanager"
msg_info "Updating ${APP}"
MM_DIR="/opt/mm"
export CONFIG_DIR="${MM_DIR}/config"
export FRONTEND_FILES_DIR="${MM_DIR}/web/build"
export BASE_PATH=""
export PUBLIC_VERSION=""
export PUBLIC_API_URL="${BASE_PATH}/api/v1"
export BASE_PATH="${BASE_PATH}/web"
cd /opt/mediamanager/web
$STD npm ci
$STD npm run build
rm -rf "$FRONTEND_FILES_DIR"/build
cp -r build "$FRONTEND_FILES_DIR"
export BASE_PATH=""
export VIRTUAL_ENV="/opt/${MM_DIR}/venv"
cd /opt/mediamanager
rm -rf "$MM_DIR"/{media_manager,alembic*}
cp -r {media_manager,alembic*} "$MM_DIR"
$STD /usr/local/bin/uv sync --locked --active
msg_ok "Updated $APP"
msg_info "Starting Service"
systemctl start mediamanager
msg_ok "Started Service"
msg_ok "Updated Successfully"
else
msg_ok "Already up to date"
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}:8000${CL}"

72
ct/tracktor.sh Normal file
View File

@@ -0,0 +1,72 @@
#!/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: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://tracktor.bytedge.in/
APP="tracktor"
var_tags="${var_tags:-car;monitoring}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-6}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
variables
color
catch_errors
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /opt/tracktor ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -fsSL https://api.github.com/repos/javedh-dev/tracktor/releases/latest | jq -r '.tag_name' | sed 's/^v//')
if [[ "${RELEASE}" != "$(cat ~/.tracktor 2>/dev/null)" ]] || [[ ! -f ~/.tracktor ]]; then
msg_info "Stopping Service"
systemctl stop tracktor
msg_ok "Stopped Service"
msg_info "Creating Backup"
cp /opt/tracktor/app/backend/.env /opt/tracktor.env
msg_ok "Created Backup"
setup_nodejs
fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
msg_info "Updating ${APP}"
cd /opt/tracktor
$STD npm install
$STD npm run build
msg_ok "Updated $APP"
msg_info "Restoring Backup"
cp /opt/tracktor.env /opt/tracktor/app/backend/.env
msg_ok "Restored Backup"
msg_info "Starting Service"
systemctl start tracktor
msg_ok "Started Service"
msg_ok "Updated Successfully"
else
msg_ok "Already up to date"
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}:3000${CL}"

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 8080,
"documentation": null,
"documentation": "https://guacamole.apache.org/doc/gug/",
"website": "https://guacamole.apache.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/apache-guacamole.webp",
"config_path": "/etc/guacamole/guacd.conf",

View File

@@ -9,10 +9,10 @@
"updateable": false,
"privileged": false,
"interface_port": 3142,
"documentation": null,
"documentation": "https://www.unix-ag.uni-kl.de/~bloch/acng/html/index.html",
"website": "https://www.unix-ag.uni-kl.de/~bloch/acng/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/linux.webp",
"config_path": "",
"config_path": "/etc/apt-cacher-ng/acng.conf",
"description": "Apt-Cacher-NG is a caching proxy. Specialized for package files from Linux distributors, primarily for Debian (and Debian based) distributions.",
"install_methods": [
{

View File

@@ -9,8 +9,8 @@
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,
"website": null,
"documentation": "https://wiki.archlinux.org/title/Main_page",
"website": "https://archlinux.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/arch-linux.webp",
"config_path": "",
"description": "Arch Linux is a highly customizable, independent Linux distribution that gives users complete control over their system. Known for its rolling release model, Arch Linux is always up-to-date with the latest software. It's favored by experienced users who appreciate its minimalist approach, demanding a hands-on installation and configuration process. This level of control and flexibility makes it a popular choice for those who want to tailor their Linux system to their exact needs.",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": null,
"documentation": "https://sabre.io/dav/",
"website": "https://sabre.io/baikal/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/baikal.webp",
"config_path": "/opt/baikal/config/baikal.yaml",

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 4000,
"documentation": null,
"documentation": "https://0xerr0r.github.io/blocky/latest/configuration/",
"website": "https://0xerr0r.github.io/blocky/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/blocky.webp",
"config_path": "/opt/blocky/config.yml",

View File

@@ -1,40 +1,40 @@
{
"name": "BookStack",
"slug": "bookstack",
"categories": [
12
],
"date_created": "2024-11-05",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": null,
"website": "https://www.bookstackapp.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bookstack.webp",
"config_path": "/opt/bookstack/.env",
"description": "BookStack is a user-friendly documentation platform that offers a simple and intuitive experience. New users should be able to create content with basic word-processing skills. While the platform provides advanced features, they do not interfere with the core simplicity of the user experience.",
"install_methods": [
{
"type": "default",
"script": "ct/bookstack.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "admin@admin.com",
"password": "password"
},
"notes": [
{
"text": "Bookstack works only with static ip. If you Change the IP of your LXC, you Need to edit the .env File `nano /opt/bookstack/.env`",
"type": "warning"
}
]
"name": "BookStack",
"slug": "bookstack",
"categories": [
12
],
"date_created": "2024-11-05",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": "https://www.bookstackapp.com/docs/",
"website": "https://www.bookstackapp.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bookstack.webp",
"config_path": "/opt/bookstack/.env",
"description": "BookStack is a user-friendly documentation platform that offers a simple and intuitive experience. New users should be able to create content with basic word-processing skills. While the platform provides advanced features, they do not interfere with the core simplicity of the user experience.",
"install_methods": [
{
"type": "default",
"script": "ct/bookstack.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "admin@admin.com",
"password": "password"
},
"notes": [
{
"text": "Bookstack works only with static ip. If you Change the IP of your LXC, you Need to edit the .env File `nano /opt/bookstack/.env`",
"type": "warning"
}
]
}

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 80,
"documentation": null,
"documentation": "https://wiki.casaos.io/en/home",
"website": "https://www.casaos.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/casaos.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 8082,
"documentation": null,
"documentation": "https://athou.github.io/commafeed/documentation/",
"website": "https://www.commafeed.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/commafeed.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": null,
"documentation": "https://doc.crowdsec.net/",
"website": "https://crowdsec.net/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/crowdsec.webp",
"config_path": "",

View File

@@ -1,5 +1,4 @@
{
"name": "Dashy",
"slug": "dashy",
"categories": [
@@ -10,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 4000,
"documentation": null,
"documentation": "https://dashy.to/docs",
"website": "https://dashy.to/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dashy.webp",
"config_path": "/opt/dashy/user-data/conf.yml",

View File

@@ -31,5 +31,10 @@
"username": null,
"password": null
},
"notes": []
"notes": [
{
"text": "Flaresolverr is pinned to Version 3.3.25 because they add an breaking python package which doesn't work with debian 12.`",
"type": "info"
}
]
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": null,
"documentation": "https://forgejo.org/docs/latest/",
"website": "https://forgejo.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/forgejo.webp",
"config_path": "/etc/forgejo/app.ini",

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": true,
"interface_port": 5000,
"documentation": null,
"documentation": "https://docs.frigate.video/",
"website": "https://frigate.video/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/frigate.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": null,
"documentation": "https://docs.gitea.com/",
"website": "https://gitea.com",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/gitea.webp",
"config_path": "/etc/gitea/app.ini",

View File

@@ -1,35 +1,35 @@
{
"name": "Grist",
"slug": "grist",
"categories": [
12
],
"date_created": "2024-12-27",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8484,
"documentation": null,
"website": "https://www.getgrist.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/grist.webp",
"config_path": "/opt/grist/.env",
"description": "Grist is a modern, open source spreadsheet that goes beyond the grid",
"install_methods": [
{
"type": "default",
"script": "ct/grist.sh",
"resources": {
"cpu": 2,
"ram": 3072,
"hdd": 6,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "Grist",
"slug": "grist",
"categories": [
12
],
"date_created": "2024-12-27",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8484,
"documentation": "https://support.getgrist.com/self-managed/#the-essentials",
"website": "https://www.getgrist.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/grist.webp",
"config_path": "/opt/grist/.env",
"description": "Grist is a modern, open source spreadsheet that goes beyond the grid",
"install_methods": [
{
"type": "default",
"script": "ct/grist.sh",
"resources": {
"cpu": 2,
"ram": 3072,
"hdd": 6,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 7990,
"documentation": null,
"documentation": "https://github.com/linuxserver/Heimdall/blob/2.x/readme.md",
"website": "https://heimdall.site/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/heimdall.webp",
"config_path": "/opt/Heimdall/.env",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 1080,
"documentation": null,
"documentation": "https://github.com/heiher/hev-socks5-server/blob/main/README.md",
"website": "https://github.com/heiher/hev-socks5-server",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/hev.webp",
"config_path": "/opt/hivemq/conf/config.xml",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 7575,
"documentation": null,
"documentation": "https://homarr.dev/docs/getting-started/",
"website": "https://homarr.dev/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homarr.webp",
"config_path": "/opt/homarr/.env",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 8010,
"documentation": null,
"documentation": "https://github.com/bastienwirtz/homer/blob/main/README.md#table-of-contents",
"website": "https://github.com/bastienwirtz/homer",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/homer.webp",
"config_path": "/opt/homer/assets/config.yml",

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 8086,
"documentation": null,
"documentation": "https://docs.influxdata.com/",
"website": "https://www.influxdata.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/influxdb.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 26000,
"documentation": null,
"documentation": "https://www.iventoy.com/en/doc_news.html",
"website": "https://www.iventoy.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/iventoy.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 5055,
"documentation": null,
"documentation": "https://docs.jellyseerr.dev/",
"website": "https://github.com/Fallenbagel/jellyseerr",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/jellyseerr.webp",
"config_path": "/etc/jellyseerr/jellyseerr.conf",

View File

@@ -36,10 +36,6 @@
"text": "First start can take a few minutes",
"type": "warning"
},
{
"text": "This script requires some extra steps after the installation, Please checkout the `https://github.com/community-scripts/ProxmoxVE/discussions/193`",
"type": "info"
},
{
"text": "When updating, if you had modified cache-ispn.xml: Re-apply your changes to the new file, otherwise leave it unchanged.",
"type": "info"

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": null,
"documentation": "https://mafl.hywax.space/reference/configuration.html",
"website": "https://mafl.hywax.space/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mafl.webp",
"config_path": "/opt/mafl/data/config.yml",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 8283,
"documentation": null,
"documentation": "https://github.com/Luligu/matterbridge/blob/main/README.md",
"website": "https://github.com/Luligu/matterbridge",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/matterbridge.webp",
"config_path": "",

View File

@@ -1,40 +1,40 @@
{
"name": "Mattermost",
"slug": "mattermost",
"categories": [
25
],
"date_created": "2025-01-30",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 8065,
"documentation": null,
"website": "https://mattermost.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mattermost.webp",
"config_path": "/opt/mattermost/config/config.json",
"description": "Mattermost is an open source platform for secure collaboration across the entire software development lifecycle. It's written in Go and React and runs as a single Linux binary with MySQL or PostgreSQL. It has a slimilar interface and features to Slack or Discord.",
"install_methods": [
{
"type": "default",
"script": "ct/mattermost.sh",
"resources": {
"cpu": 1,
"ram": 2048,
"hdd": 8,
"os": "ubuntu",
"version": "24.04"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
"type": "warning"
}
]
"name": "Mattermost",
"slug": "mattermost",
"categories": [
25
],
"date_created": "2025-01-30",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 8065,
"documentation": "https://docs.mattermost.com/",
"website": "https://mattermost.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mattermost.webp",
"config_path": "/opt/mattermost/config/config.json",
"description": "Mattermost is an open source platform for secure collaboration across the entire software development lifecycle. It's written in Go and React and runs as a single Linux binary with MySQL or PostgreSQL. It has a slimilar interface and features to Slack or Discord.",
"install_methods": [
{
"type": "default",
"script": "ct/mattermost.sh",
"resources": {
"cpu": 1,
"ram": 2048,
"hdd": 8,
"os": "ubuntu",
"version": "24.04"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
"type": "warning"
}
]
}

View File

@@ -0,0 +1,45 @@
{
"name": "MediaManager",
"slug": "mediamanager",
"categories": [
14,
13
],
"date_created": "2025-08-28",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8000,
"documentation": "https://maxdorninger.github.io/MediaManager/introduction.html",
"config_path": "/opt/mm_data/config.toml",
"website": "https://github.com/maxdorninger/MediaManager",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mediamanager.webp",
"description": "A modern selfhosted media management system for your media library",
"install_methods": [
{
"type": "default",
"script": "ct/mediamanager.sh",
"resources": {
"cpu": 2,
"ram": 3072,
"hdd": 4,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "<email address>",
"password": "admin"
},
"notes": [
{
"text": "During the installation, provide the email address of the first admin user",
"type": "info"
},
{
"text": "You're probably going to want to use a bind mount for the media directories",
"type": "info"
}
]
}

View File

@@ -1,35 +1,35 @@
{
"name": "Medusa",
"slug": "medusa",
"categories": [
13
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8081,
"documentation": null,
"website": "https://pymedusa.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/py-medusa.webp",
"config_path": "",
"description": "Medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic: automatic torrent/nzb searching, downloading, and processing at the qualities you want.",
"install_methods": [
{
"type": "default",
"script": "ct/medusa.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 6,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "Medusa",
"slug": "medusa",
"categories": [
13
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8081,
"documentation": "https://github.com/pymedusa/Medusa/wiki",
"website": "https://pymedusa.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/py-medusa.webp",
"config_path": "",
"description": "Medusa is an automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic: automatic torrent/nzb searching, downloading, and processing at the qualities you want.",
"install_methods": [
{
"type": "default",
"script": "ct/medusa.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 6,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 8081,
"documentation": null,
"documentation": "https://github.com/alexta69/metube/blob/master/README.md",
"website": "https://github.com/alexta69/metube",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/metube.webp",
"config_path": "/opt/metube/.env",

View File

@@ -10,8 +10,8 @@
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,
"website": "https://help.mikrotik.com/docs/display/ROS/Cloud+Hosted+Router%2C+CHR",
"documentation": "https://help.mikrotik.com/docs/spaces/ROS/pages/18350234/Cloud+Hosted+Router+CHR",
"website": "https://mikrotik.com",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mikrotik.webp",
"config_path": "",
"description": "Mikrotik RouterOS CHR is a Linux-based operating system that transforms a computer into a router. It provides a wide range of features for network routing, firewall, bandwidth management, wireless access point, backhaul link, hotspot gateway, VPN server, and many others. RouterOS is a versatile solution that supports various network configurations, including those with multiple WAN links, hotspots, and VPNs. It is highly customizable, allowing administrators to configure and manage their networks according to their specific requirements. With RouterOS, network administrators can monitor and control the performance and security of their networks, ensuring reliable and secure communication for their users. The software is designed to be easy to use and provides a wide range of tools for network management, making it a valuable solution for small and large networks alike.",

View File

@@ -1,35 +1,35 @@
{
"name": "MongoDB",
"slug": "mongodb",
"categories": [
8
],
"date_created": "2024-05-18",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": null,
"website": "https://www.mongodb.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mongodb.webp",
"config_path": "",
"description": "MongoDB is a NoSQL database that uses a document-oriented data model, storing data in JSON-like documents with dynamic schemas. This design offers flexibility and scalability, making it ideal for handling large volumes of data. MongoDB supports indexing, replication, and load balancing, ensuring high performance and availability, and can distribute data across multiple servers, making it well-suited for big data applications.",
"install_methods": [
{
"type": "default",
"script": "ct/mongodb.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "MongoDB",
"slug": "mongodb",
"categories": [
8
],
"date_created": "2024-05-18",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 27017,
"documentation": "https://www.mongodb.com/docs/manual/",
"website": "https://www.mongodb.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mongodb.webp",
"config_path": "",
"description": "MongoDB is a NoSQL database that uses a document-oriented data model, storing data in JSON-like documents with dynamic schemas. This design offers flexibility and scalability, making it ideal for handling large volumes of data. MongoDB supports indexing, replication, and load balancing, ensuring high performance and availability, and can distribute data across multiple servers, making it well-suited for big data applications.",
"install_methods": [
{
"type": "default",
"script": "ct/mongodb.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": null,
"documentation": "https://docs.nextcloud.com/server/21/admin_manual/contents.html",
"website": "https://www.turnkeylinux.org/nextcloud",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/nextcloud.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 81,
"documentation": null,
"documentation": "https://nginxproxymanager.com/guide/",
"website": "https://nginxproxymanager.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/nginx-proxy-manager.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 5454,
"documentation": null,
"documentation": "https://notifiarr.wiki/",
"website": "https://notifiarr.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/notifiarr.webp",
"config_path": "/etc/notifiarr/notifiarr.conf",

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 80,
"documentation": null,
"documentation": "https://docs.ntfy.sh/",
"website": "https://ntfy.sh/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/ntfy.webp",
"config_path": "/etc/ntfy/server.yml",

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 1337,
"documentation": null,
"documentation": "https://docs.olivetin.app/",
"website": "https://www.olivetin.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/olivetin.webp",
"config_path": "/etc/OliveTin/config.yaml",

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 80,
"documentation": null,
"documentation": "https://docs.openmediavault.org/en/stable/",
"website": "https://www.openmediavault.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openmediavault.webp",
"config_path": "",

View File

@@ -10,7 +10,7 @@
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,
"documentation": "https://openwrt.org/docs/start",
"website": "https://openwrt.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openwrt.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": null,
"documentation": "https://doc.owncloud.com/",
"website": "https://www.turnkeylinux.org/owncloud",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/owncloud.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": null,
"documentation": "https://github.com/clusterzx/paperless-ai/wiki/1.-Home",
"website": "https://github.com/clusterzx/paperless-ai",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ai.webp",
"config_path": "/opt/paperless-ai/data/.env",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": null,
"documentation": "https://github.com/icereed/paperless-gpt/blob/main/README.md",
"website": "https://github.com/icereed/paperless-gpt",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx-light.webp",
"config_path": "/opt/paperless-gpt-data/.env",

View File

@@ -0,0 +1,52 @@
{
"name": "PBS 4 Upgrade",
"slug": "pbs4-upgrade",
"categories": [
1
],
"date_created": "2025-08-26",
"type": "pve",
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": "https://pbs.proxmox.com/wiki/Upgrade_from_3_to_4",
"website": "https://www.proxmox.com/en/proxmox-backup-server",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
"config_path": "",
"description": "This script guides you through upgrading Proxmox Backup Server from version 3.x (Debian 12 Bookworm) to version 4.0 (Debian 13 Trixie). It adjusts the Debian base sources, configures PBS 4 repositories in deb822 format, updates enterprise/no-subscription/test repos, runs a full system upgrade, and finalizes with a reboot.",
"install_methods": [
{
"type": "default",
"script": "tools/pve/pbs4-upgrade.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Execute this script directly on the PBS 3.x host as root.",
"type": "info"
},
{
"text": "Ensure you have a verified backup of /etc/proxmox-backup before starting.",
"type": "warning"
},
{
"text": "Do not run this on an already upgraded PBS 4.x system.",
"type": "warning"
},
{
"text": "A reboot is strongly recommended after upgrade to activate the new kernel and services.",
"type": "info"
}
]
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": null,
"documentation": "https://github.com/Brandawg93/PeaNUT/blob/main/README.md",
"website": "https://github.com/Brandawg93/PeaNUT/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp",
"config_path": "/etc/peanut/settings.yml",

View File

@@ -1,40 +1,40 @@
{
"name": "PhotoPrism",
"slug": "photoprism",
"categories": [
13
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 2342,
"documentation": null,
"website": "https://photoprism.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/photoprism.webp",
"config_path": "/opt/photoprism/config/.env",
"description": "PhotoPrism is an AI-Powered Photos App for the Decentralized Web. It makes use of the latest technologies to tag and find pictures automatically without getting in your way.",
"install_methods": [
{
"type": "default",
"script": "ct/photoprism.sh",
"resources": {
"cpu": 2,
"ram": 3072,
"hdd": 8,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "admin",
"password": "changeme"
},
"notes": [
{
"text": "Please note that Ubuntu 22.04 and Debian 12 are supported, while older Linux distributions may not be compatible.",
"type": "warning"
}
]
"name": "PhotoPrism",
"slug": "photoprism",
"categories": [
13
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 2342,
"documentation": "https://docs.photoprism.app/",
"website": "https://photoprism.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/photoprism.webp",
"config_path": "/opt/photoprism/config/.env",
"description": "PhotoPrism is an AI-Powered Photos App for the Decentralized Web. It makes use of the latest technologies to tag and find pictures automatically without getting in your way.",
"install_methods": [
{
"type": "default",
"script": "ct/photoprism.sh",
"resources": {
"cpu": 2,
"ram": 3072,
"hdd": 8,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "admin",
"password": "changeme"
},
"notes": [
{
"text": "Please note that Ubuntu 22.04 and Debian 12 are supported, while older Linux distributions may not be compatible.",
"type": "warning"
}
]
}

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": null,
"documentation": "https://github.com/leiweibau/Pi.Alert/blob/main/README.md",
"website": "https://github.com/leiweibau/Pi.Alert/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pi-alert.webp",
"config_path": "/opt/pialert/config/pialert.conf",

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": null,
"documentation": "https://podman.io/docs",
"website": "https://podman.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/podman.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 5432,
"documentation": null,
"documentation": "https://www.postgresql.org/docs/",
"website": "https://www.postgresql.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/postgresql.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 9696,
"documentation": null,
"documentation": "https://wiki.servarr.com/prowlarr",
"website": "https://github.com/Prowlarr/Prowlarr",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/prowlarr.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 7878,
"documentation": null,
"documentation": "https://wiki.servarr.com/radarr",
"website": "https://radarr.video/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/radarr.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 6500,
"documentation": null,
"documentation": "https://github.com/rogerfar/rdt-client/blob/main/README.md",
"website": "https://github.com/rogerfar/rdt-client",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/real-debrid.webp",
"config_path": "/opt/rdtc/appsettings.json",

View File

@@ -1,35 +1,35 @@
{
"name": "Recyclarr",
"slug": "recyclarr",
"categories": [
14
],
"date_created": "2024-11-15",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": null,
"website": "https://recyclarr.dev/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/recyclarr.webp",
"config_path": "",
"description": "Recyclarr is an automation tool that integrates with media management software like Sonarr and Radarr. It helps users manage and organize their media libraries by automatically searching for and adding content from indexers, based on user-defined criteria. It streamlines the process of maintaining and updating media collections without manual intervention.",
"install_methods": [
{
"type": "default",
"script": "ct/recyclarr.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "Recyclarr",
"slug": "recyclarr",
"categories": [
14
],
"date_created": "2024-11-15",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": "https://recyclarr.dev/wiki/",
"website": "https://recyclarr.dev/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/recyclarr.webp",
"config_path": "",
"description": "Recyclarr is an automation tool that integrates with media management software like Sonarr and Radarr. It helps users manage and organize their media libraries by automatically searching for and adding content from indexers, based on user-defined criteria. It streamlines the process of maintaining and updating media collections without manual intervention.",
"install_methods": [
{
"type": "default",
"script": "ct/recyclarr.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": null,
"documentation": "https://redis.io/docs/latest/",
"website": "https://redis.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/redis.webp",
"config_path": "Debian /etc/redis/redis.conf | Alpine: /etc/redis.conf",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": null,
"documentation": "https://runtipi.io/docs/introduction",
"website": "https://runtipi.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/runtipi.webp",
"config_path": "opt/runtipi/state/settings.json",

View File

@@ -0,0 +1,35 @@
{
"name": "SearXNG",
"slug": "searxng",
"categories": [
0
],
"date_created": "2025-08-26",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8888,
"documentation": "https://docs.searxng.org/",
"website": "https://github.com/searxng/searxng",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/searxng.webp",
"config_path": "/etc/searxng/settings.yml",
"description": "SearXNG is a free internet metasearch engine which aggregates results from up to 215 search services. Users are neither tracked nor profiled. Additionally, SearXNG can be used over Tor for online anonymity.",
"install_methods": [
{
"type": "default",
"script": "ct/searxng.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 7,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 8080,
"documentation": null,
"documentation": "https://docs.shinobi.video/",
"website": "https://shinobi.video/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/shinobi.webp",
"config_path": "/opt/Shinobi/conf.json",

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": null,
"documentation": null,
"documentation": "https://oss.oetiker.ch/smokeping/doc/index.en.html",
"website": "https://oss.oetiker.ch/smokeping/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/smokeping.webp",
"config_path": "/etc/smokeping/config.d/Targets",

View File

@@ -1,35 +1,35 @@
{
"name": "Sonarr",
"slug": "sonarr",
"categories": [
14
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8989,
"documentation": null,
"website": "https://sonarr.tv/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/sonarr.webp",
"config_path": "",
"description": "Sonarr is a personal video recorder (PVR) software designed for Usenet and BitTorrent users. It allows users to manage and organize their TV show collection with ease. Sonarr integrates with popular Usenet and BitTorrent clients, such as NZBget and Transmission, to automate the downloading and organizing of TV show files. The software provides a web-based interface for managing and organizing TV shows, making it easy to search and find titles, seasons, and episodes. Sonarr also supports metadata management, including TV show posters and information, making it easy for users to keep their TV show collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing TV show collections, making it a valuable tool for TV show enthusiasts who want to keep their collection organized and up-to-date. With Sonarr, users can enjoy their TV show collection from anywhere, making it a powerful tool for managing and sharing TV show files.",
"install_methods": [
{
"type": "default",
"script": "ct/sonarr.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "Sonarr",
"slug": "sonarr",
"categories": [
14
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8989,
"documentation": "https://wiki.servarr.com/sonarr",
"website": "https://sonarr.tv/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/sonarr.webp",
"config_path": "",
"description": "Sonarr is a personal video recorder (PVR) software designed for Usenet and BitTorrent users. It allows users to manage and organize their TV show collection with ease. Sonarr integrates with popular Usenet and BitTorrent clients, such as NZBget and Transmission, to automate the downloading and organizing of TV show files. The software provides a web-based interface for managing and organizing TV shows, making it easy to search and find titles, seasons, and episodes. Sonarr also supports metadata management, including TV show posters and information, making it easy for users to keep their TV show collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing TV show collections, making it a valuable tool for TV show enthusiasts who want to keep their collection organized and up-to-date. With Sonarr, users can enjoy their TV show collection from anywhere, making it a powerful tool for managing and sharing TV show files.",
"install_methods": [
{
"type": "default",
"script": "ct/sonarr.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -10,7 +10,7 @@
"privileged": false,
"interface_port": 8080,
"documentation": null,
"website": "https://github.com/Stirling-Tools/Stirling-PDF",
"website": "https://docs.stirlingpdf.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/stirling-pdf.webp",
"config_path": "/opt/Stirling-PDF/.env",
"description": "Stirling-PDF is a powerful locally hosted web based PDF manipulation tool that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more.",

View File

@@ -1,31 +1,31 @@
{
"name": "Syncthing",
"slug": "syncthing",
"categories": [
12
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 8384,
"documentation": null,
"website": "https://syncthing.net/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/syncthing.webp",
"config_path": "/root/.local/state/syncthing/config.xml - Alpine: /var/lib/syncthing/.local/state/syncthing/config.xml",
"description": "Syncthing is an open-source file syncing tool that allows users to keep their files in sync across multiple devices by using peer-to-peer synchronization. It doesn't rely on any central server, so all data transfers are directly between devices.",
"install_methods": [
{
"type": "default",
"script": "ct/syncthing.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 8,
"os": "debian",
"version": "12"
}
},
"name": "Syncthing",
"slug": "syncthing",
"categories": [
12
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 8384,
"documentation": "https://docs.syncthing.net/",
"website": "https://syncthing.net/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/syncthing.webp",
"config_path": "/root/.local/state/syncthing/config.xml - Alpine: /var/lib/syncthing/.local/state/syncthing/config.xml",
"description": "Syncthing is an open-source file syncing tool that allows users to keep their files in sync across multiple devices by using peer-to-peer synchronization. It doesn't rely on any central server, so all data transfers are directly between devices.",
"install_methods": [
{
"type": "default",
"script": "ct/syncthing.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 8,
"os": "debian",
"version": "12"
}
},
{
"type": "alpine",
"script": "ct/alpine-syncthing.sh",
@@ -38,9 +38,9 @@
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 8002,
"documentation": null,
"documentation": "https://docs.tandoor.dev/",
"website": "https://tandoor.dev/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tandoor-recipes.webp",
"config_path": "/opt/tandoor/.env",

View File

@@ -1,35 +1,35 @@
{
"name": "Tautulli",
"slug": "tautulli",
"categories": [
13
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 8181,
"documentation": null,
"website": "https://tautulli.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tautulli.webp",
"config_path": "",
"description": "Tautulli allows you to monitor and track your Plex Media Server usage, such as viewing statistics and analysis of your media library. It can be used to monitor user activity, get notifications about new media added to your library, and even generate reports on your media usage.",
"install_methods": [
{
"type": "default",
"script": "ct/tautulli.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "Tautulli",
"slug": "tautulli",
"categories": [
13
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 8181,
"documentation": "https://github.com/Tautulli/Tautulli/wiki",
"website": "https://tautulli.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tautulli.webp",
"config_path": "",
"description": "Tautulli allows you to monitor and track your Plex Media Server usage, such as viewing statistics and analysis of your media library. It can be used to monitor user activity, get notifications about new media added to your library, and even generate reports on your media usage.",
"install_methods": [
{
"type": "default",
"script": "ct/tautulli.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 8265,
"documentation": null,
"documentation": "https://docs.tdarr.io/docs/welcome/what",
"website": "https://tdarr.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tdarr.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 34400,
"documentation": null,
"documentation": "https://github.com/xteve-project/xTeVe-Documentation/blob/master/en/configuration.md",
"website": "https://github.com/Threadfin/Threadfin",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/threadfin.webp",
"config_path": "",

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 12345,
"documentation": null,
"documentation": "https://tianji.dev/docs/intro",
"website": "https://tianji.msgbyte.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tianji.webp",
"config_path": "/opt/tianji/src/server/.env",

View File

@@ -0,0 +1,40 @@
{
"name": "Tracktor",
"slug": "tracktor",
"categories": [
9
],
"date_created": "2025-08-26",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://tracktor.bytedge.in/introduction.html",
"config_path": "/opt/tracktor/app/server/.env",
"website": "https://tracktor.bytedge.in/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tracktor.webp",
"description": "Tracktor is an open-source web application for comprehensive vehicle management.\nEasily track fuel consumption, maintenance, insurance, and regulatory documents for all your vehicles in one place.",
"install_methods": [
{
"type": "default",
"script": "ct/tracktor.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 6,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Please check and update the '/opt/tracktor/app/backend/.env' file if using behind reverse proxy.",
"type": "info"
}
]
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 3002,
"documentation": null,
"documentation": "https://github.com/chrisvel/tududi#-getting-started",
"config_path": "/opt/tududi/backend/.env",
"website": "https://tududi.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tududi.webp",

View File

@@ -1,40 +1,40 @@
{
"name": "Unbound",
"slug": "unbound",
"categories": [
5
],
"date_created": "2024-12-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 5335,
"documentation": null,
"website": "https://www.nlnetlabs.nl/projects/unbound/about/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/unbound.webp",
"config_path": "/etc/unbound/unbound.conf.d/unbound.conf",
"description": "Unbound is a validating, recursive, caching DNS resolver. It is designed to be fast and lean and incorporates modern features based on open standards.",
"install_methods": [
{
"type": "default",
"script": "ct/unbound.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Unbound Configuration Path: `/etc/unbound/unbound.conf.d/unbound.conf`",
"type": "info"
}
]
"name": "Unbound",
"slug": "unbound",
"categories": [
5
],
"date_created": "2024-12-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 5335,
"documentation": "https://unbound.docs.nlnetlabs.nl/en/latest/",
"website": "https://www.nlnetlabs.nl/projects/unbound/about/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/unbound.webp",
"config_path": "/etc/unbound/unbound.conf.d/unbound.conf",
"description": "Unbound is a validating, recursive, caching DNS resolver. It is designed to be fast and lean and incorporates modern features based on open standards.",
"install_methods": [
{
"type": "default",
"script": "ct/unbound.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Unbound Configuration Path: `/etc/unbound/unbound.conf.d/unbound.conf`",
"type": "info"
}
]
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": true,
"interface_port": 8888,
"documentation": null,
"documentation": "https://docs.unmanic.app/docs/",
"website": "https://docs.unmanic.app/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/unmanic.webp",
"config_path": "",

View File

@@ -1,4 +1,259 @@
[
{
"name": "Dolibarr/dolibarr",
"version": "21.0.3",
"date": "2025-08-28T21:05:15Z"
},
{
"name": "Part-DB/Part-DB-server",
"version": "v1.17.4",
"date": "2025-08-28T21:00:53Z"
},
{
"name": "9001/copyparty",
"version": "v1.19.7",
"date": "2025-08-28T20:42:58Z"
},
{
"name": "linkwarden/linkwarden",
"version": "v2.12.2",
"date": "2025-08-28T20:34:30Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.11",
"date": "2025-08-28T20:12:30Z"
},
{
"name": "Lidarr/Lidarr",
"version": "v2.13.3.4711",
"date": "2025-08-28T20:06:24Z"
},
{
"name": "ollama/ollama",
"version": "v0.11.8",
"date": "2025-08-27T18:43:44Z"
},
{
"name": "mongodb/mongo",
"version": "r7.0.24-rc0",
"date": "2025-08-28T19:08:13Z"
},
{
"name": "immich-app/immich",
"version": "v1.140.0",
"date": "2025-08-28T18:50:45Z"
},
{
"name": "benjaminjonard/koillection",
"version": "1.7.0",
"date": "2025-08-28T18:10:59Z"
},
{
"name": "grokability/snipe-it",
"version": "v8.3.0",
"date": "2025-08-28T17:49:06Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.9.1",
"date": "2025-08-28T13:34:45Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.24.24",
"date": "2025-08-28T17:27:37Z"
},
{
"name": "gristlabs/grist-core",
"version": "v1.7.3",
"date": "2025-08-28T16:50:02Z"
},
{
"name": "saltstack/salt",
"version": "v3006.15",
"date": "2025-08-28T16:49:46Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.07.2",
"date": "2025-08-28T16:46:05Z"
},
{
"name": "Threadfin/Threadfin",
"version": "1.2.37",
"date": "2025-08-28T16:25:55Z"
},
{
"name": "home-assistant/operating-system",
"version": "16.1",
"date": "2025-08-13T07:58:10Z"
},
{
"name": "influxdata/influxdb",
"version": "v3.4.1",
"date": "2025-08-28T13:56:00Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.0.3",
"date": "2025-08-22T07:43:52Z"
},
{
"name": "open-webui/open-webui",
"version": "v0.6.26",
"date": "2025-08-28T10:40:30Z"
},
{
"name": "neo4j/neo4j",
"version": "4.4.45",
"date": "2025-08-28T10:12:16Z"
},
{
"name": "apache/cassandra",
"version": "4.1.10-tentative",
"date": "2025-08-28T10:02:40Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-ui@15.7.4",
"date": "2025-08-28T08:58:06Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.108.2",
"date": "2025-08-27T13:05:35Z"
},
{
"name": "garethgeorge/backrest",
"version": "v1.9.2",
"date": "2025-08-28T07:06:14Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2360",
"date": "2025-08-28T05:55:58Z"
},
{
"name": "gotson/komga",
"version": "1.23.3",
"date": "2025-08-28T02:50:06Z"
},
{
"name": "rabbitmq/rabbitmq-server",
"version": "v4.1.3",
"date": "2025-08-04T12:13:45Z"
},
{
"name": "jeedom/core",
"version": "4.4.19",
"date": "2025-08-28T00:27:14Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "keycloak/keycloak",
"version": "26.0.15",
"date": "2025-08-27T12:12:03Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v1.10.0",
"date": "2025-08-27T20:35:47Z"
},
{
"name": "ipfs/kubo",
"version": "v0.37.0",
"date": "2025-08-27T20:03:52Z"
},
{
"name": "home-assistant/core",
"version": "2025.8.3",
"date": "2025-08-21T18:23:10Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.8.3-beta",
"date": "2025-08-27T18:18:48Z"
},
{
"name": "raydak-labs/configarr",
"version": "v1.15.0",
"date": "2025-08-27T17:12:03Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v11.2.1",
"date": "2025-08-27T15:19:02Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.2.11",
"date": "2025-08-27T11:23:09Z"
},
{
"name": "traefik/traefik",
"version": "v3.5.1",
"date": "2025-08-27T09:21:19Z"
},
{
"name": "theonedev/onedev",
"version": "v12.0.8",
"date": "2025-08-27T06:22:32Z"
},
{
"name": "henrygd/beszel",
"version": "v0.12.5",
"date": "2025-08-27T01:15:16Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.3.7",
"date": "2025-08-26T17:54:25Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.525",
"date": "2025-08-26T14:28:44Z"
},
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2025-08-26T14:14:42Z"
},
{
"name": "element-hq/synapse",
"version": "v1.137.0",
"date": "2025-08-26T09:51:47Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "evcc-io/evcc",
"version": "0.207.5",
"date": "2025-08-26T06:57:07Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10",
"date": "2025-07-15T06:07:03Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.2-rc.6",
"date": "2025-08-26T01:17:43Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "coder/code-server",
"version": "v4.103.2",
@@ -24,40 +279,20 @@
"version": "v5.13.0",
"date": "2025-08-25T19:19:51Z"
},
{
"name": "immich-app/immich",
"version": "v1.139.4",
"date": "2025-08-25T18:31:13Z"
},
{
"name": "ollama/ollama",
"version": "v0.11.7",
"date": "2025-08-25T18:04:05Z"
},
{
"name": "mealie-recipes/mealie",
"version": "v3.1.2",
"date": "2025-08-25T18:00:52Z"
},
{
"name": "linkwarden/linkwarden",
"version": "v2.11.8",
"date": "2025-08-25T16:27:12Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.7.6",
"date": "2025-08-23T22:49:00Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.3.0p36",
"date": "2025-08-25T15:32:14Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.107.4",
"date": "2025-08-20T12:23:06Z"
"name": "wazuh/wazuh",
"version": "coverity-w35-4.13.0",
"date": "2025-08-25T15:17:33Z"
},
{
"name": "crowdsecurity/crowdsec",
@@ -74,31 +309,11 @@
"version": "7.4.2",
"date": "2025-08-25T12:38:14Z"
},
{
"name": "gotson/komga",
"version": "1.23.2",
"date": "2025-08-25T09:39:42Z"
},
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2025-08-25T09:14:19Z"
},
{
"name": "emqx/emqx",
"version": "e5.10.1-beta.2",
"date": "2025-08-25T08:51:40Z"
},
{
"name": "morpheus65535/bazarr",
"version": "v1.5.3-beta.10",
"date": "2025-07-15T06:07:03Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2343",
"date": "2025-08-25T05:50:39Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.3.2",
@@ -114,41 +329,16 @@
"version": "8.2.10",
"date": "2025-08-25T01:26:55Z"
},
{
"name": "jeedom/core",
"version": "4.4.19",
"date": "2025-08-25T00:27:05Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.8.2-beta",
"date": "2025-08-25T00:26:03Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.5.1",
"date": "2025-08-24T23:58:52Z"
},
{
"name": "documenso/documenso",
"version": "v1.12.2-rc.5",
"date": "2025-08-24T23:48:04Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.47.1",
"date": "2025-01-05T21:14:23Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v1.9.1",
"date": "2025-08-24T21:27:58Z"
},
{
"name": "moghtech/komodo",
"version": "v1.19.1",
@@ -156,8 +346,8 @@
},
{
"name": "runtipi/runtipi",
"version": "v4.3.0",
"date": "2025-07-05T12:14:52Z"
"version": "nightly",
"date": "2025-08-24T18:27:58Z"
},
{
"name": "wavelog/wavelog",
@@ -174,26 +364,6 @@
"version": "v2.0.5.5160",
"date": "2025-08-23T21:23:11Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-openapi@9.2.3",
"date": "2025-08-24T12:48:14Z"
},
{
"name": "keycloak/keycloak",
"version": "26.3.3",
"date": "2025-08-20T10:12:51Z"
},
{
"name": "Lidarr/Lidarr",
"version": "v2.12.4.4658",
"date": "2025-06-09T17:27:45Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.24.22",
"date": "2025-08-24T09:51:24Z"
},
{
"name": "janeczku/calibre-web",
"version": "0.6.25",
@@ -254,26 +424,6 @@
"version": "version/2025.8.1",
"date": "2025-08-22T14:55:30Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.2",
"date": "2025-06-26T22:08:00Z"
},
{
"name": "open-webui/open-webui",
"version": "v0.6.25",
"date": "2025-08-22T13:22:43Z"
},
{
"name": "wazuh/wazuh",
"version": "v4.10.3",
"date": "2025-08-19T18:51:00Z"
},
{
"name": "theonedev/onedev",
"version": "v12.0.7",
"date": "2025-08-22T10:00:28Z"
},
{
"name": "syncthing/syncthing",
"version": "v2.0.3",
@@ -284,11 +434,6 @@
"version": "v10.11.2",
"date": "2025-08-22T06:50:56Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.0.3",
"date": "2025-08-22T07:43:52Z"
},
{
"name": "lazy-media/Reactive-Resume",
"version": "v1.2.4",
@@ -309,36 +454,16 @@
"version": "4.6.0",
"date": "2025-08-22T02:21:40Z"
},
{
"name": "9001/copyparty",
"version": "v1.19.5",
"date": "2025-08-21T23:45:57Z"
},
{
"name": "ipfs/kubo",
"version": "v0.36.0",
"date": "2025-07-14T18:59:57Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.39.0",
"date": "2025-08-21T18:40:00Z"
},
{
"name": "home-assistant/core",
"version": "2025.8.3",
"date": "2025-08-21T18:23:10Z"
},
{
"name": "hargata/lubelog",
"version": "v1.5.0",
"date": "2025-08-21T17:33:22Z"
},
{
"name": "evcc-io/evcc",
"version": "0.207.4",
"date": "2025-08-21T17:20:43Z"
},
{
"name": "kyantech/Palmr",
"version": "v3.2.0-beta",
@@ -364,11 +489,6 @@
"version": "v2.16.18",
"date": "2025-08-21T08:19:58Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.516.2",
"date": "2025-08-20T17:15:26Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.65",
@@ -384,11 +504,6 @@
"version": "4.3.7",
"date": "2025-08-20T10:26:21Z"
},
{
"name": "apache/cassandra",
"version": "4.1.10-tentative",
"date": "2025-08-20T10:20:25Z"
},
{
"name": "duplicati/duplicati",
"version": "v2.1.2.0-2.1.2.0_beta_2025-08-20",
@@ -409,16 +524,6 @@
"version": "v6.13.2",
"date": "2025-08-19T18:18:40Z"
},
{
"name": "Threadfin/Threadfin",
"version": "1.3.0",
"date": "2025-08-19T17:37:44Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.10",
"date": "2025-08-19T17:21:44Z"
},
{
"name": "karlomikus/bar-assistant",
"version": "v5.8.0",
@@ -429,11 +534,6 @@
"version": "preview-dns-cache-manager",
"date": "2025-08-19T11:57:00Z"
},
{
"name": "element-hq/synapse",
"version": "v1.136.0",
"date": "2025-08-12T14:26:27Z"
},
{
"name": "chrisvel/tududi",
"version": "v0.80",
@@ -514,36 +614,16 @@
"version": "v0.14.1",
"date": "2024-08-29T22:32:51Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.2.10",
"date": "2025-08-16T11:45:23Z"
},
{
"name": "mongodb/mongo",
"version": "r8.2.0",
"date": "2025-08-15T22:02:15Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.90",
"date": "2025-08-15T19:14:52Z"
},
{
"name": "netbox-community/netbox",
"version": "v4.3.6",
"date": "2025-08-12T17:16:42Z"
},
{
"name": "intri-in/manage-my-damn-life-nextjs",
"version": "v0.8.0-release",
"date": "2025-08-15T06:19:12Z"
},
{
"name": "gristlabs/grist-core",
"version": "v1.7.2",
"date": "2025-08-14T19:07:57Z"
},
{
"name": "jellyfin/jellyfin",
"version": "v10.10.7",
@@ -564,26 +644,11 @@
"version": "v1.24.5",
"date": "2025-08-13T16:35:52Z"
},
{
"name": "Part-DB/Part-DB-server",
"version": "v1.17.3",
"date": "2025-08-13T14:04:44Z"
},
{
"name": "ellite/Wallos",
"version": "v4.1.1",
"date": "2025-08-13T11:58:04Z"
},
{
"name": "raydak-labs/configarr",
"version": "v1.14.1",
"date": "2025-08-13T09:34:15Z"
},
{
"name": "home-assistant/operating-system",
"version": "16.1",
"date": "2025-08-13T07:58:10Z"
},
{
"name": "requarks/wiki",
"version": "v2.5.308",
@@ -609,11 +674,6 @@
"version": "REL_13_22",
"date": "2025-08-11T21:10:58Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.07.1",
"date": "2025-08-11T13:53:22Z"
},
{
"name": "FlowiseAI/Flowise",
"version": "flowise@3.0.5",
@@ -649,11 +709,6 @@
"version": "v1.2.0",
"date": "2025-08-09T14:30:52Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "22.0.0",
"date": "2025-08-09T12:48:17Z"
},
{
"name": "authelia/authelia",
"version": "v4.39.6",
@@ -679,21 +734,6 @@
"version": "mariadb-12.0.2",
"date": "2025-08-07T21:23:15Z"
},
{
"name": "rabbitmq/rabbitmq-server",
"version": "v4.1.3",
"date": "2025-08-04T12:13:45Z"
},
{
"name": "zwave-js/zwave-js-ui",
"version": "v11.1.0",
"date": "2025-08-07T14:57:29Z"
},
{
"name": "influxdata/influxdb",
"version": "v1.12.2rc2",
"date": "2025-08-06T23:12:18Z"
},
{
"name": "Athou/commafeed",
"version": "5.11.0",
@@ -724,11 +764,6 @@
"version": "v0.15.0-rc5",
"date": "2025-08-06T08:55:10Z"
},
{
"name": "garethgeorge/backrest",
"version": "v1.9.1",
"date": "2025-08-06T05:48:33Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.65.0",
@@ -759,16 +794,6 @@
"version": "10.1.44",
"date": "2025-08-04T13:17:59Z"
},
{
"name": "henrygd/beszel",
"version": "v0.12.3",
"date": "2025-08-04T02:21:16Z"
},
{
"name": "benjaminjonard/koillection",
"version": "1.6.18",
"date": "2025-08-03T21:41:45Z"
},
{
"name": "Tautulli/Tautulli",
"version": "v2.15.3",
@@ -819,21 +844,11 @@
"version": "2025.07.31",
"date": "2025-08-01T14:44:48Z"
},
{
"name": "neo4j/neo4j",
"version": "2025.07.1",
"date": "2025-08-01T14:40:28Z"
},
{
"name": "Suwayomi/Suwayomi-Server",
"version": "v2.1.1867",
"date": "2025-07-31T18:08:43Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "leiweibau/Pi.Alert",
"version": "v2025-07-30",
@@ -894,21 +909,11 @@
"version": "v12.0.1",
"date": "2025-07-25T11:54:30Z"
},
{
"name": "grokability/snipe-it",
"version": "v8.2.1",
"date": "2025-07-24T14:37:54Z"
},
{
"name": "minio/minio",
"version": "RELEASE.2025-07-23T15-54-02Z",
"date": "2025-07-23T20:35:39Z"
},
{
"name": "traefik/traefik",
"version": "v3.5.0",
"date": "2025-07-23T14:06:54Z"
},
{
"name": "TasmoAdmin/TasmoAdmin",
"version": "v4.3.1",
@@ -969,11 +974,6 @@
"version": "v1.7.2",
"date": "2025-07-10T19:29:26Z"
},
{
"name": "saltstack/salt",
"version": "v3007.6",
"date": "2025-07-10T18:37:08Z"
},
{
"name": "NginxProxyManager/nginx-proxy-manager",
"version": "v2.12.6",

View File

@@ -1,35 +1,35 @@
{
"name": "Vikunja",
"slug": "vikunja",
"categories": [
12
],
"date_created": "2024-11-05",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3456,
"documentation": null,
"website": "https://vikunja.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/vikunja.webp",
"config_path": "/etc/vikunja/config.yml",
"description": "Vikunja is a powerful self-hosted todo app. It allows you to create and manage to-do lists. You can plan tasks, set priorities and collaborate with others. The best part is that your data is safe with you and you can customize the app to your liking. It's like a personal assistant that helps you stay organized.",
"install_methods": [
{
"type": "default",
"script": "ct/vikunja.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "Vikunja",
"slug": "vikunja",
"categories": [
12
],
"date_created": "2024-11-05",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3456,
"documentation": "https://vikunja.io/docs/",
"website": "https://vikunja.io/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/vikunja.webp",
"config_path": "/etc/vikunja/config.yml",
"description": "Vikunja is a powerful self-hosted todo app. It allows you to create and manage to-do lists. You can plan tasks, set priorities and collaborate with others. The best part is that your data is safe with you and you can customize the app to your liking. It's like a personal assistant that helps you stay organized.",
"install_methods": [
{
"type": "default",
"script": "ct/vikunja.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 8088,
"documentation": null,
"documentation": "https://github.com/matze/wastebin/blob/a297749b932ed9ff32569f3af7ee8e4a5b499834/README.md",
"website": "https://github.com/matze/wastebin",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/wastebin.webp",
"config_path": "/opt/wastebin-data/.env",

View File

@@ -1,35 +1,35 @@
{
"name": "WatchYourLAN",
"slug": "watchyourlan",
"categories": [
4
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8840,
"documentation": null,
"website": "https://github.com/aceberg/WatchYourLAN",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/watchyourlan.webp",
"config_path": "/data/config.yaml",
"description": "WatchYourLAN is a lightweight network IP scanner with web GUI.",
"install_methods": [
{
"type": "default",
"script": "ct/watchyourlan.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "WatchYourLAN",
"slug": "watchyourlan",
"categories": [
4
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8840,
"documentation": "https://github.com/aceberg/WatchYourLAN/blob/main/README.md",
"website": "https://github.com/aceberg/WatchYourLAN",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/watchyourlan.webp",
"config_path": "/data/config.yaml",
"description": "WatchYourLAN is a lightweight network IP scanner with web GUI.",
"install_methods": [
{
"type": "default",
"script": "ct/watchyourlan.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": false,
"privileged": false,
"interface_port": 10000,
"documentation": null,
"documentation": "https://webmin.com/docs/",
"website": "https://webmin.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/webmin.webp",
"config_path": "",

View File

@@ -1,35 +1,35 @@
{
"name": "Whisparr",
"slug": "whisparr",
"categories": [
14
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 6969,
"documentation": null,
"website": "https://github.com/Whisparr/Whisparr",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/whisparr.webp",
"config_path": "",
"description": "Whisparr is an adult movie collection manager for Usenet and BitTorrent users.",
"install_methods": [
{
"type": "default",
"script": "ct/whisparr.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
"name": "Whisparr",
"slug": "whisparr",
"categories": [
14
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 6969,
"documentation": "https://wiki.servarr.com/en/whisparr",
"website": "https://github.com/Whisparr/Whisparr",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/whisparr.webp",
"config_path": "",
"description": "Whisparr is an adult movie collection manager for Usenet and BitTorrent users.",
"install_methods": [
{
"type": "default",
"script": "ct/whisparr.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -9,7 +9,7 @@
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": null,
"documentation": "https://doc.yunohost.org/",
"website": "https://yunohost.org/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/yunohost.webp",
"config_path": "",

View File

@@ -27,7 +27,7 @@ $STD apt update
$STD apt install -y google-chrome-stable
msg_ok "Installed Chrome"
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "v3.3.25" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/flaresolverr.service

View File

@@ -13,6 +13,10 @@ setting_up_container
network_check
update_os
msg_info "Installing dependencies"
$STD apt-get install --no-install-recommends -y build-essential
msg_ok "Installed dependencies"
NODE_VERSION="20" setup_nodejs
MYSQL_VERSION="8.0" setup_mysql

View File

@@ -0,0 +1,118 @@
#!/usr/bin/env bash
# Copyright (c) 2025 Community Scripts ORG
# Author: vhsdream
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/maxdorninger/MediaManager
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
read -r -p "${TAB3}Enter the email address of your first admin user: " admin_email
if [[ "$admin_email" ]]; then
EMAIL="$admin_email"
fi
setup_yq
NODE_VERSION="24" setup_nodejs
setup_uv
PG_VERSION="17" setup_postgresql
msg_info "Setting up PostgreSQL"
DB_NAME="mm_db"
DB_USER="mm_user"
DB_PASS="$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)"
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
{
echo "MediaManager Credentials"
echo "MediaManager Database User: $DB_USER"
echo "MediaManager Database Password: $DB_PASS"
echo "MediaManager Database Name: $DB_NAME"
} >>~/mediamanager.creds
msg_ok "Set up PostgreSQL"
fetch_and_deploy_gh_release "MediaManager" "maxdorninger/MediaManager" "tarball" "latest" "/opt/mediamanager"
msg_info "Configuring MediaManager"
MM_DIR="/opt/mm"
MEDIA_DIR="${MM_DIR}/media"
export CONFIG_DIR="${MM_DIR}/config"
export FRONTEND_FILES_DIR="${MM_DIR}/web/build"
export BASE_PATH=""
export PUBLIC_VERSION=""
export PUBLIC_API_URL="${BASE_PATH}/api/v1"
export BASE_PATH="${BASE_PATH}/web"
cd /opt/mediamanager/web
$STD npm ci
$STD npm run build
mkdir -p {"$MM_DIR"/web,"$MEDIA_DIR","$CONFIG_DIR"}
cp -r build "$FRONTEND_FILES_DIR"
export BASE_PATH=""
export VIRTUAL_ENV="${MM_DIR}/venv"
cd /opt/mediamanager
cp -r {media_manager,alembic*} "$MM_DIR"
$STD /usr/local/bin/uv venv "$VIRTUAL_ENV"
$STD /usr/local/bin/uv sync --locked --active
msg_ok "Configured MediaManager"
msg_info "Creating config and start script"
LOCAL_IP="$(hostname -I | awk '{print $1}')"
SECRET="$(openssl rand -hex 32)"
sed -e "s/localhost:8/$LOCAL_IP:8/g" \
-e "s|/data/|$MEDIA_DIR/|g" \
-e 's/"db"/"localhost"/' \
-e "s/user = \"MediaManager\"/user = \"$DB_USER\"/" \
-e "s/password = \"MediaManager\"/password = \"$DB_PASS\"/" \
-e "s/dbname = \"MediaManager\"/dbname = \"$DB_NAME\"/" \
-e "/^token_secret/s/=.*/= \"$SECRET\"/" \
-e "s/admin@example.com/$EMAIL/" \
-e '/^admin_emails/s/, .*/]/' \
/opt/mediamanager/config.example.toml >"$CONFIG_DIR"/config.toml
mkdir -p "$MEDIA_DIR"/{images,tv,movies,torrents}
cat <<EOF >"$MM_DIR"/start.sh
#!/usr/bin/env bash
export CONFIG_DIR="$CONFIG_DIR"
export FRONTEND_FILES_DIR="$FRONTEND_FILES_DIR"
export BASE_PATH=""
cd "$MM_DIR"
source ./venv/bin/activate
/usr/local/bin/uv run alembic upgrade head
/usr/local/bin/uv run fastapi run ./media_manager/main.py --port 8000
EOF
chmod +x "$MM_DIR"/start.sh
msg_ok "Created config and start script"
msg_info "Creating service"
cat <<EOF >/etc/systemd/system/mediamanager.service
[Unit]
Description=MediaManager Backend Service
After=network.target
[Service]
Type=simple
WorkingDirectory=${MM_DIR}
ExecStart=/usr/bin/bash start.sh
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now mediamanager
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

@@ -33,12 +33,12 @@ $STD sudo -H -u searxng git clone https://github.com/searxng/searxng /usr/local/
msg_ok "Cloned SearXNG"
msg_info "Creating Python virtual environment"
sudo -H -u searxng bash -c "
sudo -H -u searxng bash -c '
python3 -m venv /usr/local/searxng/searx-pyenv &&
. /usr/local/searxng/searx-pyenv/bin/activate &&
$STD pip install -U pip setuptools wheel pyyaml &&
$STD pip install --use-pep517 --no-build-isolation -e /usr/local/searxng/searxng-src
"
pip install -U pip setuptools wheel pyyaml &&
pip install --use-pep517 --no-build-isolation -e /usr/local/searxng/searxng-src
'
msg_ok "Python environment ready"
msg_info "Configuring SearXNG settings"

View File

@@ -0,0 +1,61 @@
#!/usr/bin/env bash
# Copyright (c) 2025 Community Scripts ORG
# Author: CrazyWolf13
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://tracktor.bytedge.in
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
setup_nodejs
fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
msg_info "Configuring Tracktor"
cd /opt/tracktor
$STD npm install
$STD npm run build
mkdir /opt/tracktor-data
HOST_IP=$(hostname -I | awk '{print $1}')
cat <<EOF >/opt/tracktor/app/backend/.env
NODE_ENV=production
PUBLIC_DEMO_MODE=false
DB_PATH=/opt/tracktor-data/tracktor.db
# Replace this URL if using behind reverse proxy for https traffic. Though it is optional and should work without changing
PUBLIC_API_BASE_URL=http://$HOST_IP:3000
# Here add the reverse proxy url as well to avoid cross errors from the app.
CORS_ORIGINS=http://$HOST_IP:3000
PORT=3000
EOF
msg_ok "Configured Tracktor"
msg_info "Creating service"
cat <<EOF >/etc/systemd/system/tracktor.service
[Unit]
Description=Tracktor Service
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/tracktor
EnvironmentFile=/opt/tracktor/app/backend/.env
ExecStart=/usr/bin/npm start
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now tracktor
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

@@ -165,7 +165,7 @@ function setup_postgresql() {
NEED_PG_INSTALL=true
fi
else
NEED_PG_INSTALL=true
fi
@@ -186,22 +186,18 @@ function setup_postgresql() {
echo "deb https://apt.postgresql.org/pub/repos/apt ${DISTRO}-pgdg main" \
>/etc/apt/sources.list.d/pgdg.list
$STD apt-get update
$STD msg_ok "Repository added"
msg_info "Setup PostgreSQL $PG_VERSION"
$STD apt-get install -y "postgresql-${PG_VERSION}" "postgresql-client-${PG_VERSION}"
if [[ -n "$CURRENT_PG_VERSION" ]]; then
$STD apt-get purge -y "postgresql-${CURRENT_PG_VERSION}" "postgresql-client-${CURRENT_PG_VERSION}" || true
fi
systemctl enable -q --now postgresql
if [[ -n "$CURRENT_PG_VERSION" ]]; then
$STD msg_info "Restoring dumped data"
@@ -1924,3 +1920,69 @@ function setup_ffmpeg() {
ensure_usr_local_bin_persist
msg_ok "Setup FFmpeg $FINAL_VERSION"
}
# ------------------------------------------------------------------------------
# Checks for new GitHub release (latest tag).
#
# Description:
# - Queries the GitHub API for the latest release tag
# - Compares it to a local cached version (~/.<app>)
# - If newer, sets global CHECK_UPDATE_RELEASE and returns 0
#
# Usage:
# if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr"; then
# # trigger update...
# fi
# exit 0
# } (end of update_script not from the function)
#
# Notes:
# - Requires `jq` (auto-installed if missing)
# - Does not modify anything, only checks version state
# - Does not support pre-releases
# ------------------------------------------------------------------------------
check_for_gh_release() {
local app="$1"
local source="$2"
local current_file="$HOME/.${app,,}"
msg_info "Check for update: ${app}"
# DNS check for GitHub
if ! getent hosts api.github.com >/dev/null 2>&1; then
msg_error "Network error: cannot resolve api.github.com"
return 1
fi
# jq check
if ! command -v jq &>/dev/null; then
$STD apt-get update
$STD apt-get install -y jq || {
msg_error "Failed to install jq"
return 1
}
fi
# get latest release
local release
release=$(curl -fsSL "https://api.github.com/repos/${source}/releases/latest" |
jq -r '.tag_name' | sed 's/^v//')
if [[ -z "$release" ]]; then
msg_error "Unable to determine latest release for ${app}"
return 1
fi
local current=""
if [[ -f "$current_file" ]]; then
current=$(<"$current_file")
fi
if [[ "$release" != "$current" ]] || [[ ! -f "$current_file" ]]; then
CHECK_UPDATE_RELEASE="$release"
return 0
else
msg_ok "${app} is up to date (v${release})"
return 1
fi
}

View File

@@ -93,7 +93,7 @@ while true; do
fi
else
# Container: get IP and ping
IP=$(pct exec $instance ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
IP=$(pct exec $instance ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1 | head -n1)
if ! ping -c 1 $IP >/dev/null 2>&1; then
echo "$(date): CT $instance is not responding, restarting..."
pct stop $instance >/dev/null 2>&1

183
tools/pve/pbs4-upgrade.sh Normal file
View File

@@ -0,0 +1,183 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: MickLesk (CanbiZ)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
header_info() {
clear
cat <<"EOF"
____ ____ _____ __ __ __ __ __
/ __ \/ __ ) ___// // / / / / /___ ____ __________ _____/ /__
/ /_/ / __ \__ \/ // /_ / / / / __ \/ __ `/ ___/ __ `/ __ / _ \
/ ____/ /_/ /__/ /__ __/ / /_/ / /_/ / /_/ / / / /_/ / /_/ / __/
/_/ /_____/____/ /_/ \____/ .___/\__, /_/ \__,_/\__,_/\___/
/_/ /____/
EOF
}
RD=$(echo "\033[01;31m")
YW=$(echo "\033[33m")
GN=$(echo "\033[1;92m")
CL=$(echo "\033[m")
BFR="\\r\\033[K"
HOLD="-"
CM="${GN}${CL}"
CROSS="${RD}${CL}"
set -euo pipefail
shopt -s inherit_errexit nullglob
msg_info() { echo -ne " ${HOLD} ${YW}$1..."; }
msg_ok() { echo -e "${BFR} ${CM} ${GN}$1${CL}"; }
msg_error() { echo -e "${BFR} ${CROSS} ${RD}$1${CL}"; }
start_routines() {
header_info
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS 3 BACKUP" --menu \
"\nMake a backup of /etc/proxmox-backup to ensure recovery in worst case?" 14 58 2 \
"yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Backing up Proxmox Backup Server 3"
tar czf "pbs3-etc-backup-$(date -I).tar.gz" -C "/etc" "proxmox-backup"
msg_ok "Backed up Proxmox Backup Server 3"
;;
no) msg_error "Selected no to Backup" ;;
esac
# --- Debian 13 Sources ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS 4 SOURCES" --menu \
"Switch to Debian 13 (Trixie) sources for PBS 4?" 14 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Switching to Debian 13 (Trixie) Sources"
rm -f /etc/apt/sources.list.d/*.list
sed -i '/proxmox/d;/bookworm/d' /etc/apt/sources.list || true
cat >/etc/apt/sources.list.d/debian.sources <<EOF
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://security.debian.org/debian-security
Suites: trixie-security
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie-updates
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
msg_ok "Configured Debian 13 (Trixie) Sources"
;;
no) msg_error "Selected no to Sources update" ;;
esac
# --- Enterprise Repo ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS4-ENTERPRISE" --menu \
"Add 'pbs-enterprise' repository (for subscription users)?" 14 58 2 "yes" " " "no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pbs-enterprise' repository"
cat >/etc/apt/sources.list.d/pbs-enterprise.sources <<EOF
Types: deb
URIs: https://enterprise.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-enterprise' repository"
;;
no) msg_error "Skipped enterprise repo" ;;
esac
# --- No-Subscription Repo ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS4-NO-SUBSCRIPTION" --menu \
"Enable 'pbs-no-subscription' repository?" 14 58 2 "yes" " " "no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pbs-no-subscription' repository"
cat >/etc/apt/sources.list.d/proxmox.sources <<EOF
Types: deb
URIs: http://download.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-no-subscription' repository"
;;
no) msg_error "Skipped no-subscription repo" ;;
esac
# --- Test Repo ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS4 TEST" --menu \
"Add 'pbs-test' repository (disabled by default)?" 14 58 2 "yes" " " "no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pbs-test' repository (disabled)"
cat >/etc/apt/sources.list.d/pbs-test.sources <<EOF
# Types: deb
# URIs: http://download.proxmox.com/debian/pbs
# Suites: trixie
# Components: pbs-test
# Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-test' repository"
;;
no) msg_error "Skipped test repo" ;;
esac
# --- Upgrade ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS 4 UPGRADE" --menu \
"\nUpgrade to Proxmox Backup Server 4 now?" 11 58 2 "yes" " " "no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Upgrading to Proxmox Backup Server 4 (Patience)"
apt update
DEBIAN_FRONTEND=noninteractive apt -o Dpkg::Options::="--force-confold" dist-upgrade -y
msg_ok "System upgraded to PBS 4"
;;
no) msg_error "Selected no to upgrade" ;;
esac
# --- Reboot ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu \
"\nReboot Proxmox Backup Server 4 now? (recommended)" 11 58 2 "yes" " " "no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Rebooting PBS 4"
sleep 2
msg_ok "Upgrade Complete"
reboot
;;
no)
msg_error "Selected no to Reboot (Reboot recommended)"
msg_ok "Upgrade Complete"
;;
esac
}
header_info
while true; do
read -rp "Start the Upgrade to Proxmox Backup Server 4 Script (y/n)? " yn
case $yn in
[Yy]*) break ;;
[Nn]*)
clear
exit
;;
*) echo "Please answer yes or no." ;;
esac
done
start_routines

View File

@@ -1,18 +1,17 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# License: MIT
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Copyright (c) 2021-2025 community-scripts ORG
# Author: tteck (tteckster) | MickLesk (CanbiZ) | thost96
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
header_info() {
clear
cat <<"EOF"
____ ____ _____ ____ __ ____ __ ____
/ __ \/ __ ) ___/ / __ \____ _____/ /_ / _/___ _____/ /_____ _/ / /
/ /_/ / __ \__ \ / /_/ / __ \/ ___/ __/ / // __ \/ ___/ __/ __ `/ / /
/ ____/ /_/ /__/ / / ____/ /_/ (__ ) /_ _/ // / / (__ ) /_/ /_/ / / /
/_/ /_____/____/ /_/ \____/____/\__/ /___/_/ /_/____/\__/\__,_/_/_/
/ /_/ / __ \__ \ / /_/ / __ \/ ___/ __/ / // __ \/ ___/ __/ __ `/ / /
/ ____/ /_/ /__/ / / ____/ /_/ (__ ) /_ _/ // / / (__ ) /_/ /_/ / / /
/_/ /_____/____/ /_/ \____/____/\__/ /___/_/ /_/____/\__/\__,_/_/_/
EOF
}
@@ -29,156 +28,276 @@ CROSS="${RD}✗${CL}"
set -euo pipefail
shopt -s inherit_errexit nullglob
msg_info() {
local msg="$1"
echo -ne " ${HOLD} ${YW}${msg}..."
msg_info() { echo -ne " ${HOLD} ${YW}$1..."; }
msg_ok() { echo -e "${BFR} ${CM} ${GN}$1${CL}"; }
msg_error() { echo -e "${BFR} ${CROSS} ${RD}$1${CL}"; }
# ---- helpers ----
get_pbs_codename() {
awk -F'=' '/^VERSION_CODENAME=/{print $2}' /etc/os-release
}
msg_ok() {
local msg="$1"
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
repo_state_list() {
local repo="$1"
local file=""
local state="missing"
for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do
[[ -f "$f" ]] || continue
if grep -q "$repo" "$f"; then
file="$f"
if grep -qE "^[^#].*${repo}" "$f"; then
state="active"
elif grep -qE "^#.*${repo}" "$f"; then
state="disabled"
fi
break
fi
done
echo "$state $file"
}
msg_error() {
local msg="$1"
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
component_exists_in_sources() {
local component="$1"
grep -h -E "^[^#]*Components:[^#]*\b${component}\b" /etc/apt/sources.list.d/*.sources 2>/dev/null | grep -q .
}
start_routines() {
# ---- main ----
main() {
header_info
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS SOURCES" --menu "This will set the correct sources to update and install Proxmox Backup Server.\n \nChange to Proxmox Backup Server sources?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
echo -e "\nThis script will Perform Post Install Routines.\n"
while true; do
read -rp "Start the Proxmox Backup Server Post Install Script (y/n)? " yn
case $yn in
[Yy]*) break ;;
[Nn]*)
clear
exit
;;
*) echo "Please answer yes or no." ;;
esac
done
if command -v pveversion >/dev/null 2>&1; then
echo -e "\n🛑 PVE Detected, Wrong Script!\n"
exit 1
fi
local CODENAME
CODENAME="$(get_pbs_codename)"
case "$CODENAME" in
bookworm) start_routines_3 ;;
trixie) start_routines_4 ;;
*)
msg_error "Unsupported Debian codename: $CODENAME"
echo -e "Supported: bookworm (PBS 3.x) and trixie (PBS 4.x)"
exit 1
;;
esac
}
# ---- PBS 3.x (Bookworm) ----
start_routines_3() {
header_info
local VERSION="bookworm"
# --- Debian sources ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS SOURCES" --menu \
"Correct Debian sources for Proxmox Backup Server 3.x?" 14 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Changing to Proxmox Backup Server Sources"
msg_info "Correcting Debian Sources"
cat <<EOF >/etc/apt/sources.list
deb http://deb.debian.org/debian ${VERSION} main contrib
deb http://deb.debian.org/debian ${VERSION}-updates main contrib
deb http://security.debian.org/debian-security ${VERSION}-security main contrib
EOF
msg_ok "Changed to Proxmox Backup Server Sources"
;;
no)
msg_error "Selected no to Correcting Proxmox Backup Server Sources"
msg_ok "Corrected Debian Sources"
;;
no) msg_error "Selected no to Correcting Debian Sources" ;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS-ENTERPRISE" --menu "The 'pbs-enterprise' repository is only available to users who have purchased a Proxmox VE subscription.\n \nDisable 'pbs-enterprise' repository?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Disabling 'pbs-enterprise' repository"
cat <<EOF >/etc/apt/sources.list.d/pbs-enterprise.list
# deb https://enterprise.proxmox.com/debian/pbs ${VERSION} pbs-enterprise
EOF
# --- Enterprise repo ---
read -r state file <<<"$(repo_state_list pbs-enterprise)"
case $state in
active)
sed -i "s/^[^#].*pbs-enterprise/# &/" "$file"
msg_ok "Disabled 'pbs-enterprise' repository"
;;
no)
msg_error "Selected no to Disabling 'pbs-enterprise' repository"
disabled) msg_ok "'pbs-enterprise' already disabled" ;;
missing)
cat >/etc/apt/sources.list.d/pbs-enterprise.list <<EOF
# deb https://enterprise.proxmox.com/debian/pbs ${VERSION} pbs-enterprise
EOF
msg_ok "Added 'pbs-enterprise' repository (disabled)"
;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS-NO-SUBSCRIPTION" --menu "The 'pbs-no-subscription' repository provides access to all of the open-source components of Proxmox Backup Server.\n \nEnable 'pbs-no-subscription' repository?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Enabling 'pbs-no-subscription' repository"
cat <<EOF >/etc/apt/sources.list.d/pbs-install-repo.list
# --- No-subscription repo ---
read -r state file <<<"$(repo_state_list pbs-no-subscription)"
if [[ "$state" == "missing" ]]; then
cat >/etc/apt/sources.list.d/pbs-install-repo.list <<EOF
deb http://download.proxmox.com/debian/pbs ${VERSION} pbs-no-subscription
EOF
msg_ok "Enabled 'pbs-no-subscription' repository"
;;
no)
msg_error "Selected no to Enabling 'pbs-no-subscription' repository"
;;
esac
else
msg_ok "'pbs-no-subscription' repository already present"
fi
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS TEST" --menu "The 'pbstest' repository can give advanced users access to new features and updates before they are officially released.\n \nAdd (Disabled) 'pbstest' repository?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pbstest' repository and set disabled"
cat <<EOF >/etc/apt/sources.list.d/pbstest-for-beta.list
# --- Test repo (legacy name pbstest) ---
read -r state file <<<"$(repo_state_list pbstest)"
if [[ "$state" == "missing" ]]; then
cat >/etc/apt/sources.list.d/pbstest-for-beta.list <<EOF
# deb http://download.proxmox.com/debian/pbs ${VERSION} pbstest
EOF
msg_ok "Added 'pbstest' repository"
;;
no)
msg_error "Selected no to Adding 'pbstest' repository"
;;
esac
msg_ok "Added 'pbstest' repository (disabled)"
else
msg_ok "'pbstest' repository already exists"
fi
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)
post_routines_common
}
# ---- PBS 4.x (Trixie, deb822) ----
start_routines_4() {
header_info
local VERSION="trixie"
# --- Debian sources (deb822) ---
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PBS SOURCES" --menu \
"Correct Debian sources for Proxmox Backup Server 4.x (deb822)?" 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 "Correcting Debian Sources (deb822)"
rm -f /etc/apt/sources.list.d/*.list
sed -i '/proxmox/d;/bookworm/d' /etc/apt/sources.list || true
cat >/etc/apt/sources.list.d/debian.sources <<EOF
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://security.debian.org/debian-security
Suites: trixie-security
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie-updates
Components: main contrib
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
msg_ok "Corrected Debian Sources"
;;
no) msg_error "Selected no to Correcting Debian Sources" ;;
esac
# --- Enterprise repo ---
if ! component_exists_in_sources "pbs-enterprise"; then
cat >/etc/apt/sources.list.d/pbs-enterprise.sources <<EOF
Types: deb
URIs: https://enterprise.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-enterprise' repository"
else
msg_ok "'pbs-enterprise' repository already present"
fi
# --- No-subscription repo ---
if ! component_exists_in_sources "pbs-no-subscription"; then
cat >/etc/apt/sources.list.d/proxmox.sources <<EOF
Types: deb
URIs: http://download.proxmox.com/debian/pbs
Suites: trixie
Components: pbs-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-no-subscription' repository"
else
msg_ok "'pbs-no-subscription' repository already present"
fi
# --- Test repo (pbs-test, renamed) ---
if ! component_exists_in_sources "pbs-test"; then
cat >/etc/apt/sources.list.d/pbs-test.sources <<EOF
# Types: deb
# URIs: http://download.proxmox.com/debian/pbs
# Suites: trixie
# Components: pbs-test
# Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
msg_ok "Added 'pbs-test' repository (disabled)"
else
msg_ok "'pbs-test' repository already present"
fi
post_routines_common
}
# ---- Shared routines ----
post_routines_common() {
# Subscription nag
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu \
"Disable subscription nag in PBS UI?" 14 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox \
"Supporting the software's development team is essential.\nPlease consider buying a subscription." 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)"
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 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 (clear 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"
rm -f /etc/apt/apt.conf.d/no-nag-script 2>/dev/null
;;
esac
apt --reinstall install proxmox-widget-toolkit &>/dev/null
apt --reinstall install proxmox-widget-toolkit &>/dev/null || msg_error "Widget toolkit reinstall failed"
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Backup Server now?" 11 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
# Update
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu \
"Update Proxmox Backup Server now?" 11 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Updating Proxmox Backup Server (Patience)"
apt-get update &>/dev/null
apt-get -y dist-upgrade &>/dev/null
apt update &>/dev/null || msg_error "apt update failed"
apt -y dist-upgrade &>/dev/null || msg_error "apt dist-upgrade failed"
msg_ok "Updated Proxmox Backup Server"
;;
no)
msg_error "Selected no to Updating Proxmox Backup Server"
;;
no) msg_error "Selected no to updating Proxmox Backup Server" ;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu "\nReboot Proxmox Backup Server now? (recommended)" 11 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
# Reminder
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Post-Install Reminder" --msgbox \
"IMPORTANT:
Please run this script on every PBS node individually if you have multiple nodes.
After completing these steps, it is strongly recommended to REBOOT your node.
After the upgrade or post-install routines, always clear your browser cache or perform a hard reload (Ctrl+Shift+R) before using the PBS Web UI to avoid UI display issues." 20 80
# Reboot
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu \
"Reboot Proxmox Backup Server now? (recommended)" 11 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Rebooting Proxmox Backup Server"
msg_info "Rebooting PBS"
sleep 2
msg_ok "Completed Post Install Routines"
reboot
;;
no)
msg_error "Selected no to Rebooting Proxmox Backup Server (Reboot recommended)"
msg_error "Selected no to Reboot (Reboot recommended)"
msg_ok "Completed Post Install Routines"
;;
esac
}
header_info
echo -e "\nThis script will Perform Post Install Routines.\n"
while true; do
read -p "Start the Proxmox Backup Server Post Install Script (y/n)?" yn
case $yn in
[Yy]*) break ;;
[Nn]*)
clear
exit
;;
*) echo "Please answer yes or no." ;;
esac
done
if command -v pveversion >/dev/null 2>&1; then
echo -e "\n🛑 PVE Detected, Wrong Script!\n"
exit 1
fi
start_routines
main

View File

@@ -43,113 +43,258 @@ msg_error() {
echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
}
if ! grep -q "Proxmox Mail Gateway" /etc/issue 2>/dev/null; then
msg_error "This script is only intended for Proxmox Mail Gateway"
exit 1
fi
repo_state() {
# $1 = repo name (e.g. pmg-enterprise, pmg-no-subscription, pmgtest)
local repo="$1"
local file=""
local state="missing"
for f in /etc/apt/sources.list /etc/apt/sources.list.d/*.list; do
[[ -f "$f" ]] || continue
if grep -q "$repo" "$f"; then
file="$f"
if grep -qE "^[^#].*${repo}" "$f"; then
state="active"
elif grep -qE "^#.*${repo}" "$f"; then
state="disabled"
fi
break
fi
done
echo "$state $file"
}
start_routines() {
header_info
VERSION="$(awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release)"
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG SOURCES" --menu "This will set the correct sources to update and install Proxmox Mail Gateway.\n \nChange to Proxmox Mail Gateway sources?" 14 58 2 \
# ---- SOURCES ----
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG SOURCES" --menu \
"This will set the correct Debian sources for Proxmox Mail Gateway.\n\nCorrect sources?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Changing to Proxmox Mail Gateway Sources"
msg_info "Correcting Debian Sources"
cat <<EOF >/etc/apt/sources.list
deb http://deb.debian.org/debian ${VERSION} main contrib
deb http://deb.debian.org/debian ${VERSION}-updates main contrib
deb http://security.debian.org/debian-security ${VERSION}-security main contrib
EOF
msg_ok "Changed to Proxmox Mail Gateway Sources"
;;
no)
msg_error "Selected no to Correcting Proxmox Mail Gateway Sources"
msg_ok "Corrected Debian Sources"
;;
no) msg_error "Selected no to Correcting Debian Sources" ;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-ENTERPRISE" --menu "The 'pmg-enterprise' repository is only available to users who have purchased a Proxmox Mail Gateway subscription.\n \nDisable 'pmg-enterprise' repository?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Disabling 'pmg-enterprise' repository"
cat <<EOF >/etc/apt/sources.list.d/pmg-enterprise.list
# deb https://enterprise.proxmox.com/debian/pmg ${VERSION} pmg-enterprise
# ---- PMG-ENTERPRISE ----
read -r state file <<<"$(repo_state pmg-enterprise)"
case $state in
active)
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-ENTERPRISE" \
--menu "'pmg-enterprise' repository is currently ENABLED.\n\nWhat do you want to do?" 14 58 3 \
"keep" "Keep as is" \
"disable" "Comment out (disable)" \
"delete" "Delete repo file" \
3>&2 2>&1 1>&3)
case $CHOICE in
keep) msg_ok "Kept 'pmg-enterprise' repository" ;;
disable)
msg_info "Disabling 'pmg-enterprise' repository"
sed -i "s/^[^#].*pmg-enterprise/# &/" "$file"
msg_ok "Disabled 'pmg-enterprise' repository"
;;
delete)
msg_info "Deleting 'pmg-enterprise' repository file"
rm -f "$file"
msg_ok "Deleted 'pmg-enterprise' repository file"
;;
esac
;;
disabled)
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-ENTERPRISE" \
--menu "'pmg-enterprise' repository is currently DISABLED.\n\nWhat do you want to do?" 14 58 3 \
"enable" "Uncomment (enable)" \
"keep" "Keep disabled" \
"delete" "Delete repo file" \
3>&2 2>&1 1>&3)
case $CHOICE in
enable)
msg_info "Enabling 'pmg-enterprise' repository"
sed -i "s/^#.*pmg-enterprise/deb/" "$file"
msg_ok "Enabled 'pmg-enterprise' repository"
;;
keep) msg_ok "Kept 'pmg-enterprise' repository disabled" ;;
delete)
msg_info "Deleting 'pmg-enterprise' repository file"
rm -f "$file"
msg_ok "Deleted 'pmg-enterprise' repository file"
;;
esac
;;
missing)
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-ENTERPRISE" \
--menu "Add 'pmg-enterprise' repository?\n\nOnly for subscription customers." 14 58 2 \
"no" " " \
"yes" " " \
--default-item "no" \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pmg-enterprise' repository"
cat >/etc/apt/sources.list.d/pmg-enterprise.list <<EOF
deb https://enterprise.proxmox.com/debian/pmg ${VERSION} pmg-enterprise
EOF
msg_ok "Disabled 'pmg-enterprise' repository"
;;
no)
msg_error "Selected no to disabling 'pmg-enterprise' repository"
msg_ok "Added 'pmg-enterprise' repository"
;;
no) msg_error "Selected no to Adding 'pmg-enterprise' repository" ;;
esac
;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-NO-SUBSCRIPTION" --menu "The 'pmg-no-subscription' repository provides access to all of the open-source components of Proxmox Mail Gateway.\n \nEnable 'pmg-no-subscription' repository?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Enabling 'pmg-no-subscription' repository"
cat <<EOF >/etc/apt/sources.list.d/pmg-install-repo.list
# ---- PMG-NO-SUBSCRIPTION ----
read -r state file <<<"$(repo_state pmg-no-subscription)"
case $state in
active)
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-NO-SUBSCRIPTION" \
--menu "'pmg-no-subscription' repository is currently ENABLED.\n\nWhat do you want to do?" 14 58 3 \
"keep" "Keep as is" \
"disable" "Comment out (disable)" \
"delete" "Delete repo file" \
3>&2 2>&1 1>&3)
case $CHOICE in
keep) msg_ok "Kept 'pmg-no-subscription' repository" ;;
disable)
msg_info "Disabling 'pmg-no-subscription' repository"
sed -i "s/^[^#].*pmg-no-subscription/# &/" "$file"
msg_ok "Disabled 'pmg-no-subscription' repository"
;;
delete)
msg_info "Deleting 'pmg-no-subscription' repository file"
rm -f "$file"
msg_ok "Deleted 'pmg-no-subscription' repository file"
;;
esac
;;
disabled)
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-NO-SUBSCRIPTION" \
--menu "'pmg-no-subscription' repository is currently DISABLED.\n\nWhat do you want to do?" 14 58 3 \
"enable" "Uncomment (enable)" \
"keep" "Keep disabled" \
"delete" "Delete repo file" \
3>&2 2>&1 1>&3)
case $CHOICE in
enable)
msg_info "Enabling 'pmg-no-subscription' repository"
sed -i "s/^#.*pmg-no-subscription/deb/" "$file"
msg_ok "Enabled 'pmg-no-subscription' repository"
;;
keep) msg_ok "Kept 'pmg-no-subscription' repository disabled" ;;
delete)
msg_info "Deleting 'pmg-no-subscription' repository file"
rm -f "$file"
msg_ok "Deleted 'pmg-no-subscription' repository file"
;;
esac
;;
missing)
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG-NO-SUBSCRIPTION" \
--menu "Add 'pmg-no-subscription' repository?" 14 58 2 \
"yes" " " \
"no" " " \
3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pmg-no-subscription' repository"
cat >/etc/apt/sources.list.d/pmg-install-repo.list <<EOF
deb http://download.proxmox.com/debian/pmg ${VERSION} pmg-no-subscription
EOF
msg_ok "Enabled 'pmg-no-subscription' repository"
;;
no)
msg_error "Selected no to enabling 'pmg-no-subscription' repository"
msg_ok "Added 'pmg-no-subscription' repository"
;;
no) msg_error "Selected no to Adding 'pmg-no-subscription' repository" ;;
esac
;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG TEST" --menu "The 'pmgtest' repository can give advanced users access to new features and updates before they are officially released.\n \nAdd (Disabled) 'pmgtest' repository?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pmgtest' repository and set disabled"
cat <<EOF >/etc/apt/sources.list.d/pmgtest-for-beta.list
# ---- PMG-TEST ----
read -r state file <<<"$(repo_state pmgtest)"
case $state in
active) msg_ok "'pmgtest' repository already active (skipped)" ;;
disabled) msg_ok "'pmgtest' repository already disabled (skipped)" ;;
missing)
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "PMG TEST" \
--menu "The 'pmgtest' repository can give advanced users access to new features early.\n\nAdd (disabled) 'pmgtest' repository?" 14 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Adding 'pmgtest' repository (disabled)"
cat >/etc/apt/sources.list.d/pmgtest-for-beta.list <<EOF
# deb http://download.proxmox.com/debian/pmg ${VERSION} pmgtest
EOF
msg_ok "Added 'pmgtest' repository"
;;
no)
msg_error "Selected no to adding 'pmgtest' repository"
msg_ok "Added 'pmgtest' repository"
;;
no) msg_error "Selected no to Adding 'pmgtest' repository" ;;
esac
;;
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)
# ---- SUBSCRIPTION NAG ----
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUBSCRIPTION NAG" --menu \
"Disable subscription nag in PMG UI?" 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
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" \
"Supporting the software's development team is essential.\nPlease consider buying a subscription." 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)"
cat <<'EOF' >/etc/apt/apt.conf.d/no-nag-script
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
sed -i '/data\.status/{s/\\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js;
fi";
"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
sed -i '/data\.status/{s/\\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js;
fi";
};
EOF
msg_ok "Disabled subscription nag (clear 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"
msg_error "Selected no to Disabling subscription nag"
rm -f /etc/apt/apt.conf.d/no-nag-script 2>/dev/null
;;
esac
apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null
apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null || msg_error "Widget toolkit reinstall failed"
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu "\nUpdate Proxmox Mail Gateway now?" 11 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
# ---- UPDATE ----
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --menu \
"Update Proxmox Mail Gateway now?" 11 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Updating Proxmox Mail Gateway (Patience)"
apt-get update &>/dev/null
apt-get -y dist-upgrade &>/dev/null
apt update &>/dev/null || msg_error "apt update failed"
apt -y dist-upgrade &>/dev/null || msg_error "apt dist-upgrade failed"
msg_ok "Updated Proxmox Mail Gateway"
;;
no)
msg_error "Selected no to updating Proxmox Mail Gateway"
;;
no) msg_error "Selected no to updating Proxmox Mail Gateway" ;;
esac
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu "\nReboot Proxmox Mail Gateway now? (recommended)" 11 58 2 \
"yes" " " \
"no" " " 3>&2 2>&1 1>&3)
# ---- REMINDER ----
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Post-Install Reminder" --msgbox \
"IMPORTANT:
Please run this script on every PMG node individually if you have multiple nodes.
After completing these steps, it is strongly recommended to REBOOT your node.
After the upgrade or post-install routines, always clear your browser cache or perform a hard reload (Ctrl+Shift+R) before using the PMG Web UI to avoid UI display issues." 20 80
# ---- REBOOT ----
CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "REBOOT" --menu \
"Reboot Proxmox Mail Gateway now? (recommended)" 11 58 2 "yes" " " "no" " " 3>&2 2>&1 1>&3)
case $CHOICE in
yes)
msg_info "Rebooting Proxmox Mail Gateway"
@@ -158,7 +303,7 @@ EOF
reboot
;;
no)
msg_error "Selected no to reboot Proxmox Mail Gateway (Reboot recommended)"
msg_error "Selected no to reboot (Reboot recommended)"
msg_ok "Completed Post Install Routines"
;;
esac
@@ -167,7 +312,7 @@ EOF
header_info
echo -e "\nThis script will Perform Post Install Routines.\n"
while true; do
read -p "Start the Proxmox Mail Gateway Post Install Script (y/n)?" yn
read -rp "Start the Proxmox Mail Gateway Post Install Script (y/n)? " yn
case $yn in
[Yy]*) break ;;
[Nn]*)