mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			16 Commits
		
	
	
		
			2025-05-11
			...
			2025-05-12
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					b3bda56498 | ||
| 
						 | 
					e59f868966 | ||
| 
						 | 
					a9b53afcc5 | ||
| 
						 | 
					38cf296a4c | ||
| 
						 | 
					35c0d269ac | ||
| 
						 | 
					d7211e856e | ||
| 
						 | 
					dfbb1a8035 | ||
| 
						 | 
					61b09e926a | ||
| 
						 | 
					9140fd52ac | ||
| 
						 | 
					4a3ee4db67 | ||
| 
						 | 
					b333d8c3f9 | ||
| 
						 | 
					245b35d01e | ||
| 
						 | 
					37d20ba0dd | ||
| 
						 | 
					b5062c51af | ||
| 
						 | 
					1ea830c955 | ||
| 
						 | 
					be31ecf432 | 
@@ -72,8 +72,7 @@ network_check() {
 | 
			
		||||
 | 
			
		||||
update_os() {
 | 
			
		||||
  msg_info "Updating Container OS"
 | 
			
		||||
  apk update
 | 
			
		||||
  apk upgrade
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Container OS"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -83,4 +82,4 @@ motd_ssh() {
 | 
			
		||||
 | 
			
		||||
customize() {
 | 
			
		||||
  return
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -14,8 +14,38 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
 | 
			
		||||
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 2025-05-13
 | 
			
		||||
 | 
			
		||||
## 2025-05-12
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Alpine-Traefik [@MickLesk](https://github.com/MickLesk) ([#4412](https://github.com/community-scripts/ProxmoxVE/pull/4412))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Alpine: Use onliner for updates [@tremor021](https://github.com/tremor021) ([#4414](https://github.com/community-scripts/ProxmoxVE/pull/4414))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - homarr: fetch versions dynamically from source repo [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4409](https://github.com/community-scripts/ProxmoxVE/pull/4409))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Feature: LXC-Delete (pve helper): add "all items" [@MickLesk](https://github.com/MickLesk) ([#4296](https://github.com/community-scripts/ProxmoxVE/pull/4296))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
  - #### 💾 Core
 | 
			
		||||
 | 
			
		||||
    - Config file Function in build.func [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#4411](https://github.com/community-scripts/ProxmoxVE/pull/4411))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Navidrome - Fix config path (use /etc/ instead of /var/lib) [@quake1508](https://github.com/quake1508) ([#4406](https://github.com/community-scripts/ProxmoxVE/pull/4406))
 | 
			
		||||
 | 
			
		||||
## 2025-05-11
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -20,21 +20,20 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    msg_info "Updating Alpine Packages"
 | 
			
		||||
    $STD apk update
 | 
			
		||||
    $STD apk upgrade
 | 
			
		||||
    msg_ok "Updated Alpine Packages"
 | 
			
		||||
  header_info
 | 
			
		||||
  msg_info "Updating Alpine Packages"
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Alpine Packages"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating AdGuard Home"
 | 
			
		||||
    $STD /opt/AdGuardHome/AdGuardHome --update
 | 
			
		||||
    msg_ok "Updated AdGuard Home"
 | 
			
		||||
  msg_info "Updating AdGuard Home"
 | 
			
		||||
  $STD /opt/AdGuardHome/AdGuardHome --update
 | 
			
		||||
  msg_ok "Updated AdGuard Home"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restarting AdGuard Home"
 | 
			
		||||
    $STD rc-service adguardhome restart
 | 
			
		||||
    msg_ok "Restarted AdGuard Home"
 | 
			
		||||
  msg_info "Restarting AdGuard Home"
 | 
			
		||||
  $STD rc-service adguardhome restart
 | 
			
		||||
  msg_ok "Restarted AdGuard Home"
 | 
			
		||||
 | 
			
		||||
    exit 0
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    case $CHOICE in
 | 
			
		||||
    1)
 | 
			
		||||
      apk update && apk upgrade
 | 
			
		||||
      $STD apk -U upgrade
 | 
			
		||||
      exit
 | 
			
		||||
      ;;
 | 
			
		||||
    esac
 | 
			
		||||
@@ -47,4 +47,4 @@ start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
 
 | 
			
		||||
@@ -20,19 +20,18 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    msg_info "Updating Alpine Packages"
 | 
			
		||||
    apk update
 | 
			
		||||
    apk upgrade
 | 
			
		||||
    msg_ok "Updated Alpine Packages"
 | 
			
		||||
  header_info
 | 
			
		||||
  msg_info "Updating Alpine Packages"
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Alpine Packages"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Gitea"
 | 
			
		||||
    apk upgrade gitea
 | 
			
		||||
    msg_ok "Updated Gitea"
 | 
			
		||||
  msg_info "Updating Gitea"
 | 
			
		||||
  apk upgrade gitea
 | 
			
		||||
  msg_ok "Updated Gitea"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restarting Gitea"
 | 
			
		||||
    rc-service gitea restart
 | 
			
		||||
    msg_ok "Restarted Gitea"
 | 
			
		||||
  msg_info "Restarting Gitea"
 | 
			
		||||
  rc-service gitea restart
 | 
			
		||||
  msg_ok "Restarted Gitea"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -42,4 +41,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}:3000${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    case $CHOICE in
 | 
			
		||||
    1)
 | 
			
		||||
      apk update && apk upgrade
 | 
			
		||||
      $STD apk -U upgrade
 | 
			
		||||
      exit
 | 
			
		||||
      ;;
 | 
			
		||||
    2)
 | 
			
		||||
@@ -62,4 +62,4 @@ description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${APP} should be reachable by going to the following URL.
 | 
			
		||||
         ${BL}http://${IP}:3000${CL} \n"
 | 
			
		||||
         ${BL}http://${IP}:3000${CL} \n"
 | 
			
		||||
 
 | 
			
		||||
@@ -20,20 +20,19 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    msg_info "Updating Alpine Packages"
 | 
			
		||||
    $STD apk update
 | 
			
		||||
    $STD apk upgrade
 | 
			
		||||
    msg_ok "Updated Alpine Packages"
 | 
			
		||||
  msg_info "Updating Alpine Packages"
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Alpine Packages"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating MariaDB"
 | 
			
		||||
    $STD apk upgrade mariadb mariadb-client
 | 
			
		||||
    msg_ok "Updated MariaDB"
 | 
			
		||||
  msg_info "Updating MariaDB"
 | 
			
		||||
  $STD apk upgrade mariadb mariadb-client
 | 
			
		||||
  msg_ok "Updated MariaDB"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restarting MariaDB"
 | 
			
		||||
    $STD rc-service mariadb restart
 | 
			
		||||
    msg_ok "Restarted MariaDB"
 | 
			
		||||
  msg_info "Restarting MariaDB"
 | 
			
		||||
  $STD rc-service mariadb restart
 | 
			
		||||
  msg_ok "Restarted MariaDB"
 | 
			
		||||
 | 
			
		||||
    exit 0
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -20,24 +20,23 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    msg_info "Updating Alpine Packages"
 | 
			
		||||
    $STD apk update
 | 
			
		||||
    $STD apk upgrade
 | 
			
		||||
    msg_ok "Updated Alpine Packages"
 | 
			
		||||
  msg_info "Updating Alpine Packages"
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Alpine Packages"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Node.js and npm"
 | 
			
		||||
    $STD apk upgrade nodejs npm
 | 
			
		||||
    msg_ok "Updated Node.js and npm"
 | 
			
		||||
  msg_info "Updating Node.js and npm"
 | 
			
		||||
  $STD apk upgrade nodejs npm
 | 
			
		||||
  msg_ok "Updated Node.js and npm"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Node-RED"
 | 
			
		||||
    $STD npm install -g --unsafe-perm node-red
 | 
			
		||||
    msg_ok "Updated Node-RED"
 | 
			
		||||
  msg_info "Updating Node-RED"
 | 
			
		||||
  $STD npm install -g --unsafe-perm node-red
 | 
			
		||||
  msg_ok "Updated Node-RED"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restarting Node-RED"
 | 
			
		||||
    $STD rc-service nodered restart
 | 
			
		||||
    msg_ok "Restarted Node-RED"
 | 
			
		||||
  msg_info "Restarting Node-RED"
 | 
			
		||||
  $STD rc-service nodered restart
 | 
			
		||||
  msg_ok "Restarted Node-RED"
 | 
			
		||||
 | 
			
		||||
    exit 0
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,7 @@ catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  msg_info "Updating Alpine Packages"
 | 
			
		||||
  $STD apk update
 | 
			
		||||
  $STD apk upgrade
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Alpine Packages"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating PostgreSQL"
 | 
			
		||||
 
 | 
			
		||||
@@ -20,20 +20,19 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    msg_info "Updating Alpine Packages"
 | 
			
		||||
    $STD apk update
 | 
			
		||||
    $STD apk upgrade
 | 
			
		||||
    msg_ok "Updated Alpine Packages"
 | 
			
		||||
  msg_info "Updating Alpine Packages"
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Alpine Packages"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Prometheus"
 | 
			
		||||
    $STD apk upgrade prometheus
 | 
			
		||||
    msg_ok "Updated Prometheus"
 | 
			
		||||
  msg_info "Updating Prometheus"
 | 
			
		||||
  $STD apk upgrade prometheus
 | 
			
		||||
  msg_ok "Updated Prometheus"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restarting Prometheus"
 | 
			
		||||
    $STD rc-service prometheus restart
 | 
			
		||||
    msg_ok "Restarted Prometheus"
 | 
			
		||||
  msg_info "Restarting Prometheus"
 | 
			
		||||
  $STD rc-service prometheus restart
 | 
			
		||||
  msg_ok "Restarted Prometheus"
 | 
			
		||||
 | 
			
		||||
    exit 0
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -26,8 +26,7 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating Alpine Packages"
 | 
			
		||||
  $STD apk update
 | 
			
		||||
  $STD apk upgrade
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Alpine Packages"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating tinyauth"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										41
									
								
								ct/alpine-traefik.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ct/alpine-traefik.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
#!/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: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://alpinelinux.org/
 | 
			
		||||
 | 
			
		||||
APP="Alpine-Traefik"
 | 
			
		||||
var_tags="${var_tags:-os;alpine}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-1}"
 | 
			
		||||
var_os="${var_os:-alpine}"
 | 
			
		||||
var_version="${var_version:-3.21}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  msg_info "Updating Alpine Packages"
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Alpine Packages"
 | 
			
		||||
 | 
			
		||||
  msg_info "Upgrading traefik from edge"
 | 
			
		||||
  $STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
 | 
			
		||||
  msg_ok "Upgraded traefik"
 | 
			
		||||
  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} WebUI Access (if configured) - using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}"
 | 
			
		||||
