Compare commits

..

1 Commits

Author SHA1 Message Date
CanbiZ
b9a34a2f04 Add conditional logic for EFI disk allocation 2025-10-01 09:52:36 +02:00
40 changed files with 576 additions and 1013 deletions

View File

@@ -10,86 +10,8 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-10-06
## 2025-10-05
### 🚀 Updated Scripts
- #### ✨ New Features
- ActualBudget: bump to debian 13 [@MickLesk](https://github.com/MickLesk) ([#8124](https://github.com/community-scripts/ProxmoxVE/pull/8124))
- 2fauth: bump to debian 13 [@MickLesk](https://github.com/MickLesk) ([#8123](https://github.com/community-scripts/ProxmoxVE/pull/8123))
- AdventureLog: bump to debian 13 [@MickLesk](https://github.com/MickLesk) ([#8125](https://github.com/community-scripts/ProxmoxVE/pull/8125))
- Update cockpit to Debian 13 [@burgerga](https://github.com/burgerga) ([#8119](https://github.com/community-scripts/ProxmoxVE/pull/8119))
## 2025-10-04
### 🚀 Updated Scripts
- immich: guard /dev/dri permissions so CPU-only installs dont fail [@mlongwell](https://github.com/mlongwell) ([#8094](https://github.com/community-scripts/ProxmoxVE/pull/8094))
- #### ✨ New Features
- PosgreSQL: Add version choice [@tremor021](https://github.com/tremor021) ([#8103](https://github.com/community-scripts/ProxmoxVE/pull/8103))
## 2025-10-03
### 🆕 New Scripts
- pve-scripts-local ([#8083](https://github.com/community-scripts/ProxmoxVE/pull/8083))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- GLPI: Pin version to v10.0.20 [@tremor021](https://github.com/tremor021) ([#8092](https://github.com/community-scripts/ProxmoxVE/pull/8092))
- GLPI: Fix database setup [@tremor021](https://github.com/tremor021) ([#8074](https://github.com/community-scripts/ProxmoxVE/pull/8074))
- Overseerr: Increase resources [@tremor021](https://github.com/tremor021) ([#8086](https://github.com/community-scripts/ProxmoxVE/pull/8086))
- FIX: post-pve-install.sh just quitting [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#8070](https://github.com/community-scripts/ProxmoxVE/pull/8070))
- fix: ensure /etc/pulse exists before chown in update script [@rcourtman](https://github.com/rcourtman) ([#8068](https://github.com/community-scripts/ProxmoxVE/pull/8068))
- grist: remove unneeded var [@MickLesk](https://github.com/MickLesk) ([#8060](https://github.com/community-scripts/ProxmoxVE/pull/8060))
- #### 🔧 Refactor
- Immich: bump version to 2.0.1 [@vhsdream](https://github.com/vhsdream) ([#8090](https://github.com/community-scripts/ProxmoxVE/pull/8090))
### 🌐 Website
- #### 🐞 Bug Fixes
- Adjust navbar layout for large screen [@BramSuurdje](https://github.com/BramSuurdje) ([#8087](https://github.com/community-scripts/ProxmoxVE/pull/8087))
## 2025-10-02
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- EMQX: removal logic in emqx update [@MickLesk](https://github.com/MickLesk) ([#8050](https://github.com/community-scripts/ProxmoxVE/pull/8050))
- fix FlareSolverr version check to v3.3.25 [@MickLesk](https://github.com/MickLesk) ([#8051](https://github.com/community-scripts/ProxmoxVE/pull/8051))
## 2025-10-01
### 🆕 New Scripts
- New Script: PhpMyAdmin (Addon) [@MickLesk](https://github.com/MickLesk) ([#8030](https://github.com/community-scripts/ProxmoxVE/pull/8030))
### 🚀 Updated Scripts
- #### 🐞 Bug Fixes
- openwrt: Add conditional logic for EFI disk allocation [@MickLesk](https://github.com/MickLesk) ([#8024](https://github.com/community-scripts/ProxmoxVE/pull/8024))
- Plant-IT: Pin version to v0.10.0 [@tremor021](https://github.com/tremor021) ([#8023](https://github.com/community-scripts/ProxmoxVE/pull/8023))
- #### ✨ New Features
- Immich: bump version to 2.0.0 stable [@vhsdream](https://github.com/vhsdream) ([#8041](https://github.com/community-scripts/ProxmoxVE/pull/8041))
- #### 🔧 Refactor
- Immich: bump version to 1.144.1 [@vhsdream](https://github.com/vhsdream) ([#7994](https://github.com/community-scripts/ProxmoxVE/pull/7994))
## 2025-09-30
### 🚀 Updated Scripts

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-512}"
var_disk="${var_disk:-2}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@@ -29,8 +29,8 @@ function update_script() {
exit
fi
if check_for_gh_release "2fauth" "Bubka/2FAuth"; then
$STD apt update
$STD apt -y upgrade
$STD apt-get update
$STD apt-get -y upgrade
msg_info "Creating Backup"
mv "/opt/2fauth" "/opt/2fauth-backup"
@@ -60,11 +60,10 @@ function update_script() {
msg_info "Cleaning Up"
if dpkg -l | grep -q 'php8.2'; then
$STD apt remove --purge -y php8.2*
$STD apt-get remove --purge -y php8.2*
fi
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleanup Completed"
msg_ok "Updated Successfully"
fi

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@@ -28,7 +28,8 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
NODE_VERSION="22" setup_nodejs
NODE_VERSION="22"
setup_nodejs
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ -f /opt/actualbudget-data/config.json ]]; then
if [[ ! -f /opt/actualbudget_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/actualbudget_version.txt)" ]]; then

View File

@@ -11,7 +11,7 @@ var_disk="${var_disk:-7}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@@ -28,8 +28,8 @@ function update_script() {
exit
fi
if ! command -v memcached >/dev/null 2>&1; then
$STD apt update
$STD apt install -y memcached libmemcached-tools
$STD apt-get update
$STD apt-get install -y memcached libmemcached-tools
fi
if check_for_gh_release "adventurelog" "seanmorley15/adventurelog"; then
msg_info "Stopping Services"
@@ -43,12 +43,12 @@ function update_script() {
msg_ok "Backup done"
fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
PYTHON_VERSION="3.13" setup_uv
PYTHON_VERSION="3.12" setup_uv
msg_info "Updating ${APP}"
cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
cd /opt/adventurelog/backend/server || exit
cd /opt/adventurelog/backend/server
if [[ ! -x .venv/bin/python ]]; then
$STD uv venv .venv
$STD .venv/bin/python -m ensurepip --upgrade
@@ -59,7 +59,7 @@ function update_script() {
$STD .venv/bin/python -m manage migrate
cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
cd /opt/adventurelog/frontend || exit
cd /opt/adventurelog/frontend
$STD pnpm i
$STD pnpm build
msg_ok "Updated ${APP}"

View File

@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"
header_info "$APP"
@@ -36,15 +36,15 @@ function update_script() {
if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC"
$STD apt update
$STD apt -y upgrade
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC"
exit
fi
if [ "$UPD" == "2" ]; then
msg_info "Installing dependencies (patience)"
$STD apt install -y \
$STD apt-get install -y \
attr \
nfs-kernel-server \
samba \
@@ -56,7 +56,7 @@ function update_script() {
URL=$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
FILE=$(basename "$URL")
curl -fsSL "$URL" -o "$FILE"
$STD dpkg -i "$FILE" || $STD apt install -f -y
$STD dpkg -i "$FILE" || $STD apt-get install -f -y
rm -f "$FILE"
msg_ok "Installed Cockpit file sharing"
exit
@@ -64,7 +64,7 @@ function update_script() {
if [ "$UPD" == "3" ]; then
msg_info "Installing dependencies (patience)"
$STD apt install -y \
$STD apt-get install -y \
psmisc \
samba \
samba-common-bin
@@ -73,7 +73,7 @@ function update_script() {
URL=$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
FILE=$(basename "$URL")
curl -fsSL "$URL" -o "$FILE"
$STD dpkg -i "$FILE" || $STD apt install -f -y
$STD dpkg -i "$FILE" || $STD apt-get install -f -y
rm -f "$FILE"
msg_ok "Installed Cockpit identities"
exit
@@ -81,7 +81,7 @@ function update_script() {
if [ "$UPD" == "4" ]; then
msg_info "Installing dependencies"
$STD apt install -y \
$STD apt-get install -y \
rsync \
zip
msg_ok "Installed dependencies"
@@ -89,7 +89,7 @@ function update_script() {
URL=$(curl -fsSL https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
FILE=$(basename "$URL")
curl -fsSL "$URL" -o "$FILE"
$STD dpkg -i "$FILE" || $STD apt install -f -y
$STD dpkg -i "$FILE" || $STD apt-get install -f -y
rm -f "$FILE"
msg_ok "Installed Cockpit navigator"
exit

View File

@@ -31,13 +31,7 @@ function update_script() {
msg_ok "Stopped EMQX"
msg_info "Removing old EMQX"
if dpkg -l | grep -q "^ii\s\+emqx\s"; then
$STD apt-get remove --purge -y emqx
elif dpkg -l | grep -q "^ii\s\+emqx-enterprise\s"; then
$STD apt-get remove --purge -y emqx-enterprise
else
msg_ok "No old EMQX package found"
fi
$STD apt-get remove --purge -y emqx
msg_ok "Removed old EMQX"
msg_info "Downloading EMQX v${RELEASE}"

View File

@@ -28,7 +28,7 @@ function update_script() {
msg_error "No ${APP} Installation Found!"
exit
fi
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "3.3.25"; then
if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "3.3.5"; then
msg_info "Stopping service"
systemctl stop flaresolverr
msg_ok "Stopped service"

6
ct/headers/petio Normal file
View File

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

View File

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

View File

@@ -74,7 +74,7 @@ function update_script() {
done
msg_ok "Image-processing libraries up to date"
fi
RELEASE="2.0.1"
RELEASE="1.143.1"
if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
msg_info "Stopping Services"
systemctl stop immich-web
@@ -158,7 +158,6 @@ EOF
cd "$SRC_DIR"/machine-learning
mkdir -p "$ML_DIR" && chown -R immich:immich "$ML_DIR"
chown immich:immich ./uv.lock
export VIRTUAL_ENV="${ML_DIR}"/ml-venv
if [[ -f ~/.openvino ]]; then
msg_info "Updating HW-accelerated machine-learning"
@@ -191,7 +190,6 @@ EOF
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
$STD apt clean -y
msg_ok "Cleaned"
systemctl restart immich-ml immich-web
fi

View File

@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
APP="Overseerr"
var_tags="${var_tags:-media}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"

View File

@@ -1,18 +1,17 @@
#!/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: michelroegl-brunner
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://www.debian.org/
# Source: https://petio.tv/
APP="PVE-Scripts-Local"
var_tags="${var_tags:-pve-scripts-local}"
APP="Petio"
var_tags="${var_tags:-media}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-4096}"
var_ram="${var_ram:-1024}"
var_disk="${var_disk:-4}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
var_os="${var_os:-ubuntu}"
var_version="${var_version:-20.04}"
header_info "$APP"
variables
@@ -23,11 +22,16 @@ function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /var ]]; then
if [[ ! -d /opt/Petio ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "No Update function implementd"
msg_info "Updating $APP"
systemctl stop petio.service
curl -fsSL https://petio.tv/releases/latest -o petio-latest.zip
$STD unzip petio-latest.zip -d /opt/Petio
systemctl start petio.service
msg_ok "Updated $APP"
exit
}
@@ -38,4 +42,4 @@ description
msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7777${CL}"

View File

@@ -32,10 +32,8 @@ function update_script() {
systemctl stop plant-it
msg_ok "Stopped $APP"
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "0.10.0" "/opt/plant-it/backend" "server.jar"
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "0.10.0" "/opt/plant-it/frontend" "client.tar.gz"
msg_warn "Application is updated to latest Web version (v0.10.0). There will be no more updates available."
msg_warn "Please read: https://github.com/MDeLuise/plant-it/releases/tag/1.0.0"
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "latest" "/opt/plant-it/backend" "server.jar"
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "latest" "/opt/plant-it/frontend" "client.tar.gz"
msg_info "Starting $APP"
systemctl start plant-it

View File

@@ -40,10 +40,7 @@ function update_script() {
fetch_and_deploy_gh_release "pulse" "rcourtman/Pulse" "prebuild" "latest" "/opt/pulse" "*-linux-amd64.tar.gz"
ln -sf /opt/pulse/bin/pulse /usr/local/bin/pulse
mkdir -p /etc/pulse
chown pulse:pulse /etc/pulse
chown -R pulse:pulse /opt/pulse
chmod 700 /etc/pulse
chown -R pulse:pulse /etc/pulse /opt/pulse
if [[ -f "$SERVICE_PATH"/pulse-backend.service ]]; then
mv "$SERVICE_PATH"/pulse-backend.service "$SERVICE_PATH"/pulse.service
fi

View File

@@ -23,7 +23,7 @@
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "13"
"version": "12"
}
}
],

View File

@@ -23,7 +23,7 @@
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "13"
"version": "12"
}
}
],

View File

@@ -23,7 +23,7 @@
"ram": 2048,
"hdd": 7,
"os": "debian",
"version": "13"
"version": "12"
}
}
],

View File

@@ -23,7 +23,7 @@
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "13"
"version": "12"
}
}
],

View File

@@ -20,7 +20,7 @@
"script": "ct/overseerr.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"ram": 2048,
"hdd": 8,
"os": "debian",
"version": "12"

View File

@@ -0,0 +1,35 @@
{
"name": "Petio",
"slug": "petio",
"categories": [
13
],
"date_created": "2024-06-12",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 7777,
"documentation": "https://docs.petio.tv/",
"website": "https://petio.tv/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/petio.webp",
"config_path": "",
"description": "Petio is a third party companion app available to Plex server owners to allow their users to request, review and discover content.",
"install_methods": [
{
"type": "default",
"script": "ct/petio.sh",
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"os": "ubuntu",
"version": "20.04"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -1,44 +0,0 @@
{
"name": "PhpMyAdmin",
"slug": "phpmyadmin",
"categories": [
8
],
"date_created": "2025-10-01",
"type": "addon",
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": "https://www.phpmyadmin.net/docs/",
"config_path": "Debian/Ubuntu: /var/www/html/phpMyAdmin | Alpine: /usr/share/phpmyadmin",
"website": "https://www.phpmyadmin.net/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/phpmyadmin.webp",
"description": "phpMyAdmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB. Frequently used operations (managing databases, tables, columns, relations, indexes, users, permissions, etc) can be performed via the user interface, while you still have the ability to directly execute any SQL statement.",
"install_methods": [
{
"type": "default",
"script": "tools/addon/phpmyadmin.sh",
"resources": {
"cpu": null,
"ram": null,
"hdd": null,
"os": null,
"version": null
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Execute within an existing LXC Console",
"type": "warning"
},
{
"text": "To update or uninstall run bash call again",
"type": "info"
}
]
}

View File

@@ -46,10 +46,6 @@
{
"text": "Set a password after installation for postgres user by running `echo \"ALTER USER postgres with encrypted password 'your_password';\" | sudo -u postgres psql`",
"type": "info"
},
{
"text": "Debian script offers versions `15, 16, 17, 18`, while Alpine script offers versions `15, 16, 17`.",
"type": "info"
}
]
}

View File

@@ -1,35 +0,0 @@
{
"name": "PVEScriptsLocal",
"slug": "pve-scripts-local",
"categories": [
1
],
"date_created": "2025-10-03",
"type": "ct",
"updateable": false,
"privileged": false,
"interface_port": 3000,
"documentation": "https://github.com/community-scripts/ProxmoxVE-Local",
"config_path": "/opt/PVEScripts-Local/.env",
"website": "https://community-scripts.github.io/ProxmoxVE",
"logo": "https://community-scripts.github.io/ProxmoxVE/logo.png",
"description": "A modern web-based management interface for Proxmox VE (PVE) helper scripts. This tool provides a user-friendly way to discover, download, and execute community-sourced Proxmox scripts locally with real-time terminal output streaming.",
"install_methods": [
{
"type": "default",
"script": "ct/pve-scripts-local.sh",
"resources": {
"cpu": 2,
"ram": 4096,
"hdd": 4,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -1,359 +1,34 @@
[
{
"name": "9001/copyparty",
"version": "v1.19.16",
"date": "2025-10-05T23:28:59Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.3",
"date": "2025-08-25T13:59:56Z"
},
{
"name": "outline/outline",
"version": "v1.0.0-0",
"date": "2025-10-05T20:30:31Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "plankanban/planka",
"version": "planka-1.0.5",
"date": "2025-10-05T18:54:25Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.27.6",
"date": "2025-10-05T17:27:46Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v1.13.0",
"date": "2025-10-05T15:41:31Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.07.3",
"date": "2025-10-05T14:47:20Z"
},
{
"name": "runtipi/runtipi",
"version": "nightly",
"date": "2025-10-04T18:14:42Z"
},
{
"name": "Prowlarr/Prowlarr",
"version": "v2.0.5.5160",
"date": "2025-08-23T21:23:11Z"
},
{
"name": "chrisvel/tududi",
"version": "v0.83-rc9",
"date": "2025-10-05T13:20:23Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "2.3.0",
"date": "2025-10-05T11:13:58Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.0",
"date": "2025-09-13T16:38:21Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.27.5.10198",
"date": "2025-09-03T12:08:43Z"
},
{
"name": "Lidarr/Lidarr",
"version": "v2.13.3.4711",
"date": "2025-08-28T20:06:24Z"
},
{
"name": "seriousm4x/UpSnap",
"version": "5.2.2",
"date": "2025-10-05T09:12:17Z"
},
{
"name": "evcc-io/evcc",
"version": "0.209.0",
"date": "2025-10-05T07:45:18Z"
},
{
"name": "pommee/goaway",
"version": "v0.62.11",
"date": "2025-10-05T07:31:57Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.72",
"date": "2025-10-05T05:52:56Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.27",
"date": "2025-10-05T02:16:42Z"
},
{
"name": "BerriAI/litellm",
"version": "v1.77.7-nightly",
"date": "2025-10-05T01:43:25Z"
},
{
"name": "webmin/webmin",
"version": "2.520",
"date": "2025-10-05T00:51:34Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-10-05T00:27:07Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.47.1",
"date": "2025-01-05T21:14:23Z"
},
{
"name": "ollama/ollama",
"version": "v0.12.4-rc5",
"date": "2025-10-04T16:18:42Z"
},
{
"name": "wizarrrr/wizarr",
"version": "v2025.10.1",
"date": "2025-10-04T16:59:38Z"
},
{
"name": "SigNoz/signoz",
"version": "v0.97.0-rc.2",
"date": "2025-10-04T16:21:45Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.8.8-beta",
"date": "2025-10-04T15:56:29Z"
},
{
"name": "silverbulletmd/silverbullet",
"version": "2.1.7",
"date": "2025-10-04T13:41:43Z"
},
{
"name": "globaleaks/globaleaks-whistleblowing-software",
"version": "v5.0.84",
"date": "2025-10-04T08:06:12Z"
},
{
"name": "ErsatzTV/ErsatzTV",
"version": "v25.7.0",
"date": "2025-10-04T00:36:45Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.21.0",
"date": "2025-10-03T22:38:32Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.3.0",
"date": "2025-10-03T21:22:14Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.0",
"date": "2025-09-30T11:49:13Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.40.0",
"date": "2025-10-03T19:14:46Z"
},
{
"name": "home-assistant/core",
"version": "2025.10.1",
"date": "2025-10-03T18:10:59Z"
},
{
"name": "henrygd/beszel",
"version": "v0.13.0",
"date": "2025-10-03T18:04:07Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "@fumadocs/mdx-remote@1.4.2",
"date": "2025-10-03T17:01:32Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "v1.6.5",
"date": "2025-10-03T16:43:34Z"
},
{
"name": "immich-app/immich",
"version": "v2.0.1",
"date": "2025-10-03T16:32:01Z"
},
{
"name": "duplicati/duplicati",
"version": "v2.1.1.104-2.1.1.104_canary_2025-10-03",
"date": "2025-10-03T13:14:48Z"
},
{
"name": "docker/compose",
"version": "v2.40.0",
"date": "2025-10-03T12:56:38Z"
},
{
"name": "mattermost/mattermost",
"version": "mattermost-redux@10.12.0",
"date": "2025-09-18T20:15:19Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.3",
"date": "2025-09-01T09:47:06Z"
},
{
"name": "pocketbase/pocketbase",
"version": "v0.30.1",
"date": "2025-10-03T06:55:25Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.4.1",
"date": "2025-10-03T06:52:35Z"
},
{
"name": "redis/redis",
"version": "8.2.2",
"date": "2025-10-03T06:22:38Z"
},
{
"name": "mealie-recipes/mealie",
"version": "v3.3.1",
"date": "2025-10-02T17:10:34Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.95",
"date": "2025-10-02T16:07:18Z"
},
{
"name": "meilisearch/meilisearch",
"version": "prototype-shorten-snapshot-creation-0",
"date": "2025-10-02T15:16:05Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.112.6",
"date": "2025-09-26T10:56:27Z"
},
{
"name": "theonedev/onedev",
"version": "v13.0.7",
"date": "2025-10-02T14:33:22Z"
},
{
"name": "cockpit-project/cockpit",
"version": "348",
"date": "2025-10-02T13:51:28Z"
},
{
"name": "kyantech/Palmr",
"version": "v3.2.3-beta",
"date": "2025-10-02T13:48:14Z"
},
{
"name": "apache/tomcat",
"version": "10.1.47",
"date": "2025-10-02T12:12:04Z"
},
{
"name": "actualbudget/actual",
"version": "v25.10.0",
"date": "2025-10-02T11:34:39Z"
},
{
"name": "jenkinsci/jenkins",
"version": "jenkins-2.530",
"date": "2025-09-30T15:42:52Z"
},
{
"name": "laurent22/joplin",
"version": "server-v3.4.4",
"date": "2025-09-25T13:19:26Z"
},
{
"name": "ipfs/kubo",
"version": "v0.38.0",
"date": "2025-10-02T01:46:06Z"
},
{
"name": "NodeBB/NodeBB",
"version": "v4.6.0",
"date": "2025-10-01T18:12:07Z"
},
{
"name": "Koenkk/zigbee2mqtt",
"version": "2.6.2",
"date": "2025-10-01T17:51:09Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "6.1.16",
"date": "2025-10-01T14:58:20Z"
},
{
"name": "glpi-project/glpi",
"version": "11.0.0",
"date": "2025-10-01T12:00:01Z"
},
{
"name": "authelia/authelia",
"version": "v4.39.11",
"date": "2025-10-01T11:42:23Z"
},
{
"name": "esphome/esphome",
"version": "2025.9.3",
"date": "2025-10-01T11:30:07Z"
},
{
"name": "element-hq/synapse",
"version": "v1.139.0",
"date": "2025-10-01T08:24:16Z"
},
{
"name": "Kozea/Radicale",
"version": "v3.5.7.pypi",
"date": "2025-10-01T05:32:27Z"
},
{
"name": "HabitRPG/habitica",
"version": "v5.41.4",
"date": "2025-09-30T22:26:11Z"
},
{
"name": "zabbix/zabbix",
"version": "7.4.3",
"date": "2025-09-30T21:49:53Z"
"name": "BerriAI/litellm",
"version": "v1.77.5.rc.3",
"date": "2025-09-30T22:18:41Z"
},
{
"name": "mongodb/mongo",
"version": "r8.2.1",
"date": "2025-09-30T21:46:28Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.16.0",
"date": "2025-09-30T21:12:11Z"
},
{
"name": "immich-app/immich",
"version": "v1.144.1",
"date": "2025-09-30T20:51:13Z"
},
{
"name": "runtipi/runtipi",
"version": "nightly",
"date": "2025-09-28T18:26:30Z"
},
{
"name": "MediaBrowser/Emby.Releases",
"version": "4.9.1.80",
@@ -364,6 +39,16 @@
"version": "v4.4.2",
"date": "2025-09-30T20:16:13Z"
},
{
"name": "redis/redis",
"version": "8.4-m01-int",
"date": "2025-09-30T20:15:40Z"
},
{
"name": "pommee/goaway",
"version": "v0.62.7",
"date": "2025-09-30T19:36:37Z"
},
{
"name": "TwiN/gatus",
"version": "v5.25.2",
@@ -380,9 +65,9 @@
"date": "2025-09-30T16:18:10Z"
},
{
"name": "wazuh/wazuh",
"version": "coverity-w40-4.14.0",
"date": "2025-09-30T15:35:54Z"
"name": "jenkinsci/jenkins",
"version": "jenkins-2.530",
"date": "2025-09-30T15:42:52Z"
},
{
"name": "gristlabs/grist-core",
@@ -394,6 +79,11 @@
"version": "4.4.46",
"date": "2025-09-30T13:21:24Z"
},
{
"name": "meilisearch/meilisearch",
"version": "latest",
"date": "2025-09-30T13:14:19Z"
},
{
"name": "fallenbagel/jellyseerr",
"version": "preview-rename-tags",
@@ -404,21 +94,71 @@
"version": "e6.0.0",
"date": "2025-09-30T12:04:20Z"
},
{
"name": "keycloak/keycloak",
"version": "26.4.0",
"date": "2025-09-30T11:49:13Z"
},
{
"name": "element-hq/synapse",
"version": "v1.139.0",
"date": "2025-09-30T11:01:45Z"
},
{
"name": "mattermost/mattermost",
"version": "mattermost-redux@10.12.0",
"date": "2025-09-18T20:15:19Z"
},
{
"name": "home-assistant/core",
"version": "2025.9.4",
"date": "2025-09-19T21:09:39Z"
},
{
"name": "silverbulletmd/silverbullet",
"version": "2.1.6",
"date": "2025-09-30T09:09:13Z"
},
{
"name": "chrisvel/tududi",
"version": "v0.82-rc5",
"date": "2025-09-23T07:31:12Z"
},
{
"name": "zitadel/zitadel",
"version": "v4.3.0",
"date": "2025-09-30T06:54:15Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.24.7",
"date": "2025-09-30T05:56:20Z"
},
{
"name": "jeedom/core",
"version": "4.4.20",
"date": "2025-09-30T00:27:06Z"
},
{
"name": "thomiceli/opengist",
"version": "v1.11.1",
"date": "2025-09-30T00:24:16Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "goauthentik/authentik",
"version": "version/2025.8.4",
"date": "2025-09-30T00:03:11Z"
},
{
"name": "9001/copyparty",
"version": "v1.19.15",
"date": "2025-09-29T23:42:38Z"
},
{
"name": "verdaccio/verdaccio",
"version": "v6.2.0",
@@ -434,21 +174,51 @@
"version": "v2.3.3",
"date": "2025-09-29T18:53:35Z"
},
{
"name": "esphome/esphome",
"version": "2025.9.2",
"date": "2025-09-29T18:50:27Z"
},
{
"name": "zabbix/zabbix",
"version": "7.0.19",
"date": "2025-09-29T17:38:12Z"
},
{
"name": "influxdata/influxdb",
"version": "v2.7.12",
"date": "2025-05-29T17:08:26Z"
"version": "v3.5.0",
"date": "2025-09-29T17:33:17Z"
},
{
"name": "sassanix/Warracker",
"version": "0.10.1.13",
"date": "2025-09-29T17:11:25Z"
},
{
"name": "jhuckaby/Cronicle",
"version": "v0.9.93",
"date": "2025-09-29T16:24:45Z"
},
{
"name": "msgbyte/tianji",
"version": "v1.27.2",
"date": "2025-09-29T16:16:21Z"
},
{
"name": "n8n-io/n8n",
"version": "n8n@1.112.6",
"date": "2025-09-26T10:56:27Z"
},
{
"name": "AdguardTeam/AdGuardHome",
"version": "v0.107.67",
"date": "2025-09-29T14:45:57Z"
},
{
"name": "NodeBB/NodeBB",
"version": "v4.5.2",
"date": "2025-09-29T14:04:09Z"
},
{
"name": "MDeLuise/plant-it",
"version": "1.0.0",
@@ -459,6 +229,16 @@
"version": "v1.12.8",
"date": "2025-09-29T13:22:59Z"
},
{
"name": "theonedev/onedev",
"version": "v13.0.6",
"date": "2025-09-29T12:33:56Z"
},
{
"name": "Graylog2/graylog2-server",
"version": "7.0.0-beta.2",
"date": "2025-09-29T11:28:33Z"
},
{
"name": "jupyter/notebook",
"version": "@jupyter-notebook/ui-components@7.5.0-beta.0",
@@ -474,11 +254,21 @@
"version": "1.0.2",
"date": "2025-09-29T04:02:44Z"
},
{
"name": "firefly-iii/firefly-iii",
"version": "v6.4.0",
"date": "2025-09-13T16:38:21Z"
},
{
"name": "autobrr/autobrr",
"version": "v1.67.0",
"date": "2025-09-28T20:49:34Z"
},
{
"name": "Radarr/Radarr",
"version": "v5.27.5.10198",
"date": "2025-09-03T12:08:43Z"
},
{
"name": "lazy-media/Reactive-Resume",
"version": "v1.2.6",
@@ -489,6 +279,11 @@
"version": "v10.10.7",
"date": "2025-04-05T19:14:59Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.26",
"date": "2025-09-28T14:50:47Z"
},
{
"name": "karlomikus/bar-assistant",
"version": "v5.8.1",
@@ -504,11 +299,31 @@
"version": "v1.5.3",
"date": "2025-09-20T12:12:33Z"
},
{
"name": "mealie-recipes/mealie",
"version": "v3.3.0",
"date": "2025-09-28T00:49:34Z"
},
{
"name": "hyperion-project/hyperion.ng",
"version": "2.1.1",
"date": "2025-06-14T17:45:06Z"
},
{
"name": "moghtech/komodo",
"version": "v1.19.5",
"date": "2025-09-27T20:59:46Z"
},
{
"name": "Luligu/matterbridge",
"version": "3.2.9",
"date": "2025-09-27T17:58:53Z"
},
{
"name": "wizarrrr/wizarr",
"version": "v2025.9.7",
"date": "2025-09-27T17:52:44Z"
},
{
"name": "raydak-labs/configarr",
"version": "v1.16.0",
@@ -524,11 +339,31 @@
"version": "1.27.1",
"date": "2025-09-27T13:07:26Z"
},
{
"name": "evcc-io/evcc",
"version": "0.208.1",
"date": "2025-09-27T12:57:22Z"
},
{
"name": "javedh-dev/tracktor",
"version": "0.3.18",
"date": "2025-09-27T10:32:09Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-ui@15.8.1",
"date": "2025-09-27T09:57:41Z"
},
{
"name": "Kozea/Radicale",
"version": "v3.5.7",
"date": "2025-09-27T06:16:00Z"
},
{
"name": "ipfs/kubo",
"version": "v0.37.0",
"date": "2025-08-27T20:03:52Z"
},
{
"name": "Dolibarr/dolibarr",
"version": "22.0.2",
@@ -544,16 +379,56 @@
"version": "v4.104.2",
"date": "2025-09-26T22:34:32Z"
},
{
"name": "Ombi-app/Ombi",
"version": "v4.47.1",
"date": "2025-01-05T21:14:23Z"
},
{
"name": "bastienwirtz/homer",
"version": "v25.09.1",
"date": "2025-09-26T19:22:16Z"
},
{
"name": "homarr-labs/homarr",
"version": "v1.39.0",
"date": "2025-09-26T19:15:10Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "v1.6.4",
"date": "2025-08-18T20:22:07Z"
},
{
"name": "traefik/traefik",
"version": "v3.5.3",
"date": "2025-09-26T09:31:01Z"
},
{
"name": "wazuh/wazuh",
"version": "v4.13.1",
"date": "2025-09-25T15:43:49Z"
},
{
"name": "nzbgetcom/nzbget",
"version": "v25.3",
"date": "2025-09-01T09:47:06Z"
},
{
"name": "ollama/ollama",
"version": "v0.12.3",
"date": "2025-09-26T05:08:26Z"
},
{
"name": "henrygd/beszel",
"version": "v0.12.12",
"date": "2025-09-25T23:46:01Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.3.4",
"date": "2025-09-25T21:19:48Z"
},
{
"name": "go-gitea/gitea",
"version": "v1.26.0-dev",
@@ -564,6 +439,16 @@
"version": "v1.7.0",
"date": "2025-09-01T10:10:34Z"
},
{
"name": "TandoorRecipes/recipes",
"version": "2.2.7",
"date": "2025-09-25T19:04:38Z"
},
{
"name": "kyantech/Palmr",
"version": "v3.2.2-beta",
"date": "2025-09-25T18:44:52Z"
},
{
"name": "Threadfin/Threadfin",
"version": "1.2.39",
@@ -574,11 +459,21 @@
"version": "v1.88.3",
"date": "2025-09-25T15:49:37Z"
},
{
"name": "duplicati/duplicati",
"version": "v2.1.1.103-2.1.1.103_canary_2025-09-25",
"date": "2025-09-25T15:17:46Z"
},
{
"name": "linkwarden/linkwarden",
"version": "v2.13.0",
"date": "2025-09-25T15:19:02Z"
},
{
"name": "SigNoz/signoz",
"version": "v0.96.1",
"date": "2025-09-25T15:18:19Z"
},
{
"name": "bluenviron/mediamtx",
"version": "v1.15.1",
@@ -589,6 +484,11 @@
"version": "v14.0.0-dev",
"date": "2025-09-25T13:19:45Z"
},
{
"name": "laurent22/joplin",
"version": "server-v3.4.4",
"date": "2025-09-25T13:19:26Z"
},
{
"name": "rabbitmq/rabbitmq-server",
"version": "v4.1.4",
@@ -649,6 +549,11 @@
"version": "REL_18_0",
"date": "2025-09-22T20:11:33Z"
},
{
"name": "gtsteffaniak/filebrowser",
"version": "v0.8.7-beta",
"date": "2025-09-22T18:24:54Z"
},
{
"name": "gethomepage/homepage",
"version": "v1.5.0",
@@ -659,6 +564,11 @@
"version": "2025.9.1",
"date": "2025-09-22T13:32:14Z"
},
{
"name": "sabnzbd/sabnzbd",
"version": "4.5.3",
"date": "2025-08-25T13:59:56Z"
},
{
"name": "itsmng/itsm-ng",
"version": "v2.1.0",
@@ -674,6 +584,16 @@
"version": "5.11.1",
"date": "2025-09-22T02:21:27Z"
},
{
"name": "Prowlarr/Prowlarr",
"version": "v2.0.5.5160",
"date": "2025-08-23T21:23:11Z"
},
{
"name": "Lidarr/Lidarr",
"version": "v2.13.3.4711",
"date": "2025-08-28T20:06:24Z"
},
{
"name": "openhab/openhab-core",
"version": "5.1.0.M1",
@@ -684,6 +604,16 @@
"version": "v2.7.3",
"date": "2025-09-21T12:07:19Z"
},
{
"name": "globaleaks/globaleaks-whistleblowing-software",
"version": "v5.0.83",
"date": "2025-09-21T07:40:35Z"
},
{
"name": "pocket-id/pocket-id",
"version": "v1.11.2",
"date": "2025-09-20T20:15:40Z"
},
{
"name": "traccar/traccar",
"version": "v6.10.0",
@@ -699,6 +629,11 @@
"version": "v1.5.2",
"date": "2025-09-19T14:18:53Z"
},
{
"name": "docker/compose",
"version": "v2.39.4",
"date": "2025-09-19T08:49:23Z"
},
{
"name": "saltstack/salt",
"version": "v3007.8",
@@ -719,6 +654,11 @@
"version": "release-1.24.0",
"date": "2025-09-18T08:36:55Z"
},
{
"name": "outline/outline",
"version": "v0.87.4",
"date": "2025-09-18T00:47:08Z"
},
{
"name": "TasmoAdmin/TasmoAdmin",
"version": "v4.3.1",
@@ -734,6 +674,16 @@
"version": "2.10.0",
"date": "2025-09-17T14:47:00Z"
},
{
"name": "glpi-project/glpi",
"version": "10.0.20",
"date": "2025-09-10T12:00:00Z"
},
{
"name": "cockpit-project/cockpit",
"version": "347",
"date": "2025-09-17T12:03:45Z"
},
{
"name": "dgtlmoon/changedetection.io",
"version": "0.50.14",
@@ -754,6 +704,11 @@
"version": "v4.3.0.1",
"date": "2025-09-17T08:50:39Z"
},
{
"name": "webmin/webmin",
"version": "2.510",
"date": "2025-09-16T20:28:37Z"
},
{
"name": "tobychui/zoraxy",
"version": "v3.2.5r2",
@@ -774,6 +729,11 @@
"version": "2.1.1",
"date": "2025-09-16T06:21:32Z"
},
{
"name": "seriousm4x/UpSnap",
"version": "5.2.1",
"date": "2025-09-15T21:26:25Z"
},
{
"name": "Paymenter/Paymenter",
"version": "v1.3.4",
@@ -819,11 +779,21 @@
"version": "pmm-6401-v1.126.0",
"date": "2025-09-15T11:32:31Z"
},
{
"name": "authelia/authelia",
"version": "v4.39.10",
"date": "2025-09-15T09:11:13Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.5.4",
"date": "2025-09-15T00:49:53Z"
},
{
"name": "ErsatzTV/ErsatzTV",
"version": "v25.6.0",
"date": "2025-09-14T17:55:21Z"
},
{
"name": "karakeep-app/karakeep",
"version": "cli/v0.27.1",
@@ -874,6 +844,11 @@
"version": "v4.3.1",
"date": "2025-09-08T22:26:23Z"
},
{
"name": "apache/tomcat",
"version": "10.1.46",
"date": "2025-09-08T14:29:54Z"
},
{
"name": "home-assistant/operating-system",
"version": "16.2",
@@ -889,6 +864,11 @@
"version": "RELEASE.2025-09-07T16-13-09Z",
"date": "2025-09-07T18:53:04Z"
},
{
"name": "pocketbase/pocketbase",
"version": "v0.30.0",
"date": "2025-09-07T05:25:44Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v1.3.2",
@@ -914,6 +894,11 @@
"version": "v1.0.0-beta17",
"date": "2025-09-04T21:30:14Z"
},
{
"name": "plankanban/planka",
"version": "planka-1.0.4",
"date": "2025-09-04T13:49:40Z"
},
{
"name": "blakeblackshear/frigate",
"version": "v0.14.1",
@@ -924,6 +909,11 @@
"version": "v0.15.1",
"date": "2025-09-04T10:37:23Z"
},
{
"name": "actualbudget/actual",
"version": "v25.9.0",
"date": "2025-09-04T01:12:37Z"
},
{
"name": "apache/cassandra",
"version": "cassandra-4.1.10",
@@ -939,6 +929,11 @@
"version": "v2.1.8",
"date": "2025-09-01T19:20:42Z"
},
{
"name": "Koenkk/zigbee2mqtt",
"version": "2.6.1",
"date": "2025-09-01T19:05:18Z"
},
{
"name": "seanmorley15/AdventureLog",
"version": "v0.11.0",
@@ -959,6 +954,11 @@
"version": "1.7.0",
"date": "2025-08-28T18:10:59Z"
},
{
"name": "BookStackApp/BookStack",
"version": "v25.07.2",
"date": "2025-08-28T16:46:05Z"
},
{
"name": "garethgeorge/backrest",
"version": "v1.9.2",

View File

@@ -42,7 +42,7 @@ function Navbar() {
<Image height={18} unoptimized width={18} alt="logo" src="/ProxmoxVE/logo.png" className="" />
<span className="">Proxmox VE Helper-Scripts</span>
</Link>
<div className="flex items-center justify-between sm:justify-end gap-2 w-full">
<div className="flex items-center justify-between gap-2 w-full">
<div className="flex sm:hidden">
<Suspense>
<MobileSidebar />

View File

@@ -14,9 +14,9 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
lsb-release \
nginx
$STD apt-get install -y \
lsb-release \
nginx
msg_ok "Installed Dependencies"
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
@@ -31,26 +31,26 @@ $STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{
echo "2FAuth Credentials"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
echo "Database Name: $DB_NAME"
echo "2FAuth Credentials"
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
echo "Database Name: $DB_NAME"
} >>~/2FAuth.creds
msg_ok "Set up Database"
fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
msg_info "Setup 2FAuth"
cd /opt/2fauth || exit
cd /opt/2fauth
cp .env.example .env
IPADDRESS=$(hostname -I | awk '{print $1}')
sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
-e "s|^DB_CONNECTION=$|DB_CONNECTION=mysql|" \
-e "s|^DB_DATABASE=$|DB_DATABASE=$DB_NAME|" \
-e "s|^DB_HOST=$|DB_HOST=127.0.0.1|" \
-e "s|^DB_PORT=$|DB_PORT=3306|" \
-e "s|^DB_USERNAME=$|DB_USERNAME=$DB_USER|" \
-e "s|^DB_PASSWORD=$|DB_PASSWORD=$DB_PASS|" .env
-e "s|^DB_CONNECTION=$|DB_CONNECTION=mysql|" \
-e "s|^DB_DATABASE=$|DB_DATABASE=$DB_NAME|" \
-e "s|^DB_HOST=$|DB_HOST=127.0.0.1|" \
-e "s|^DB_PORT=$|DB_PORT=3306|" \
-e "s|^DB_USERNAME=$|DB_USERNAME=$DB_USER|" \
-e "s|^DB_PASSWORD=$|DB_PASSWORD=$DB_PASS|" .env
export COMPOSER_ALLOW_SUPERUSER=1
$STD composer update --no-plugins --no-scripts
$STD composer install --no-dev --prefer-source --no-plugins --no-scripts
@@ -99,7 +99,6 @@ motd_ssh
customize
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
$STD apt-get install -y \
make \
g++
msg_ok "Installed Dependencies"
@@ -22,7 +22,8 @@ msg_ok "Installed Dependencies"
msg_info "Installing Actual Budget"
cd /opt
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
NODE_VERSION="22" setup_nodejs
NODE_VERSION="22"
setup_nodejs
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
chown -R root:root /opt/actualbudget-data
chmod -R 755 /opt/actualbudget-data
@@ -49,7 +50,7 @@ cat <<EOF >/opt/actualbudget-data/config.json
EOF
mkdir -p /opt/actualbudget
cd /opt/actualbudget || exit
cd /opt/actualbudget
$STD npm install --location=global @actual-app/sync-server
$STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfhost.key -out selfhost.crt <<EOF
US
@@ -91,7 +92,6 @@ motd_ssh
customize
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -14,7 +14,7 @@ network_check
update_os
msg_info "Installing Dependencies"
$STD apt install -y \
$STD apt-get install -y \
gdal-bin \
libgdal-dev \
git \
@@ -22,9 +22,9 @@ $STD apt install -y \
libmemcached-tools
msg_ok "Installed Dependencies"
PYTHON_VERSION="3.13" setup_uv
PYTHON_VERSION="3.12" setup_uv
NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
PG_VERSION="17" PG_MODULES="postgis" setup_postgresql
PG_VERSION="16" PG_MODULES="postgis" setup_postgresql
msg_info "Set up PostgreSQL Database"
DB_NAME="adventurelog_db"
@@ -74,7 +74,7 @@ DISABLE_REGISTRATION=False
# EMAIL_HOST_PASSWORD='password'
# DEFAULT_FROM_EMAIL='user@example.com'
EOF
cd /opt/adventurelog/backend/server || exit
cd /opt/adventurelog/backend/server
mkdir -p /opt/adventurelog/backend/server/media
$STD uv venv /opt/adventurelog/backend/server/.venv
$STD /opt/adventurelog/backend/server/.venv/bin/python -m ensurepip --upgrade
@@ -88,13 +88,13 @@ PUBLIC_SERVER_URL=http://$LOCAL_IP:8000
BODY_SIZE_LIMIT=Infinity
ORIGIN='http://$LOCAL_IP:3000'
EOF
cd /opt/adventurelog/frontend || exit
cd /opt/adventurelog/frontend
$STD pnpm i
$STD pnpm build
msg_ok "Installed AdventureLog"
msg_info "Setting up Django Admin"
cd /opt/adventurelog/backend/server || exit
cd /opt/adventurelog/backend/server
$STD .venv/bin/python -m manage shell <<EOF
from django.contrib.auth import get_user_model
UserModel = get_user_model()
@@ -148,7 +148,6 @@ motd_ssh
customize
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -13,12 +13,9 @@ setting_up_container
network_check
update_os
read -r -p "${TAB3}Enter PostgreSQL version (15/16/17): " ver
[[ $ver =~ ^(15|16|17)$ ]] || { echo "Invalid version"; exit 1; }
msg_info "Installing PostgreSQL ${ver}"
$STD apk add --no-cache postgresql${ver} postgresql${ver}-contrib postgresql${ver}-openrc sudo
msg_ok "Installed PostgreSQL ${ver}"
msg_info "Installing PostgreSQL"
$STD apk add --no-cache postgresql16 postgresql16-contrib postgresql16-openrc sudo
msg_ok "Installed PostgreSQL"
msg_info "Enabling PostgreSQL Service"
$STD rc-update add postgresql default
@@ -29,8 +26,8 @@ $STD rc-service postgresql start
msg_ok "Started PostgreSQL"
msg_info "Configuring PostgreSQL for External Access"
conf_file="/etc/postgresql${ver}/postgresql.conf"
hba_file="/etc/postgresql${ver}/pg_hba.conf"
conf_file="/etc/postgresql16/postgresql.conf"
hba_file="/etc/postgresql16/pg_hba.conf"
sed -i 's/^#listen_addresses =.*/listen_addresses = '\''*'\''/' "$conf_file"
sed -i '/^host\s\+all\s\+all\s\+127.0.0.1\/32\s\+md5/ s/.*/host all all 0.0.0.0\/0 md5/' "$hba_file"
$STD rc-service postgresql restart

View File

@@ -17,8 +17,8 @@ update_os
msg_info "Installing Cockpit"
source /etc/os-release
echo "deb http://deb.debian.org/debian ${VERSION_CODENAME}-backports main" >/etc/apt/sources.list.d/backports.list
$STD apt update
$STD apt install -t ${VERSION_CODENAME}-backports cockpit --no-install-recommends -y
$STD apt-get update
$STD apt-get install -t ${VERSION_CODENAME}-backports cockpit --no-install-recommends -y
sed -i "s/root//g" /etc/cockpit/disallowed-users
msg_ok "Installed Cockpit"
@@ -26,6 +26,6 @@ motd_ssh
customize
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -43,11 +43,11 @@ msg_ok "Set up database"
msg_info "Installing GLPi"
cd /opt
#RELEASE=$(curl -fsSL https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
curl -fsSL "https://github.com/glpi-project/glpi/releases/download/10.0.20/glpi-10.0.20.tgz" -o "glpi-10.0.20.tgz"
$STD tar -xzvf glpi-10.0.20.tgz
RELEASE=$(curl -fsSL https://api.github.com/repos/glpi-project/glpi/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
curl -fsSL "https://github.com/glpi-project/glpi/releases/download/${RELEASE}/glpi-${RELEASE}.tgz" -o "glpi-${RELEASE}.tgz"
$STD tar -xzvf glpi-${RELEASE}.tgz
cd /opt/glpi
$STD php bin/console db:install --db-name=$DB_NAME --db-user=$DB_USER --db-password=$DB_PASS --no-interaction --allow-superuser
$STD php bin/console db:install --db-name=$DB_NAME --db-user=$DB_USER --db-password=$DB_PASS --no-interaction
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed GLPi"
@@ -144,7 +144,7 @@ customize
msg_info "Cleaning up"
rm -rf /opt/glpi/install
rm -rf /opt/glpi-10.0.20.tgz
rm -rf /opt/glpi-${RELEASE}.tgz
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"

View File

@@ -33,6 +33,7 @@ cat <<EOF >/opt/grist/.env
NODE_ENV=production
GRIST_HOST=0.0.0.0
EOF
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed Grist"
msg_info "Create Service"

View File

@@ -81,7 +81,7 @@ $STD apt-get update
$STD apt-get install -y jellyfin-ffmpeg7
ln -s /usr/lib/jellyfin-ffmpeg/ffmpeg /usr/bin/ffmpeg
ln -s /usr/lib/jellyfin-ffmpeg/ffprobe /usr/bin/ffprobe
if [[ "$CTTYPE" == "0" && -d /dev/dri ]]; then
if [[ "$CTTYPE" == "0" ]]; then
chgrp video /dev/dri
chmod 755 /dev/dri
chmod 660 /dev/dri/*
@@ -272,7 +272,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
mkdir -p "$INSTALL_DIR"
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v2.0.1" "$SRC_DIR"
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.143.1" "$SRC_DIR"
msg_info "Installing ${APPLICATION} (patience)"
@@ -451,5 +451,4 @@ customize
msg_info "Cleaning up"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
$STD apt clean -y
msg_ok "Cleaned"

69
install/petio-install.sh Normal file
View File

@@ -0,0 +1,69 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 tteck
# Author: tteck (tteckster)
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://petio.tv/
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing MongoDB 4.4"
curl -fsSL "https://www.mongodb.org/static/pgp/server-4.4.asc" | gpg --dearmor >/usr/share/keyrings/mongodb-server-4.4.gpg
# Determine OS ID
OS_ID=$(grep '^ID=' /etc/os-release | cut -d'=' -f2)
if [ "$OS_ID" = "debian" ]; then
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-4.4.gpg ] http://repo.mongodb.org/apt/debian $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/4.4 main" >/etc/apt/sources.list.d/mongodb-org-4.4.list
else
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-4.4.gpg ] https://repo.mongodb.org/apt/ubuntu $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/4.4 multiverse" >/etc/apt/sources.list.d/mongodb-org-4.4.list
fi
$STD apt-get update
$STD apt-get install -y mongodb-org
sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf
systemctl enable -q --now mongod
msg_ok "MongoDB 4.4 Installed"
msg_info "Installing Petio"
useradd -M --shell=/bin/false petio
mkdir /opt/Petio
curl -fsSL "https://petio.tv/releases/latest" -o "petio-latest.zip"
$STD unzip petio-latest.zip -d /opt/Petio
rm -rf petio-latest.zip
chown -R petio:petio /opt/Petio
msg_ok "Installed Petio"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/petio.service
[Unit]
Description=Petio a content request system
After=network.target mongod.service
[Service]
Type=simple
User=petio
Restart=on-failure
RestartSec=1
ExecStart=/opt/Petio/bin/petio-linux
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now petio
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

@@ -15,8 +15,8 @@ update_os
msg_info "Installing Dependencies"
$STD apt-get install -y \
redis \
nginx
redis \
nginx
msg_ok "Installed Dependencies"
setup_mariadb
@@ -31,15 +31,15 @@ $STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{
echo "Plant-it Credentials"
echo "Plant-it Database User: $DB_USER"
echo "Plant-it Database Password: $DB_PASS"
echo "Plant-it Database Name: $DB_NAME"
echo "Plant-it Credentials"
echo "Plant-it Database User: $DB_USER"
echo "Plant-it Database Password: $DB_PASS"
echo "Plant-it Database Name: $DB_NAME"
} >>~/plant-it.creds
msg_ok "Set up MariaDB"
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "0.10.0" "/opt/plant-it/backend" "server.jar"
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "0.10.0" "/opt/plant-it/frontend" "client.tar.gz"
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "plant-it" "MDeLuise/plant-it" "singlefile" "latest" "/opt/plant-it/backend" "server.jar"
fetch_and_deploy_gh_release "plant-it-front" "MDeLuise/plant-it" "prebuild" "latest" "/opt/plant-it/frontend" "client.tar.gz"
msg_info "Configured Plant-it"
mkdir -p /opt/plant-it-data

View File

@@ -13,11 +13,9 @@ setting_up_container
network_check
update_os
read -r -p "${TAB3}Enter PostgreSQL version (15/16/17/18): " ver
[[ $ver =~ ^(15|16|17|18)$ ]] || { echo "Invalid version"; exit 1; }
PG_VERSION=$ver setup_postgresql
PG_VERSION="17" setup_postgresql
cat <<EOF >/etc/postgresql/$ver/main/pg_hba.conf
cat <<EOF >/etc/postgresql/17/main/pg_hba.conf
# PostgreSQL Client Authentication Configuration File
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
@@ -36,7 +34,7 @@ host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
EOF
cat <<EOF >/etc/postgresql/$ver/main/postgresql.conf
cat <<EOF >/etc/postgresql/17/main/postgresql.conf
# -----------------------------
# PostgreSQL configuration file
# -----------------------------
@@ -45,10 +43,10 @@ cat <<EOF >/etc/postgresql/$ver/main/postgresql.conf
# FILE LOCATIONS
#------------------------------------------------------------------------------
data_directory = '/var/lib/postgresql/$ver/main'
hba_file = '/etc/postgresql/$ver/main/pg_hba.conf'
ident_file = '/etc/postgresql/$ver/main/pg_ident.conf'
external_pid_file = '/var/run/postgresql/$ver-main.pid'
data_directory = '/var/lib/postgresql/17/main'
hba_file = '/etc/postgresql/17/main/pg_hba.conf'
ident_file = '/etc/postgresql/17/main/pg_ident.conf'
external_pid_file = '/var/run/postgresql/17-main.pid'
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
@@ -94,7 +92,7 @@ log_timezone = 'Etc/UTC'
# PROCESS TITLE
#------------------------------------------------------------------------------
cluster_name = '$ver/main'
cluster_name = '17/main'
#------------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS

View File

@@ -1,64 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) 2021-2025 community-scripts ORG
# Author: michelroegl-brunner
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os
msg_info "Installing Dependencies"
$STD apt-get update
$STD apt-get install -y \
build-essential \
sshpass \
rsync \
expect
msg_ok "Dependencies installed."
NODE_VERSION=22 setup_nodejs
fetch_and_deploy_gh_release "ProxmoxVE-Local" "community-scripts/ProxmoxVE-Local"
msg_info "Installing PVE Scripts local"
cd /opt/ProxmoxVE-Local
$STD npm install
cp .env.example .env
mkdir -p data
chmod 755 data
$STD npm run build
msg_ok "Installed PVE Scripts local"
msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/pvescriptslocal.service
[Unit]
Description=PVEScriptslocal Service
After=network.target
[Service]
WorkingDirectory=/opt/ProxmoxVE-Local
ExecStart=/usr/bin/npm start
Restart=always
RestartSec=10
Environment=NODE_ENV=production
User=root
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now pvescriptslocal
msg_ok "Created Service"
motd_ssh
customize
msg_info "Cleaning up"
$STD apt -y autoremove
$STD apt -y autoclean
$STD apt -y clean
msg_ok "Cleaned"

View File

@@ -1,294 +0,0 @@
#!/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
function header_info {
clear
cat <<"EOF"
____ __ __ ___ ___ __ _
/ __ \/ /_ ____ / |/ /_ __/ | ____/ /___ ___ (_)___
/ /_/ / __ \/ __ \/ /|_/ / / / / /| |/ __ / __ `__ \/ / __ \
/ ____/ / / / /_/ / / / / /_/ / ___ / /_/ / / / / / / / / / /
/_/ /_/ /_/ .___/_/ /_/\__, /_/ |_\__,_/_/ /_/ /_/_/_/ /_/
/_/ /____/
EOF
}
YW=$(echo "\033[33m")
GN=$(echo "\033[1;92m")
RD=$(echo "\033[01;31m")
BL=$(echo "\033[36m")
CL=$(echo "\033[m")
CM="${GN}✔️${CL}"
CROSS="${RD}✖️${CL}"
INFO="${BL}${CL}"
APP="phpMyAdmin"
INSTALL_DIR_DEBIAN="/var/www/html/phpMyAdmin"
INSTALL_DIR_ALPINE="/usr/share/phpmyadmin"
IFACE=$(ip -4 route | awk '/default/ {print $5; exit}')
IP=$(ip -4 addr show "$IFACE" | awk '/inet / {print $2}' | cut -d/ -f1 | head -n 1)
[[ -z "$IP" ]] && IP=$(hostname -I | awk '{print $1}')
[[ -z "$IP" ]] && IP="127.0.0.1"
# Detect OS
if [[ -f "/etc/alpine-release" ]]; then
OS="Alpine"
PKG_MANAGER_INSTALL="apk add --no-cache"
PKG_QUERY="apk info -e"
INSTALL_DIR="$INSTALL_DIR_ALPINE"
elif [[ -f "/etc/debian_version" ]]; then
OS="Debian"
PKG_MANAGER_INSTALL="apt-get install -y"
PKG_QUERY="dpkg -l"
INSTALL_DIR="$INSTALL_DIR_DEBIAN"
else
echo -e "${CROSS} Unsupported OS detected. Exiting."
exit 1
fi
header_info
function msg_info() { echo -e "${INFO} ${YW}${1}...${CL}"; }
function msg_ok() { echo -e "${CM} ${GN}${1}${CL}"; }
function msg_error() { echo -e "${CROSS} ${RD}${1}${CL}"; }
function check_internet() {
msg_info "Checking Internet connectivity to GitHub"
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://github.com)
if [[ "$HTTP_CODE" -ge 200 && "$HTTP_CODE" -lt 400 ]]; then
msg_ok "Internet connectivity OK"
else
msg_error "Internet connectivity or GitHub unreachable (Status $HTTP_CODE). Exiting."
exit 1
fi
}
function is_phpmyadmin_installed() {
if [[ "$OS" == "Debian" ]]; then
[[ -f "$INSTALL_DIR/config.inc.php" ]]
else
[[ -d "$INSTALL_DIR_ALPINE" ]] && rc-service lighttpd status &>/dev/null
fi
}
function install_php_and_modules() {
msg_info "Checking existing PHP installation"
if command -v php >/dev/null 2>&1; then
PHP_VERSION=$(php -r 'echo PHP_VERSION;')
msg_ok "Found PHP version $PHP_VERSION"
else
msg_info "PHP not found, will install PHP core"
fi
if [[ "$OS" == "Debian" ]]; then
PHP_MODULES=("php" "php-mysqli" "php-mbstring" "php-zip" "php-gd" "php-json" "php-curl")
MISSING_PACKAGES=()
for pkg in "${PHP_MODULES[@]}"; do
if ! dpkg -l | grep -qw "$pkg"; then
MISSING_PACKAGES+=("$pkg")
fi
done
if [[ ${#MISSING_PACKAGES[@]} -gt 0 ]]; then
msg_info "Installing missing PHP packages: ${MISSING_PACKAGES[*]}"
if ! apt-get update &>/dev/null || ! apt-get install -y "${MISSING_PACKAGES[@]}" &>/dev/null; then
msg_error "Failed to install required PHP modules. Exiting."
exit 1
fi
msg_ok "Installed missing PHP packages"
else
msg_ok "All required PHP modules are already installed"
fi
else
msg_info "Installing Lighttpd and PHP for Alpine"
$PKG_MANAGER_INSTALL lighttpd php php-fpm php-session php-json php-mysqli curl tar openssl &>/dev/null
msg_ok "Installed Lighttpd and PHP"
fi
}
function install_phpmyadmin() {
msg_info "Fetching latest phpMyAdmin release from GitHub"
LATEST_VERSION_RAW=$(curl -s https://api.github.com/repos/phpmyadmin/phpmyadmin/releases/latest | grep tag_name | cut -d '"' -f4)
LATEST_VERSION=$(echo "$LATEST_VERSION_RAW" | sed -e 's/^RELEASE_//' -e 's/_/./g')
if [[ -z "$LATEST_VERSION" ]]; then
msg_error "Could not determine latest phpMyAdmin version from GitHub falling back to 5.2.2"
LATEST_VERSION="RELEASE_5_2_2"
fi
msg_ok "Latest version: $LATEST_VERSION"
TARBALL_URL="https://files.phpmyadmin.net/phpMyAdmin/${LATEST_VERSION}/phpMyAdmin-${LATEST_VERSION}-all-languages.tar.gz"
msg_info "Downloading ${TARBALL_URL}"
if ! curl -fsSL "$TARBALL_URL" -o /tmp/phpmyadmin.tar.gz; then
msg_error "Download failed: $TARBALL_URL"
exit 1
fi
mkdir -p "$INSTALL_DIR"
tar xf /tmp/phpmyadmin.tar.gz --strip-components=1 -C "$INSTALL_DIR"
}
function configure_phpmyadmin() {
if [[ "$OS" == "Debian" ]]; then
cp "$INSTALL_DIR/config.sample.inc.php" "$INSTALL_DIR/config.inc.php"
SECRET=$(openssl rand -base64 24)
sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg['blowfish_secret'] = '${SECRET}';#" "$INSTALL_DIR/config.inc.php"
chmod 660 "$INSTALL_DIR/config.inc.php"
chown -R www-data:www-data "$INSTALL_DIR"
systemctl restart apache2
msg_ok "Configured phpMyAdmin with Apache"
else
msg_info "Configuring Lighttpd for phpMyAdmin (Alpine detected)"
mkdir -p /etc/lighttpd
cat <<EOF >/etc/lighttpd/lighttpd.conf
server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_fastcgi"
)
server.document-root = "${INSTALL_DIR}"
server.port = 80
index-file.names = ( "index.php", "index.html" )
fastcgi.server = ( ".php" =>
((
"host" => "127.0.0.1",
"port" => 9000,
"check-local" => "disable"
))
)
alias.url = ( "/phpMyAdmin/" => "${INSTALL_DIR}/" )
accesslog.filename = "/var/log/lighttpd/access.log"
server.errorlog = "/var/log/lighttpd/error.log"
EOF
msg_info "Starting PHP-FPM and Lighttpd"
PHP_VERSION=$(php -r 'echo PHP_MAJOR_VERSION . PHP_MINOR_VERSION;')
PHP_FPM_SERVICE="php-fpm${PHP_VERSION}"
if $STD rc-service "$PHP_FPM_SERVICE" start && $STD rc-update add "$PHP_FPM_SERVICE" default; then
msg_ok "Started PHP-FPM service: $PHP_FPM_SERVICE"
else
msg_error "Failed to start PHP-FPM service: $PHP_FPM_SERVICE"
exit 1
fi
$STD rc-service lighttpd start
$STD rc-update add lighttpd default
msg_ok "Configured and started Lighttpd successfully"
fi
}
function uninstall_phpmyadmin() {
msg_info "Stopping Webserver"
if [[ "$OS" == "Debian" ]]; then
systemctl stop apache2
else
$STD rc-service lighttpd stop
$STD rc-service php-fpm stop
fi
msg_info "Removing phpMyAdmin directory"
rm -rf "$INSTALL_DIR"
if [[ "$OS" == "Alpine" ]]; then
msg_info "Removing Lighttpd config"
rm -f /etc/lighttpd/lighttpd.conf
$STD rc-service php-fpm restart
$STD rc-service lighttpd restart
else
$STD systemctl restart apache2
fi
msg_ok "Uninstalled phpMyAdmin"
}
function update_phpmyadmin() {
msg_info "Fetching latest phpMyAdmin release from GitHub"
LATEST_VERSION_RAW=$(curl -s https://api.github.com/repos/phpmyadmin/phpmyadmin/releases/latest | grep tag_name | cut -d '"' -f4)
LATEST_VERSION=$(echo "$LATEST_VERSION_RAW" | sed -e 's/^RELEASE_//' -e 's/_/./g')
if [[ -z "$LATEST_VERSION" ]]; then
msg_error "Could not determine latest phpMyAdmin version from GitHub falling back to 5.2.2"
LATEST_VERSION="5.2.2"
fi
msg_ok "Latest version: $LATEST_VERSION"
TARBALL_URL="https://files.phpmyadmin.net/phpMyAdmin/${LATEST_VERSION}/phpMyAdmin-${LATEST_VERSION}-all-languages.tar.gz"
msg_info "Downloading ${TARBALL_URL}"
if ! curl -fsSL "$TARBALL_URL" -o /tmp/phpmyadmin.tar.gz; then
msg_error "Download failed: $TARBALL_URL"
exit 1
fi
BACKUP_DIR="/tmp/phpmyadmin-backup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP_DIR"
BACKUP_ITEMS=("config.inc.php" "upload" "save" "tmp" "themes")
msg_info "Backing up existing phpMyAdmin data"
for item in "${BACKUP_ITEMS[@]}"; do
[[ -e "$INSTALL_DIR/$item" ]] && cp -a "$INSTALL_DIR/$item" "$BACKUP_DIR/" && echo " ↪︎ $item"
done
msg_ok "Backup completed: $BACKUP_DIR"
tar xf /tmp/phpmyadmin.tar.gz --strip-components=1 -C "$INSTALL_DIR"
msg_ok "Extracted phpMyAdmin $LATEST_VERSION"
msg_info "Restoring preserved files"
for item in "${BACKUP_ITEMS[@]}"; do
[[ -e "$BACKUP_DIR/$item" ]] && cp -a "$BACKUP_DIR/$item" "$INSTALL_DIR/" && echo " ↪︎ $item restored"
done
msg_ok "Restoration completed"
configure_phpmyadmin
}
if is_phpmyadmin_installed; then
echo -e "${YW}⚠️ ${APP} is already installed at ${INSTALL_DIR}.${CL}"
read -r -p "Would you like to Update (1), Uninstall (2) or Cancel (3)? [1/2/3]: " action
action="${action//[[:space:]]/}"
case "$action" in
1)
check_internet
update_phpmyadmin
;;
2)
uninstall_phpmyadmin
;;
3)
echo -e "${YW}⚠️ Action cancelled. Exiting.${CL}"
exit 0
;;
*)
echo -e "${YW}⚠️ Invalid input. Exiting.${CL}"
exit 1
;;
esac
else
read -r -p "Would you like to install ${APP}? (y/n): " install_prompt
install_prompt="${install_prompt//[[:space:]]/}"
if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then
check_internet
install_php_and_modules
install_phpmyadmin
configure_phpmyadmin
if [[ "$OS" == "Debian" ]]; then
echo -e "${CM} ${GN}${APP} is reachable at: ${BL}http://${IP}/phpMyAdmin${CL}"
else
echo -e "${CM} ${GN}${APP} is reachable at: ${BL}http://${IP}/${CL}"
fi
else
echo -e "${YW}⚠️ Installation skipped. Exiting.${CL}"
exit 0
fi
fi

View File

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

View File

@@ -189,7 +189,7 @@ start_routines_9() {
# check if deb822 Sources (*.sources) exist
if find /etc/apt/sources.list.d/ -maxdepth 1 -name '*.sources' | grep -q .; then
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Deb822 sources detected" \
--msgbox "Modern deb822 sources (*.sources) already exist.\n\nNo changes to sources format required.\n\nYou may still have legacy sources.list or .list files, which you can disable in the next step." 12 65 || true
--msgbox "Modern deb822 sources (*.sources) already exist.\n\nNo changes to sources format required.\n\nYou may still have legacy sources.list or .list files, which you can disable in the next step." 12 65
else
check_and_disable_legacy_sources() {
local LEGACY_COUNT=0
@@ -197,7 +197,7 @@ start_routines_9() {
# Check sources.list
if [[ -f "$listfile" ]] && grep -qE '^\s*deb ' "$listfile"; then
(( ++LEGACY_COUNT ))
((LEGACY_COUNT++))
fi
# Check .list files