@@ -37,14 +37,15 @@ function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    case $CHOICE in
 | 
			
		||||
    1)
 | 
			
		||||
      apk update && apk upgrade && rc-service vaultwarden restart -q
 | 
			
		||||
      $STD apk -U upgrade
 | 
			
		||||
      rc-service vaultwarden restart -q
 | 
			
		||||
      exit
 | 
			
		||||
      ;;
 | 
			
		||||
    2)
 | 
			
		||||
      if NEWTOKEN=$(whiptail --backtitle "Proxmox VE Helper Scripts" --passwordbox "Setup your ADMIN_TOKEN (make it strong)" 10 58 3>&1 1>&2 2>&3); then
 | 
			
		||||
        if [[ -z "$NEWTOKEN" ]]; then exit-script; fi
 | 
			
		||||
        if ! command -v argon2 >/dev/null 2>&1; then apk add argon2 &>/dev/null; fi
 | 
			
		||||
        TOKEN=$(echo -n ${NEWTOKEN} | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
 | 
			
		||||
        TOKEN=$(echo -n "${NEWTOKEN}" | argon2 "$(openssl rand -base64 32)" -e -id -k 19456 -t 2 -p 1)
 | 
			
		||||
        if [[ ! -f /var/lib/vaultwarden/config.json ]]; then
 | 
			
		||||
          sed -i "s|export ADMIN_TOKEN=.*|export ADMIN_TOKEN='${TOKEN}'|" /etc/conf.d/vaultwarden
 | 
			
		||||
        else
 | 
			
		||||
@@ -65,4 +66,4 @@ description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${APP} should be reachable by going to the following URL.
 | 
			
		||||
         ${BL}http://${IP}:8000${CL} \n"
 | 
			
		||||
         ${BL}http://${IP}:8000${CL} \n"
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,7 @@ catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  msg_info "Updating Alpine Packages"
 | 
			
		||||
  $STD apk update
 | 
			
		||||
  $STD apk upgrade
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Alpine Packages"
 | 
			
		||||
 | 
			
		||||
  msg_info "update wireguard-tools"
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    case $CHOICE in
 | 
			
		||||
    1)
 | 
			
		||||
      apk update && apk upgrade
 | 
			
		||||
      $STD apk -U upgrade
 | 
			
		||||
      exit
 | 
			
		||||
      ;;
 | 
			
		||||
    esac
 | 
			
		||||
@@ -47,4 +47,4 @@ start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
  header_info
 | 
			
		||||
  if [ "$UPD" == "1" ]; then
 | 
			
		||||
    apk update && apk upgrade
 | 
			
		||||
    $STD apk -U upgrade
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/alpine-traefik
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/alpine-traefik
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ___    __      _                ______                _____ __  
 | 
			
		||||
   /   |  / /___  (_)___  ___      /_  __/________ ____  / __(_) /__
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______/ / / ___/ __ `/ _ \/ /_/ / //_/
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ / / /  / /_/ /  __/ __/ / ,<   
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/     /_/ /_/   \__,_/\___/_/ /_/_/|_|  
 | 
			
		||||
        /_/                                                         
 | 
			
		||||
							
								
								
									
										15
									
								
								ct/homarr.sh
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								ct/homarr.sh
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 tteck
 | 
			
		||||
# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz) | Co-Author: CrazyWolf13
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: CrazyWolf13
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://homarr.dev/
 | 
			
		||||
 | 
			
		||||
@@ -117,11 +117,12 @@ node apps/nextjs/server.js & PID=$!
 | 
			
		||||
wait $PID
 | 
			
		||||
EOF
 | 
			
		||||
    chmod +x /opt/run_homarr.sh
 | 
			
		||||
curl -fsSL "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip")
 | 
			
		||||
    unzip -q v${RELEASE}.zip
 | 
			
		||||
    rm -rf v${RELEASE}.zip
 | 
			
		||||
    $STD command -v jq || $STD apt-get update && $STD apt-get install -y jq
 | 
			
		||||
    NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
 | 
			
		||||
    NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
 | 
			
		||||
    install_node_and_modules
 | 
			
		||||
    rm -rf /opt/homarr
 | 
			
		||||
    mv homarr-${RELEASE} /opt/homarr
 | 
			
		||||
    fetch_and_deploy_gh_release "homarr-labs/homarr"
 | 
			
		||||
    mv /opt/homarr-data-backup/.env /opt/homarr/.env
 | 
			
		||||
    cd /opt/homarr
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
@@ -167,4 +168,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}:7575${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7575${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -20,32 +20,32 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE MODE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 14 60 2 \
 | 
			
		||||
        "1" "Check for Alpine Updates" OFF \
 | 
			
		||||
        "2" "Update NPMplus Docker Container" ON \
 | 
			
		||||
        3>&1 1>&2 2>&3)
 | 
			
		||||
  UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE MODE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 14 60 2 \
 | 
			
		||||
    "1" "Check for Alpine Updates" OFF \
 | 
			
		||||
    "2" "Update NPMplus Docker Container" ON \
 | 
			
		||||
    3>&1 1>&2 2>&3)
 | 
			
		||||
 | 
			
		||||
    header_info "$APP"
 | 
			
		||||
  header_info "$APP"
 | 
			
		||||
 | 
			
		||||
    case "$UPD" in
 | 
			
		||||
    "1")
 | 
			
		||||
        msg_info "Updating Alpine OS"
 | 
			
		||||
        apk update && apk upgrade
 | 
			
		||||
        msg_ok "System updated"
 | 
			
		||||
        exit
 | 
			
		||||
        ;;
 | 
			
		||||
    "2")
 | 
			
		||||
        msg_info "Updating NPMplus Container"
 | 
			
		||||
        cd /opt
 | 
			
		||||
        msg_info "Pulling latest container image"
 | 
			
		||||
        $STD docker compose pull
 | 
			
		||||
        msg_info "Recreating container"
 | 
			
		||||
        $STD docker compose up -d
 | 
			
		||||
        msg_ok "NPMplus container updated"
 | 
			
		||||
        exit
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    exit 0
 | 
			
		||||
  case "$UPD" in
 | 
			
		||||
  "1")
 | 
			
		||||
    msg_info "Updating Alpine OS"
 | 
			
		||||
    $STD apk -U upgrade
 | 
			
		||||
    msg_ok "System updated"
 | 
			
		||||
    exit
 | 
			
		||||
    ;;
 | 
			
		||||
  "2")
 | 
			
		||||
    msg_info "Updating NPMplus Container"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    msg_info "Pulling latest container image"
 | 
			
		||||
    $STD docker compose pull
 | 
			
		||||
    msg_info "Recreating container"
 | 
			
		||||
    $STD docker compose up -d
 | 
			
		||||
    msg_ok "NPMplus container updated"
 | 
			
		||||
    exit
 | 
			
		||||
    ;;
 | 
			
		||||
  esac
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To Update Alpine: `apk update && apk upgrade`",
 | 
			
		||||
      "text": "To Update Alpine: `apk -U upgrade`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.navidrome.org/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/navidrome.svg",
 | 
			
		||||
    "config_path": "/var/lib/navidrome/navidrome.toml",
 | 
			
		||||
    "config_path": "/etc/navidrome/navidrome.toml",
 | 
			
		||||
    "description": "Navidrome is a music server solution that makes your music collection accessible from anywhere. It provides a modern web-based user interface and compatibility with a range of third-party mobile apps for both iOS and Android devices. With Navidrome, users can access their music collection from anywhere, whether at home or on the go. The software supports a variety of music formats, making it easy for users to play their favorite songs and albums. Navidrome provides a simple and user-friendly interface for managing and organizing music collections, making it a valuable tool for music lovers who want to access their music from anywhere. The software is designed to be easy to set up and use, making it a popular choice for those who want to host their own music server and enjoy their music collection from anywhere.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "To change Navidrome music folder path, `nano /var/lib/navidrome/navidrome.toml`",
 | 
			
		||||
            "text": "To change Navidrome music folder path, `nano /etc/navidrome/navidrome.toml`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,17 @@
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "type": "alpine",
 | 
			
		||||
            "script": "ct/alpine-traefik.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 1,
 | 
			
		||||
                "os": "alpine",
 | 
			
		||||
                "version": "3.21"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,109 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "go-gitea/gitea",
 | 
			
		||||
    "version": "v1.23.8",
 | 
			
		||||
    "date": "2025-05-12T22:40:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.7.0-rc0",
 | 
			
		||||
    "date": "2025-05-12T22:23:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.8.11.0",
 | 
			
		||||
    "date": "2025-03-10T06:39:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "leiweibau/Pi.Alert",
 | 
			
		||||
    "version": "v2025-05-11",
 | 
			
		||||
    "date": "2025-05-12T19:14:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "duplicati/duplicati",
 | 
			
		||||
    "version": "v2.1.0.118-2.1.0.118_canary_2025-05-12",
 | 
			
		||||
    "date": "2025-05-12T18:50:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.100.0",
 | 
			
		||||
    "date": "2025-05-12T18:23:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "v4.1.0",
 | 
			
		||||
    "date": "2025-05-12T07:13:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "neo4j/neo4j",
 | 
			
		||||
    "version": "4.4.43",
 | 
			
		||||
    "date": "2025-05-12T15:33:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "usememos/memos",
 | 
			
		||||
    "version": "v0.24.3",
 | 
			
		||||
    "date": "2025-05-12T15:23:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "NodeBB/NodeBB",
 | 
			
		||||
    "version": "v2.8.18",
 | 
			
		||||
    "date": "2025-05-12T15:08:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.91.3",
 | 
			
		||||
    "date": "2025-05-08T12:25:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Paymenter/Paymenter",
 | 
			
		||||
    "version": "v1.1.0",
 | 
			
		||||
    "date": "2025-05-12T14:40:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.117.0",
 | 
			
		||||
    "date": "2025-05-12T13:24:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/tika",
 | 
			
		||||
    "version": "3.2.0-rc1",
 | 
			
		||||
    "date": "2025-05-12T13:06:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "v10.7.2",
 | 
			
		||||
    "date": "2025-05-12T10:42:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v25.0",
 | 
			
		||||
    "date": "2025-05-12T09:12:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.49.17",
 | 
			
		||||
    "date": "2025-05-12T08:48:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "stackblitz-labs/bolt.diy",
 | 
			
		||||
    "version": "1.0.0",
 | 
			
		||||
    "date": "2025-05-12T07:39:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.12",
 | 
			
		||||
    "date": "2025-04-20T19:22:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "umami-software/umami",
 | 
			
		||||
    "version": "v2.18.1",
 | 
			
		||||
    "date": "2025-05-12T07:16:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.1891",
 | 
			
		||||
    "date": "2025-05-12T05:53:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "esphome/esphome",
 | 
			
		||||
    "version": "2025.4.2",
 | 
			
		||||
@@ -19,11 +124,6 @@
 | 
			
		||||
    "version": "v3.5.3",
 | 
			
		||||
    "date": "2025-05-11T15:17:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.12",
 | 
			
		||||
    "date": "2025-04-20T19:22:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Prowlarr/Prowlarr",
 | 
			
		||||
    "version": "v1.35.1.5034",
 | 
			
		||||
@@ -54,31 +154,16 @@
 | 
			
		||||
    "version": "v0.28.0",
 | 
			
		||||
    "date": "2025-05-11T06:25:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.1888",
 | 
			
		||||
    "date": "2025-05-11T06:00:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "owncast/owncast",
 | 
			
		||||
    "version": "v0.2.3",
 | 
			
		||||
    "date": "2025-05-10T21:14:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "e2e",
 | 
			
		||||
    "date": "2025-05-10T20:46:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "open-webui/open-webui",
 | 
			
		||||
    "version": "v0.6.9",
 | 
			
		||||
    "date": "2025-05-10T19:05:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.6.9-rc0",
 | 
			
		||||
    "date": "2025-05-10T18:57:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Stirling-Tools/Stirling-PDF",
 | 
			
		||||
    "version": "v0.46.1",
 | 
			
		||||
@@ -89,11 +174,6 @@
 | 
			
		||||
    "version": "v0.25.1",
 | 
			
		||||
    "date": "2025-02-25T17:30:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "v1.22.2-victorialogs",
 | 
			
		||||
    "date": "2025-05-10T01:20:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/wings",
 | 
			
		||||
    "version": "v1.0.0-beta13",
 | 
			
		||||
@@ -109,11 +189,6 @@
 | 
			
		||||
    "version": "v1.19.1",
 | 
			
		||||
    "date": "2025-05-09T19:15:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.8.11.0",
 | 
			
		||||
    "date": "2025-03-10T06:39:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
    "version": "2025.5.1",
 | 
			
		||||
@@ -124,11 +199,6 @@
 | 
			
		||||
    "version": "26.2.4",
 | 
			
		||||
    "date": "2025-05-08T09:10:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "v9.11.15",
 | 
			
		||||
    "date": "2025-05-09T13:48:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.6.8",
 | 
			
		||||
@@ -139,11 +209,6 @@
 | 
			
		||||
    "version": "v3.0.4",
 | 
			
		||||
    "date": "2025-05-09T11:38:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.99.4",
 | 
			
		||||
    "date": "2025-05-02T18:33:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v0.53.0",
 | 
			
		||||
@@ -169,21 +234,11 @@
 | 
			
		||||
    "version": "10.1.41",
 | 
			
		||||
    "date": "2025-05-08T12:45:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.91.3",
 | 
			
		||||
    "date": "2025-05-08T12:25:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v10.4.2",
 | 
			
		||||
    "date": "2025-05-08T08:11:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "umami-software/umami",
 | 
			
		||||
    "version": "v2.18.0",
 | 
			
		||||
    "date": "2025-05-08T07:14:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "semaphoreui/semaphore",
 | 
			
		||||
    "version": "v2.14.10",
 | 
			
		||||
@@ -204,11 +259,6 @@
 | 
			
		||||
    "version": "v0.34.1",
 | 
			
		||||
    "date": "2025-03-25T18:11:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "NodeBB/NodeBB",
 | 
			
		||||
    "version": "v4.3.1",
 | 
			
		||||
    "date": "2025-05-07T15:38:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "donaldzou/WGDashboard",
 | 
			
		||||
    "version": "v4.2.3",
 | 
			
		||||
@@ -234,11 +284,6 @@
 | 
			
		||||
    "version": "10.0.18",
 | 
			
		||||
    "date": "2025-02-12T11:07:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v24.8",
 | 
			
		||||
    "date": "2025-03-18T07:33:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ZoeyVid/NPMplus",
 | 
			
		||||
    "version": "2025-05-07-r1",
 | 
			
		||||
@@ -374,16 +419,6 @@
 | 
			
		||||
    "version": "v0.18.0",
 | 
			
		||||
    "date": "2025-05-05T15:34:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/tika",
 | 
			
		||||
    "version": "2.9.4",
 | 
			
		||||
    "date": "2025-05-05T15:17:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "neo4j/neo4j",
 | 
			
		||||
    "version": "5.26.6",
 | 
			
		||||
    "date": "2025-05-05T13:59:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "traefik/traefik",
 | 
			
		||||
    "version": "v3.4.0",
 | 
			
		||||
@@ -434,11 +469,6 @@
 | 
			
		||||
    "version": "v2.0.111",
 | 
			
		||||
    "date": "2025-05-03T16:25:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.49.16",
 | 
			
		||||
    "date": "2025-05-03T14:44:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "blakeblackshear/frigate",
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
@@ -484,11 +514,6 @@
 | 
			
		||||
    "version": "e5.9.0",
 | 
			
		||||
    "date": "2025-05-02T11:07:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "stackblitz-labs/bolt.diy",
 | 
			
		||||
    "version": "v1.0.0-draft",
 | 
			
		||||
    "date": "2025-05-01T18:33:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Koenkk/zigbee2mqtt",
 | 
			
		||||
    "version": "2.3.0",
 | 
			
		||||
@@ -524,11 +549,6 @@
 | 
			
		||||
    "version": "version/2025.4.0",
 | 
			
		||||
    "date": "2025-04-30T12:34:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "go-gitea/gitea",
 | 
			
		||||
    "version": "v1.25.0-dev",
 | 
			
		||||
    "date": "2025-04-28T22:57:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hivemq/hivemq-community-edition",
 | 
			
		||||
    "version": "2025.3",
 | 
			
		||||
@@ -599,11 +619,6 @@
 | 
			
		||||
    "version": "1.5.34",
 | 
			
		||||
    "date": "2025-03-27T16:17:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "leiweibau/Pi.Alert",
 | 
			
		||||
    "version": "v2025-04-26",
 | 
			
		||||
    "date": "2025-04-26T14:16:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openhab/openhab-core",
 | 
			
		||||
    "version": "4.3.5",
 | 
			
		||||
@@ -619,11 +634,6 @@
 | 
			
		||||
    "version": "v13.6.0",
 | 
			
		||||
    "date": "2025-04-26T10:21:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "duplicati/duplicati",
 | 
			
		||||
    "version": "v2.1.0.117-2.1.0.117_canary_2025-04-25",
 | 
			
		||||
    "date": "2025-04-25T17:22:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r7.0.19",
 | 
			
		||||
@@ -694,11 +704,6 @@
 | 
			
		||||
    "version": "v2.10.0",
 | 
			
		||||
    "date": "2025-04-18T20:46:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Paymenter/Paymenter",
 | 
			
		||||
    "version": "v1.0.4",
 | 
			
		||||
    "date": "2025-04-18T16:08:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tailscale/tailscale",
 | 
			
		||||
    "version": "v1.82.5",
 | 
			
		||||
@@ -894,11 +899,6 @@
 | 
			
		||||
    "version": "v4.3.1",
 | 
			
		||||
    "date": "2025-03-23T09:02:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "usememos/memos",
 | 
			
		||||
    "version": "v0.24.2",
 | 
			
		||||
    "date": "2025-03-23T04:01:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "clusterzx/paperless-ai",
 | 
			
		||||
    "version": "v2.7.6",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								install/alpine-traefik-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								install/alpine-traefik-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
#!/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
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apk add ca-certificates
 | 
			
		||||
$STD update-ca-certificates
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Traefik"
 | 
			
		||||
$STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
 | 
			
		||||
msg_ok "Installed Traefik"
 | 
			
		||||
 | 
			
		||||
read -p "Enable Traefik WebUI (Port 8080)? [y/N]: " enable_webui
 | 
			
		||||
if [[ "$enable_webui" =~ ^[Yy]$ ]]; then
 | 
			
		||||
  msg_info "Configuring Traefik WebUI"
 | 
			
		||||
  mkdir -p /etc/traefik/config
 | 
			
		||||
  cat <<EOF >/etc/traefik/traefik.yml
 | 
			
		||||
entryPoints:
 | 
			
		||||
  web:
 | 
			
		||||
    address: ":80"
 | 
			
		||||
  traefik:
 | 
			
		||||
    address: ":8080"
 | 
			
		||||
 | 
			
		||||
api:
 | 
			
		||||
  dashboard: true
 | 
			
		||||
  insecure: true
 | 
			
		||||
 | 
			
		||||
log:
 | 
			
		||||
  level: INFO
 | 
			
		||||
 | 
			
		||||
providers:
 | 
			
		||||
  file:
 | 
			
		||||
    directory: /etc/traefik/config
 | 
			
		||||
    watch: true
 | 
			
		||||
EOF
 | 
			
		||||
  msg_ok "Configured Traefik WebUI"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Enabling and starting Traefik service"
 | 
			
		||||
$STD rc-update add traefik default
 | 
			
		||||
$STD rc-service traefik start
 | 
			
		||||
msg_ok "Traefik service started"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
@@ -23,27 +23,17 @@ $STD apt-get install -y \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  nginx \
 | 
			
		||||
  gettext \
 | 
			
		||||
  jq \
 | 
			
		||||
  openssl
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
msg_ok "Set up Node.js Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Node.js/pnpm"
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install -g pnpm@latest
 | 
			
		||||
msg_ok "Installed Node.js/pnpm"
 | 
			
		||||
NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
 | 
			
		||||
NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
 | 
			
		||||
install_node_and_modules
 | 
			
		||||
fetch_and_deploy_gh_release "homarr-labs/homarr"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Homarr (Patience)"
 | 
			
		||||
cd /opt
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/homarr-labs/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/homarr-labs/homarr/archive/refs/tags/v${RELEASE}.zip")
 | 
			
		||||
unzip -q v${RELEASE}.zip
 | 
			
		||||
mv homarr-${RELEASE} /opt/homarr
 | 
			
		||||
mkdir -p /opt/homarr_db
 | 
			
		||||
touch /opt/homarr_db/db.sqlite
 | 
			
		||||
SECRET_ENCRYPTION_KEY="$(openssl rand -hex 32)"
 | 
			
		||||
 
 | 
			
		||||
@@ -137,8 +137,7 @@ network_check() {
 | 
			
		||||
# This function updates the Container OS by running apt-get update and upgrade
 | 
			
		||||
update_os() {
 | 
			
		||||
  msg_info "Updating Container OS"
 | 
			
		||||
  $STD apk update
 | 
			
		||||
  $STD apk upgrade
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Container OS"
 | 
			
		||||
 | 
			
		||||
  msg_info "Installing core dependencies"
 | 
			
		||||
 
 | 
			
		||||
@@ -779,8 +779,6 @@ EOF
 | 
			
		||||
 | 
			
		||||
config_file() {
 | 
			
		||||
 | 
			
		||||
  whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Default distribution for $APP" "${var_os} ${var_version} \n \nIf the default Linux distribution is not adhered to, script support will be discontinued. \n" 10 58
 | 
			
		||||
 | 
			
		||||
  CONFIG_FILE="/opt/community-scripts/.settings"
 | 
			
		||||
 | 
			
		||||
  if [[ -f "/opt/community-scripts/${NSAPP}.conf" ]]; then
 | 
			
		||||
@@ -797,66 +795,38 @@ config_file() {
 | 
			
		||||
      source "$CONFIG_FILE"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "$var_os" == "debian" ]]; then
 | 
			
		||||
    echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
 | 
			
		||||
    if [[ "$var_version" == "11" ]]; then
 | 
			
		||||
      echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
    elif [[ "$var_version" == "12" ]]; then
 | 
			
		||||
      echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
    else
 | 
			
		||||
      msg_error "Unknown setting for var_version, should be 11 or 12, was ${var_version}"
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
  elif [[ "$var_os" == "ubuntu" ]]; then
 | 
			
		||||
    echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
 | 
			
		||||
    if [[ "$var_version" == "20.04" ]]; then
 | 
			
		||||
      echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
    elif [[ "$var_version" == "22.04" ]]; then
 | 
			
		||||
      echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
    elif [[ "$var_version" == "24.04" ]]; then
 | 
			
		||||
      echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
    elif [[ "$var_version" == "24.10" ]]; then
 | 
			
		||||
      echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
    else
 | 
			
		||||
      msg_error "Unknown setting for var_version, should be 20.04, 22.04, 24.04 or 24.10, was ${var_version}"
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    msg_error "Unknown setting for var_os! should be debian or ubuntu, was ${var_os}"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ -n "$CT_ID" ]]; then
 | 
			
		||||
 | 
			
		||||
    if [[ "$CT_ID" =~ ^([0-9]{3,4})-([0-9]{3,4})$ ]]; then
 | 
			
		||||
      MIN_ID=${BASH_REMATCH[1]}
 | 
			
		||||
      MAX_ID=${BASH_REMATCH[2]}
 | 
			
		||||
 | 
			
		||||
      if ((MIN_ID >= MAX_ID)); then
 | 
			
		||||
        msg_error "Invalid Container ID range. The first number must be smaller than the second number, was ${CT_ID}"
 | 
			
		||||
        exit
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
      LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json | grep -oP '"vmid":\s*\K\d+')
 | 
			
		||||
 | 
			
		||||
      for ((ID = MIN_ID; ID <= MAX_ID; ID++)); do
 | 
			
		||||
        if ! grep -q "^$ID$" <<<"$LIST_OF_IDS"; then
 | 
			
		||||
          CT_ID=$ID
 | 
			
		||||
          break
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
 | 
			
		||||
      LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json 2>/dev/null | grep -oP '"vmid":\s*\K\d+') || true
 | 
			
		||||
      if [[ -n "$LIST_OF_IDS" ]]; then
 | 
			
		||||
        for ((ID = MIN_ID; ID <= MAX_ID; ID++)); do
 | 
			
		||||
          if ! grep -q "^$ID$" <<<"$LIST_OF_IDS"; then
 | 
			
		||||
            CT_ID=$ID
 | 
			
		||||
            break
 | 
			
		||||
          fi
 | 
			
		||||
        done
 | 
			
		||||
      fi
 | 
			
		||||
      echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
 | 
			
		||||
 | 
			
		||||
    elif [[ "$CT_ID" =~ ^[0-9]+$ ]]; then
 | 
			
		||||
      LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json 2>/dev/null | grep -oP '"vmid":\s*\K\d+') || true
 | 
			
		||||
      if [[ -n "$LIST_OF_IDS" ]]; then
 | 
			
		||||
 | 
			
		||||
      LIST_OF_IDS=$(pvesh get /cluster/resources --type vm --output-format json | grep -oP '"vmid":\s*\K\d+')
 | 
			
		||||
      if ! grep -q "^$CT_ID$" <<<"$LIST_OF_IDS"; then
 | 
			
		||||
        echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
 | 
			
		||||
        if ! grep -q "^$CT_ID$" <<<"$LIST_OF_IDS"; then
 | 
			
		||||
          echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
 | 
			
		||||
        else
 | 
			
		||||
          msg_error "Container ID $CT_ID already exists"
 | 
			
		||||
          exit
 | 
			
		||||
        fi
 | 
			
		||||
      else
 | 
			
		||||
        msg_error "Container ID $CT_ID already exists"
 | 
			
		||||
        exit
 | 
			
		||||
        echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
 | 
			
		||||
      fi
 | 
			
		||||
    else
 | 
			
		||||
      msg_error "Invalid Container ID format. Needs to be 0000-9999 or 0-9999, was ${CT_ID}"
 | 
			
		||||
@@ -954,27 +924,26 @@ config_file() {
 | 
			
		||||
    if [ "$NET" == "dhcp" ]; then
 | 
			
		||||
      echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}DHCP${CL}"
 | 
			
		||||
      echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}Default${CL}"
 | 
			
		||||
    elif
 | 
			
		||||
      [[ "$NET" =~ $ip_cidr_regex ]]
 | 
			
		||||
    then
 | 
			
		||||
    elif [[ "$NET" =~ $ip_cidr_regex ]]; then
 | 
			
		||||
      echo -e "${NETWORK}${BOLD}${DGN}IP Address: ${BGN}$NET${CL}"
 | 
			
		||||
      if [ ! -z "$GATE" ]; then
 | 
			
		||||
        if [[ "$GATE" =~ $ip_regex ]]; then
 | 
			
		||||
          echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}$GATE${CL}"
 | 
			
		||||
          GATE=",gw=$GATE"
 | 
			
		||||
        else
 | 
			
		||||
          msg_error "Invalid IP Address format for Gateway. Needs to be 0.0.0.0, was ${GATE}"
 | 
			
		||||
          exit
 | 
			
		||||
      fi
 | 
			
		||||
  else
 | 
			
		||||
    msg_error "Gateway IP Address cannot be empty"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
    else
 | 
			
		||||
      msg_error "Invalid IP Address format. Needs to be 0.0.0.0/0, was ${NET}"
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  if [ ! -z "$GATE" ]; then
 | 
			
		||||
    if [[ "$GATE" =~ $ip_regex ]]; then
 | 
			
		||||
      echo -e "${GATEWAY}${BOLD}${DGN}Gateway IP Address: ${BGN}$GATE${CL}"
 | 
			
		||||
      GATE=",gw=$GATE"
 | 
			
		||||
    else
 | 
			
		||||
      msg_error "Invalid IP Address format for Gateway. Needs to be 0.0.0.0, was ${GATE}"
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    msg_error "Gateway IP Address cannot be empty"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  if [[ ! -z "$APT_CACHER_IP" ]]; then
 | 
			
		||||
    if [[ "$APT_CACHER_IP" =~ $ip_regex ]]; then
 | 
			
		||||
 
 | 
			
		||||
@@ -5,28 +5,28 @@
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
    clear
 | 
			
		||||
    cat <<"EOF"
 | 
			
		||||
    ____                                          __   _  ________   ____       __     __     
 | 
			
		||||
   / __ \_________  _  ______ ___  ____  _  __   / /  | |/ / ____/  / __ \___  / /__  / /____ 
 | 
			
		||||
  clear
 | 
			
		||||
  cat <<"EOF"
 | 
			
		||||
    ____                                          __   _  ________   ____       __     __
 | 
			
		||||
   / __ \_________  _  ______ ___  ____  _  __   / /  | |/ / ____/  / __ \___  / /__  / /____
 | 
			
		||||
  / /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/  / /   |   / /      / / / / _ \/ / _ \/ __/ _ \
 | 
			
		||||
 / ____/ /  / /_/ />  </ / / / / / /_/ />  <   / /___/   / /___   / /_/ /  __/ /  __/ /_/  __/
 | 
			
		||||
/_/   /_/   \____/_/|_/_/ /_/ /_/\____/_/|_|  /_____/_/|_\____/  /_____/\___/_/\___/\__/\___/ 
 | 
			
		||||
                                                                                              
 | 
			
		||||
/_/   /_/   \____/_/|_/_/ /_/ /_/\____/_/|_|  /_____/_/|_\____/  /_____/\___/_/\___/\__/\___/
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
spinner() {
 | 
			
		||||
    local pid=$1
 | 
			
		||||
    local delay=0.1
 | 
			
		||||
    local spinstr='|/-\'
 | 
			
		||||
    while ps -p $pid >/dev/null; do
 | 
			
		||||
        printf " [%c]  " "$spinstr"
 | 
			
		||||
        spinstr=${spinstr#?}${spinstr%"${spinstr#?}"}
 | 
			
		||||
        sleep $delay
 | 
			
		||||
        printf "\r"
 | 
			
		||||
    done
 | 
			
		||||
    printf "    \r"
 | 
			
		||||
  local pid=$1
 | 
			
		||||
  local delay=0.1
 | 
			
		||||
  local spinstr='|/-\'
 | 
			
		||||
  while ps -p $pid >/dev/null; do
 | 
			
		||||
    printf " [%c]  " "$spinstr"
 | 
			
		||||
    spinstr=${spinstr#?}${spinstr%"${spinstr#?}"}
 | 
			
		||||
    sleep $delay
 | 
			
		||||
    printf "\r"
 | 
			
		||||
  done
 | 
			
		||||
  printf "    \r"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
set -eEuo pipefail
 | 
			
		||||
@@ -46,29 +46,29 @@ NODE=$(hostname)
 | 
			
		||||
containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}')
 | 
			
		||||
 | 
			
		||||
if [ -z "$containers" ]; then
 | 
			
		||||
    whiptail --title "LXC Container Delete" --msgbox "No LXC containers available!" 10 60
 | 
			
		||||
    exit 1
 | 
			
		||||
  whiptail --title "LXC Container Delete" --msgbox "No LXC containers available!" 10 60
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
menu_items=()
 | 
			
		||||
menu_items=("ALL" "Delete ALL containers" "OFF") # Add as first option
 | 
			
		||||
FORMAT="%-10s %-15s %-10s"
 | 
			
		||||
 | 
			
		||||
while read -r container; do
 | 
			
		||||
    container_id=$(echo $container | awk '{print $1}')
 | 
			
		||||
    container_name=$(echo $container | awk '{print $2}')
 | 
			
		||||
    container_status=$(echo $container | awk '{print $3}')
 | 
			
		||||
    formatted_line=$(printf "$FORMAT" "$container_name" "$container_status")
 | 
			
		||||
    menu_items+=("$container_id" "$formatted_line" "OFF")
 | 
			
		||||
  container_id=$(echo $container | awk '{print $1}')
 | 
			
		||||
  container_name=$(echo $container | awk '{print $2}')
 | 
			
		||||
  container_status=$(echo $container | awk '{print $3}')
 | 
			
		||||
  formatted_line=$(printf "$FORMAT" "$container_name" "$container_status")
 | 
			
		||||
  menu_items+=("$container_id" "$formatted_line" "OFF")
 | 
			
		||||
done <<<"$containers"
 | 
			
		||||
 | 
			
		||||
CHOICES=$(whiptail --title "LXC Container Delete" \
 | 
			
		||||
    --checklist "Select LXC containers to delete:" 25 60 13 \
 | 
			
		||||
    "${menu_items[@]}" 3>&2 2>&1 1>&3)
 | 
			
		||||
  --checklist "Select LXC containers to delete:" 25 60 13 \
 | 
			
		||||
  "${menu_items[@]}" 3>&2 2>&1 1>&3)
 | 
			
		||||
 | 
			
		||||
if [ -z "$CHOICES" ]; then
 | 
			
		||||
    whiptail --title "LXC Container Delete" \
 | 
			
		||||
        --msgbox "No containers selected!" 10 60
 | 
			
		||||
    exit 1
 | 
			
		||||
  whiptail --title "LXC Container Delete" \
 | 
			
		||||
    --msgbox "No containers selected!" 10 60
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
read -p "Delete containers manually or automatically? (Default: manual) m/a: " DELETE_MODE
 | 
			
		||||
@@ -76,34 +76,39 @@ DELETE_MODE=${DELETE_MODE:-m}
 | 
			
		||||
 | 
			
		||||
selected_ids=$(echo "$CHOICES" | tr -d '"' | tr -s ' ' '\n')
 | 
			
		||||
 | 
			
		||||
# If "ALL" is selected, override with all container IDs
 | 
			
		||||
if echo "$selected_ids" | grep -q "^ALL$"; then
 | 
			
		||||
  selected_ids=$(echo "$containers" | awk '{print $1}')
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
for container_id in $selected_ids; do
 | 
			
		||||
    status=$(pct status $container_id)
 | 
			
		||||
  status=$(pct status $container_id)
 | 
			
		||||
 | 
			
		||||
    if [ "$status" == "status: running" ]; then
 | 
			
		||||
        echo -e "${BL}[Info]${GN} Stopping container $container_id...${CL}"
 | 
			
		||||
        pct stop $container_id &
 | 
			
		||||
        sleep 5
 | 
			
		||||
        echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}"
 | 
			
		||||
    fi
 | 
			
		||||
  if [ "$status" == "status: running" ]; then
 | 
			
		||||
    echo -e "${BL}[Info]${GN} Stopping container $container_id...${CL}"
 | 
			
		||||
    pct stop $container_id &
 | 
			
		||||
    sleep 5
 | 
			
		||||
    echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
    if [[ "$DELETE_MODE" == "a" ]]; then
 | 
			
		||||
        echo -e "${BL}[Info]${GN} Automatically deleting container $container_id...${CL}"
 | 
			
		||||
        pct destroy "$container_id" -f &
 | 
			
		||||
        pid=$!
 | 
			
		||||
        spinner $pid
 | 
			
		||||
        [ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
 | 
			
		||||
  if [[ "$DELETE_MODE" == "a" ]]; then
 | 
			
		||||
    echo -e "${BL}[Info]${GN} Automatically deleting container $container_id...${CL}"
 | 
			
		||||
    pct destroy "$container_id" -f &
 | 
			
		||||
    pid=$!
 | 
			
		||||
    spinner $pid
 | 
			
		||||
    [ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
 | 
			
		||||
  else
 | 
			
		||||
    read -p "Delete container $container_id? (y/N): " CONFIRM
 | 
			
		||||
    if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
 | 
			
		||||
      echo -e "${BL}[Info]${GN} Deleting container $container_id...${CL}"
 | 
			
		||||
      pct destroy "$container_id" -f &
 | 
			
		||||
      pid=$!
 | 
			
		||||
      spinner $pid
 | 
			
		||||
      [ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
 | 
			
		||||
    else
 | 
			
		||||
        read -p "Delete container $container_id? (y/N): " CONFIRM
 | 
			
		||||
        if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
 | 
			
		||||
            echo -e "${BL}[Info]${GN} Deleting container $container_id...${CL}"
 | 
			
		||||
            pct destroy "$container_id" -f &
 | 
			
		||||
            pid=$!
 | 
			
		||||
            spinner $pid
 | 
			
		||||
            [ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60
 | 
			
		||||
        else
 | 
			
		||||
            echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}"
 | 
			
		||||
        fi
 | 
			
		||||
      echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
header_info
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ function update_container() {
 | 
			
		||||
  echo -e "\n [Info] Updating $container : $name \n"
 | 
			
		||||
  os=$(pct config "$container" | awk '/^ostype/ {print $2}')
 | 
			
		||||
  case "$os" in
 | 
			
		||||
  alpine) pct exec "$container" -- ash -c "apk update && apk upgrade" ;;
 | 
			
		||||
  alpine) pct exec "$container" -- ash -c "apk -U upgrade" ;;
 | 
			
		||||
  archlinux) pct exec "$container" -- bash -c "pacman -Syyu --noconfirm" ;;
 | 
			
		||||
  fedora | rocky | centos | alma) pct exec "$container" -- bash -c "dnf -y update && dnf -y upgrade" ;;
 | 
			
		||||
  ubuntu | debian | devuan) pct exec "$container" -- bash -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" dist-upgrade -y; rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED" ;;
 | 
			
		||||
@@ -33,17 +33,17 @@ for container in $(pct list | awk '{if(NR>1) print $1}'); do
 | 
			
		||||
    echo -e "[Info] Skipping $container"
 | 
			
		||||
    sleep 1
 | 
			
		||||
  else
 | 
			
		||||
    status=$(pct status $container)
 | 
			
		||||
    template=$(pct config $container | grep -q "template:" && echo "true" || echo "false")
 | 
			
		||||
    status=$(pct status "$container")
 | 
			
		||||
    template=$(pct config "$container" | grep -q "template:" && echo "true" || echo "false")
 | 
			
		||||
    if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then
 | 
			
		||||
      echo -e "[Info] Starting $container"
 | 
			
		||||
      pct start $container
 | 
			
		||||
      pct start "$container"
 | 
			
		||||
      sleep 5
 | 
			
		||||
      update_container $container
 | 
			
		||||
      update_container "$container"
 | 
			
		||||
      echo -e "[Info] Shutting down $container"
 | 
			
		||||
      pct shutdown $container &
 | 
			
		||||
      pct shutdown "$container" &
 | 
			
		||||
    elif [ "$status" == "status: running" ]; then
 | 
			
		||||
      update_container $container
 | 
			
		||||
      update_container "$container"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
function header_info() {
 | 
			
		||||
  clear
 | 
			
		||||
  cat <<"EOF"
 | 
			
		||||
   __  __          __      __          __   _  ________
 | 
			
		||||
@@ -64,7 +64,7 @@ function update_container() {
 | 
			
		||||
    echo -e "${BL}[Info]${GN} Updating ${BL}$container${CL} : ${GN}$name${CL} - ${YW}[No disk info for ${os}]${CL}\n"
 | 
			
		||||
  fi
 | 
			
		||||
  case "$os" in
 | 
			
		||||
  alpine) pct exec "$container" -- ash -c "apk update && apk upgrade" ;;
 | 
			
		||||
  alpine) pct exec "$container" -- ash -c "apk -U upgrade" ;;
 | 
			
		||||
  archlinux) pct exec "$container" -- bash -c "pacman -Syyu --noconfirm" ;;
 | 
			
		||||
  fedora | rocky | centos | alma) pct exec "$container" -- bash -c "dnf -y update && dnf -y upgrade" ;;
 | 
			
		||||
  ubuntu | debian | devuan) pct exec "$container" -- bash -c "apt-get update 2>/dev/null | grep 'packages.*upgraded'; apt list --upgradable && apt-get -yq dist-upgrade 2>&1; rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED" ;;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user