mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			76 Commits
		
	
	
		
			2025-04-03
			...
			2025-04-09
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					edfbc82048 | ||
| 
						 | 
					2c36a13af1 | ||
| 
						 | 
					607ab48f79 | ||
| 
						 | 
					30fbcb5ba8 | ||
| 
						 | 
					ef81b82d87 | ||
| 
						 | 
					f1a29c1ebb | ||
| 
						 | 
					404ae5dbcf | ||
| 
						 | 
					84478921e7 | ||
| 
						 | 
					2b8d10a4d9 | ||
| 
						 | 
					fefdcbbad1 | ||
| 
						 | 
					6c239ceb56 | ||
| 
						 | 
					b520c0ab5f | ||
| 
						 | 
					d329666a88 | ||
| 
						 | 
					874b61d4d5 | ||
| 
						 | 
					a536c4a5a0 | ||
| 
						 | 
					e4ef18ccfc | ||
| 
						 | 
					d949e836b5 | ||
| 
						 | 
					ed29ba3409 | ||
| 
						 | 
					495da1bf98 | ||
| 
						 | 
					cc17c2618d | ||
| 
						 | 
					3dffd02f08 | ||
| 
						 | 
					f2f10376ac | ||
| 
						 | 
					3ab2ecc3ef | ||
| 
						 | 
					5413498759 | ||
| 
						 | 
					44a944f4b3 | ||
| 
						 | 
					bf1966f578 | ||
| 
						 | 
					3504cda21c | ||
| 
						 | 
					6c1b5d3144 | ||
| 
						 | 
					146b0fcb3f | ||
| 
						 | 
					aa3d6f4f8b | ||
| 
						 | 
					542f93437a | ||
| 
						 | 
					9ef7ad5d2a | ||
| 
						 | 
					7ab476e034 | ||
| 
						 | 
					4ce9551f60 | ||
| 
						 | 
					efcd660e55 | ||
| 
						 | 
					125f843b19 | ||
| 
						 | 
					a5acfd25f6 | ||
| 
						 | 
					895edccf28 | ||
| 
						 | 
					5a74f2970b | ||
| 
						 | 
					9a906d35e2 | ||
| 
						 | 
					97674cfae7 | ||
| 
						 | 
					89ae467364 | ||
| 
						 | 
					42a7c00bca | ||
| 
						 | 
					d28368b596 | ||
| 
						 | 
					9786bfb55e | ||
| 
						 | 
					26ea046ba2 | ||
| 
						 | 
					061c7ebd2e | ||
| 
						 | 
					5313bb0103 | ||
| 
						 | 
					86577a0d0d | ||
| 
						 | 
					4ae0352304 | ||
| 
						 | 
					0c202066f5 | ||
| 
						 | 
					9bac1398b2 | ||
| 
						 | 
					251f3c411d | ||
| 
						 | 
					5b73662d9c | ||
| 
						 | 
					4ef88cd051 | ||
| 
						 | 
					427ce771d7 | ||
| 
						 | 
					c08ebc48e8 | ||
| 
						 | 
					421248ccf3 | ||
| 
						 | 
					b395a1846c | ||
| 
						 | 
					c2893f3edf | ||
| 
						 | 
					00f91843ec | ||
| 
						 | 
					5451047f44 | ||
| 
						 | 
					d8848464be | ||
| 
						 | 
					019e1ac8a0 | ||
| 
						 | 
					d4b67e0c7e | ||
| 
						 | 
					112fa215fb | ||
| 
						 | 
					f6a77ec41f | ||
| 
						 | 
					71a37368b0 | ||
| 
						 | 
					214d21f91e | ||
| 
						 | 
					8b1cdd1f3f | ||
| 
						 | 
					2a24d53b54 | ||
| 
						 | 
					51692da70f | ||
| 
						 | 
					481156275b | ||
| 
						 | 
					23c01141db | ||
| 
						 | 
					109235f720 | ||
| 
						 | 
					4912f76bc5 | 
							
								
								
									
										120
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										120
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -14,6 +14,126 @@ 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-04-09
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Paperless-NGX: Extend Granian Service Env [@MickLesk](https://github.com/MickLesk) ([#3790](https://github.com/community-scripts/ProxmoxVE/pull/3790))
 | 
			
		||||
    - Paperless-NGX: remove gunicorn, use python3 for webserver [@MickLesk](https://github.com/MickLesk) ([#3785](https://github.com/community-scripts/ProxmoxVE/pull/3785))
 | 
			
		||||
    - HomeAssistantOS: allow Proxmox version 8.4 [@quentinvnk](https://github.com/quentinvnk) ([#3773](https://github.com/community-scripts/ProxmoxVE/pull/3773))
 | 
			
		||||
    - Tandoor: Add xmlsec as dependency [@tremor021](https://github.com/tremor021) ([#3762](https://github.com/community-scripts/ProxmoxVE/pull/3762))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - harmonize pve versions check & vm vars [@MickLesk](https://github.com/MickLesk) ([#3779](https://github.com/community-scripts/ProxmoxVE/pull/3779))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
  - #### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
    - core: Removal of OS/Version Selection from Advanced Settings [@MickLesk](https://github.com/MickLesk) ([#3771](https://github.com/community-scripts/ProxmoxVE/pull/3771))
 | 
			
		||||
    - core: move misc scripts to structured addon/pve paths | Refactor JSON Editor & Script Mapping [@MickLesk](https://github.com/MickLesk) ([#3765](https://github.com/community-scripts/ProxmoxVE/pull/3765))
 | 
			
		||||
 | 
			
		||||
## 2025-04-08
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Alpine-PostgreSQL [@MickLesk](https://github.com/MickLesk) ([#3751](https://github.com/community-scripts/ProxmoxVE/pull/3751))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Alpine-Wireguard: Fix for sysctl and ip_forward [@juronja](https://github.com/juronja) ([#3744](https://github.com/community-scripts/ProxmoxVE/pull/3744))
 | 
			
		||||
    - TriliumNext: fix dump-db [@MickLesk](https://github.com/MickLesk) ([#3741](https://github.com/community-scripts/ProxmoxVE/pull/3741))
 | 
			
		||||
    - Actual: Reduce RAM to 4GB and old space to 3072MB  [@dannyellis](https://github.com/dannyellis) ([#3730](https://github.com/community-scripts/ProxmoxVE/pull/3730))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Alpine-MariaDB: better handling of adminer installation [@MickLesk](https://github.com/MickLesk) ([#3739](https://github.com/community-scripts/ProxmoxVE/pull/3739))
 | 
			
		||||
    - Paperless-GPT: Add logging to service file [@tremor021](https://github.com/tremor021) ([#3738](https://github.com/community-scripts/ProxmoxVE/pull/3738))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Meilisearch: Fix Typo [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#3749](https://github.com/community-scripts/ProxmoxVE/pull/3749))
 | 
			
		||||
 | 
			
		||||
## 2025-04-07
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Breaking: Hoarder > Karakeep [@MickLesk](https://github.com/MickLesk) ([#3699](https://github.com/community-scripts/ProxmoxVE/pull/3699))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Actual: Increase RAM and add heap-space var for nodejs [@MickLesk](https://github.com/MickLesk) ([#3713](https://github.com/community-scripts/ProxmoxVE/pull/3713))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Alpine-MariaDB: Fix Install Service startup [@MickLesk](https://github.com/MickLesk) ([#3701](https://github.com/community-scripts/ProxmoxVE/pull/3701))
 | 
			
		||||
    - Zitadel: Fix release tarball crawling [@tremor021](https://github.com/tremor021) ([#3716](https://github.com/community-scripts/ProxmoxVE/pull/3716))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Kimai: bump php to 8.4 [@MickLesk](https://github.com/MickLesk) ([#3724](https://github.com/community-scripts/ProxmoxVE/pull/3724))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Zabbix, get always latest version [@MickLesk](https://github.com/MickLesk) ([#3720](https://github.com/community-scripts/ProxmoxVE/pull/3720))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Changed the category of Channels DVR and NextPVR [@johnsturgeon](https://github.com/johnsturgeon) ([#3729](https://github.com/community-scripts/ProxmoxVE/pull/3729))
 | 
			
		||||
 | 
			
		||||
## 2025-04-06
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Actual: Add git dependency & change yarn commands [@MickLesk](https://github.com/MickLesk) ([#3703](https://github.com/community-scripts/ProxmoxVE/pull/3703))
 | 
			
		||||
    - Pelican-Panel: Fix PHP 8.4 Repository [@MickLesk](https://github.com/MickLesk) ([#3700](https://github.com/community-scripts/ProxmoxVE/pull/3700))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Implement FAQ component and integrate it into the main page [@BramSuurdje](https://github.com/BramSuurdje) ([#3709](https://github.com/community-scripts/ProxmoxVE/pull/3709))
 | 
			
		||||
 | 
			
		||||
## 2025-04-05
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - Bump vite from 6.2.4 to 6.2.5 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#3668](https://github.com/community-scripts/ProxmoxVE/pull/3668))
 | 
			
		||||
 | 
			
		||||
## 2025-04-04
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - meilisearch [@MickLesk](https://github.com/MickLesk) ([#3638](https://github.com/community-scripts/ProxmoxVE/pull/3638))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Pelican Panel: Bump php to 8.4 [@bvdberg01](https://github.com/bvdberg01) ([#3669](https://github.com/community-scripts/ProxmoxVE/pull/3669))
 | 
			
		||||
    - Pterodactyl: Bump php to 8.4 [@MickLesk](https://github.com/MickLesk) ([#3655](https://github.com/community-scripts/ProxmoxVE/pull/3655))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Caddy: add git for xcaddy [@MickLesk](https://github.com/MickLesk) ([#3657](https://github.com/community-scripts/ProxmoxVE/pull/3657))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
  - #### 💾 Core
 | 
			
		||||
 | 
			
		||||
    - core: fix raw path  [@MickLesk](https://github.com/MickLesk) ([#3656](https://github.com/community-scripts/ProxmoxVE/pull/3656))
 | 
			
		||||
 | 
			
		||||
## 2025-04-03
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -8,8 +8,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
APP="Actual Budget"
 | 
			
		||||
var_tags="finance"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="2048"
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_ram="4096"
 | 
			
		||||
var_disk="7"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
@@ -35,6 +35,13 @@ function update_script() {
 | 
			
		||||
    systemctl stop actualbudget
 | 
			
		||||
    msg_ok "${APP} Stopped"
 | 
			
		||||
 | 
			
		||||
    if ! command -v git &>/dev/null; then
 | 
			
		||||
      msg_info "Installing git"
 | 
			
		||||
      $STD apt-get update
 | 
			
		||||
      $STD apt-get install -y git
 | 
			
		||||
      msg_ok "Installed git"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cd /tmp || exit
 | 
			
		||||
    curl -fsSL "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz" -o "v${RELEASE}.tar.gz"
 | 
			
		||||
@@ -77,7 +84,10 @@ ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
 | 
			
		||||
EOF
 | 
			
		||||
    fi
 | 
			
		||||
    cd /opt/actualbudget || exit
 | 
			
		||||
    $STD yarn workspaces focus @actual-app/sync-server --production
 | 
			
		||||
    export NODE_OPTIONS="--max_old_space_size=3072"
 | 
			
		||||
    $STD yarn install
 | 
			
		||||
    $STD yarn run build:server
 | 
			
		||||
    #$STD yarn workspaces focus @actual-app/sync-server --production
 | 
			
		||||
    echo "${RELEASE}" >/opt/actualbudget_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								ct/alpine-postgresql.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								ct/alpine-postgresql.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
#!/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://postgresql.org/
 | 
			
		||||
 | 
			
		||||
APP="Alpine-PostgreSQL"
 | 
			
		||||
var_tags="${var_tags:-alpine;database}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-256}"
 | 
			
		||||
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() {
 | 
			
		||||
  msg_info "Updating Alpine Packages"
 | 
			
		||||
  $STD apk update
 | 
			
		||||
  $STD apk upgrade
 | 
			
		||||
  msg_ok "Updated Alpine Packages"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating PostgreSQL"
 | 
			
		||||
  $STD apk upgrade postgresql postgresql-contrib
 | 
			
		||||
  msg_ok "Updated PostgreSQL"
 | 
			
		||||
 | 
			
		||||
  msg_info "Restarting PostgreSQL"
 | 
			
		||||
  $STD rc-service postgresql restart
 | 
			
		||||
  msg_ok "Restarted PostgreSQL"
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}:5432${CL}"
 | 
			
		||||
							
								
								
									
										38
									
								
								ct/debian.sh
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								ct/debian.sh
									
									
									
									
									
								
							@@ -6,13 +6,13 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Source: https://www.debian.org/
 | 
			
		||||
 | 
			
		||||
APP="Debian"
 | 
			
		||||
var_tags="os"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_disk="2"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
var_tags="${var_tags:-os}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
@@ -20,18 +20,18 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /var ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating $APP LXC"
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get -y upgrade
 | 
			
		||||
  msg_ok "Updated $APP LXC"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -39,4 +39,4 @@ build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/alpine-postgresql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/alpine-postgresql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ___    __      _                  ____             __                 _____ ____    __ 
 | 
			
		||||
   /   |  / /___  (_)___  ___        / __ \____  _____/ /_____ _________ / ___// __ \  / / 
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______/ /_/ / __ \/ ___/ __/ __ `/ ___/ _ \\__ \/ / / / / /  
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ ____/ /_/ (__  ) /_/ /_/ / /  /  __/__/ / /_/ / / /___
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/     /_/    \____/____/\__/\__, /_/   \___/____/\___\_\/_____/
 | 
			
		||||
        /_/                                            /____/                              
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/karakeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/karakeep
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __                    __                 
 | 
			
		||||
   / /______ __________ _/ /_____  ___  ____ 
 | 
			
		||||
  / //_/ __ `/ ___/ __ `/ //_/ _ \/ _ \/ __ \
 | 
			
		||||
 / ,< / /_/ / /  / /_/ / ,< /  __/  __/ /_/ /
 | 
			
		||||
/_/|_|\__,_/_/   \__,_/_/|_|\___/\___/ .___/ 
 | 
			
		||||
                                    /_/      
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/meilisearch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/meilisearch
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __  ___     _ ___                           __  
 | 
			
		||||
   /  |/  /__  (_) (_)_______  ____ ___________/ /_ 
 | 
			
		||||
  / /|_/ / _ \/ / / / ___/ _ \/ __ `/ ___/ ___/ __ \
 | 
			
		||||
 / /  / /  __/ / / (__  )  __/ /_/ / /  / /__/ / / /
 | 
			
		||||
/_/  /_/\___/_/_/_/____/\___/\__,_/_/   \___/_/ /_/ 
 | 
			
		||||
                                                    
 | 
			
		||||
@@ -40,23 +40,23 @@ function update_script() {
 | 
			
		||||
    if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
 | 
			
		||||
      $STD apt-get install -y graphicsmagick ghostscript
 | 
			
		||||
    fi
 | 
			
		||||
    cd /opt
 | 
			
		||||
    cd /opt || exit
 | 
			
		||||
    if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
 | 
			
		||||
      mkdir -p /etc/hoarder
 | 
			
		||||
      mv /opt/hoarder/.env /etc/hoarder/hoarder.env
 | 
			
		||||
    fi
 | 
			
		||||
    rm -rf /opt/hoarder
 | 
			
		||||
    curl -fsSL "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip")
 | 
			
		||||
    unzip -q v${RELEASE}.zip
 | 
			
		||||
    mv hoarder-${RELEASE} /opt/hoarder
 | 
			
		||||
    cd /opt/hoarder/apps/web
 | 
			
		||||
    curl -fsSL "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
 | 
			
		||||
    unzip -q v"${RELEASE}".zip
 | 
			
		||||
    mv karakeep-"${RELEASE}" /opt/hoarder
 | 
			
		||||
    cd /opt/hoarder/apps/web || exit
 | 
			
		||||
    $STD pnpm install --frozen-lockfile
 | 
			
		||||
    $STD pnpm exec next build --experimental-build-mode compile
 | 
			
		||||
    cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
 | 
			
		||||
    cd /opt/hoarder/apps/workers
 | 
			
		||||
    cd /opt/hoarder/apps/workers || exit
 | 
			
		||||
    $STD pnpm install --frozen-lockfile
 | 
			
		||||
    export DATA_DIR=/opt/hoarder_data
 | 
			
		||||
    cd /opt/hoarder/packages/db
 | 
			
		||||
    cd /opt/hoarder/packages/db || exit
 | 
			
		||||
    $STD pnpm migrate
 | 
			
		||||
    sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/hoarder/hoarder.env
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
@@ -65,7 +65,7 @@ function update_script() {
 | 
			
		||||
    systemctl start hoarder-browser hoarder-workers hoarder-web
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -R /opt/v${RELEASE}.zip
 | 
			
		||||
    rm -R /opt/v"${RELEASE}".zip
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										85
									
								
								ct/karakeep.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								ct/karakeep.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 tteck
 | 
			
		||||
# Author: MickLesk (Canbiz) & vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://karakeep.app/
 | 
			
		||||
 | 
			
		||||
APP="karakeep"
 | 
			
		||||
var_tags="bookmark"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="4096"
 | 
			
		||||
var_disk="10"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/karakeep ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  PREV_RELEASE=$(cat /opt/${APP}_version.txt)
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop karakeep-web karakeep-workers karakeep-browser
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    if [[ $(corepack -v) < "0.31.0" ]]; then
 | 
			
		||||
      $STD npm install -g corepack@0.31.0
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
 | 
			
		||||
      $STD apt-get install -y graphicsmagick ghostscript
 | 
			
		||||
    fi
 | 
			
		||||
    cd /opt || exit
 | 
			
		||||
    if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
 | 
			
		||||
      mkdir -p /etc/karakeep
 | 
			
		||||
      mv /opt/karakeep/.env /etc/karakeep/karakeep.env
 | 
			
		||||
    fi
 | 
			
		||||
    rm -rf /opt/karakeep
 | 
			
		||||
    curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
 | 
			
		||||
    unzip -q "v${RELEASE}.zip"
 | 
			
		||||
    mv karakeep-"${RELEASE}" /opt/karakeep
 | 
			
		||||
    cd /opt/karakeep/apps/web || exit
 | 
			
		||||
    $STD pnpm install --frozen-lockfile
 | 
			
		||||
    $STD pnpm exec next build --experimental-build-mode compile
 | 
			
		||||
    cp -r /opt/karakeep/apps/web/.next/standalone/apps/web/server.js /opt/karakeep/apps/web
 | 
			
		||||
    cd /opt/karakeep/apps/workers || exit
 | 
			
		||||
    $STD pnpm install --frozen-lockfile
 | 
			
		||||
    export DATA_DIR=/opt/karakeep_data
 | 
			
		||||
    cd /opt/karakeep/packages/db || exit
 | 
			
		||||
    $STD pnpm migrate
 | 
			
		||||
    sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start karakeep-browser karakeep-workers karakeep-web
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -R /opt/v"${RELEASE}".zip
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required.  ${APP} is already at ${RELEASE}."
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
							
								
								
									
										129
									
								
								ct/kimai.sh
									
									
									
									
									
								
							
							
						
						
									
										129
									
								
								ct/kimai.sh
									
									
									
									
									
								
							@@ -20,64 +20,79 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /opt/kimai ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    BACKUP_DIR="/opt/kimai_backup"
 | 
			
		||||
 | 
			
		||||
    if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
        msg_info "Stopping Apache2"
 | 
			
		||||
        systemctl stop apache2
 | 
			
		||||
        msg_ok "Stopped Apache2"
 | 
			
		||||
 | 
			
		||||
        msg_info "Backing up Kimai configuration and var directory"
 | 
			
		||||
        mkdir -p "$BACKUP_DIR"
 | 
			
		||||
        [ -d /opt/kimai/var ] && cp -r /opt/kimai/var "$BACKUP_DIR/"
 | 
			
		||||
        [ -f /opt/kimai/.env ] && cp /opt/kimai/.env "$BACKUP_DIR/"
 | 
			
		||||
        [ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/"
 | 
			
		||||
        msg_ok "Backup completed"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
        rm -rf /opt/kimai
 | 
			
		||||
        curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip")
 | 
			
		||||
        unzip -q ${RELEASE}.zip
 | 
			
		||||
        mv kimai-${RELEASE} /opt/kimai
 | 
			
		||||
        [ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/
 | 
			
		||||
        [ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/
 | 
			
		||||
        [ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
 | 
			
		||||
        rm -rf "$BACKUP_DIR"
 | 
			
		||||
        cd /opt/kimai
 | 
			
		||||
        $STD composer install --no-dev --optimize-autoloader
 | 
			
		||||
        $STD bin/console kimai:update
 | 
			
		||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
        msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting Apache2"
 | 
			
		||||
        systemctl start apache2
 | 
			
		||||
        msg_ok "Started Apache2"
 | 
			
		||||
 | 
			
		||||
        msg_info "Setup Permissions"
 | 
			
		||||
        chown -R :www-data /opt/*
 | 
			
		||||
        chmod -R g+r /opt/*
 | 
			
		||||
        chmod -R g+rw /opt/*
 | 
			
		||||
        chown -R www-data:www-data /opt/*
 | 
			
		||||
        chmod -R 777 /opt/*
 | 
			
		||||
        msg_ok "Setup Permissions"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf ${RELEASE}.zip
 | 
			
		||||
        rm -rf "$BACKUP_DIR"
 | 
			
		||||
        msg_ok "Cleaned"
 | 
			
		||||
        msg_ok "Updated Successfully"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
    fi
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/kimai ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
 | 
			
		||||
  if [[ "$CURRENT_PHP" != "8.4" ]]; then
 | 
			
		||||
    msg_info "Migrating PHP $CURRENT_PHP to 8.4"
 | 
			
		||||
    $STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
    $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
    $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get remove -y php"${CURRENT_PHP//./}"*
 | 
			
		||||
    $STD apt-get install -y \
 | 
			
		||||
      php8.4 \
 | 
			
		||||
      php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \
 | 
			
		||||
      libapache2-mod-php8.4
 | 
			
		||||
    msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  BACKUP_DIR="/opt/kimai_backup"
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Stopping Apache2"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    msg_ok "Stopped Apache2"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up Kimai configuration and var directory"
 | 
			
		||||
    mkdir -p "$BACKUP_DIR"
 | 
			
		||||
    [ -d /opt/kimai/var ] && cp -r /opt/kimai/var "$BACKUP_DIR/"
 | 
			
		||||
    [ -f /opt/kimai/.env ] && cp /opt/kimai/.env "$BACKUP_DIR/"
 | 
			
		||||
    [ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/"
 | 
			
		||||
    msg_ok "Backup completed"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    rm -rf /opt/kimai
 | 
			
		||||
    curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip")
 | 
			
		||||
    unzip -q "${RELEASE}".zip
 | 
			
		||||
    mv kimai-"${RELEASE}" /opt/kimai
 | 
			
		||||
    [ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/
 | 
			
		||||
    [ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/
 | 
			
		||||
    [ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
 | 
			
		||||
    rm -rf "$BACKUP_DIR"
 | 
			
		||||
    cd /opt/kimai || exit
 | 
			
		||||
    $STD composer install --no-dev --optimize-autoloader
 | 
			
		||||
    $STD bin/console kimai:update
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Apache2"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
    msg_ok "Started Apache2"
 | 
			
		||||
 | 
			
		||||
    msg_info "Setup Permissions"
 | 
			
		||||
    chown -R :www-data /opt/*
 | 
			
		||||
    chmod -R g+r /opt/*
 | 
			
		||||
    chmod -R g+rw /opt/*
 | 
			
		||||
    chown -R www-data:www-data /opt/*
 | 
			
		||||
    chmod -R 777 /opt/*
 | 
			
		||||
    msg_ok "Setup Permissions"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf "${RELEASE}".zip
 | 
			
		||||
    rm -rf "$BACKUP_DIR"
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										95
									
								
								ct/meilisearch.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								ct/meilisearch.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,95 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s 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://www.meilisearch.com/
 | 
			
		||||
 | 
			
		||||
APP="Meilisearch"
 | 
			
		||||
var_tags="${var_tags:-full-text-search}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-7}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /opt/Meilisearch_version.txt ]]; then
 | 
			
		||||
    msg_error "No Meilisearch Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Meilisearch Update" --radiolist --cancel-button Exit-Script "Spacebar = Select" 10 58 2 \
 | 
			
		||||
    "1" "Update Meilisearch" ON \
 | 
			
		||||
    "2" "Update Meilisearch-UI" OFF \
 | 
			
		||||
    3>&1 1>&2 2>&3)
 | 
			
		||||
 | 
			
		||||
  if [ "$UPD" == "1" ]; then
 | 
			
		||||
    msg_info "Stopping Meilisearch"
 | 
			
		||||
    systemctl stop meilisearch
 | 
			
		||||
    msg_ok "Stopped Meilisearch"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Meilisearch"
 | 
			
		||||
    tmp_file=$(mktemp)
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o $tmp_file
 | 
			
		||||
    $STD dpkg -i $tmp_file
 | 
			
		||||
    echo "$RELEASE" >/opt/meilisearch_version.txt
 | 
			
		||||
    msg_ok "Updated Meilisearch"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Meilisearch"
 | 
			
		||||
    systemctl start meilisearch
 | 
			
		||||
    msg_ok "Started Meilisearch"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ "$UPD" == "2" ]; then
 | 
			
		||||
    if [[ ! -f /opt/Meilisearch-ui_version.txt ]]; then
 | 
			
		||||
      msg_error "No Meilisearch-UI Installation Found!"
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Stopping Meilisearch-UI"
 | 
			
		||||
    systemctl stop meilisearch-ui
 | 
			
		||||
    msg_ok "Stopped Meilisearch-UI"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Meilisearch-UI"
 | 
			
		||||
    tmp_file=$(mktemp)
 | 
			
		||||
    tmp_dir=$(mktemp -d)
 | 
			
		||||
    RELEASE_UI=$(curl -s https://api.github.com/repos/riccox/meilisearch-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    cp /opt/meilisearch-ui/.env.local /tmp/.env.local.bak
 | 
			
		||||
    rm -rf /opt/meilisearch-ui
 | 
			
		||||
    mkdir -p /opt/meilisearch-ui
 | 
			
		||||
    curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o $tmp_file
 | 
			
		||||
    unzip -q "$tmp_file" -d "$tmp_dir"
 | 
			
		||||
    mv "$tmp_dir"/*/* /opt/meilisearch-ui/
 | 
			
		||||
    cd /opt/meilisearch-ui
 | 
			
		||||
    sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
 | 
			
		||||
    mv /tmp/.env.local.bak /opt/meilisearch-ui/.env.local
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    echo "$RELEASE_UI" >/opt/meilisearch-ui_version.txt
 | 
			
		||||
    msg_ok "Updated Meilisearch-UI"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Meilisearch-UI"
 | 
			
		||||
    systemctl start meilisearch-ui
 | 
			
		||||
    msg_ok "Started Meilisearch-UI"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}meilisearch: http://${IP}:7700$ | meilisearch-ui: http://${IP}:24900${CL}"
 | 
			
		||||
@@ -27,10 +27,27 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
    CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
 | 
			
		||||
 | 
			
		||||
  if [[ "$CURRENT_PHP" != "8.4" ]]; then
 | 
			
		||||
    msg_info "Migrating PHP $CURRENT_PHP to 8.4"
 | 
			
		||||
    $STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
    $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
    $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get remove -y php"${CURRENT_PHP//./}"*
 | 
			
		||||
    $STD apt-get install -y \
 | 
			
		||||
      php8.4 \
 | 
			
		||||
      php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
 | 
			
		||||
      libapache2-mod-php8.4
 | 
			
		||||
 | 
			
		||||
    msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/pelican-dev/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    cd /opt/pelican-panel
 | 
			
		||||
    cd /opt/pelican-panel  || exit
 | 
			
		||||
    $STD php artisan down
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -27,10 +27,27 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
 | 
			
		||||
 | 
			
		||||
  if [[ "$CURRENT_PHP" != "8.4" ]]; then
 | 
			
		||||
    msg_info "Migrating PHP $CURRENT_PHP to 8.4"
 | 
			
		||||
    $STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
    $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
    $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get remove -y php"${CURRENT_PHP//./}"*
 | 
			
		||||
    $STD apt-get install -y \
 | 
			
		||||
      php8.4 \
 | 
			
		||||
      php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
 | 
			
		||||
      libapache2-mod-php8.4
 | 
			
		||||
 | 
			
		||||
    msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    cd /opt/pterodactyl-panel
 | 
			
		||||
    cd /opt/pterodactyl-panel || exit
 | 
			
		||||
    $STD php artisan down
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -27,20 +27,24 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! [[ $(dpkg -s python3-xmlsec 2>/dev/null) ]]; then
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install -y python3-xmlsec
 | 
			
		||||
  fi
 | 
			
		||||
  if cd /opt/tandoor && git pull | grep -q 'Already up to date'; then
 | 
			
		||||
    msg_ok "There is currently no update available."
 | 
			
		||||
  else
 | 
			
		||||
    msg_info "Updating ${APP} (Patience)"
 | 
			
		||||
    export $(cat /opt/tandoor/.env | grep "^[^#]" | xargs)
 | 
			
		||||
    cd /opt/tandoor/
 | 
			
		||||
    cd /opt/tandoor/ || exit
 | 
			
		||||
    $STD pip3 install -r requirements.txt
 | 
			
		||||
    $STD /usr/bin/python3 /opt/tandoor/manage.py migrate
 | 
			
		||||
    $STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic --no-input
 | 
			
		||||
    $STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic_js_reverse
 | 
			
		||||
    cd /opt/tandoor/vue
 | 
			
		||||
    cd /opt/tandoor/vue || exit
 | 
			
		||||
    $STD yarn install
 | 
			
		||||
    $STD yarn build
 | 
			
		||||
    cd /opt/tandoor
 | 
			
		||||
    cd /opt/tandoor || exit
 | 
			
		||||
    $STD python3 version.py
 | 
			
		||||
    systemctl restart gunicorn_tandoor
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
@@ -55,4 +59,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}:8002${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8002${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -37,13 +37,13 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating to ${RELEASE}"
 | 
			
		||||
    mkdir -p /opt/trilium_backup
 | 
			
		||||
    mv /opt/trilium/{db,dump-db} /opt/trilium_backup/
 | 
			
		||||
    mv /opt/trilium/db /opt/trilium_backup/
 | 
			
		||||
    rm -rf /opt/trilium
 | 
			
		||||
    cd /tmp
 | 
			
		||||
    curl -fsSL "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o $(basename "https://github.com/TriliumNext/Notes/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz")
 | 
			
		||||
    tar -xf TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz
 | 
			
		||||
    mv TriliumNextNotes-Server-$RELEASE-linux-x64 /opt/trilium
 | 
			
		||||
    cp -r /opt/trilium_backup/{db,dump-db} /opt/trilium/
 | 
			
		||||
    cp -r /opt/trilium_backup/db /opt/trilium/
 | 
			
		||||
    echo "v${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								ct/ubuntu.sh
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								ct/ubuntu.sh
									
									
									
									
									
								
							@@ -5,14 +5,14 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://ubuntu.com/
 | 
			
		||||
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="Ubuntu"
 | 
			
		||||
var_tags="os"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_disk="2"
 | 
			
		||||
var_os="ubuntu"
 | 
			
		||||
var_version="24.04"
 | 
			
		||||
var_tags="${var_tags:-os}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-ubuntu}"
 | 
			
		||||
var_version="${var_version:-24.04}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
@@ -20,18 +20,18 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated ${APP} LXC"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /var ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating ${APP} LXC"
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get -y upgrade
 | 
			
		||||
  msg_ok "Updated ${APP} LXC"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -39,4 +39,4 @@ build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										73
									
								
								ct/zabbix.sh
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								ct/zabbix.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)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://www.zabbix.com/
 | 
			
		||||
 | 
			
		||||
@@ -20,40 +20,43 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Stopping ${APP} Services"
 | 
			
		||||
    systemctl stop zabbix-server zabbix-agent2
 | 
			
		||||
    msg_ok "Stopped ${APP} Services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    mkdir -p /opt/zabbix-backup/
 | 
			
		||||
    cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
 | 
			
		||||
    cp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix-backup/
 | 
			
		||||
    cp -R /usr/share/zabbix/ /opt/zabbix-backup/
 | 
			
		||||
    #cp -R /usr/share/zabbix-* /opt/zabbix-backup/ Remove temporary
 | 
			
		||||
    rm -Rf /etc/apt/sources.list.d/zabbix.list
 | 
			
		||||
    cd /tmp
 | 
			
		||||
    curl -fsSL "https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb" -o $(basename "https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")
 | 
			
		||||
    $STD dpkg -i zabbix-release_latest+debian12_all.deb
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-*
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP} Services"
 | 
			
		||||
    systemctl start zabbix-server zabbix-agent2
 | 
			
		||||
    systemctl restart apache2
 | 
			
		||||
    msg_ok "Started ${APP} Services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Stopping ${APP} Services"
 | 
			
		||||
  systemctl stop zabbix-server zabbix-agent2
 | 
			
		||||
  msg_ok "Stopped ${APP} Services"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating $APP LXC"
 | 
			
		||||
  mkdir -p /opt/zabbix-backup/
 | 
			
		||||
  cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
 | 
			
		||||
  cp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix-backup/
 | 
			
		||||
  cp -R /usr/share/zabbix/ /opt/zabbix-backup/
 | 
			
		||||
  #cp -R /usr/share/zabbix-* /opt/zabbix-backup/ Remove temporary
 | 
			
		||||
  rm -Rf /etc/apt/sources.list.d/zabbix.list
 | 
			
		||||
  cd /tmp || exit
 | 
			
		||||
  curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ |
 | 
			
		||||
    grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 |
 | 
			
		||||
    xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \
 | 
			
		||||
    -o /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
  $STD dpkg -i zabbix-release_latest+debian12_all.deb
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-*
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting ${APP} Services"
 | 
			
		||||
  systemctl start zabbix-server zabbix-agent2
 | 
			
		||||
  systemctl restart apache2
 | 
			
		||||
  msg_ok "Started ${APP} Services"
 | 
			
		||||
 | 
			
		||||
  msg_info "Cleaning Up"
 | 
			
		||||
  rm -rf /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
  msg_ok "Cleaned"
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -20,39 +20,39 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -f /etc/systemd/system/zitadel.service ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    RELEASE=$(curl -fsSL https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
        msg_info "Stopping $APP"
 | 
			
		||||
        systemctl stop zitadel
 | 
			
		||||
        msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
        cd /tmp || exit
 | 
			
		||||
        curl -fsSL https://github.com/zitadel/zitadel/releases/download/"$RELEASE"/zitadel-linux-amd64.tar.gz | tar -xz
 | 
			
		||||
        mv zitadel-linux-amd64/zitadel /usr/local/bin
 | 
			
		||||
        $STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true
 | 
			
		||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
        msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting $APP"
 | 
			
		||||
        systemctl start zitadel
 | 
			
		||||
        msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf /tmp/zitadel-linux-amd64
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
        msg_ok "Update Successful"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
    fi
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -f /etc/systemd/system/zitadel.service ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop zitadel
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    cd /tmp || exit
 | 
			
		||||
    curl -fsSL "https://github.com/zitadel/zitadel/releases/download/v$RELEASE/zitadel-linux-amd64.tar.gz" | tar -xz
 | 
			
		||||
    mv zitadel-linux-amd64/zitadel /usr/local/bin
 | 
			
		||||
    $STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start zitadel
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf /tmp/zitadel-linux-amd64
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										12
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -3255,7 +3255,7 @@
 | 
			
		||||
      "version": "19.0.0-rc.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/types-react/-/types-react-19.0.0-rc.1.tgz",
 | 
			
		||||
      "integrity": "sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==",
 | 
			
		||||
      "devOptional": true,
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "csstype": "^3.0.2"
 | 
			
		||||
      }
 | 
			
		||||
@@ -3265,7 +3265,7 @@
 | 
			
		||||
      "version": "19.0.0-rc.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/types-react-dom/-/types-react-dom-19.0.0-rc.1.tgz",
 | 
			
		||||
      "integrity": "sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==",
 | 
			
		||||
      "devOptional": true,
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@types/react": "*"
 | 
			
		||||
      }
 | 
			
		||||
@@ -7851,6 +7851,7 @@
 | 
			
		||||
      "version": "3.5.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
 | 
			
		||||
      "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "prettier": "bin/prettier.cjs"
 | 
			
		||||
@@ -9541,6 +9542,7 @@
 | 
			
		||||
      "version": "5.8.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
 | 
			
		||||
      "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "tsc": "bin/tsc",
 | 
			
		||||
@@ -9665,9 +9667,9 @@
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/vite": {
 | 
			
		||||
      "version": "6.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==",
 | 
			
		||||
      "version": "6.2.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz",
 | 
			
		||||
      "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,8 +19,8 @@
 | 
			
		||||
            "script": "ct/actualbudget.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "ram": 4096,
 | 
			
		||||
                "hdd": 7,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,47 +1,45 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE LXC IP-Tag",
 | 
			
		||||
    "slug": "add-lxc-iptag",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-12-16",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
    "description": "This script automatically adds IP address as tags to LXC containers using a Systemd service. The service also updates the tags if a LXC IP address is changed.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/add-lxc-iptag.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Proxmox VE LXC IP-Tag",
 | 
			
		||||
  "slug": "add-lxc-iptag",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-12-16",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
  "description": "This script automatically adds IP address as tags to LXC containers using a Systemd service. The service also updates the tags if a LXC IP address is changed.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/add-lxc-iptag.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Configuration: `nano /opt/lxc-iptag/iptag.conf`. iptag.service must be restarted after change.",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Configuration: `nano /opt/lxc-iptag/iptag.conf`. iptag.service must be restarted after change.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,47 +1,45 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "NetBird",
 | 
			
		||||
    "slug": "add-netbird-lxc",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-19",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": "https://docs.netbird.io/",
 | 
			
		||||
    "website": "https://netbird.io/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/netbird.svg",
 | 
			
		||||
    "description": "NetBird combines a configuration-free peer-to-peer private network and a centralized access control system in a single platform, making it easy to create secure private networks for your organization or home.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/add-netbird-lxc.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "NetBird",
 | 
			
		||||
  "slug": "add-netbird-lxc",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-05-19",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": "https://docs.netbird.io/",
 | 
			
		||||
  "website": "https://netbird.io/",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/netbird.svg",
 | 
			
		||||
  "description": "NetBird combines a configuration-free peer-to-peer private network and a centralized access control system in a single platform, making it easy to create secure private networks for your organization or home.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/addon/add-netbird-lxc.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "After the script finishes, reboot the LXC then run `netbird up` in the LXC console",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "After the script finishes, reboot the LXC then run `netbird up` in the LXC console",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox main shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "The script only works in Debian/Ubuntu, not in Alpine!",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox main shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "The script only works in Debian/Ubuntu, not in Alpine!",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,47 +1,45 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Tailscale",
 | 
			
		||||
    "slug": "add-tailscale-lxc",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://tailscale.com/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/tailscale.svg",
 | 
			
		||||
    "description": "Tailscale is a software-defined networking solution that enables secure communication between devices over the internet. It creates a virtual private network (VPN) that enables devices to communicate with each other as if they were on the same local network. Tailscale works even when the devices are separated by firewalls or subnets, and provides secure and encrypted communication between devices. With Tailscale, users can connect devices, servers, computers, and cloud instances to create a secure network, making it easier to manage and control access to resources. Tailscale is designed to be easy to set up and use, providing a streamlined solution for secure communication between devices over the internet.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/add-tailscale-lxc.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Tailscale",
 | 
			
		||||
  "slug": "add-tailscale-lxc",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://tailscale.com/",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/tailscale.svg",
 | 
			
		||||
  "description": "Tailscale is a software-defined networking solution that enables secure communication between devices over the internet. It creates a virtual private network (VPN) that enables devices to communicate with each other as if they were on the same local network. Tailscale works even when the devices are separated by firewalls or subnets, and provides secure and encrypted communication between devices. With Tailscale, users can connect devices, servers, computers, and cloud instances to create a secure network, making it easier to manage and control access to resources. Tailscale is designed to be easy to set up and use, providing a streamlined solution for secure communication between devices over the internet.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/addon/add-tailscale-lxc.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Only supported on Debian 12 LXCs",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Only supported on Debian 12 LXCs",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "After the script finishes, reboot the LXC then run `tailscale up` in the LXC console",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
    {
 | 
			
		||||
      "text": "After the script finishes, reboot the LXC then run `tailscale up` in the LXC console",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "All Templates",
 | 
			
		||||
    "slug": "all-templates",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/proxmox.svg",
 | 
			
		||||
    "description": "A script designed to allow for the creation of one of the many free LXC templates. Great for creating system LXCs.\r\nThe script creates a `*.creds` file in the Proxmox root directory with the password of the newly created LXC.\r\nPlease take note that if you plan to use this script for creating TurnKey LXCs, you'll need to modify the hostname after creation.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/all-templates.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Resource and network settings are adjustable post LXC creation.",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
  "name": "All Templates",
 | 
			
		||||
  "slug": "all-templates",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/proxmox.svg",
 | 
			
		||||
  "description": "A script designed to allow for the creation of one of the many free LXC templates. Great for creating system LXCs.\r\nThe script creates a `*.creds` file in the Proxmox root directory with the password of the newly created LXC.\r\nPlease take note that if you plan to use this script for creating TurnKey LXCs, you'll need to modify the hostname after creation.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/addon/all-templates.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Resource and network settings are adjustable post LXC creation.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
    "name": "Channels DVR Server",
 | 
			
		||||
    "slug": "channels",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        15
 | 
			
		||||
        13
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
@@ -36,4 +36,4 @@
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE LXC Cleaner",
 | 
			
		||||
    "slug": "clean-lxcs",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
 | 
			
		||||
    "description": "This script provides options to delete logs and cache, and repopulate apt lists for Ubuntu and Debian systems.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/clean-lxcs.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
  "name": "Proxmox VE LXC Cleaner",
 | 
			
		||||
  "slug": "clean-lxcs",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
 | 
			
		||||
  "description": "This script provides options to delete logs and cache, and repopulate apt lists for Ubuntu and Debian systems.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/clean-lxcs.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox Clean Orphaned LVM",
 | 
			
		||||
    "slug": "clean-orphaned-lvm",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-01-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
    "description": "This script helps Proxmox users identify and remove orphaned LVM volumes that are no longer associated with any VM or LXC container. It scans all LVM volumes, detects unused ones, and provides an interactive prompt to delete them safely. System-critical volumes like root, swap, and data are excluded to prevent accidental deletion.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/clean-orphaned-lvm.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
  "name": "Proxmox Clean Orphaned LVM",
 | 
			
		||||
  "slug": "clean-orphaned-lvm",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2025-01-29",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
  "description": "This script helps Proxmox users identify and remove orphaned LVM volumes that are no longer associated with any VM or LXC container. It scans all LVM volumes, detects unused ones, and provides an interactive prompt to delete them safely. System-critical volumes like root, swap, and data are excluded to prevent accidental deletion.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/clean-orphaned-lvm.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,41 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "VS Code Server",
 | 
			
		||||
    "slug": "code-server",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1,
 | 
			
		||||
        20,
 | 
			
		||||
        11
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 8680,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/visual-studio-code.svg",
 | 
			
		||||
    "description": "VS Code Server is a service you can run on a remote development machine, like your desktop PC or a virtual machine (VM). It allows you to securely connect to that remote machine from anywhere through a vscode.dev URL, without the requirement of SSH.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/code-server.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"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
  "name": "VS Code Server",
 | 
			
		||||
  "slug": "code-server",
 | 
			
		||||
  "categories": [1, 20, 11],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8680,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/visual-studio-code.svg",
 | 
			
		||||
  "description": "VS Code Server is a service you can run on a remote development machine, like your desktop PC or a virtual machine (VM). It allows you to securely connect to that remote machine from anywhere through a vscode.dev URL, without the requirement of SSH.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/addon/code-server.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"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,44 +1,41 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE Cron LXC Updater",
 | 
			
		||||
    "slug": "cron-update-lxcs",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/lxc.svg",
 | 
			
		||||
    "description": "This script will add/remove a crontab schedule that updates all LXCs every Sunday at midnight.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/cron-update-lxcs.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Proxmox VE Cron LXC Updater",
 | 
			
		||||
  "slug": "cron-update-lxcs",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/lxc.svg",
 | 
			
		||||
  "description": "This script will add/remove a crontab schedule that updates all LXCs every Sunday at midnight.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/cron-update-lxcs.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main/misc/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "CrowdSec",
 | 
			
		||||
    "slug": "crowdsec",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        6
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://crowdsec.net/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/crowdsec.svg",
 | 
			
		||||
    "description": "CrowdSec is a free and open-source intrusion prevention system (IPS) designed to provide network security against malicious traffic. It is a collaborative IPS that analyzes behaviors and responses to attacks by sharing signals across a community of users. CrowdSec leverages the collective intelligence of its users to detect and respond to security threats in real-time. With CrowdSec, network administrators can set up protection against a wide range of threats, including malicious traffic, bots, and denial-of-service (DoS) attacks. The software is designed to be easy to use and integrate with existing security systems, making it a valuable tool for enhancing the security of any network.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/crowdsec.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. Debian only!",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
  "name": "CrowdSec",
 | 
			
		||||
  "slug": "crowdsec",
 | 
			
		||||
  "categories": [6],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://crowdsec.net/",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/crowdsec.svg",
 | 
			
		||||
  "description": "CrowdSec is a free and open-source intrusion prevention system (IPS) designed to provide network security against malicious traffic. It is a collaborative IPS that analyzes behaviors and responses to attacks by sharing signals across a community of users. CrowdSec leverages the collective intelligence of its users to detect and respond to security threats in real-time. With CrowdSec, network administrators can set up protection against a wide range of threats, including malicious traffic, bots, and denial-of-service (DoS) attacks. The software is designed to be easy to use and integrate with existing security systems, making it a valuable tool for enhancing the security of any network.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/addon/crowdsec.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. Debian only!",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,50 +1,48 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "File Browser",
 | 
			
		||||
    "slug": "filebrowser",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 8080,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://filebrowser.org/features",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/file-browser.svg",
 | 
			
		||||
    "description": "File Browser offers a user-friendly web interface for managing files within a designated directory. It allows you to perform various actions such as uploading, deleting, previewing, renaming, and editing files.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/filebrowser.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "type": "alpine",
 | 
			
		||||
            "script": "misc/filebrowser.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": "admin",
 | 
			
		||||
        "password": "helper-scripts.com"
 | 
			
		||||
  "name": "File Browser",
 | 
			
		||||
  "slug": "filebrowser",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8080,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://filebrowser.org/features",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/file-browser.svg",
 | 
			
		||||
  "description": "File Browser offers a user-friendly web interface for managing files within a designated directory. It allows you to perform various actions such as uploading, deleting, previewing, renaming, and editing files.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/addon/filebrowser.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within an existing LXC Console",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
    {
 | 
			
		||||
      "type": "alpine",
 | 
			
		||||
      "script": "tools/addon/filebrowser.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": "admin",
 | 
			
		||||
    "password": "helper-scripts.com"
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within an existing LXC Console",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,43 +1,41 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE LXC Filesystem Trim",
 | 
			
		||||
    "slug": "fstrim",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/805",
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
 | 
			
		||||
    "description": "This maintains SSD performance by managing unused blocks. Thin-provisioned storage systems also require management to prevent unnecessary storage use. VMs automate fstrim, while LXC containers need manual or automated fstrim processes for optimal performance.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/fstrim.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Proxmox VE LXC Filesystem Trim",
 | 
			
		||||
  "slug": "fstrim",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/805",
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
 | 
			
		||||
  "description": "This maintains SSD performance by managing unused blocks. Thin-provisioned storage systems also require management to prevent unnecessary storage use. VMs automate fstrim, while LXC containers need manual or automated fstrim processes for optimal performance.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/fstrim.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "This is designed to work with SSDs on ext4 filesystems only.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
    {
 | 
			
		||||
      "text": "This is designed to work with SSDs on ext4 filesystems only.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,43 +1,41 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Glances",
 | 
			
		||||
    "slug": "glances",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        9
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 61208,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://nicolargo.github.io/glances/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/nicolargo/glances/develop/docs/_static/Glances%20Logo.svg",
 | 
			
		||||
    "description": "Glances is an open-source system cross-platform monitoring tool. It allows real-time monitoring of various aspects of your system such as CPU, memory, disk, network usage etc.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/glances.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Glances",
 | 
			
		||||
  "slug": "glances",
 | 
			
		||||
  "categories": [9],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 61208,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://nicolargo.github.io/glances/",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/nicolargo/glances/develop/docs/_static/Glances%20Logo.svg",
 | 
			
		||||
  "description": "Glances is an open-source system cross-platform monitoring tool. It allows real-time monitoring of various aspects of your system such as CPU, memory, disk, network usage etc.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/addon/glances.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"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within an existing LXC Console",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
    {
 | 
			
		||||
      "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,34 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Hoarder",
 | 
			
		||||
  "slug": "hoarder",
 | 
			
		||||
  "categories": [
 | 
			
		||||
        12
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-12-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://docs.hoarder.app/",
 | 
			
		||||
  "website": "https://hoarder.app/",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/hoarder.svg",
 | 
			
		||||
  "description": "Hoarder is an AI-powered bookmarking tool that helps you save and organize your digital content. It automatically tags your links, notes, and images, making them easy to find later. With features like auto-fetching, lists, and full-text search, Hoarder is the perfect tool for anyone who wants to keep track of their digital life.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/hoarder.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 10,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -1,43 +1,41 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE Host Backup",
 | 
			
		||||
    "slug": "host-backup",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/bash-dark.svg",
 | 
			
		||||
    "description": "This script serves as a versatile backup utility, enabling users to specify both the backup path and the directory they want to work in. This flexibility empowers users to select the specific files and directories they wish to back up, making it compatible with a wide range of hosts, not limited to Proxmox.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/host-backup.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Proxmox VE Host Backup",
 | 
			
		||||
  "slug": "host-backup",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/bash-dark.svg",
 | 
			
		||||
  "description": "This script serves as a versatile backup utility, enabling users to specify both the backup path and the directory they want to work in. This flexibility empowers users to select the specific files and directories they wish to back up, making it compatible with a wide range of hosts, not limited to Proxmox.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/host-backup.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "A backup is rendered ineffective when it remains stored on the host",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
    {
 | 
			
		||||
      "text": "A backup is rendered ineffective when it remains stored on the host",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								frontend/public/json/karakeep.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								frontend/public/json/karakeep.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "karakeep",
 | 
			
		||||
  "slug": "karakeep",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    12
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-04-07",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://docs.karakeep.app/",
 | 
			
		||||
  "website": "https://karakeep.app/",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/karakeep.svg",
 | 
			
		||||
  "description": "karakeep (formerly: hoarder) is an AI-powered bookmarking tool that helps you save and organize your digital content. It automatically tags your links, notes, and images, making them easy to find later. With features like auto-fetching, lists, and full-text search, karakeep is the perfect tool for anyone who wants to keep track of their digital life.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/karakeep.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 10,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE Kernel Clean",
 | 
			
		||||
    "slug": "kernel-clean",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
    "description": "Cleaning unused kernel images is beneficial for reducing the length of the GRUB menu and freeing up disk space. By removing old, unused kernels, the system is able to conserve disk space and streamline the boot process.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/kernel-clean.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
  "name": "Proxmox VE Kernel Clean",
 | 
			
		||||
  "slug": "kernel-clean",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
  "description": "Cleaning unused kernel images is beneficial for reducing the length of the GRUB menu and freeing up disk space. By removing old, unused kernels, the system is able to conserve disk space and streamline the boot process.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/kernel-clean.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE Kernel Pin",
 | 
			
		||||
    "slug": "kernel-pin",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-08",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
    "description": "Kernel Pin is an essential tool for effortlessly managing kernel pinning and unpinning.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/kernel-pin.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
  "name": "Proxmox VE Kernel Pin",
 | 
			
		||||
  "slug": "kernel-pin",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-05-08",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
  "description": "Kernel Pin is an essential tool for effortlessly managing kernel pinning and unpinning.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/kernel-pin.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 3000,
 | 
			
		||||
    "documentation": "https://docs.linkwarden.app/",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Container LXC Deletion",
 | 
			
		||||
    "slug": "lxc-delete",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-01-21",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
 | 
			
		||||
    "description": "This script helps manage and delete LXC containers on a Proxmox VE server. It lists all available containers, allowing the user to select one or more for deletion through an interactive menu. Running containers are automatically stopped before deletion, and the user is asked to confirm each action. The script ensures a controlled and efficient container management process.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/lxc-delete.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
  "name": "Container LXC Deletion",
 | 
			
		||||
  "slug": "lxc-delete",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2025-01-21",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
 | 
			
		||||
  "description": "This script helps manage and delete LXC containers on a Proxmox VE server. It lists all available containers, allowing the user to select one or more for deletion through an interactive menu. Running containers are automatically stopped before deletion, and the user is asked to confirm each action. The script ensures a controlled and efficient container management process.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/lxc-delete.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								frontend/public/json/meilisearch.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								frontend/public/json/meilisearch.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Meilisearch",
 | 
			
		||||
  "slug": "meilisearch",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    8
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-04-04",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 7700,
 | 
			
		||||
  "documentation": "https://www.meilisearch.com/docs",
 | 
			
		||||
  "website": "https://www.meilisearch.com/",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/meilisearch.svg",
 | 
			
		||||
  "description": "Meilisearch is a fast, open-source search engine designed for instant, full-text search with typo tolerance. It provides an API that allows developers to integrate powerful search features into applications. Meilisearch-UI is an optional web-based interface that provides a simple way to interact with Meilisearch, visualize indexed data, and test queries without needing to use the API directly.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/meilisearch.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 7,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Meilisearch-UI can optionally be installed for a web-based search interface",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Meilisearch-UI has early development status and can cause performance issues",
 | 
			
		||||
      "type": "warn"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,43 +1,41 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE Processor Microcode",
 | 
			
		||||
    "slug": "microcode",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/processor.png?raw=true",
 | 
			
		||||
    "description": "Processor Microcode is a layer of low-level software that runs on the processor and provides patches or updates to its firmware. Microcode updates can fix hardware bugs, improve performance, and enhance security features of the processor.\r\n\r\nIt's important to note that the availability of firmware update mechanisms, such as Intel's Management Engine (ME) or AMD's Platform Security Processor (PSP), may vary depending on the processor and its specific implementation. Therefore, it's recommended to consult the documentation for your processor to confirm whether firmware updates can be applied through the operating system.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/microcode.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Proxmox VE Processor Microcode",
 | 
			
		||||
  "slug": "microcode",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/processor.png?raw=true",
 | 
			
		||||
  "description": "Processor Microcode is a layer of low-level software that runs on the processor and provides patches or updates to its firmware. Microcode updates can fix hardware bugs, improve performance, and enhance security features of the processor.\r\n\r\nIt's important to note that the availability of firmware update mechanisms, such as Intel's Management Engine (ME) or AMD's Platform Security Processor (PSP), may vary depending on the processor and its specific implementation. Therefore, it's recommended to consult the documentation for your processor to confirm whether firmware updates can be applied through the operating system.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/microcode.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "After a reboot, you can check whether any microcode updates are currently in effect by running the following command. `journalctl -k | grep -E \"microcode\" | head -n 1`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
    {
 | 
			
		||||
      "text": "After a reboot, you can check whether any microcode updates are currently in effect by running the following command. `journalctl -k | grep -E \"microcode\" | head -n 1`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,67 +1,65 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE Monitor-All",
 | 
			
		||||
    "slug": "monitor-all",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/monitor.png?raw=true",
 | 
			
		||||
    "description": "This script will add Monitor-All to Proxmox VE, which will monitor the status of all your instances, both containers and virtual machines, excluding templates and user-defined ones, and automatically restart or reset them if they become unresponsive. This is particularly useful if you're experiencing problems with Home Assistant becoming non-responsive every few days/weeks. Monitor-All also maintains a log of the entire process, which can be helpful for troubleshooting and monitoring purposes.\r\n\r\n\ud83d\udec8 Virtual machines without the QEMU guest agent installed must be excluded.\r\n\ud83d\udec8 Prior to generating any new CT/VM not found in this repository, it's necessary to halt Proxmox VE Monitor-All by running systemctl stop ping-instances.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/monitor-all.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Proxmox VE Monitor-All",
 | 
			
		||||
  "slug": "monitor-all",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/monitor.png?raw=true",
 | 
			
		||||
  "description": "This script will add Monitor-All to Proxmox VE, which will monitor the status of all your instances, both containers and virtual machines, excluding templates and user-defined ones, and automatically restart or reset them if they become unresponsive. This is particularly useful if you're experiencing problems with Home Assistant becoming non-responsive every few days/weeks. Monitor-All also maintains a log of the entire process, which can be helpful for troubleshooting and monitoring purposes.\r\n\r\n\ud83d\udec8 Virtual machines without the QEMU guest agent installed must be excluded.\r\n\ud83d\udec8 Prior to generating any new CT/VM not found in this repository, it's necessary to halt Proxmox VE Monitor-All by running systemctl stop ping-instances.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/monitor-all.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Virtual machines without the QEMU guest agent installed must be excluded.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Prior to generating any new CT/VM not found in this repository, it's necessary to halt Proxmox VE Monitor-All by running `systemctl stop ping-instances`.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "To make setup changes, first stop the service: `systemctl stop ping-instances`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "To edit pause time: `nano /usr/local/bin/ping-instances.sh`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "To add excluded instances: `nano /etc/systemd/system/ping-instances.service`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "After changes have been saved, `systemctl daemon-reload` and start the service: `systemctl start ping-instances`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Monitor-All logs: `cat /var/log/ping-instances.log`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Virtual machines without the QEMU guest agent installed must be excluded.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Prior to generating any new CT/VM not found in this repository, it's necessary to halt Proxmox VE Monitor-All by running `systemctl stop ping-instances`.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To make setup changes, first stop the service: `systemctl stop ping-instances`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To edit pause time: `nano /usr/local/bin/ping-instances.sh`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To add excluded instances: `nano /etc/systemd/system/ping-instances.service`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "After changes have been saved, `systemctl daemon-reload` and start the service: `systemctl start ping-instances`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Monitor-All logs: `cat /var/log/ping-instances.log`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE Netdata",
 | 
			
		||||
    "slug": "netdata",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.netdata.cloud/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/netdata.svg",
 | 
			
		||||
    "description": "Netdata is an open-source, real-time performance monitoring tool designed to provide insights into the performance and health of systems and applications. It is often used by system administrators, DevOps professionals, and developers to monitor and troubleshoot issues on servers and other devices.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/netdata.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
  "name": "Proxmox VE Netdata",
 | 
			
		||||
  "slug": "netdata",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://www.netdata.cloud/",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/netdata.svg",
 | 
			
		||||
  "description": "Netdata is an open-source, real-time performance monitoring tool designed to provide insights into the performance and health of systems and applications. It is often used by system administrators, DevOps professionals, and developers to monitor and troubleshoot issues on servers and other devices.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/addon/netdata.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
  "name": "NextPVR",
 | 
			
		||||
  "slug": "nextpvr",
 | 
			
		||||
  "categories": [
 | 
			
		||||
        15
 | 
			
		||||
        13
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-11-20",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "OliveTin",
 | 
			
		||||
    "slug": "olivetin",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        10
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 1337,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.olivetin.app/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/olivetin.svg",
 | 
			
		||||
    "description": "OliveTin provides a secure and straightforward way to execute pre-determined shell commands through a web-based interface.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/olivetin.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Configuration Path: `/etc/OliveTin/config.yaml`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
  "name": "OliveTin",
 | 
			
		||||
  "slug": "olivetin",
 | 
			
		||||
  "categories": [10],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 1337,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://www.olivetin.app/",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/olivetin.svg",
 | 
			
		||||
  "description": "OliveTin provides a secure and straightforward way to execute pre-determined shell commands through a web-based interface.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/addon/olivetin.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Configuration Path: `/etc/OliveTin/config.yaml`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,43 +1,41 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox Backup Server Processor Microcode",
 | 
			
		||||
    "slug": "pbs-microcode",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-02-07",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/processor.png?raw=true",
 | 
			
		||||
    "description": "Processor Microcode is a layer of low-level software that runs on the processor and provides patches or updates to its firmware. Microcode updates can fix hardware bugs, improve performance, and enhance security features of the processor. This script is adapted for the Proxmox Backup Server environment and will only run on bare metal systems. If running in a virtualized environment, the script will exit. Note that firmware update mechanisms, such as Intel's Management Engine (ME) or AMD's Platform Security Processor (PSP), may vary depending on your processor and its implementation. Please consult your processor's documentation to verify if firmware updates can be applied through the operating system.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/pbs_microcode.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Proxmox Backup Server Processor Microcode",
 | 
			
		||||
  "slug": "pbs-microcode",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2025-02-07",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/processor.png?raw=true",
 | 
			
		||||
  "description": "Processor Microcode is a layer of low-level software that runs on the processor and provides patches or updates to its firmware. Microcode updates can fix hardware bugs, improve performance, and enhance security features of the processor. This script is adapted for the Proxmox Backup Server environment and will only run on bare metal systems. If running in a virtualized environment, the script will exit. Note that firmware update mechanisms, such as Intel's Management Engine (ME) or AMD's Platform Security Processor (PSP), may vary depending on your processor and its implementation. Please consult your processor's documentation to verify if firmware updates can be applied through the operating system.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/pbs_microcode.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox Backup Server shell on a bare metal system. The script will exit if it detects that it is running in a virtualized environment.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox Backup Server shell on a bare metal system. The script will exit if it detects that it is running in a virtualized environment.",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "After a reboot, you can check whether any microcode updates are currently in effect by running the following command: `journalctl -k | grep -E \"microcode\" | head -n 1`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
    {
 | 
			
		||||
      "text": "After a reboot, you can check whether any microcode updates are currently in effect by running the following command: `journalctl -k | grep -E \"microcode\" | head -n 1`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,47 +1,45 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox Backup Server Post Install",
 | 
			
		||||
    "slug": "post-pbs-install",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
    "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PBS Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Backup Server and Reboot PBS.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/post-pbs-install.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Proxmox Backup Server Post Install",
 | 
			
		||||
  "slug": "post-pbs-install",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
  "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PBS Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Backup Server and Reboot PBS.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/post-pbs-install.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Proxmox Backup Server ONLY",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Proxmox Backup Server ONLY",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox Backup Server Shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox Backup Server Shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,47 +1,45 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox Mail Gateway Post Install",
 | 
			
		||||
    "slug": "post-pmg-install",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-01-20",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
    "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PMG Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Mail Gateway and Reboot PMG.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/post-pmg-install.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Proxmox Mail Gateway Post Install",
 | 
			
		||||
  "slug": "post-pmg-install",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2025-01-20",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
  "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PMG Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Mail Gateway and Reboot PMG.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/post-pmg-install.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Proxmox Mail Gateway ONLY",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Proxmox Mail Gateway ONLY",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox Mail Gateway Shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox Mail Gateway Shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,43 +1,41 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE Post Install",
 | 
			
		||||
    "slug": "post-pve-install",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-28",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
    "description": "This script provides options for managing Proxmox VE repositories, including disabling the Enterprise Repo, adding or correcting PVE sources, enabling the No-Subscription Repo, adding the test Repo, disabling the subscription nag, updating Proxmox VE, and rebooting the system.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/post-pve-install.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "Proxmox VE Post Install",
 | 
			
		||||
  "slug": "post-pve-install",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-28",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/proxmox.svg",
 | 
			
		||||
  "description": "This script provides options for managing Proxmox VE repositories, including disabling the Enterprise Repo, adding or correcting PVE sources, enabling the No-Subscription Repo, adding the test Repo, disabling the subscription nag, updating Proxmox VE, and rebooting the system.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/post-pve-install.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
    {
 | 
			
		||||
      "text": "It is recommended to answer “yes” (y) to all options presented during the process.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,48 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "PostgreSQL",
 | 
			
		||||
    "slug": "postgresql",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        8
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 5432,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.postgresql.org/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/postgresql.svg",
 | 
			
		||||
    "description": "PostgreSQL (often referred to as Postgres) is an open-source relational database management system that is known for its extensibility and strict adherence to SQL standards. It is a free and powerful database solution, suitable for a wide range of applications, from small projects to large enterprise systems. PostgreSQL is widely used for its reliability, feature-richness, and robustness.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/postgresql.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
  "name": "PostgreSQL",
 | 
			
		||||
  "slug": "postgresql",
 | 
			
		||||
  "categories": [8],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 5432,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://www.postgresql.org/",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/postgresql.svg",
 | 
			
		||||
  "description": "PostgreSQL (often referred to as Postgres) is an open-source relational database management system that is known for its extensibility and strict adherence to SQL standards. It is a free and powerful database solution, suitable for a wide range of applications, from small projects to large enterprise systems. PostgreSQL is widely used for its reliability, feature-richness, and robustness.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/postgresql.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "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"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
    {
 | 
			
		||||
      "type": "alpine",
 | 
			
		||||
      "script": "ct/alpine-postgresql.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 256,
 | 
			
		||||
        "hdd": 1,
 | 
			
		||||
        "os": "alpine",
 | 
			
		||||
        "version": "3.21"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "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"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE CPU Scaling Governor",
 | 
			
		||||
    "slug": "scaling-governor",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": "https://www.kernel.org/doc/html/latest/admin-guide/pm/cpufreq.html?#generic-scaling-governors",
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/cpu.png?raw=true",
 | 
			
		||||
    "description": "The CPU scaling governor determines how the CPU frequency is adjusted based on the workload, with the goal of either conserving power or improving performance. By scaling the frequency up or down, the operating system can optimize the CPU usage and conserve energy when possible. Generic Scaling Governors",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/scaling-governor.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
  "name": "Proxmox VE CPU Scaling Governor",
 | 
			
		||||
  "slug": "scaling-governor",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": "https://www.kernel.org/doc/html/latest/admin-guide/pm/cpufreq.html?#generic-scaling-governors",
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://github.com/community-scripts/ProxmoxVE/blob/main/misc/images/cpu.png?raw=true",
 | 
			
		||||
  "description": "The CPU scaling governor determines how the CPU frequency is adjusted based on the workload, with the goal of either conserving power or improving performance. By scaling the frequency up or down, the operating system can optimize the CPU usage and conserve energy when possible. Generic Scaling Governors",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/scaling-governor.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox VE LXC Updater",
 | 
			
		||||
    "slug": "update-lxcs",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-04-29",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
 | 
			
		||||
    "description": "This script has been created to simplify and speed up the process of updating all LXC containers across various Linux distributions, such as Ubuntu, Debian, Devuan, Alpine Linux, CentOS-Rocky-Alma, Fedora, and ArchLinux. It's designed to automatically skip templates and specific containers during the update, enhancing its convenience and usability.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/update-lxcs.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
  "name": "Proxmox VE LXC Updater",
 | 
			
		||||
  "slug": "update-lxcs",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
 | 
			
		||||
  "description": "This script has been created to simplify and speed up the process of updating all LXC containers across various Linux distributions, such as Ubuntu, Debian, Devuan, Alpine Linux, CentOS-Rocky-Alma, Fedora, and ArchLinux. It's designed to automatically skip templates and specific containers during the update, enhancing its convenience and usability.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/update-lxcs.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox Update Repositories",
 | 
			
		||||
    "slug": "update-repo",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-11-04",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
 | 
			
		||||
    "description": "This script updates repository links in LXC containers, replacing old links from the tteck repository with links to the new community-scripts repository to fix issues related to updating scripts.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/update-repo.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
  "name": "Proxmox Update Repositories",
 | 
			
		||||
  "slug": "update-repo",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-11-04",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/linuxcontainers.svg",
 | 
			
		||||
  "description": "This script updates repository links in LXC containers, replacing old links from the tteck repository with links to the new community-scripts repository to fix issues related to updating scripts.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/update-repo.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,48 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.49.10",
 | 
			
		||||
    "date": "2025-04-03T09:17:54Z"
 | 
			
		||||
    "name": "OliveTin/OliveTin",
 | 
			
		||||
    "version": "2025.4.8",
 | 
			
		||||
    "date": "2025-04-08T22:02:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.99.1",
 | 
			
		||||
    "date": "2025-04-08T21:35:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "semaphoreui/semaphore",
 | 
			
		||||
    "version": "v2.13.12",
 | 
			
		||||
    "date": "2025-04-08T20:54:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fhem/fhem-mirror",
 | 
			
		||||
    "version": "6.2",
 | 
			
		||||
    "date": "2025-04-08T20:30:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "nightly",
 | 
			
		||||
    "date": "2025-04-06T15:58:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "minio/minio",
 | 
			
		||||
    "version": "RELEASE.2025-04-08T15-41-24Z",
 | 
			
		||||
    "date": "2025-04-08T19:51:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "goauthentik/authentik",
 | 
			
		||||
    "version": "version/2025.2.4",
 | 
			
		||||
    "date": "2025-04-08T18:39:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "influxdata/influxdb",
 | 
			
		||||
    "version": "v1.12.0rc1",
 | 
			
		||||
    "date": "2025-04-08T17:35:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "paperless-ngx/paperless-ngx",
 | 
			
		||||
    "version": "v2.15.0",
 | 
			
		||||
    "date": "2025-04-08T17:24:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
@@ -10,69 +50,349 @@
 | 
			
		||||
    "date": "2025-04-01T08:45:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.10",
 | 
			
		||||
    "date": "2025-03-22T13:02:26Z"
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.505",
 | 
			
		||||
    "date": "2025-04-08T15:46:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "6.0.14",
 | 
			
		||||
    "date": "2025-04-03T07:52:24Z"
 | 
			
		||||
    "name": "AdguardTeam/AdGuardHome",
 | 
			
		||||
    "version": "v0.107.59",
 | 
			
		||||
    "date": "2025-03-21T11:11:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jupyter/notebook",
 | 
			
		||||
    "version": "@jupyter-notebook/ui-components@7.4.0-rc.0",
 | 
			
		||||
    "date": "2025-04-03T06:49:38Z"
 | 
			
		||||
    "name": "openobserve/openobserve",
 | 
			
		||||
    "version": "v0.14.6-rc2",
 | 
			
		||||
    "date": "2025-04-08T14:42:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.128.0",
 | 
			
		||||
    "date": "2025-04-08T14:27:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "linkwarden/linkwarden",
 | 
			
		||||
    "version": "v2.10.0",
 | 
			
		||||
    "date": "2025-04-08T12:33:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.84.3",
 | 
			
		||||
    "date": "2025-03-27T11:54:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "prometheus/prometheus",
 | 
			
		||||
    "version": "v0.303.0-rc.1",
 | 
			
		||||
    "date": "2025-04-07T04:39:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "NLnetLabs/unbound",
 | 
			
		||||
    "version": "release-1.23.0rc1",
 | 
			
		||||
    "date": "2025-04-08T06:39:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.1722",
 | 
			
		||||
    "date": "2025-04-03T05:51:10Z"
 | 
			
		||||
    "version": "v0.22.1744",
 | 
			
		||||
    "date": "2025-04-08T06:09:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "server/public/v0.1.11",
 | 
			
		||||
    "date": "2025-03-28T14:04:31Z"
 | 
			
		||||
    "name": "StarFleetCPTN/GoMFT",
 | 
			
		||||
    "version": "v0.2.6",
 | 
			
		||||
    "date": "2025-04-08T02:23:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.0.8",
 | 
			
		||||
    "date": "2025-04-03T05:11:15Z"
 | 
			
		||||
    "name": "pelican-dev/panel",
 | 
			
		||||
    "version": "v1.0.0-beta19",
 | 
			
		||||
    "date": "2025-04-07T23:06:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fhem/fhem-mirror",
 | 
			
		||||
    "version": "6.2",
 | 
			
		||||
    "date": "2025-04-03T02:01:34Z"
 | 
			
		||||
    "name": "pelican-dev/wings",
 | 
			
		||||
    "version": "v1.0.0-beta11",
 | 
			
		||||
    "date": "2025-04-07T23:02:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.6.3-rc1",
 | 
			
		||||
    "date": "2025-03-26T20:39:01Z"
 | 
			
		||||
    "name": "Threadfin/Threadfin",
 | 
			
		||||
    "version": "1.2.32",
 | 
			
		||||
    "date": "2025-04-07T20:01:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "HabitRPG/habitica",
 | 
			
		||||
    "version": "v5.35.1",
 | 
			
		||||
    "date": "2025-04-02T21:49:00Z"
 | 
			
		||||
    "name": "NodeBB/NodeBB",
 | 
			
		||||
    "version": "v4.2.0",
 | 
			
		||||
    "date": "2025-03-19T18:34:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "go-gitea/gitea",
 | 
			
		||||
    "version": "v1.23.7",
 | 
			
		||||
    "date": "2025-04-07T19:27:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Checkmk/checkmk",
 | 
			
		||||
    "version": "v2.4.0b4",
 | 
			
		||||
    "date": "2025-04-07T19:14:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "coverity-w15-4.12.0",
 | 
			
		||||
    "date": "2025-04-07T17:50:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.1.4",
 | 
			
		||||
    "date": "2025-03-13T15:41:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Brandawg93/PeaNUT",
 | 
			
		||||
    "version": "v5.7.0",
 | 
			
		||||
    "date": "2025-04-07T16:14:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "thomiceli/opengist",
 | 
			
		||||
    "version": "v1.10.0",
 | 
			
		||||
    "date": "2025-04-07T14:32:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/cassandra",
 | 
			
		||||
    "version": "5.0.4-tentative",
 | 
			
		||||
    "date": "2025-04-07T12:05:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "6.2.0-beta.4",
 | 
			
		||||
    "date": "2025-04-07T11:28:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.115.0",
 | 
			
		||||
    "date": "2025-04-07T11:15:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fallenbagel/jellyseerr",
 | 
			
		||||
    "version": "preview-back-to-axios",
 | 
			
		||||
    "date": "2025-04-07T09:23:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v10.1.5",
 | 
			
		||||
    "date": "2025-04-07T09:19:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "redis/redis",
 | 
			
		||||
    "version": "8.0-rc1-int2",
 | 
			
		||||
    "date": "2025-04-02T19:05:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v2.63.9",
 | 
			
		||||
    "date": "2025-03-31T12:47:21Z"
 | 
			
		||||
    "name": "zabbix/zabbix",
 | 
			
		||||
    "version": "7.4.0beta1",
 | 
			
		||||
    "date": "2025-04-07T08:14:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v24.8",
 | 
			
		||||
    "date": "2025-03-18T07:33:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "server/public/v0.1.11",
 | 
			
		||||
    "date": "2025-03-28T14:04:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.1",
 | 
			
		||||
    "date": "2025-01-01T16:15:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "open-webui/open-webui",
 | 
			
		||||
    "version": "v0.6.2",
 | 
			
		||||
    "date": "2025-04-07T03:41:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.10",
 | 
			
		||||
    "date": "2025-03-22T13:02:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "2.2.7",
 | 
			
		||||
    "date": "2025-04-06T20:00:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Dolibarr/dolibarr",
 | 
			
		||||
    "version": "21.0.1",
 | 
			
		||||
    "date": "2025-04-06T19:22:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "stonith404/pingvin-share",
 | 
			
		||||
    "version": "v1.11.1",
 | 
			
		||||
    "date": "2025-04-06T18:39:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wavelog/wavelog",
 | 
			
		||||
    "version": "2.0.3",
 | 
			
		||||
    "date": "2025-04-06T17:35:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "1.5.34",
 | 
			
		||||
    "date": "2025-03-27T16:17:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "stackblitz-labs/bolt.diy",
 | 
			
		||||
    "version": "v0.0.7-hf1",
 | 
			
		||||
    "date": "2025-03-10T20:49:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.19.7",
 | 
			
		||||
    "date": "2025-04-06T14:22:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Prowlarr/Prowlarr",
 | 
			
		||||
    "version": "v1.32.2.4987",
 | 
			
		||||
    "date": "2025-03-16T09:41:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Radarr/Radarr",
 | 
			
		||||
    "version": "v5.21.1.9799",
 | 
			
		||||
    "date": "2025-03-24T15:52:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "karakeep-app/karakeep",
 | 
			
		||||
    "version": "extension/v1.2.4",
 | 
			
		||||
    "date": "2025-04-06T11:56:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TechnitiumSoftware/DnsServer",
 | 
			
		||||
    "version": "v13.5.0",
 | 
			
		||||
    "date": "2025-04-06T11:24:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TriliumNext/Notes",
 | 
			
		||||
    "version": "v0.92.6",
 | 
			
		||||
    "date": "2025-04-06T10:38:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "kimai/kimai",
 | 
			
		||||
    "version": "2.32.0",
 | 
			
		||||
    "date": "2025-04-06T09:43:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "inventree/InvenTree",
 | 
			
		||||
    "version": "0.17.10",
 | 
			
		||||
    "date": "2025-04-06T05:31:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.6.5",
 | 
			
		||||
    "date": "2025-04-06T00:15:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jellyfin/jellyfin",
 | 
			
		||||
    "version": "v10.10.7",
 | 
			
		||||
    "date": "2025-04-05T19:14:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "azukaar/Cosmos-Server",
 | 
			
		||||
    "version": "v0.18.4",
 | 
			
		||||
    "date": "2025-04-05T19:12:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wger-project/wger",
 | 
			
		||||
    "version": "2.3",
 | 
			
		||||
    "date": "2025-04-05T18:05:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Paymenter/Paymenter",
 | 
			
		||||
    "version": "v1.0.2",
 | 
			
		||||
    "date": "2025-04-05T17:40:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bastienwirtz/homer",
 | 
			
		||||
    "version": "v25.04.1",
 | 
			
		||||
    "date": "2025-04-05T12:39:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "navidrome/navidrome",
 | 
			
		||||
    "version": "v0.55.2",
 | 
			
		||||
    "date": "2025-04-05T12:07:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Kozea/Radicale",
 | 
			
		||||
    "version": "v3.5.1",
 | 
			
		||||
    "date": "2025-04-05T06:20:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "actualbudget/actual",
 | 
			
		||||
    "version": "v25.4.0",
 | 
			
		||||
    "date": "2025-04-05T04:14:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
    "version": "2025.4.0",
 | 
			
		||||
    "date": "2025-04-02T17:01:41Z"
 | 
			
		||||
    "version": "2025.4.1",
 | 
			
		||||
    "date": "2025-04-04T20:59:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Koenkk/zigbee2mqtt",
 | 
			
		||||
    "version": "2.2.1",
 | 
			
		||||
    "date": "2025-04-04T20:15:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "YunoHost/yunohost",
 | 
			
		||||
    "version": "debian/12.0.13",
 | 
			
		||||
    "date": "2025-04-04T20:05:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homarr-labs/homarr",
 | 
			
		||||
    "version": "v1.14.0",
 | 
			
		||||
    "date": "2025-04-04T19:15:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Athou/commafeed",
 | 
			
		||||
    "version": "5.7.0",
 | 
			
		||||
    "date": "2025-04-04T18:10:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "icereed/paperless-gpt",
 | 
			
		||||
    "version": "v0.14.4",
 | 
			
		||||
    "date": "2025-04-04T14:18:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/tomcat",
 | 
			
		||||
    "version": "9.0.104",
 | 
			
		||||
    "date": "2025-04-04T12:58:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sabnzbd/sabnzbd",
 | 
			
		||||
    "version": "4.5.0",
 | 
			
		||||
    "date": "2025-03-30T16:17:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.49.12",
 | 
			
		||||
    "date": "2025-04-04T07:31:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "OctoPrint/OctoPrint",
 | 
			
		||||
    "version": "1.10.3",
 | 
			
		||||
    "date": "2024-11-05T09:20:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jupyter/notebook",
 | 
			
		||||
    "version": "@jupyter-notebook/ui-components@7.4.0-rc.0",
 | 
			
		||||
    "date": "2025-04-03T06:49:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.0.8",
 | 
			
		||||
    "date": "2025-04-03T05:11:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "HabitRPG/habitica",
 | 
			
		||||
    "version": "v5.35.1",
 | 
			
		||||
    "date": "2025-04-02T21:49:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v2.63.9",
 | 
			
		||||
    "date": "2025-03-31T12:47:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "BookStackApp/BookStack",
 | 
			
		||||
@@ -84,101 +404,26 @@
 | 
			
		||||
    "version": "2025.4.0",
 | 
			
		||||
    "date": "2025-04-02T15:38:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.503",
 | 
			
		||||
    "date": "2025-04-02T15:12:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Checkmk/checkmk",
 | 
			
		||||
    "version": "v2.4.0b3",
 | 
			
		||||
    "date": "2025-04-02T14:39:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hargata/lubelog",
 | 
			
		||||
    "version": "v1.4.6",
 | 
			
		||||
    "date": "2025-04-02T14:07:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "v4.11.2",
 | 
			
		||||
    "date": "2025-04-02T13:40:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v10.1.4",
 | 
			
		||||
    "date": "2025-04-02T09:38:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "v3.10.0",
 | 
			
		||||
    "date": "2025-03-15T14:38:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "immich-app/immich",
 | 
			
		||||
    "version": "v1.131.3",
 | 
			
		||||
    "date": "2025-04-01T22:48:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "icereed/paperless-gpt",
 | 
			
		||||
    "version": "v0.14.3",
 | 
			
		||||
    "date": "2025-04-01T19:53:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fallenbagel/jellyseerr",
 | 
			
		||||
    "version": "preview-music-support",
 | 
			
		||||
    "date": "2025-04-01T19:04:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Koenkk/zigbee2mqtt",
 | 
			
		||||
    "version": "2.2.0",
 | 
			
		||||
    "date": "2025-04-01T18:50:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/tomcat",
 | 
			
		||||
    "version": "9.0.103",
 | 
			
		||||
    "date": "2025-04-01T18:39:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MagicMirrorOrg/MagicMirror",
 | 
			
		||||
    "version": "v2.31.0",
 | 
			
		||||
    "date": "2025-04-01T18:12:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.19.6",
 | 
			
		||||
    "date": "2025-04-01T17:26:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "influxdata/influxdb",
 | 
			
		||||
    "version": "v3.0.0-0.beta.3",
 | 
			
		||||
    "date": "2025-04-01T15:34:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.127.1",
 | 
			
		||||
    "date": "2025-03-26T21:44:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "2.2.6",
 | 
			
		||||
    "date": "2025-04-01T14:01:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "theonedev/onedev",
 | 
			
		||||
    "version": "v11.8.6",
 | 
			
		||||
    "date": "2025-04-01T13:52:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "OctoPrint/OctoPrint",
 | 
			
		||||
    "version": "1.10.3",
 | 
			
		||||
    "date": "2024-11-05T09:20:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "semaphoreui/semaphore",
 | 
			
		||||
    "version": "v2.13.7",
 | 
			
		||||
    "date": "2025-04-01T09:41:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "neo4j/neo4j",
 | 
			
		||||
    "version": "5.26.5",
 | 
			
		||||
@@ -189,11 +434,6 @@
 | 
			
		||||
    "version": "v4.0.2",
 | 
			
		||||
    "date": "2025-04-01T04:51:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "open-webui/open-webui",
 | 
			
		||||
    "version": "v0.6.0",
 | 
			
		||||
    "date": "2025-04-01T01:47:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v0.82.1-18",
 | 
			
		||||
@@ -209,11 +449,6 @@
 | 
			
		||||
    "version": "v2.2.0",
 | 
			
		||||
    "date": "2025-03-31T21:31:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "NodeBB/NodeBB",
 | 
			
		||||
    "version": "v4.2.0",
 | 
			
		||||
    "date": "2025-03-19T18:34:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "traefik/traefik",
 | 
			
		||||
    "version": "v3.3.5",
 | 
			
		||||
@@ -224,11 +459,6 @@
 | 
			
		||||
    "version": "15.1",
 | 
			
		||||
    "date": "2025-03-31T13:42:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.84.3",
 | 
			
		||||
    "date": "2025-03-27T11:54:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.10.0-rc.4",
 | 
			
		||||
@@ -239,16 +469,6 @@
 | 
			
		||||
    "version": "4.8.11.0",
 | 
			
		||||
    "date": "2025-03-10T06:39:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TriliumNext/Notes",
 | 
			
		||||
    "version": "v0.92.5",
 | 
			
		||||
    "date": "2025-03-30T12:32:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "StarFleetCPTN/GoMFT",
 | 
			
		||||
    "version": "v0.2.4",
 | 
			
		||||
    "date": "2025-03-30T19:46:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "louislam/dockge",
 | 
			
		||||
    "version": "1.5.0",
 | 
			
		||||
@@ -259,11 +479,6 @@
 | 
			
		||||
    "version": "v6.0.6",
 | 
			
		||||
    "date": "2025-03-30T16:59:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sabnzbd/sabnzbd",
 | 
			
		||||
    "version": "4.5.0",
 | 
			
		||||
    "date": "2025-03-30T16:17:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Part-DB/Part-DB-server",
 | 
			
		||||
    "version": "v1.17.0",
 | 
			
		||||
@@ -279,11 +494,6 @@
 | 
			
		||||
    "version": "v0.26.6",
 | 
			
		||||
    "date": "2025-03-30T08:02:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Prowlarr/Prowlarr",
 | 
			
		||||
    "version": "v1.32.2.4987",
 | 
			
		||||
    "date": "2025-03-16T09:41:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Readarr/Readarr",
 | 
			
		||||
    "version": "v2.0.0.4645",
 | 
			
		||||
@@ -294,11 +504,6 @@
 | 
			
		||||
    "version": "v2.10.3.4602",
 | 
			
		||||
    "date": "2025-03-23T11:00:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Radarr/Radarr",
 | 
			
		||||
    "version": "v5.21.1.9799",
 | 
			
		||||
    "date": "2025-03-24T15:52:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "aceberg/WatchYourLAN",
 | 
			
		||||
    "version": "2.1.2-alpine",
 | 
			
		||||
@@ -329,16 +534,6 @@
 | 
			
		||||
    "version": "v1.6.1",
 | 
			
		||||
    "date": "2025-03-15T17:29:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "OliveTin/OliveTin",
 | 
			
		||||
    "version": "2025.3.28",
 | 
			
		||||
    "date": "2025-03-29T00:18:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homarr-labs/homarr",
 | 
			
		||||
    "version": "v1.13.1",
 | 
			
		||||
    "date": "2025-03-28T21:58:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TasmoAdmin/TasmoAdmin",
 | 
			
		||||
    "version": "v4.2.3",
 | 
			
		||||
@@ -354,11 +549,6 @@
 | 
			
		||||
    "version": "v4.5.0",
 | 
			
		||||
    "date": "2025-03-28T19:02:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Brandawg93/PeaNUT",
 | 
			
		||||
    "version": "v5.6.1",
 | 
			
		||||
    "date": "2025-03-28T18:40:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "louislam/uptime-kuma",
 | 
			
		||||
    "version": "2.0.0-beta.2-temp",
 | 
			
		||||
@@ -369,11 +559,6 @@
 | 
			
		||||
    "version": "e5.9.0-beta.2",
 | 
			
		||||
    "date": "2025-03-28T15:06:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "goauthentik/authentik",
 | 
			
		||||
    "version": "version/2025.2.3",
 | 
			
		||||
    "date": "2025-03-28T14:28:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hakimel/reveal.js",
 | 
			
		||||
    "version": "5.2.1",
 | 
			
		||||
@@ -384,11 +569,6 @@
 | 
			
		||||
    "version": "336.2",
 | 
			
		||||
    "date": "2025-03-28T10:16:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "YunoHost/yunohost",
 | 
			
		||||
    "version": "debian/12.0.12",
 | 
			
		||||
    "date": "2025-03-16T11:59:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gethomepage/homepage",
 | 
			
		||||
    "version": "v1.1.1",
 | 
			
		||||
@@ -409,46 +589,21 @@
 | 
			
		||||
    "version": "2025.2",
 | 
			
		||||
    "date": "2025-03-27T19:21:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "1.5.34",
 | 
			
		||||
    "date": "2025-03-27T16:17:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tailscale/tailscale",
 | 
			
		||||
    "version": "v1.82.0",
 | 
			
		||||
    "date": "2025-03-27T13:08:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zabbix/zabbix",
 | 
			
		||||
    "version": "7.2.5",
 | 
			
		||||
    "date": "2025-03-27T11:06:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "evcc-io/evcc",
 | 
			
		||||
    "version": "0.202.1",
 | 
			
		||||
    "date": "2025-03-27T08:24:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.1",
 | 
			
		||||
    "date": "2025-01-01T16:15:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openobserve/openobserve",
 | 
			
		||||
    "version": "v0.14.5-rc6",
 | 
			
		||||
    "date": "2025-03-27T05:15:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "duplicati/duplicati",
 | 
			
		||||
    "version": "v2.1.0.112-2.1.0.112_canary_2025-03-26",
 | 
			
		||||
    "date": "2025-03-26T21:04:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "prometheus/prometheus",
 | 
			
		||||
    "version": "v0.303.0-rc.0",
 | 
			
		||||
    "date": "2025-03-26T12:48:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "forgejo/forgejo",
 | 
			
		||||
    "version": "v12.0.0-dev",
 | 
			
		||||
@@ -489,11 +644,6 @@
 | 
			
		||||
    "version": "v1.6.8",
 | 
			
		||||
    "date": "2025-03-25T13:33:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.114.0",
 | 
			
		||||
    "date": "2025-03-25T07:58:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "caddyserver/caddy",
 | 
			
		||||
    "version": "v2.9.1",
 | 
			
		||||
@@ -504,26 +654,11 @@
 | 
			
		||||
    "version": "2025-03-24-r2",
 | 
			
		||||
    "date": "2025-03-24T20:52:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "go-gitea/gitea",
 | 
			
		||||
    "version": "v1.23.6",
 | 
			
		||||
    "date": "2025-03-24T20:38:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "docmost/docmost",
 | 
			
		||||
    "version": "v0.9.0",
 | 
			
		||||
    "date": "2025-03-24T18:25:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wavelog/wavelog",
 | 
			
		||||
    "version": "2.0.2",
 | 
			
		||||
    "date": "2025-03-24T12:02:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v24.8",
 | 
			
		||||
    "date": "2025-03-18T07:33:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "requarks/wiki",
 | 
			
		||||
    "version": "v2.5.307",
 | 
			
		||||
@@ -544,11 +679,6 @@
 | 
			
		||||
    "version": "v0.24.2",
 | 
			
		||||
    "date": "2025-03-23T04:01:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hoarder-app/hoarder",
 | 
			
		||||
    "version": "sdk/v0.23.0",
 | 
			
		||||
    "date": "2025-03-22T17:26:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "netbox-community/netbox",
 | 
			
		||||
    "version": "v4.2.6",
 | 
			
		||||
@@ -569,21 +699,11 @@
 | 
			
		||||
    "version": "250321-57590c48b",
 | 
			
		||||
    "date": "2025-03-21T11:48:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AdguardTeam/AdGuardHome",
 | 
			
		||||
    "version": "v0.107.59",
 | 
			
		||||
    "date": "2025-03-21T11:11:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jhuckaby/Cronicle",
 | 
			
		||||
    "version": "v0.9.77",
 | 
			
		||||
    "date": "2025-03-21T02:25:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "stonith404/pingvin-share",
 | 
			
		||||
    "version": "v1.10.4",
 | 
			
		||||
    "date": "2025-03-20T18:56:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "seanmorley15/AdventureLog",
 | 
			
		||||
    "version": "v0.9.0",
 | 
			
		||||
@@ -609,11 +729,6 @@
 | 
			
		||||
    "version": "v2.20.0",
 | 
			
		||||
    "date": "2025-03-17T22:44:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bastienwirtz/homer",
 | 
			
		||||
    "version": "v25.03.3",
 | 
			
		||||
    "date": "2025-03-17T20:55:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Kareadita/Kavita",
 | 
			
		||||
    "version": "v0.8.5.11",
 | 
			
		||||
@@ -624,11 +739,6 @@
 | 
			
		||||
    "version": "v4.0.14.2939",
 | 
			
		||||
    "date": "2025-03-17T19:12:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "inventree/InvenTree",
 | 
			
		||||
    "version": "0.17.9",
 | 
			
		||||
    "date": "2025-03-17T12:13:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "webmin/webmin",
 | 
			
		||||
    "version": "2.303",
 | 
			
		||||
@@ -639,46 +749,11 @@
 | 
			
		||||
    "version": "v1.60.0",
 | 
			
		||||
    "date": "2025-03-16T18:39:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Kozea/Radicale",
 | 
			
		||||
    "version": "v3.5.0",
 | 
			
		||||
    "date": "2025-03-16T06:05:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/wings",
 | 
			
		||||
    "version": "v1.0.0-beta10",
 | 
			
		||||
    "date": "2025-03-15T20:24:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/panel",
 | 
			
		||||
    "version": "v1.0.0-beta18",
 | 
			
		||||
    "date": "2025-03-15T20:24:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.10.2",
 | 
			
		||||
    "date": "2025-03-15T07:14:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "navidrome/navidrome",
 | 
			
		||||
    "version": "v0.55.1",
 | 
			
		||||
    "date": "2025-03-15T05:36:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.98.2",
 | 
			
		||||
    "date": "2025-03-15T02:11:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Threadfin/Threadfin",
 | 
			
		||||
    "version": "1.2.31",
 | 
			
		||||
    "date": "2025-03-14T22:04:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "paperless-ngx/paperless-ngx",
 | 
			
		||||
    "version": "v2.15.0-beta",
 | 
			
		||||
    "date": "2025-03-14T18:05:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "FlowiseAI/Flowise",
 | 
			
		||||
    "version": "flowise@2.2.7-patch.1",
 | 
			
		||||
@@ -694,16 +769,6 @@
 | 
			
		||||
    "version": "1.26.1",
 | 
			
		||||
    "date": "2025-03-13T21:34:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "kimai/kimai",
 | 
			
		||||
    "version": "2.31.0",
 | 
			
		||||
    "date": "2025-03-13T17:13:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "minio/minio",
 | 
			
		||||
    "version": "RELEASE.2025-03-12T18-04-18Z",
 | 
			
		||||
    "date": "2025-03-12T18:45:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "transmission/transmission",
 | 
			
		||||
    "version": "4.0.1-beta.1",
 | 
			
		||||
@@ -734,11 +799,6 @@
 | 
			
		||||
    "version": "v0.8.2",
 | 
			
		||||
    "date": "2025-03-11T05:20:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "stackblitz-labs/bolt.diy",
 | 
			
		||||
    "version": "v0.0.7-hf1",
 | 
			
		||||
    "date": "2025-03-10T20:49:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AlexxIT/go2rtc",
 | 
			
		||||
    "version": "v1.9.9",
 | 
			
		||||
@@ -774,11 +834,6 @@
 | 
			
		||||
    "version": "v2.0.21",
 | 
			
		||||
    "date": "2025-03-06T16:24:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Dolibarr/dolibarr",
 | 
			
		||||
    "version": "21.0.0",
 | 
			
		||||
    "date": "2025-03-06T16:20:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "matze/wastebin",
 | 
			
		||||
    "version": "3.0.0",
 | 
			
		||||
@@ -799,11 +854,6 @@
 | 
			
		||||
    "version": "v0.18.0",
 | 
			
		||||
    "date": "2025-03-04T15:35:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "actualbudget/actual",
 | 
			
		||||
    "version": "v25.3.1",
 | 
			
		||||
    "date": "2025-03-03T02:05:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "heiher/hev-socks5-server",
 | 
			
		||||
    "version": "2.8.0",
 | 
			
		||||
@@ -854,21 +904,6 @@
 | 
			
		||||
    "version": "v1.1.05",
 | 
			
		||||
    "date": "2025-02-24T11:53:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Athou/commafeed",
 | 
			
		||||
    "version": "5.6.1",
 | 
			
		||||
    "date": "2025-02-23T20:39:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TechnitiumSoftware/DnsServer",
 | 
			
		||||
    "version": "v13.4.3",
 | 
			
		||||
    "date": "2025-02-23T11:08:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "azukaar/Cosmos-Server",
 | 
			
		||||
    "version": "v0.18.3",
 | 
			
		||||
    "date": "2025-02-21T20:51:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "prometheus-pve/prometheus-pve-exporter",
 | 
			
		||||
    "version": "v3.5.2",
 | 
			
		||||
@@ -889,11 +924,6 @@
 | 
			
		||||
    "version": "REL_13_20",
 | 
			
		||||
    "date": "2025-02-17T21:17:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jellyfin/jellyfin",
 | 
			
		||||
    "version": "v10.10.6",
 | 
			
		||||
    "date": "2025-02-16T21:55:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sbondCo/Watcharr",
 | 
			
		||||
    "version": "v2.0.2",
 | 
			
		||||
@@ -959,11 +989,6 @@
 | 
			
		||||
    "version": "v1.11.3",
 | 
			
		||||
    "date": "2025-02-07T19:29:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/cassandra",
 | 
			
		||||
    "version": "cassandra-4.0.17",
 | 
			
		||||
    "date": "2025-02-07T10:38:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/tika",
 | 
			
		||||
    "version": "2.9.3",
 | 
			
		||||
@@ -984,11 +1009,6 @@
 | 
			
		||||
    "version": "r8.0.5-rc1",
 | 
			
		||||
    "date": "2025-02-04T20:35:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "thomiceli/opengist",
 | 
			
		||||
    "version": "v1.9.1",
 | 
			
		||||
    "date": "2025-02-04T20:24:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Forceu/Gokapi",
 | 
			
		||||
    "version": "v1.9.6",
 | 
			
		||||
@@ -1034,11 +1054,6 @@
 | 
			
		||||
    "version": "0.17.1",
 | 
			
		||||
    "date": "2025-01-15T19:13:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "linkwarden/linkwarden",
 | 
			
		||||
    "version": "v2.9.3",
 | 
			
		||||
    "date": "2025-01-13T16:19:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Tautulli/Tautulli",
 | 
			
		||||
    "version": "v2.15.1",
 | 
			
		||||
@@ -1139,11 +1154,6 @@
 | 
			
		||||
    "version": "v2024.10.22-7ca5933",
 | 
			
		||||
    "date": "2024-10-22T09:58:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "NLnetLabs/unbound",
 | 
			
		||||
    "version": "release-1.22.0",
 | 
			
		||||
    "date": "2024-10-17T08:43:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Notifiarr/notifiarr",
 | 
			
		||||
    "version": "v0.8.3",
 | 
			
		||||
@@ -1164,11 +1174,6 @@
 | 
			
		||||
    "version": "v0.8.13",
 | 
			
		||||
    "date": "2024-07-29T12:54:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Paymenter/Paymenter",
 | 
			
		||||
    "version": "v0.9.5",
 | 
			
		||||
    "date": "2024-07-20T08:46:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hywax/mafl",
 | 
			
		||||
    "version": "v0.15.4",
 | 
			
		||||
@@ -1234,11 +1239,6 @@
 | 
			
		||||
    "version": "2.0.16",
 | 
			
		||||
    "date": "2024-01-18T16:11:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wger-project/wger",
 | 
			
		||||
    "version": "2.2",
 | 
			
		||||
    "date": "2023-12-06T12:08:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "deepch/RTSPtoWeb",
 | 
			
		||||
    "version": "v2.4.3",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +1,37 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Webmin System Administration",
 | 
			
		||||
    "slug": "webmin",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 10000,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://webmin.com/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/webmin.svg",
 | 
			
		||||
    "description": "Webmin provides a graphical user interface (GUI) for tasks such as user account management, package management, file system configuration, network configuration, and more.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "misc/webmin.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": null,
 | 
			
		||||
                "ram": null,
 | 
			
		||||
                "hdd": null,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": "root",
 | 
			
		||||
        "password": "root"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within an existing LXC Console",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
  "name": "Webmin System Administration",
 | 
			
		||||
  "slug": "webmin",
 | 
			
		||||
  "categories": [1],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 10000,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://webmin.com/",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/webmin.svg",
 | 
			
		||||
  "description": "Webmin provides a graphical user interface (GUI) for tasks such as user account management, package management, file system configuration, network configuration, and more.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/addon/webmin.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": "root",
 | 
			
		||||
    "password": "root"
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within an existing LXC Console",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
"use client";
 | 
			
		||||
 | 
			
		||||
import React, { useEffect, useState } from "react";
 | 
			
		||||
import { useRouter } from "next/navigation";
 | 
			
		||||
import { Card, CardContent } from "@/components/ui/card";
 | 
			
		||||
import { Button } from "@/components/ui/button";
 | 
			
		||||
import { Badge } from "@/components/ui/badge";
 | 
			
		||||
import { ChevronLeft, ChevronRight } from "lucide-react";
 | 
			
		||||
import { Button } from "@/components/ui/button";
 | 
			
		||||
import { Card, CardContent } from "@/components/ui/card";
 | 
			
		||||
import { Category } from "@/lib/types";
 | 
			
		||||
import { ChevronLeft, ChevronRight } from "lucide-react";
 | 
			
		||||
import { useRouter } from "next/navigation";
 | 
			
		||||
import React, { useEffect, useState } from "react";
 | 
			
		||||
 | 
			
		||||
const defaultLogo = "/default-logo.png"; // Fallback logo path
 | 
			
		||||
const MAX_DESCRIPTION_LENGTH = 100; // Set max length for description
 | 
			
		||||
@@ -17,11 +17,11 @@ const formattedBadge = (type: string) => {
 | 
			
		||||
    case "vm":
 | 
			
		||||
      return <Badge className="text-blue-500/75 border-blue-500/75 badge">VM</Badge>;
 | 
			
		||||
    case "ct":
 | 
			
		||||
      return (
 | 
			
		||||
        <Badge className="text-yellow-500/75 border-yellow-500/75 badge">LXC</Badge>
 | 
			
		||||
      );
 | 
			
		||||
    case "misc":
 | 
			
		||||
      return <Badge className="text-green-500/75 border-green-500/75 badge">MISC</Badge>;
 | 
			
		||||
      return <Badge className="text-yellow-500/75 border-yellow-500/75 badge">LXC</Badge>;
 | 
			
		||||
    case "pve":
 | 
			
		||||
      return <Badge className="text-orange-500/75 border-orange-500/75 badge">PVE</Badge>;
 | 
			
		||||
    case "addon":
 | 
			
		||||
      return <Badge className="text-green-500/75 border-green-500/75 badge">ADDON</Badge>;
 | 
			
		||||
  }
 | 
			
		||||
  return null;
 | 
			
		||||
};
 | 
			
		||||
@@ -100,9 +100,7 @@ const CategoryView = () => {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const truncateDescription = (text: string) => {
 | 
			
		||||
    return text.length > MAX_DESCRIPTION_LENGTH
 | 
			
		||||
      ? `${text.slice(0, MAX_DESCRIPTION_LENGTH)}...`
 | 
			
		||||
      : text;
 | 
			
		||||
    return text.length > MAX_DESCRIPTION_LENGTH ? `${text.slice(0, MAX_DESCRIPTION_LENGTH)}...` : text;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const renderResources = (script: any) => {
 | 
			
		||||
@@ -111,9 +109,24 @@ const CategoryView = () => {
 | 
			
		||||
    const hdd = script.install_methods[0]?.resources.hdd;
 | 
			
		||||
 | 
			
		||||
    const resourceParts = [];
 | 
			
		||||
    if (cpu) resourceParts.push(<span key="cpu"><b>CPU:</b> {cpu}vCPU</span>);
 | 
			
		||||
    if (ram) resourceParts.push(<span key="ram"><b>RAM:</b> {ram}MB</span>);
 | 
			
		||||
    if (hdd) resourceParts.push(<span key="hdd"><b>HDD:</b> {hdd}GB</span>);
 | 
			
		||||
    if (cpu)
 | 
			
		||||
      resourceParts.push(
 | 
			
		||||
        <span key="cpu">
 | 
			
		||||
          <b>CPU:</b> {cpu}vCPU
 | 
			
		||||
        </span>,
 | 
			
		||||
      );
 | 
			
		||||
    if (ram)
 | 
			
		||||
      resourceParts.push(
 | 
			
		||||
        <span key="ram">
 | 
			
		||||
          <b>RAM:</b> {ram}MB
 | 
			
		||||
        </span>,
 | 
			
		||||
      );
 | 
			
		||||
    if (hdd)
 | 
			
		||||
      resourceParts.push(
 | 
			
		||||
        <span key="hdd">
 | 
			
		||||
          <b>HDD:</b> {hdd}GB
 | 
			
		||||
        </span>,
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
    return resourceParts.length > 0 ? (
 | 
			
		||||
      <div className="text-sm text-gray-400">
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
import { Button } from "@/components/ui/button";
 | 
			
		||||
import { Input } from "@/components/ui/input";
 | 
			
		||||
import {
 | 
			
		||||
  Select,
 | 
			
		||||
  SelectContent,
 | 
			
		||||
  SelectItem,
 | 
			
		||||
  SelectTrigger,
 | 
			
		||||
  SelectValue,
 | 
			
		||||
} from "@/components/ui/select";
 | 
			
		||||
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
 | 
			
		||||
import { OperatingSystems } from "@/config/siteConfig";
 | 
			
		||||
import { PlusCircle, Trash2 } from "lucide-react";
 | 
			
		||||
import { memo, useCallback, useRef } from "react";
 | 
			
		||||
@@ -20,21 +14,29 @@ type InstallMethodProps = {
 | 
			
		||||
  setZodErrors: (zodErrors: z.ZodError | null) => void;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function InstallMethod({
 | 
			
		||||
  script,
 | 
			
		||||
  setScript,
 | 
			
		||||
  setIsValid,
 | 
			
		||||
  setZodErrors,
 | 
			
		||||
}: InstallMethodProps) {
 | 
			
		||||
function InstallMethod({ script, setScript, setIsValid, setZodErrors }: InstallMethodProps) {
 | 
			
		||||
  const cpuRefs = useRef<(HTMLInputElement | null)[]>([]);
 | 
			
		||||
  const ramRefs = useRef<(HTMLInputElement | null)[]>([]);
 | 
			
		||||
  const hddRefs = useRef<(HTMLInputElement | null)[]>([]);
 | 
			
		||||
 | 
			
		||||
  const addInstallMethod = useCallback(() => {
 | 
			
		||||
    setScript((prev) => {
 | 
			
		||||
      const { type, slug } = prev;
 | 
			
		||||
      const newMethodType = "default";
 | 
			
		||||
 | 
			
		||||
      let scriptPath = "";
 | 
			
		||||
 | 
			
		||||
      if (type === "pve") {
 | 
			
		||||
        scriptPath = `tools/pve/${slug}.sh`;
 | 
			
		||||
      } else if (type === "addon") {
 | 
			
		||||
        scriptPath = `tools/addon/${slug}.sh`;
 | 
			
		||||
      } else {
 | 
			
		||||
        scriptPath = `${type}/${slug}.sh`;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const method = InstallMethodSchema.parse({
 | 
			
		||||
        type: "default",
 | 
			
		||||
        script: `${prev.type}/${prev.slug}.sh`,
 | 
			
		||||
        type: newMethodType,
 | 
			
		||||
        script: scriptPath,
 | 
			
		||||
        resources: {
 | 
			
		||||
          cpu: null,
 | 
			
		||||
          ram: null,
 | 
			
		||||
@@ -43,6 +45,7 @@ function InstallMethod({
 | 
			
		||||
          version: null,
 | 
			
		||||
        },
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      return {
 | 
			
		||||
        ...prev,
 | 
			
		||||
        install_methods: [...prev.install_methods, method],
 | 
			
		||||
@@ -63,9 +66,7 @@ function InstallMethod({
 | 
			
		||||
 | 
			
		||||
            if (key === "type") {
 | 
			
		||||
              updatedMethod.script =
 | 
			
		||||
                value === "alpine"
 | 
			
		||||
                  ? `${prev.type}/alpine-${prev.slug}.sh`
 | 
			
		||||
                  : `${prev.type}/${prev.slug}.sh`;
 | 
			
		||||
                value === "alpine" ? `${prev.type}/alpine-${prev.slug}.sh` : `${prev.type}/${prev.slug}.sh`;
 | 
			
		||||
 | 
			
		||||
              // Set OS to Alpine and reset version if type is alpine
 | 
			
		||||
              if (value === "alpine") {
 | 
			
		||||
@@ -112,10 +113,7 @@ function InstallMethod({
 | 
			
		||||
      <h3 className="text-xl font-semibold">Install Methods</h3>
 | 
			
		||||
      {script.install_methods.map((method, index) => (
 | 
			
		||||
        <div key={index} className="space-y-2 border p-4 rounded">
 | 
			
		||||
          <Select
 | 
			
		||||
            value={method.type}
 | 
			
		||||
            onValueChange={(value) => updateInstallMethod(index, "type", value)}
 | 
			
		||||
          >
 | 
			
		||||
          <Select value={method.type} onValueChange={(value) => updateInstallMethod(index, "type", value)}>
 | 
			
		||||
            <SelectTrigger>
 | 
			
		||||
              <SelectValue placeholder="Type" />
 | 
			
		||||
            </SelectTrigger>
 | 
			
		||||
@@ -205,9 +203,7 @@ function InstallMethod({
 | 
			
		||||
                <SelectValue placeholder="Version" />
 | 
			
		||||
              </SelectTrigger>
 | 
			
		||||
              <SelectContent>
 | 
			
		||||
                {OperatingSystems.find(
 | 
			
		||||
                  (os) => os.name === method.resources.os,
 | 
			
		||||
                )?.versions.map((version) => (
 | 
			
		||||
                {OperatingSystems.find((os) => os.name === method.resources.os)?.versions.map((version) => (
 | 
			
		||||
                  <SelectItem key={version.slug} value={version.name}>
 | 
			
		||||
                    {version.name}
 | 
			
		||||
                  </SelectItem>
 | 
			
		||||
@@ -215,22 +211,12 @@ function InstallMethod({
 | 
			
		||||
              </SelectContent>
 | 
			
		||||
            </Select>
 | 
			
		||||
          </div>
 | 
			
		||||
          <Button
 | 
			
		||||
            variant="destructive"
 | 
			
		||||
            size="sm"
 | 
			
		||||
            type="button"
 | 
			
		||||
            onClick={() => removeInstallMethod(index)}
 | 
			
		||||
          >
 | 
			
		||||
          <Button variant="destructive" size="sm" type="button" onClick={() => removeInstallMethod(index)}>
 | 
			
		||||
            <Trash2 className="mr-2 h-4 w-4" /> Remove Install Method
 | 
			
		||||
          </Button>
 | 
			
		||||
        </div>
 | 
			
		||||
      ))}
 | 
			
		||||
      <Button
 | 
			
		||||
        type="button"
 | 
			
		||||
        size="sm"
 | 
			
		||||
        disabled={script.install_methods.length >= 2}
 | 
			
		||||
        onClick={addInstallMethod}
 | 
			
		||||
      >
 | 
			
		||||
      <Button type="button" size="sm" disabled={script.install_methods.length >= 2} onClick={addInstallMethod}>
 | 
			
		||||
        <PlusCircle className="mr-2 h-4 w-4" /> Add Install Method
 | 
			
		||||
      </Button>
 | 
			
		||||
    </>
 | 
			
		||||
 
 | 
			
		||||
@@ -24,8 +24,8 @@ export const ScriptSchema = z.object({
 | 
			
		||||
  slug: z.string().min(1, "Slug is required"),
 | 
			
		||||
  categories: z.array(z.number()),
 | 
			
		||||
  date_created: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").min(1, "Date is required"),
 | 
			
		||||
  type: z.enum(["vm", "ct", "misc", "turnkey"], {
 | 
			
		||||
    errorMap: () => ({ message: "Type must be either 'vm', 'ct', 'misc' or 'turnkey'" })
 | 
			
		||||
  type: z.enum(["vm", "ct", "pve", "addon", "turnkey"], {
 | 
			
		||||
    errorMap: () => ({ message: "Type must be either 'vm', 'ct', 'pve', 'addon' or 'turnkey'" })
 | 
			
		||||
  }),
 | 
			
		||||
  updateable: z.boolean(),
 | 
			
		||||
  privileged: z.boolean(),
 | 
			
		||||
 
 | 
			
		||||
@@ -5,18 +5,8 @@ import { Button } from "@/components/ui/button";
 | 
			
		||||
import { Calendar } from "@/components/ui/calendar";
 | 
			
		||||
import { Input } from "@/components/ui/input";
 | 
			
		||||
import { Label } from "@/components/ui/label";
 | 
			
		||||
import {
 | 
			
		||||
  Popover,
 | 
			
		||||
  PopoverContent,
 | 
			
		||||
  PopoverTrigger,
 | 
			
		||||
} from "@/components/ui/popover";
 | 
			
		||||
import {
 | 
			
		||||
  Select,
 | 
			
		||||
  SelectContent,
 | 
			
		||||
  SelectItem,
 | 
			
		||||
  SelectTrigger,
 | 
			
		||||
  SelectValue,
 | 
			
		||||
} from "@/components/ui/select";
 | 
			
		||||
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
 | 
			
		||||
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
 | 
			
		||||
import { Switch } from "@/components/ui/switch";
 | 
			
		||||
import { Textarea } from "@/components/ui/textarea";
 | 
			
		||||
import { fetchCategories } from "@/lib/data";
 | 
			
		||||
@@ -66,29 +56,37 @@ export default function JSONGenerator() {
 | 
			
		||||
      .catch((error) => console.error("Error fetching categories:", error));
 | 
			
		||||
  }, []);
 | 
			
		||||
 | 
			
		||||
  const updateScript = useCallback(
 | 
			
		||||
    (key: keyof Script, value: Script[keyof Script]) => {
 | 
			
		||||
      setScript((prev) => {
 | 
			
		||||
        const updated = { ...prev, [key]: value };
 | 
			
		||||
  const updateScript = useCallback((key: keyof Script, value: Script[keyof Script]) => {
 | 
			
		||||
    setScript((prev) => {
 | 
			
		||||
      const updated = { ...prev, [key]: value };
 | 
			
		||||
 | 
			
		||||
        if (key === "type" || key === "slug") {
 | 
			
		||||
          updated.install_methods = updated.install_methods.map((method) => ({
 | 
			
		||||
      if (updated.slug && updated.type) {
 | 
			
		||||
        updated.install_methods = updated.install_methods.map((method) => {
 | 
			
		||||
          let scriptPath = "";
 | 
			
		||||
 | 
			
		||||
          if (updated.type === "pve") {
 | 
			
		||||
            scriptPath = `tools/pve/${updated.slug}.sh`;
 | 
			
		||||
          } else if (updated.type === "addon") {
 | 
			
		||||
            scriptPath = `tools/addon/${updated.slug}.sh`;
 | 
			
		||||
          } else if (method.type === "alpine") {
 | 
			
		||||
            scriptPath = `${updated.type}/alpine-${updated.slug}.sh`;
 | 
			
		||||
          } else {
 | 
			
		||||
            scriptPath = `${updated.type}/${updated.slug}.sh`;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          return {
 | 
			
		||||
            ...method,
 | 
			
		||||
            script:
 | 
			
		||||
              method.type === "alpine"
 | 
			
		||||
                ? `${updated.type}/alpine-${updated.slug}.sh`
 | 
			
		||||
                : `${updated.type}/${updated.slug}.sh`,
 | 
			
		||||
          }));
 | 
			
		||||
        }
 | 
			
		||||
            script: scriptPath,
 | 
			
		||||
          };
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
        const result = ScriptSchema.safeParse(updated);
 | 
			
		||||
        setIsValid(result.success);
 | 
			
		||||
        setZodErrors(result.success ? null : result.error);
 | 
			
		||||
        return updated;
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    [],
 | 
			
		||||
  );
 | 
			
		||||
      const result = ScriptSchema.safeParse(updated);
 | 
			
		||||
      setIsValid(result.success);
 | 
			
		||||
      setZodErrors(result.success ? null : result.error);
 | 
			
		||||
      return updated;
 | 
			
		||||
    });
 | 
			
		||||
  }, []);
 | 
			
		||||
 | 
			
		||||
  const handleCopy = useCallback(() => {
 | 
			
		||||
    navigator.clipboard.writeText(JSON.stringify(script, null, 2));
 | 
			
		||||
@@ -101,13 +99,13 @@ export default function JSONGenerator() {
 | 
			
		||||
    const jsonString = JSON.stringify(script, null, 2);
 | 
			
		||||
    const blob = new Blob([jsonString], { type: "application/json" });
 | 
			
		||||
    const url = URL.createObjectURL(blob);
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
    const a = document.createElement("a");
 | 
			
		||||
    a.href = url;
 | 
			
		||||
    a.download = `${script.slug || "script"}.json`;
 | 
			
		||||
    document.body.appendChild(a);
 | 
			
		||||
    a.click();
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
    URL.revokeObjectURL(url);
 | 
			
		||||
    document.body.removeChild(a);
 | 
			
		||||
  }, [script]);
 | 
			
		||||
@@ -120,16 +118,13 @@ export default function JSONGenerator() {
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  const formattedDate = useMemo(
 | 
			
		||||
    () =>
 | 
			
		||||
      script.date_created ? format(script.date_created, "PPP") : undefined,
 | 
			
		||||
    () => (script.date_created ? format(script.date_created, "PPP") : undefined),
 | 
			
		||||
    [script.date_created],
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  const validationAlert = useMemo(
 | 
			
		||||
    () => (
 | 
			
		||||
      <Alert
 | 
			
		||||
        className={cn("text-black", isValid ? "bg-green-100" : "bg-red-100")}
 | 
			
		||||
      >
 | 
			
		||||
      <Alert className={cn("text-black", isValid ? "bg-green-100" : "bg-red-100")}>
 | 
			
		||||
        <AlertTitle>{isValid ? "Valid JSON" : "Invalid JSON"}</AlertTitle>
 | 
			
		||||
        <AlertDescription>
 | 
			
		||||
          {isValid
 | 
			
		||||
@@ -160,21 +155,13 @@ export default function JSONGenerator() {
 | 
			
		||||
              <Label>
 | 
			
		||||
                Name <span className="text-red-500">*</span>
 | 
			
		||||
              </Label>
 | 
			
		||||
              <Input
 | 
			
		||||
                placeholder="Example"
 | 
			
		||||
                value={script.name}
 | 
			
		||||
                onChange={(e) => updateScript("name", e.target.value)}
 | 
			
		||||
              />
 | 
			
		||||
              <Input placeholder="Example" value={script.name} onChange={(e) => updateScript("name", e.target.value)} />
 | 
			
		||||
            </div>
 | 
			
		||||
            <div>
 | 
			
		||||
              <Label>
 | 
			
		||||
                Slug <span className="text-red-500">*</span>
 | 
			
		||||
              </Label>
 | 
			
		||||
              <Input
 | 
			
		||||
                placeholder="example"
 | 
			
		||||
                value={script.slug}
 | 
			
		||||
                onChange={(e) => updateScript("slug", e.target.value)}
 | 
			
		||||
              />
 | 
			
		||||
              <Input placeholder="example" value={script.slug} onChange={(e) => updateScript("slug", e.target.value)} />
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div>
 | 
			
		||||
@@ -197,11 +184,7 @@ export default function JSONGenerator() {
 | 
			
		||||
              onChange={(e) => updateScript("description", e.target.value)}
 | 
			
		||||
            />
 | 
			
		||||
          </div>
 | 
			
		||||
          <Categories
 | 
			
		||||
            script={script}
 | 
			
		||||
            setScript={setScript}
 | 
			
		||||
            categories={categories}
 | 
			
		||||
          />
 | 
			
		||||
          <Categories script={script} setScript={setScript} categories={categories} />
 | 
			
		||||
          <div className="flex gap-2">
 | 
			
		||||
            <div className="flex flex-col gap-2 w-full">
 | 
			
		||||
              <Label>Date Created</Label>
 | 
			
		||||
@@ -209,10 +192,7 @@ export default function JSONGenerator() {
 | 
			
		||||
                <PopoverTrigger asChild className="flex-1">
 | 
			
		||||
                  <Button
 | 
			
		||||
                    variant={"outline"}
 | 
			
		||||
                    className={cn(
 | 
			
		||||
                      "pl-3 text-left font-normal w-full",
 | 
			
		||||
                      !script.date_created && "text-muted-foreground",
 | 
			
		||||
                    )}
 | 
			
		||||
                    className={cn("pl-3 text-left font-normal w-full", !script.date_created && "text-muted-foreground")}
 | 
			
		||||
                  >
 | 
			
		||||
                    {formattedDate || <span>Pick a date</span>}
 | 
			
		||||
                    <CalendarIcon className="ml-auto h-4 w-4 opacity-50" />
 | 
			
		||||
@@ -230,38 +210,26 @@ export default function JSONGenerator() {
 | 
			
		||||
            </div>
 | 
			
		||||
            <div className="flex flex-col gap-2 w-full">
 | 
			
		||||
              <Label>Type</Label>
 | 
			
		||||
              <Select
 | 
			
		||||
                value={script.type}
 | 
			
		||||
                onValueChange={(value) => updateScript("type", value)}
 | 
			
		||||
              >
 | 
			
		||||
              <Select value={script.type} onValueChange={(value) => updateScript("type", value)}>
 | 
			
		||||
                <SelectTrigger className="flex-1">
 | 
			
		||||
                  <SelectValue placeholder="Type" />
 | 
			
		||||
                </SelectTrigger>
 | 
			
		||||
                <SelectContent>
 | 
			
		||||
                  <SelectItem value="ct">LXC Container</SelectItem>
 | 
			
		||||
                  <SelectItem value="vm">Virtual Machine</SelectItem>
 | 
			
		||||
                  <SelectItem value="misc">Miscellaneous</SelectItem>
 | 
			
		||||
                  <SelectItem value="pve">PVE-Tool</SelectItem>
 | 
			
		||||
                  <SelectItem value="addon">Add-On</SelectItem>
 | 
			
		||||
                </SelectContent>
 | 
			
		||||
              </Select>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div className="w-full flex gap-5">
 | 
			
		||||
            <div className="flex items-center space-x-2">
 | 
			
		||||
              <Switch
 | 
			
		||||
                checked={script.updateable}
 | 
			
		||||
                onCheckedChange={(checked) =>
 | 
			
		||||
                  updateScript("updateable", checked)
 | 
			
		||||
                }
 | 
			
		||||
              />
 | 
			
		||||
              <Switch checked={script.updateable} onCheckedChange={(checked) => updateScript("updateable", checked)} />
 | 
			
		||||
              <label>Updateable</label>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div className="flex items-center space-x-2">
 | 
			
		||||
              <Switch
 | 
			
		||||
                checked={script.privileged}
 | 
			
		||||
                onCheckedChange={(checked) =>
 | 
			
		||||
                  updateScript("privileged", checked)
 | 
			
		||||
                }
 | 
			
		||||
              />
 | 
			
		||||
              <Switch checked={script.privileged} onCheckedChange={(checked) => updateScript("privileged", checked)} />
 | 
			
		||||
              <label>Privileged</label>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
@@ -269,12 +237,7 @@ export default function JSONGenerator() {
 | 
			
		||||
            placeholder="Interface Port"
 | 
			
		||||
            type="number"
 | 
			
		||||
            value={script.interface_port || ""}
 | 
			
		||||
            onChange={(e) =>
 | 
			
		||||
              updateScript(
 | 
			
		||||
                "interface_port",
 | 
			
		||||
                e.target.value ? Number(e.target.value) : null,
 | 
			
		||||
              )
 | 
			
		||||
            }
 | 
			
		||||
            onChange={(e) => updateScript("interface_port", e.target.value ? Number(e.target.value) : null)}
 | 
			
		||||
          />
 | 
			
		||||
          <div className="flex gap-2">
 | 
			
		||||
            <Input
 | 
			
		||||
@@ -285,17 +248,10 @@ export default function JSONGenerator() {
 | 
			
		||||
            <Input
 | 
			
		||||
              placeholder="Documentation URL"
 | 
			
		||||
              value={script.documentation || ""}
 | 
			
		||||
              onChange={(e) =>
 | 
			
		||||
                updateScript("documentation", e.target.value || null)
 | 
			
		||||
              }
 | 
			
		||||
              onChange={(e) => updateScript("documentation", e.target.value || null)}
 | 
			
		||||
            />
 | 
			
		||||
          </div>
 | 
			
		||||
          <InstallMethod
 | 
			
		||||
            script={script}
 | 
			
		||||
            setScript={setScript}
 | 
			
		||||
            setIsValid={setIsValid}
 | 
			
		||||
            setZodErrors={setZodErrors}
 | 
			
		||||
          />
 | 
			
		||||
          <InstallMethod script={script} setScript={setScript} setIsValid={setIsValid} setZodErrors={setZodErrors} />
 | 
			
		||||
          <h3 className="text-xl font-semibold">Default Credentials</h3>
 | 
			
		||||
          <Input
 | 
			
		||||
            placeholder="Username"
 | 
			
		||||
@@ -317,34 +273,21 @@ export default function JSONGenerator() {
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          />
 | 
			
		||||
          <Note
 | 
			
		||||
            script={script}
 | 
			
		||||
            setScript={setScript}
 | 
			
		||||
            setIsValid={setIsValid}
 | 
			
		||||
            setZodErrors={setZodErrors}
 | 
			
		||||
          />
 | 
			
		||||
          <Note script={script} setScript={setScript} setIsValid={setIsValid} setZodErrors={setZodErrors} />
 | 
			
		||||
        </form>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div className="w-1/2 p-4 bg-background overflow-y-auto">
 | 
			
		||||
        {validationAlert}
 | 
			
		||||
        <div className="relative">
 | 
			
		||||
          <div className="absolute right-2 top-2 flex gap-1">
 | 
			
		||||
            <Button
 | 
			
		||||
              size="icon"
 | 
			
		||||
              variant="outline"
 | 
			
		||||
              onClick={handleCopy}
 | 
			
		||||
            >
 | 
			
		||||
            <Button size="icon" variant="outline" onClick={handleCopy}>
 | 
			
		||||
              {isCopied ? <Check className="h-4 w-4" /> : <Clipboard className="h-4 w-4" />}
 | 
			
		||||
            </Button>
 | 
			
		||||
            <Button
 | 
			
		||||
              size="icon"
 | 
			
		||||
              variant="outline"
 | 
			
		||||
              onClick={handleDownload}
 | 
			
		||||
            >
 | 
			
		||||
            <Button size="icon" variant="outline" onClick={handleDownload}>
 | 
			
		||||
              <Download className="h-4 w-4" />
 | 
			
		||||
            </Button>
 | 
			
		||||
          </div>
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
          <pre className="mt-4 p-4 bg-secondary rounded shadow overflow-x-scroll">
 | 
			
		||||
            {JSON.stringify(script, null, 2)}
 | 
			
		||||
          </pre>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
"use client";
 | 
			
		||||
import FAQ from "@/components/FAQ";
 | 
			
		||||
import AnimatedGradientText from "@/components/ui/animated-gradient-text";
 | 
			
		||||
import { Button } from "@/components/ui/button";
 | 
			
		||||
import { CardFooter } from "@/components/ui/card";
 | 
			
		||||
@@ -34,104 +35,109 @@ export default function Page() {
 | 
			
		||||
  }, [theme]);
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
			<div className="w-full mt-16">
 | 
			
		||||
				<Particles
 | 
			
		||||
					className="absolute inset-0 -z-40"
 | 
			
		||||
					quantity={100}
 | 
			
		||||
					ease={80}
 | 
			
		||||
					color={color}
 | 
			
		||||
					refresh
 | 
			
		||||
				/>
 | 
			
		||||
				<div className="container mx-auto">
 | 
			
		||||
					<div className="flex h-[80vh] flex-col items-center justify-center gap-4 py-20 lg:py-40">
 | 
			
		||||
						<Dialog>
 | 
			
		||||
							<DialogTrigger>
 | 
			
		||||
								<div>
 | 
			
		||||
									<AnimatedGradientText>
 | 
			
		||||
										<div
 | 
			
		||||
											className={cn(
 | 
			
		||||
												`absolute inset-0 block size-full animate-gradient bg-gradient-to-r from-[#ffaa40]/50 via-[#9c40ff]/50 to-[#ffaa40]/50 bg-[length:var(--bg-size)_100%] [border-radius:inherit] [mask:linear-gradient(#fff_0_0)_content-box,linear-gradient(#fff_0_0)]`,
 | 
			
		||||
												`p-px ![mask-composite:subtract]`,
 | 
			
		||||
											)}
 | 
			
		||||
										/>
 | 
			
		||||
										❤️ <Separator className="mx-2 h-4" orientation="vertical" />
 | 
			
		||||
										<span
 | 
			
		||||
											className={cn(
 | 
			
		||||
												`animate-gradient bg-gradient-to-r from-[#ffaa40] via-[#9c40ff] to-[#ffaa40] bg-[length:var(--bg-size)_100%] bg-clip-text text-transparent`,
 | 
			
		||||
												`inline`,
 | 
			
		||||
											)}
 | 
			
		||||
										>
 | 
			
		||||
											Scripts by tteck
 | 
			
		||||
										</span>
 | 
			
		||||
									</AnimatedGradientText>
 | 
			
		||||
								</div>
 | 
			
		||||
							</DialogTrigger>
 | 
			
		||||
							<DialogContent>
 | 
			
		||||
								<DialogHeader>
 | 
			
		||||
									<DialogTitle>Thank You!</DialogTitle>
 | 
			
		||||
									<DialogDescription>
 | 
			
		||||
										A big thank you to tteck and the many contributors who have
 | 
			
		||||
										made this project possible. Your hard work is truly
 | 
			
		||||
										appreciated by the entire Proxmox community!
 | 
			
		||||
									</DialogDescription>
 | 
			
		||||
								</DialogHeader>
 | 
			
		||||
								<CardFooter className="flex flex-col gap-2">
 | 
			
		||||
									<Button className="w-full" variant="outline" asChild>
 | 
			
		||||
										<a
 | 
			
		||||
											href="https://github.com/tteck"
 | 
			
		||||
											target="_blank"
 | 
			
		||||
											rel="noopener noreferrer"
 | 
			
		||||
											className="flex items-center justify-center"
 | 
			
		||||
										>
 | 
			
		||||
											<FaGithub className="mr-2 h-4 w-4" /> Tteck's GitHub
 | 
			
		||||
										</a>
 | 
			
		||||
									</Button>
 | 
			
		||||
									<Button className="w-full" asChild>
 | 
			
		||||
										<a
 | 
			
		||||
											href={`https://github.com/community-scripts/${basePath}`}
 | 
			
		||||
											target="_blank"
 | 
			
		||||
											rel="noopener noreferrer"
 | 
			
		||||
											className="flex items-center justify-center"
 | 
			
		||||
										>
 | 
			
		||||
											<ExternalLink className="mr-2 h-4 w-4" /> Proxmox Helper
 | 
			
		||||
											Scripts
 | 
			
		||||
										</a>
 | 
			
		||||
									</Button>
 | 
			
		||||
								</CardFooter>
 | 
			
		||||
							</DialogContent>
 | 
			
		||||
						</Dialog>
 | 
			
		||||
    <>
 | 
			
		||||
      <div className="w-full mt-16">
 | 
			
		||||
        <Particles className="absolute inset-0 -z-40" quantity={100} ease={80} color={color} refresh />
 | 
			
		||||
        <div className="container mx-auto">
 | 
			
		||||
          <div className="flex h-[80vh] flex-col items-center justify-center gap-4 py-20 lg:py-40">
 | 
			
		||||
            <Dialog>
 | 
			
		||||
              <DialogTrigger>
 | 
			
		||||
                <div>
 | 
			
		||||
                  <AnimatedGradientText>
 | 
			
		||||
                    <div
 | 
			
		||||
                      className={cn(
 | 
			
		||||
                        `absolute inset-0 block size-full animate-gradient bg-gradient-to-r from-[#ffaa40]/50 via-[#9c40ff]/50 to-[#ffaa40]/50 bg-[length:var(--bg-size)_100%] [border-radius:inherit] [mask:linear-gradient(#fff_0_0)_content-box,linear-gradient(#fff_0_0)]`,
 | 
			
		||||
                        `p-px ![mask-composite:subtract]`,
 | 
			
		||||
                      )}
 | 
			
		||||
                    />
 | 
			
		||||
                    ❤️ <Separator className="mx-2 h-4" orientation="vertical" />
 | 
			
		||||
                    <span
 | 
			
		||||
                      className={cn(
 | 
			
		||||
                        `animate-gradient bg-gradient-to-r from-[#ffaa40] via-[#9c40ff] to-[#ffaa40] bg-[length:var(--bg-size)_100%] bg-clip-text text-transparent`,
 | 
			
		||||
                        `inline`,
 | 
			
		||||
                      )}
 | 
			
		||||
                    >
 | 
			
		||||
                      Scripts by tteck
 | 
			
		||||
                    </span>
 | 
			
		||||
                  </AnimatedGradientText>
 | 
			
		||||
                </div>
 | 
			
		||||
              </DialogTrigger>
 | 
			
		||||
              <DialogContent>
 | 
			
		||||
                <DialogHeader>
 | 
			
		||||
                  <DialogTitle>Thank You!</DialogTitle>
 | 
			
		||||
                  <DialogDescription>
 | 
			
		||||
                    A big thank you to tteck and the many contributors who have made this project possible. Your hard
 | 
			
		||||
                    work is truly appreciated by the entire Proxmox community!
 | 
			
		||||
                  </DialogDescription>
 | 
			
		||||
                </DialogHeader>
 | 
			
		||||
                <CardFooter className="flex flex-col gap-2">
 | 
			
		||||
                  <Button className="w-full" variant="outline" asChild>
 | 
			
		||||
                    <a
 | 
			
		||||
                      href="https://github.com/tteck"
 | 
			
		||||
                      target="_blank"
 | 
			
		||||
                      rel="noopener noreferrer"
 | 
			
		||||
                      className="flex items-center justify-center"
 | 
			
		||||
                    >
 | 
			
		||||
                      <FaGithub className="mr-2 h-4 w-4" /> Tteck's GitHub
 | 
			
		||||
                    </a>
 | 
			
		||||
                  </Button>
 | 
			
		||||
                  <Button className="w-full" asChild>
 | 
			
		||||
                    <a
 | 
			
		||||
                      href={`https://github.com/community-scripts/${basePath}`}
 | 
			
		||||
                      target="_blank"
 | 
			
		||||
                      rel="noopener noreferrer"
 | 
			
		||||
                      className="flex items-center justify-center"
 | 
			
		||||
                    >
 | 
			
		||||
                      <ExternalLink className="mr-2 h-4 w-4" /> Proxmox Helper Scripts
 | 
			
		||||
                    </a>
 | 
			
		||||
                  </Button>
 | 
			
		||||
                </CardFooter>
 | 
			
		||||
              </DialogContent>
 | 
			
		||||
            </Dialog>
 | 
			
		||||
 | 
			
		||||
						<div className="flex flex-col gap-4">
 | 
			
		||||
							<h1 className="max-w-2xl text-center text-3xl font-semibold tracking-tighter md:text-7xl">
 | 
			
		||||
								Make managing your Homelab a breeze
 | 
			
		||||
							</h1>
 | 
			
		||||
							<div className="max-w-2xl gap-2 flex flex-col text-center sm:text-lg text-sm leading-relaxed tracking-tight text-muted-foreground md:text-xl">
 | 
			
		||||
								<p>
 | 
			
		||||
									We are a community-driven initiative that simplifies the setup
 | 
			
		||||
									of Proxmox Virtual Environment (VE).
 | 
			
		||||
								</p>
 | 
			
		||||
								<p>
 | 
			
		||||
									With 300+ scripts to help you manage your{" "}
 | 
			
		||||
									<b>Proxmox VE environment</b>. Whether you're a seasoned
 | 
			
		||||
									user or a newcomer, we've got you covered.
 | 
			
		||||
								</p>
 | 
			
		||||
							</div>
 | 
			
		||||
						</div>
 | 
			
		||||
						<div className="flex flex-row gap-3">
 | 
			
		||||
							<Link href="/scripts">
 | 
			
		||||
								<Button
 | 
			
		||||
									size="lg"
 | 
			
		||||
									variant="expandIcon"
 | 
			
		||||
									Icon={CustomArrowRightIcon}
 | 
			
		||||
									iconPlacement="right"
 | 
			
		||||
									className="hover:"
 | 
			
		||||
								>
 | 
			
		||||
									View Scripts
 | 
			
		||||
								</Button>
 | 
			
		||||
							</Link>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
		);
 | 
			
		||||
            <div className="flex flex-col gap-4">
 | 
			
		||||
              <h1 className="max-w-2xl text-center text-3xl font-semibold tracking-tighter md:text-7xl">
 | 
			
		||||
                Make managing your Homelab a breeze
 | 
			
		||||
              </h1>
 | 
			
		||||
              <div className="max-w-2xl gap-2 flex flex-col text-center sm:text-lg text-sm leading-relaxed tracking-tight text-muted-foreground md:text-xl">
 | 
			
		||||
                <p>
 | 
			
		||||
                  We are a community-driven initiative that simplifies the setup of Proxmox Virtual Environment (VE).
 | 
			
		||||
                </p>
 | 
			
		||||
                <p>
 | 
			
		||||
                  With 300+ scripts to help you manage your <b>Proxmox VE environment</b>. Whether you're a seasoned
 | 
			
		||||
                  user or a newcomer, we've got you covered.
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div className="flex flex-row gap-3">
 | 
			
		||||
              <Link href="/scripts">
 | 
			
		||||
                <Button
 | 
			
		||||
                  size="lg"
 | 
			
		||||
                  variant="expandIcon"
 | 
			
		||||
                  Icon={CustomArrowRightIcon}
 | 
			
		||||
                  iconPlacement="right"
 | 
			
		||||
                  className="hover:"
 | 
			
		||||
                >
 | 
			
		||||
                  View Scripts
 | 
			
		||||
                </Button>
 | 
			
		||||
              </Link>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          {/* FAQ Section */}
 | 
			
		||||
          <div className="py-20" id="faq">
 | 
			
		||||
            <div className="max-w-4xl mx-auto px-4">
 | 
			
		||||
              <div className="text-center mb-12">
 | 
			
		||||
                <h2 className="text-3xl font-bold tracking-tighter md:text-5xl mb-4">Frequently Asked Questions</h2>
 | 
			
		||||
                <p className="text-muted-foreground text-lg">
 | 
			
		||||
                  Find answers to common questions about our Proxmox VE scripts
 | 
			
		||||
                </p>
 | 
			
		||||
              </div>
 | 
			
		||||
              <FAQ />
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ export default function ScriptAccordion({
 | 
			
		||||
      value={expandedItem}
 | 
			
		||||
      onValueChange={handleAccordionChange}
 | 
			
		||||
      collapsible
 | 
			
		||||
      className="overflow-y-scroll max-h-[calc(100vh-220px)] overflow-x-hidden mt-3 p-2"
 | 
			
		||||
      className="overflow-y-scroll max-h-[calc(100vh-225px)] overflow-x-hidden mt-3 p-2"
 | 
			
		||||
    >
 | 
			
		||||
      {items.map((category) => (
 | 
			
		||||
        <AccordionItem
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,5 @@
 | 
			
		||||
import { Button } from "@/components/ui/button";
 | 
			
		||||
import {
 | 
			
		||||
  Card,
 | 
			
		||||
  CardContent,
 | 
			
		||||
  CardDescription,
 | 
			
		||||
  CardFooter,
 | 
			
		||||
  CardHeader,
 | 
			
		||||
  CardTitle,
 | 
			
		||||
} from "@/components/ui/card";
 | 
			
		||||
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card";
 | 
			
		||||
import { basePath, mostPopularScripts } from "@/config/siteConfig";
 | 
			
		||||
import { extractDate } from "@/lib/time";
 | 
			
		||||
import { Category, Script } from "@/lib/types";
 | 
			
		||||
@@ -23,7 +16,8 @@ export const getDisplayValueFromType = (type: string) => {
 | 
			
		||||
      return "LXC";
 | 
			
		||||
    case "vm":
 | 
			
		||||
      return "VM";
 | 
			
		||||
    case "misc":
 | 
			
		||||
    case "pve":
 | 
			
		||||
    case "addon":
 | 
			
		||||
      return "";
 | 
			
		||||
    default:
 | 
			
		||||
      return "";
 | 
			
		||||
@@ -35,7 +29,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
 | 
			
		||||
 | 
			
		||||
  const latestScripts = useMemo(() => {
 | 
			
		||||
    if (!items) return [];
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    const scripts = items.flatMap((category) => category.scripts || []);
 | 
			
		||||
 | 
			
		||||
    // Filter out duplicates by slug
 | 
			
		||||
@@ -47,8 +41,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return Array.from(uniqueScriptsMap.values()).sort(
 | 
			
		||||
      (a, b) =>
 | 
			
		||||
        new Date(b.date_created).getTime() - new Date(a.date_created).getTime(),
 | 
			
		||||
      (a, b) => new Date(b.date_created).getTime() - new Date(a.date_created).getTime(),
 | 
			
		||||
    );
 | 
			
		||||
  }, [items]);
 | 
			
		||||
 | 
			
		||||
@@ -59,7 +52,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
 | 
			
		||||
  const goToPreviousPage = () => {
 | 
			
		||||
    setPage((prevPage) => prevPage - 1);
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  const startIndex = (page - 1) * ITEMS_PER_PAGE;
 | 
			
		||||
  const endIndex = page * ITEMS_PER_PAGE;
 | 
			
		||||
 | 
			
		||||
@@ -74,18 +67,12 @@ export function LatestScripts({ items }: { items: Category[] }) {
 | 
			
		||||
          <h2 className="text-lg font-semibold">Newest Scripts</h2>
 | 
			
		||||
          <div className="flex items-center justify-end gap-1">
 | 
			
		||||
            {page > 1 && (
 | 
			
		||||
              <div
 | 
			
		||||
                className="cursor-pointer select-none p-2 text-sm font-semibold"
 | 
			
		||||
                onClick={goToPreviousPage}
 | 
			
		||||
              >
 | 
			
		||||
              <div className="cursor-pointer select-none p-2 text-sm font-semibold" onClick={goToPreviousPage}>
 | 
			
		||||
                Previous
 | 
			
		||||
              </div>
 | 
			
		||||
            )}
 | 
			
		||||
            {endIndex < latestScripts.length && (
 | 
			
		||||
              <div
 | 
			
		||||
                onClick={goToNextPage}
 | 
			
		||||
                className="cursor-pointer select-none p-2 text-sm font-semibold"
 | 
			
		||||
              >
 | 
			
		||||
              <div onClick={goToNextPage} className="cursor-pointer select-none p-2 text-sm font-semibold">
 | 
			
		||||
                {page === 1 ? "More.." : "Next"}
 | 
			
		||||
              </div>
 | 
			
		||||
            )}
 | 
			
		||||
@@ -94,10 +81,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
 | 
			
		||||
      )}
 | 
			
		||||
      <div className="min-w flex w-full flex-row flex-wrap gap-4">
 | 
			
		||||
        {latestScripts.slice(startIndex, endIndex).map((script) => (
 | 
			
		||||
          <Card
 | 
			
		||||
            key={script.slug}
 | 
			
		||||
            className="min-w-[250px] flex-1 flex-grow bg-accent/30"
 | 
			
		||||
          >
 | 
			
		||||
          <Card key={script.slug} className="min-w-[250px] flex-1 flex-grow bg-accent/30">
 | 
			
		||||
            <CardHeader>
 | 
			
		||||
              <CardTitle className="flex items-center gap-3">
 | 
			
		||||
                <div className="flex h-16 w-16 min-w-16 items-center justify-center rounded-lg bg-accent p-1">
 | 
			
		||||
@@ -107,10 +91,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
 | 
			
		||||
                    height={64}
 | 
			
		||||
                    width={64}
 | 
			
		||||
                    alt=""
 | 
			
		||||
                    onError={(e) =>
 | 
			
		||||
                      ((e.currentTarget as HTMLImageElement).src =
 | 
			
		||||
                        `/${basePath}/logo.png`)
 | 
			
		||||
                    }
 | 
			
		||||
                    onError={(e) => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
 | 
			
		||||
                    className="h-11 w-11 object-contain"
 | 
			
		||||
                  />
 | 
			
		||||
                </div>
 | 
			
		||||
@@ -126,9 +107,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
 | 
			
		||||
              </CardTitle>
 | 
			
		||||
            </CardHeader>
 | 
			
		||||
            <CardContent>
 | 
			
		||||
              <CardDescription className="line-clamp-3 text-card-foreground">
 | 
			
		||||
                {script.description}
 | 
			
		||||
              </CardDescription>
 | 
			
		||||
              <CardDescription className="line-clamp-3 text-card-foreground">{script.description}</CardDescription>
 | 
			
		||||
            </CardContent>
 | 
			
		||||
            <CardFooter className="">
 | 
			
		||||
              <Button asChild variant="outline">
 | 
			
		||||
@@ -151,9 +130,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
 | 
			
		||||
 | 
			
		||||
export function MostViewedScripts({ items }: { items: Category[] }) {
 | 
			
		||||
  const mostViewedScripts = items.reduce((acc: Script[], category) => {
 | 
			
		||||
    const foundScripts = category.scripts.filter((script) =>
 | 
			
		||||
      mostPopularScripts.includes(script.slug),
 | 
			
		||||
    );
 | 
			
		||||
    const foundScripts = category.scripts.filter((script) => mostPopularScripts.includes(script.slug));
 | 
			
		||||
    return acc.concat(foundScripts);
 | 
			
		||||
  }, []);
 | 
			
		||||
 | 
			
		||||
@@ -166,10 +143,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
 | 
			
		||||
      )}
 | 
			
		||||
      <div className="min-w flex w-full flex-row flex-wrap gap-4">
 | 
			
		||||
        {mostViewedScripts.map((script) => (
 | 
			
		||||
          <Card
 | 
			
		||||
            key={script.slug}
 | 
			
		||||
            className="min-w-[250px] flex-1 flex-grow bg-accent/30"
 | 
			
		||||
          >
 | 
			
		||||
          <Card key={script.slug} className="min-w-[250px] flex-1 flex-grow bg-accent/30">
 | 
			
		||||
            <CardHeader>
 | 
			
		||||
              <CardTitle className="flex items-center gap-3">
 | 
			
		||||
                <div className="flex size-16 min-w-16 items-center justify-center rounded-lg bg-accent p-1">
 | 
			
		||||
@@ -179,10 +153,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
 | 
			
		||||
                    height={64}
 | 
			
		||||
                    width={64}
 | 
			
		||||
                    alt=""
 | 
			
		||||
                    onError={(e) =>
 | 
			
		||||
                      ((e.currentTarget as HTMLImageElement).src =
 | 
			
		||||
                        `/${basePath}/logo.png`)
 | 
			
		||||
                    }
 | 
			
		||||
                    onError={(e) => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
 | 
			
		||||
                    className="h-11 w-11 object-contain"
 | 
			
		||||
                  />
 | 
			
		||||
                </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -14,12 +14,12 @@ import { Suspense } from "react";
 | 
			
		||||
import { ResourceDisplay } from "./ResourceDisplay";
 | 
			
		||||
import { getDisplayValueFromType } from "./ScriptInfoBlocks";
 | 
			
		||||
import Alerts from "./ScriptItems/Alerts";
 | 
			
		||||
import Buttons from "./ScriptItems/Buttons";
 | 
			
		||||
import DefaultPassword from "./ScriptItems/DefaultPassword";
 | 
			
		||||
import Description from "./ScriptItems/Description";
 | 
			
		||||
import InstallCommand from "./ScriptItems/InstallCommand";
 | 
			
		||||
import Tooltips from "./ScriptItems/Tooltips";
 | 
			
		||||
import InterFaces from "./ScriptItems/InterFaces";
 | 
			
		||||
import Buttons from "./ScriptItems/Buttons";
 | 
			
		||||
import Tooltips from "./ScriptItems/Tooltips";
 | 
			
		||||
 | 
			
		||||
interface ScriptItemProps {
 | 
			
		||||
  item: Script;
 | 
			
		||||
@@ -142,7 +142,9 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
 | 
			
		||||
 | 
			
		||||
            <div className="mt-4 rounded-lg border shadow-sm">
 | 
			
		||||
              <div className="flex gap-3 px-4 py-2 bg-accent/25">
 | 
			
		||||
                <h2 className="text-lg font-semibold">How to {item.type === "misc" ? "use" : "install"}</h2>
 | 
			
		||||
                <h2 className="text-lg font-semibold">
 | 
			
		||||
                  How to {item.type === "pve" ? "use" : item.type === "addon" ? "apply" : "install"}
 | 
			
		||||
                </h2>
 | 
			
		||||
                <Tooltips item={item} />
 | 
			
		||||
              </div>
 | 
			
		||||
              <Separator />
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,17 @@ const generateInstallSourceUrl = (slug: string) => {
 | 
			
		||||
 | 
			
		||||
const generateSourceUrl = (slug: string, type: string) => {
 | 
			
		||||
  const baseUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main`;
 | 
			
		||||
  return type === "vm" ? `${baseUrl}/vm/${slug}.sh` : `${baseUrl}/misc/${slug}.sh`;
 | 
			
		||||
 | 
			
		||||
  switch (type) {
 | 
			
		||||
    case "vm":
 | 
			
		||||
      return `${baseUrl}/vm/${slug}.sh`;
 | 
			
		||||
    case "pve":
 | 
			
		||||
      return `${baseUrl}/tools/pve/${slug}.sh`;
 | 
			
		||||
    case "addon":
 | 
			
		||||
      return `${baseUrl}/tools/addon/${slug}.sh`;
 | 
			
		||||
    default:
 | 
			
		||||
      return `${baseUrl}/ct/${slug}.sh`; // fallback for "ct"
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const generateUpdateUrl = (slug: string) => {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,85 +5,73 @@ import { Script } from "@/lib/types";
 | 
			
		||||
import { getDisplayValueFromType } from "../ScriptInfoBlocks";
 | 
			
		||||
 | 
			
		||||
const getInstallCommand = (scriptPath = "", isAlpine = false) => {
 | 
			
		||||
    const url = `https://raw.githubusercontent.com/community-scripts/${basePath}/main/${scriptPath}`;
 | 
			
		||||
    return isAlpine
 | 
			
		||||
        ? `bash -c "$(curl -fsSL ${url})"`
 | 
			
		||||
        : `bash -c "$(curl -fsSL ${url})"`;
 | 
			
		||||
  const url = `https://raw.githubusercontent.com/community-scripts/${basePath}/main/${scriptPath}`;
 | 
			
		||||
  return isAlpine ? `bash -c "$(curl -fsSL ${url})"` : `bash -c "$(curl -fsSL ${url})"`;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
export default function InstallCommand({ item }: { item: Script }) {
 | 
			
		||||
    const alpineScript = item.install_methods.find(
 | 
			
		||||
        (method) => method.type === "alpine",
 | 
			
		||||
    );
 | 
			
		||||
  const alpineScript = item.install_methods.find((method) => method.type === "alpine");
 | 
			
		||||
 | 
			
		||||
    const defaultScript = item.install_methods.find(
 | 
			
		||||
        (method) => method.type === "default",
 | 
			
		||||
    );
 | 
			
		||||
  const defaultScript = item.install_methods.find((method) => method.type === "default");
 | 
			
		||||
 | 
			
		||||
    const renderInstructions = (isAlpine = false) => (
 | 
			
		||||
  const renderInstructions = (isAlpine = false) => (
 | 
			
		||||
    <>
 | 
			
		||||
      <p className="text-sm mt-2">
 | 
			
		||||
        {isAlpine ? (
 | 
			
		||||
          <>
 | 
			
		||||
            As an alternative option, you can use Alpine Linux and the {item.name} package to create a {item.name}{" "}
 | 
			
		||||
            {getDisplayValueFromType(item.type)} container with faster creation time and minimal system resource usage.
 | 
			
		||||
            You are also obliged to adhere to updates provided by the package maintainer.
 | 
			
		||||
          </>
 | 
			
		||||
        ) : item.type === "pve" ? (
 | 
			
		||||
          <>
 | 
			
		||||
            To use the {item.name} script, run the command below **only** in the Proxmox VE Shell. This script is
 | 
			
		||||
            intended for managing or enhancing the host system directly.
 | 
			
		||||
          </>
 | 
			
		||||
        ) : item.type === "addon" ? (
 | 
			
		||||
          <>
 | 
			
		||||
            This script enhances an existing setup. You can use it inside a running LXC container or directly on the
 | 
			
		||||
            Proxmox VE host to extend functionality with {item.name}.
 | 
			
		||||
          </>
 | 
			
		||||
        ) : (
 | 
			
		||||
          <>
 | 
			
		||||
            To create a new Proxmox VE {item.name} {getDisplayValueFromType(item.type)}, run the command below in the
 | 
			
		||||
            Proxmox VE Shell.
 | 
			
		||||
          </>
 | 
			
		||||
        )}
 | 
			
		||||
      </p>
 | 
			
		||||
      {isAlpine && (
 | 
			
		||||
        <p className="mt-2 text-sm">
 | 
			
		||||
          To create a new Proxmox VE Alpine-{item.name} {getDisplayValueFromType(item.type)}, run the command below in
 | 
			
		||||
          the Proxmox VE Shell.
 | 
			
		||||
        </p>
 | 
			
		||||
      )}
 | 
			
		||||
    </>
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="p-4">
 | 
			
		||||
      {alpineScript ? (
 | 
			
		||||
        <Tabs defaultValue="default" className="mt-2 w-full max-w-4xl">
 | 
			
		||||
          <TabsList>
 | 
			
		||||
            <TabsTrigger value="default">Default</TabsTrigger>
 | 
			
		||||
            <TabsTrigger value="alpine">Alpine Linux</TabsTrigger>
 | 
			
		||||
          </TabsList>
 | 
			
		||||
          <TabsContent value="default">
 | 
			
		||||
            {renderInstructions()}
 | 
			
		||||
            <CodeCopyButton>{getInstallCommand(defaultScript?.script)}</CodeCopyButton>
 | 
			
		||||
          </TabsContent>
 | 
			
		||||
          <TabsContent value="alpine">
 | 
			
		||||
            {renderInstructions(true)}
 | 
			
		||||
            <CodeCopyButton>{getInstallCommand(alpineScript.script, true)}</CodeCopyButton>
 | 
			
		||||
          </TabsContent>
 | 
			
		||||
        </Tabs>
 | 
			
		||||
      ) : defaultScript?.script ? (
 | 
			
		||||
        <>
 | 
			
		||||
            <p className="text-sm mt-2">
 | 
			
		||||
                {isAlpine ? (
 | 
			
		||||
                    <>
 | 
			
		||||
                        As an alternative option, you can use Alpine Linux and the{" "}
 | 
			
		||||
                        {item.name} package to create a {item.name}{" "}
 | 
			
		||||
                        {getDisplayValueFromType(item.type)} container with faster creation
 | 
			
		||||
                        time and minimal system resource usage. You are also obliged to
 | 
			
		||||
                        adhere to updates provided by the package maintainer.
 | 
			
		||||
                    </>
 | 
			
		||||
                ) : item.type == "misc" ? (
 | 
			
		||||
                    <>
 | 
			
		||||
                        To use the {item.name} script, run the command below in the shell.
 | 
			
		||||
                    </>
 | 
			
		||||
                ) : (
 | 
			
		||||
                    <>
 | 
			
		||||
                        {" "}
 | 
			
		||||
                        To create a new Proxmox VE {item.name}{" "}
 | 
			
		||||
                        {getDisplayValueFromType(item.type)}, run the command below in the
 | 
			
		||||
                        Proxmox VE Shell.
 | 
			
		||||
                    </>
 | 
			
		||||
                )}
 | 
			
		||||
            </p>
 | 
			
		||||
            {isAlpine && (
 | 
			
		||||
                <p className="mt-2 text-sm">
 | 
			
		||||
                    To create a new Proxmox VE Alpine-{item.name}{" "}
 | 
			
		||||
                    {getDisplayValueFromType(item.type)}, run the command below in the
 | 
			
		||||
                    Proxmox VE Shell
 | 
			
		||||
                </p>
 | 
			
		||||
            )}
 | 
			
		||||
          {renderInstructions()}
 | 
			
		||||
          <CodeCopyButton>{getInstallCommand(defaultScript.script)}</CodeCopyButton>
 | 
			
		||||
        </>
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <div className="p-4">
 | 
			
		||||
            {alpineScript ? (
 | 
			
		||||
                <Tabs defaultValue="default" className="mt-2 w-full max-w-4xl">
 | 
			
		||||
                    <TabsList>
 | 
			
		||||
                        <TabsTrigger value="default">Default</TabsTrigger>
 | 
			
		||||
                        <TabsTrigger value="alpine">Alpine Linux</TabsTrigger>
 | 
			
		||||
                    </TabsList>
 | 
			
		||||
                    <TabsContent value="default">
 | 
			
		||||
                        {renderInstructions()}
 | 
			
		||||
                        <CodeCopyButton>
 | 
			
		||||
                            {getInstallCommand(defaultScript?.script)}
 | 
			
		||||
                        </CodeCopyButton>
 | 
			
		||||
                    </TabsContent>
 | 
			
		||||
                    <TabsContent value="alpine">
 | 
			
		||||
                        {renderInstructions(true)}
 | 
			
		||||
                        <CodeCopyButton>
 | 
			
		||||
                            {getInstallCommand(alpineScript.script, true)}
 | 
			
		||||
                        </CodeCopyButton>
 | 
			
		||||
                    </TabsContent>
 | 
			
		||||
                </Tabs>
 | 
			
		||||
            ) : defaultScript?.script ? (
 | 
			
		||||
                <>
 | 
			
		||||
                    {renderInstructions()}
 | 
			
		||||
                    <CodeCopyButton>
 | 
			
		||||
                        {getInstallCommand(defaultScript.script)}
 | 
			
		||||
                    </CodeCopyButton>
 | 
			
		||||
                </>
 | 
			
		||||
            ) : null}
 | 
			
		||||
        </div>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
      ) : null}
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import {
 | 
			
		||||
  CommandItem,
 | 
			
		||||
  CommandList,
 | 
			
		||||
} from "@/components/ui/command";
 | 
			
		||||
import { basePath } from "@/config/siteConfig";
 | 
			
		||||
import { fetchCategories } from "@/lib/data";
 | 
			
		||||
import { Category } from "@/lib/types";
 | 
			
		||||
import { cn } from "@/lib/utils";
 | 
			
		||||
@@ -15,18 +16,17 @@ import React from "react";
 | 
			
		||||
import { Badge } from "./ui/badge";
 | 
			
		||||
import { Button } from "./ui/button";
 | 
			
		||||
import { DialogTitle } from "./ui/dialog";
 | 
			
		||||
import { basePath } from "@/config/siteConfig";
 | 
			
		||||
 | 
			
		||||
export const formattedBadge = (type: string) => {
 | 
			
		||||
  switch (type) {
 | 
			
		||||
    case "vm":
 | 
			
		||||
      return <Badge className="text-blue-500/75 border-blue-500/75">VM</Badge>;
 | 
			
		||||
    case "ct":
 | 
			
		||||
      return (
 | 
			
		||||
        <Badge className="text-yellow-500/75 border-yellow-500/75">LXC</Badge>
 | 
			
		||||
      );
 | 
			
		||||
    case "misc":
 | 
			
		||||
      return <Badge className="text-green-500/75 border-green-500/75">MISC</Badge>;
 | 
			
		||||
      return <Badge className="text-yellow-500/75 border-yellow-500/75">LXC</Badge>;
 | 
			
		||||
    case "pve":
 | 
			
		||||
      return <Badge className="text-orange-500/75 border-orange-500/75">PVE</Badge>;
 | 
			
		||||
    case "addon":
 | 
			
		||||
      return <Badge className="text-green-500/75 border-green-500/75">ADDON</Badge>;
 | 
			
		||||
  }
 | 
			
		||||
  return null;
 | 
			
		||||
};
 | 
			
		||||
@@ -84,14 +84,9 @@ export default function CommandMenu() {
 | 
			
		||||
        <DialogTitle className="sr-only">Search scripts</DialogTitle>
 | 
			
		||||
        <CommandInput placeholder="Search for a script..." />
 | 
			
		||||
        <CommandList>
 | 
			
		||||
          <CommandEmpty>
 | 
			
		||||
            {isLoading ? "Loading..." : "No scripts found."}
 | 
			
		||||
          </CommandEmpty>
 | 
			
		||||
          <CommandEmpty>{isLoading ? "Loading..." : "No scripts found."}</CommandEmpty>
 | 
			
		||||
          {links.map((category) => (
 | 
			
		||||
            <CommandGroup
 | 
			
		||||
              key={`category:${category.name}`}
 | 
			
		||||
              heading={category.name}
 | 
			
		||||
            >
 | 
			
		||||
            <CommandGroup key={`category:${category.name}`} heading={category.name}>
 | 
			
		||||
              {category.scripts.map((script) => (
 | 
			
		||||
                <CommandItem
 | 
			
		||||
                  key={`script:${script.slug}`}
 | 
			
		||||
@@ -104,10 +99,7 @@ export default function CommandMenu() {
 | 
			
		||||
                  <div className="flex gap-2" onClick={() => setOpen(false)}>
 | 
			
		||||
                    <Image
 | 
			
		||||
                      src={script.logo || `/${basePath}/logo.png`}
 | 
			
		||||
                      onError={(e) =>
 | 
			
		||||
                        ((e.currentTarget as HTMLImageElement).src =
 | 
			
		||||
                          `/${basePath}/logo.png`)
 | 
			
		||||
                      }
 | 
			
		||||
                      onError={(e) => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
 | 
			
		||||
                      unoptimized
 | 
			
		||||
                      width={16}
 | 
			
		||||
                      height={16}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								frontend/src/components/FAQ.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								frontend/src/components/FAQ.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
import * as AccordionPrimitive from "@radix-ui/react-accordion";
 | 
			
		||||
import { Plus } from "lucide-react";
 | 
			
		||||
import { FAQ_Items } from "../config/faqConfig";
 | 
			
		||||
import { Accordion, AccordionContent, AccordionItem } from "./ui/accordion";
 | 
			
		||||
 | 
			
		||||
export default function FAQ() {
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="space-y-4">
 | 
			
		||||
      <Accordion type="single" collapsible className="w-full">
 | 
			
		||||
        {FAQ_Items.map((item, index) => (
 | 
			
		||||
          <AccordionItem value={index.toString()} key={index} className="py-2">
 | 
			
		||||
            <AccordionPrimitive.Header className="flex">
 | 
			
		||||
              <AccordionPrimitive.Trigger className="flex flex-1 items-center gap-3 py-2 text-left text-[15px] font-semibold leading-6 transition-all [&>svg>path:last-child]:origin-center [&>svg>path:last-child]:transition-all [&>svg>path:last-child]:duration-200 [&>svg]:-order-1 [&[data-state=open]>svg>path:last-child]:rotate-90 [&[data-state=open]>svg>path:last-child]:opacity-0 [&[data-state=open]>svg]:rotate-180">
 | 
			
		||||
                {item.title}
 | 
			
		||||
                <Plus
 | 
			
		||||
                  size={16}
 | 
			
		||||
                  strokeWidth={2}
 | 
			
		||||
                  className="shrink-0 opacity-60 transition-transform duration-200"
 | 
			
		||||
                  aria-hidden="true"
 | 
			
		||||
                />
 | 
			
		||||
              </AccordionPrimitive.Trigger>
 | 
			
		||||
            </AccordionPrimitive.Header>
 | 
			
		||||
            <AccordionContent className="pb-2 ps-7 text-muted-foreground">{item.content}</AccordionContent>
 | 
			
		||||
          </AccordionItem>
 | 
			
		||||
        ))}
 | 
			
		||||
      </Accordion>
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
@@ -6,7 +6,7 @@ import { cn } from "@/lib/utils";
 | 
			
		||||
 | 
			
		||||
export default function Footer() {
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="supports-backdrop-blur:bg-background/90 mt-auto border-t w-full flex justify-between border-border bg-background/40 py-6 backdrop-blur-lg">
 | 
			
		||||
    <div className="supports-backdrop-blur:bg-background/90 mt-auto border-t w-full flex justify-between border-border bg-background/40 py-4 backdrop-blur-lg">
 | 
			
		||||
      <div className="mx-6 w-full flex justify-between text-xs sm:text-sm text-muted-foreground">
 | 
			
		||||
        <div className="flex items-center">
 | 
			
		||||
          <p>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								frontend/src/config/faqConfig.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								frontend/src/config/faqConfig.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
export const FAQ_Items = [
 | 
			
		||||
  {
 | 
			
		||||
    title: "Why do you use tarballs instead of git pull for installation?",
 | 
			
		||||
    content:
 | 
			
		||||
      "Our LXC scripts install applications using release tarballs. Tarballs contain stable code versions tested for release. Using `git pull` directly fetches the latest development code, which might be unstable or contain bugs. Tarballs offer a more reliable installation.",
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: "Why do the scripts install applications using HTTP by default?",
 | 
			
		||||
    content:
 | 
			
		||||
      "Our LXC scripts install applications using HTTP by default. Setting up HTTPS often requires manual configuration specific to your setup, which our automated scripts cannot handle reliably. If an application requires HTTPS, the script will configure it. For others, you need to enable HTTPS yourself, often following the application's official documentation.",
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: "Where can I find documentation for the installed application?",
 | 
			
		||||
    content:
 | 
			
		||||
      "We link to the official documentation for each application whenever possible. You can usually find this link on the script's information page for the specific LXC script. If you notice a missing link for an application that has official docs, please report it so we can add it.",
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: "What should I do if I find a bug in an LXC script?",
 | 
			
		||||
    content:
 | 
			
		||||
      "Our LXC scripts are maintained by volunteers in their free time. Bugs can occur due to our errors or changes in the applications themselves. If you find a bug in one of our LXC scripts, please report it on our GitHub issues page. Your feedback helps us improve the scripts.",
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: "Why isn't the application updating to the very latest version?",
 | 
			
		||||
    content:
 | 
			
		||||
      "Updates via our LXC scripts might not pull the absolute latest version for a few reasons:\n- A bug in the application's release naming on GitHub.\n- A bug in our update script.\n- We intentionally pinned the version. This happens if a newer version has breaking changes or serious bugs that could affect your data or LXC stability. We wait for fixes before allowing the update.",
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: 'Why am I getting a "502 Bad Gateway" error?',
 | 
			
		||||
    content:
 | 
			
		||||
      'A "502 Bad Gateway" error usually means the application inside the LXC is not running or responding correctly. Check the application\'s logs first. If you use a reverse proxy, check its logs too. If you still have problems after checking the logs, report the issue, providing details from the logs.',
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    title: "What should I do if a script fails during execution?",
 | 
			
		||||
    content:
 | 
			
		||||
      "If an LXC script fails, run it again using Verbose mode. Standard mode hides detailed output for neatness, showing only progress. Verbose mode displays all messages, which helps you (and us) diagnose the error. Include this verbose output if you report the issue.",
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
@@ -5,7 +5,7 @@ export type Script = {
 | 
			
		||||
  slug: string;
 | 
			
		||||
  categories: number[];
 | 
			
		||||
  date_created: string;
 | 
			
		||||
  type: "vm" | "ct" | "misc";
 | 
			
		||||
  type: "vm" | "ct" | "pve" | "addon";
 | 
			
		||||
  updateable: boolean;
 | 
			
		||||
  privileged: boolean;
 | 
			
		||||
  interface_port: number | null;
 | 
			
		||||
@@ -61,4 +61,4 @@ export interface AppVersion {
 | 
			
		||||
  name: string;
 | 
			
		||||
  version: string;
 | 
			
		||||
  date: Date;
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,8 @@ msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  tini \
 | 
			
		||||
  gpg \
 | 
			
		||||
  build-essential
 | 
			
		||||
  build-essential \
 | 
			
		||||
  git
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
@@ -33,11 +34,11 @@ $STD npm install --global yarn
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Actual Budget"
 | 
			
		||||
cd /opt
 | 
			
		||||
cd /opt || exit
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/actualbudget/actual/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/actualbudget/actual/archive/refs/tags/v${RELEASE}.tar.gz")
 | 
			
		||||
tar -xzf v${RELEASE}.tar.gz
 | 
			
		||||
mv actual-${RELEASE} /opt/actualbudget
 | 
			
		||||
tar -xzf v"${RELEASE}".tar.gz
 | 
			
		||||
mv actual-"${RELEASE}" /opt/actualbudget
 | 
			
		||||
 | 
			
		||||
mkdir -p /opt/actualbudget-data/{server-files,upload,migrate,user-files,migrations,config}
 | 
			
		||||
chown -R root:root /opt/actualbudget-data
 | 
			
		||||
@@ -53,8 +54,10 @@ ACTUAL_TRUSTED_PROXIES="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.1/32,::1
 | 
			
		||||
ACTUAL_HTTPS_KEY=/opt/actualbudget/selfhost.key
 | 
			
		||||
ACTUAL_HTTPS_CERT=/opt/actualbudget/selfhost.crt
 | 
			
		||||
EOF
 | 
			
		||||
cd /opt/actualbudget
 | 
			
		||||
$STD yarn workspaces focus @actual-app/sync-server --production
 | 
			
		||||
cd /opt/actualbudget || exit
 | 
			
		||||
export NODE_OPTIONS="--max_old_space_size=3072"
 | 
			
		||||
$STD yarn install
 | 
			
		||||
$STD yarn run build:server
 | 
			
		||||
$STD openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfhost.key -out selfhost.crt <<EOF
 | 
			
		||||
US
 | 
			
		||||
California
 | 
			
		||||
@@ -93,7 +96,7 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/v${RELEASE}.tar.gz
 | 
			
		||||
rm -rf /opt/v"${RELEASE}".tar.gz
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -15,41 +15,51 @@ update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apk add \
 | 
			
		||||
    gpg \
 | 
			
		||||
    sudo
 | 
			
		||||
  gpg \
 | 
			
		||||
  sudo
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing MariaDB"
 | 
			
		||||
$STD apk add --no-cache mariadb mariadb-client
 | 
			
		||||
$STD rc-update add mariadb default
 | 
			
		||||
$STD rc-service mariadb start
 | 
			
		||||
msg_ok "Installed MariaDB"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring MariaDB"
 | 
			
		||||
mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql >/dev/null 2>&1
 | 
			
		||||
$STD rc-service mariadb restart
 | 
			
		||||
$STD rc-service mariadb start
 | 
			
		||||
msg_ok "MariaDB Configured"
 | 
			
		||||
 | 
			
		||||
read -r -p "Would you like to install Adminer with lighthttpd? <y/N>: " prompt
 | 
			
		||||
read -r -p "Would you like to install Adminer with lighttpd? <y/N>: " prompt
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
    msg_info "Installing Adminer"
 | 
			
		||||
    $STD apk add --no-cache lighttpd php php-cgi php-mysqli php-mbstring php-zip php-gd php-json php-curl jq
 | 
			
		||||
    sed -i 's|server.modules += ( "mod_cgi" )|server.modules += ( "mod_cgi", "mod_fastcgi" )|' /etc/lighttpd/lighttpd.conf
 | 
			
		||||
    echo 'fastcgi.server += ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => "/var/run/php-cgi.sock" )))' >>/etc/lighttpd/lighttpd.conf
 | 
			
		||||
    ADMINER_VERSION=$(curl -s https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/v//')
 | 
			
		||||
    wget -q -O /var/www/adminer.php "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php"
 | 
			
		||||
    chown lighttpd:lighttpd /var/www/adminer.php
 | 
			
		||||
    chmod 755 /var/www/adminer.php
 | 
			
		||||
    msg_ok "Adminer Installed"
 | 
			
		||||
  msg_info "Installing Adminer and dependencies"
 | 
			
		||||
  $STD apk add --no-cache \
 | 
			
		||||
    lighttpd \
 | 
			
		||||
    lighttpd-openrc \
 | 
			
		||||
    php83 \
 | 
			
		||||
    php83-cgi \
 | 
			
		||||
    php83-common \
 | 
			
		||||
    php83-curl \
 | 
			
		||||
    php83-gd \
 | 
			
		||||
    php83-mbstring \
 | 
			
		||||
    php83-mysqli \
 | 
			
		||||
    php83-mysqlnd \
 | 
			
		||||
    php83-openssl \
 | 
			
		||||
    php83-zip \
 | 
			
		||||
    php83-session \
 | 
			
		||||
    jq
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Lighttpd"
 | 
			
		||||
    $STD rc-update add lighttpd default
 | 
			
		||||
    $STD rc-service lighttpd restart
 | 
			
		||||
    msg_ok "Lighttpd Started"
 | 
			
		||||
  sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf
 | 
			
		||||
  mkdir -p /var/www/localhost/htdocs
 | 
			
		||||
  ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php
 | 
			
		||||
  chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php
 | 
			
		||||
  chmod 755 /var/www/localhost/htdocs/adminer.php
 | 
			
		||||
  msg_ok "Adminer Installed"
 | 
			
		||||
 | 
			
		||||
    echo -e "Adminer is available at: ${BL}http://$(hostname -I | awk '{print $1}')/adminer${CL}"
 | 
			
		||||
else
 | 
			
		||||
    echo -e "Skipped Adminer Installation..."
 | 
			
		||||
  msg_info "Starting Lighttpd"
 | 
			
		||||
  $STD rc-update add lighttpd default
 | 
			
		||||
  $STD rc-service lighttpd restart
 | 
			
		||||
  msg_ok "Lighttpd Started"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										70
									
								
								install/alpine-postgresql-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								install/alpine-postgresql-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
#!/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: https://www.postgresql.org/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
msg_ok "Enabled PostgreSQL Service"
 | 
			
		||||
 | 
			
		||||
msg_info "Starting PostgreSQL"
 | 
			
		||||
$STD rc-service postgresql start
 | 
			
		||||
msg_ok "Started PostgreSQL"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring PostgreSQL for External Access"
 | 
			
		||||
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
 | 
			
		||||
msg_ok "Configured and Restarted PostgreSQL"
 | 
			
		||||
 | 
			
		||||
read -r -p "Would you like to install Adminer with lighttpd? <y/N>: " prompt
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Installing Adminer and dependencies"
 | 
			
		||||
  $STD apk add --no-cache \
 | 
			
		||||
    lighttpd \
 | 
			
		||||
    lighttpd-openrc \
 | 
			
		||||
    php83 \
 | 
			
		||||
    php83-cgi \
 | 
			
		||||
    php83-common \
 | 
			
		||||
    php83-curl \
 | 
			
		||||
    php83-gd \
 | 
			
		||||
    php83-mbstring \
 | 
			
		||||
    php83-pdo \
 | 
			
		||||
    php83-pgsql \
 | 
			
		||||
    php83-openssl \
 | 
			
		||||
    php83-zip \
 | 
			
		||||
    php83-session \
 | 
			
		||||
    jq
 | 
			
		||||
 | 
			
		||||
  sed -i 's|# *include "mod_fastcgi.conf"|include "mod_fastcgi.conf"|' /etc/lighttpd/lighttpd.conf
 | 
			
		||||
  mkdir -p /var/www/localhost/htdocs
 | 
			
		||||
  ADMINER_VERSION=$(curl -fsSL https://api.github.com/repos/vrana/adminer/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  curl -fsSL "https://github.com/vrana/adminer/releases/download/v${ADMINER_VERSION}/adminer-${ADMINER_VERSION}.php" -o /var/www/localhost/htdocs/adminer.php
 | 
			
		||||
  chown lighttpd:lighttpd /var/www/localhost/htdocs/adminer.php
 | 
			
		||||
  chmod 755 /var/www/localhost/htdocs/adminer.php
 | 
			
		||||
  msg_ok "Adminer Installed"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting Lighttpd"
 | 
			
		||||
  $STD rc-update add lighttpd default
 | 
			
		||||
  $STD rc-service lighttpd restart
 | 
			
		||||
  msg_ok "Lighttpd Started"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
@@ -15,20 +15,20 @@ update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apk add \
 | 
			
		||||
    newt \
 | 
			
		||||
    curl \
 | 
			
		||||
    openssh \
 | 
			
		||||
    nano \
 | 
			
		||||
    mc \
 | 
			
		||||
    gpg \
 | 
			
		||||
    iptables \
 | 
			
		||||
    openrc
 | 
			
		||||
  newt \
 | 
			
		||||
  curl \
 | 
			
		||||
  openssh \
 | 
			
		||||
  nano \
 | 
			
		||||
  mc \
 | 
			
		||||
  gpg \
 | 
			
		||||
  iptables \
 | 
			
		||||
  openrc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing WireGuard"
 | 
			
		||||
$STD apk add --no-cache wireguard-tools
 | 
			
		||||
if [[ ! -L /etc/init.d/wg-quick.wg0 ]]; then
 | 
			
		||||
    ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0
 | 
			
		||||
  ln -s /etc/init.d/wg-quick /etc/init.d/wg-quick.wg0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
private_key=$(wg genkey)
 | 
			
		||||
@@ -41,32 +41,33 @@ PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACC
 | 
			
		||||
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;
 | 
			
		||||
ListenPort = 51820
 | 
			
		||||
EOF
 | 
			
		||||
echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
 | 
			
		||||
$STD rc-update add sysctl
 | 
			
		||||
$STD sysctl -p /etc/sysctl.conf
 | 
			
		||||
msg_ok "Installed WireGuard"
 | 
			
		||||
 | 
			
		||||
read -rp "Do you want to install WGDashboard? (y/N): " INSTALL_WGD
 | 
			
		||||
if [[ "$INSTALL_WGD" =~ ^[Yy]$ ]]; then
 | 
			
		||||
    msg_info "Installing additional dependencies for WGDashboard"
 | 
			
		||||
    $STD apk add --no-cache \
 | 
			
		||||
        python3 \
 | 
			
		||||
        py3-pip \
 | 
			
		||||
        git \
 | 
			
		||||
        sudo \
 | 
			
		||||
        musl-dev \
 | 
			
		||||
        linux-headers \
 | 
			
		||||
        gcc \
 | 
			
		||||
        python3-dev
 | 
			
		||||
    msg_ok "Installed additional dependencies for WGDashboard"
 | 
			
		||||
    msg_info "Installing WGDashboard"
 | 
			
		||||
    git clone -q https://github.com/donaldzou/WGDashboard.git /etc/wgdashboard
 | 
			
		||||
    cd /etc/wgdashboard/src || exit
 | 
			
		||||
    chmod u+x wgd.sh
 | 
			
		||||
    $STD ./wgd.sh install
 | 
			
		||||
    $STD echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
 | 
			
		||||
    sysctl -p /etc/sysctl.conf
 | 
			
		||||
    msg_ok "Installed WGDashboard"
 | 
			
		||||
  msg_info "Installing additional dependencies for WGDashboard"
 | 
			
		||||
  $STD apk add --no-cache \
 | 
			
		||||
    python3 \
 | 
			
		||||
    py3-pip \
 | 
			
		||||
    git \
 | 
			
		||||
    sudo \
 | 
			
		||||
    musl-dev \
 | 
			
		||||
    linux-headers \
 | 
			
		||||
    gcc \
 | 
			
		||||
    python3-dev
 | 
			
		||||
  msg_ok "Installed additional dependencies for WGDashboard"
 | 
			
		||||
  msg_info "Installing WGDashboard"
 | 
			
		||||
  git clone -q https://github.com/donaldzou/WGDashboard.git /etc/wgdashboard
 | 
			
		||||
  cd /etc/wgdashboard/src || exit
 | 
			
		||||
  chmod u+x wgd.sh
 | 
			
		||||
  $STD ./wgd.sh install
 | 
			
		||||
  msg_ok "Installed WGDashboard"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Service for WGDashboard"
 | 
			
		||||
    cat <<EOF >/etc/init.d/wg-dashboard
 | 
			
		||||
  msg_info "Creating Service for WGDashboard"
 | 
			
		||||
  cat <<EOF >/etc/init.d/wg-dashboard
 | 
			
		||||
#!/sbin/openrc-run
 | 
			
		||||
 | 
			
		||||
description="WireGuard Dashboard Service"
 | 
			
		||||
@@ -89,10 +90,10 @@ stop() {
 | 
			
		||||
    eend $?
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
    chmod +x /etc/init.d/wg-dashboard
 | 
			
		||||
    $STD rc-update add wg-dashboard default
 | 
			
		||||
    $STD rc-service wg-dashboard start
 | 
			
		||||
    msg_ok "Created Service for WGDashboard"
 | 
			
		||||
  chmod +x /etc/init.d/wg-dashboard
 | 
			
		||||
  $STD rc-update add wg-dashboard default
 | 
			
		||||
  $STD rc-service wg-dashboard start
 | 
			
		||||
  msg_ok "Created Service for WGDashboard"
 | 
			
		||||
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,7 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_ok "Installed Golang"
 | 
			
		||||
 | 
			
		||||
  msg_info "Setup xCaddy"
 | 
			
		||||
  $STD apt-get install -y git
 | 
			
		||||
  cd /opt
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.deb" -o $(basename "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${RELEASE:1}_linux_amd64.deb")
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ $STD apt-get install -y g++-multilib
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Daemon Sync Server"
 | 
			
		||||
curl -fsSL "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main/misc/daemonsync_2.2.0.0059_amd64.deb" -o "daemonsync_2.2.0.0059_amd64.deb"
 | 
			
		||||
curl -fsSL "https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/addon/daemonsync_2.2.0.0059_amd64.deb" -o "daemonsync_2.2.0.0059_amd64.deb"
 | 
			
		||||
$STD dpkg -i daemonsync_2.2.0.0059_amd64.deb
 | 
			
		||||
msg_ok "Installed Daemon Sync Server"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 tteck
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (Canbiz) & vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://hoarder.app/
 | 
			
		||||
# Source: https://karakeep.app/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
@@ -34,8 +34,8 @@ chmod +x /usr/bin/yt-dlp
 | 
			
		||||
msg_ok "Installed Additional Tools"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Meilisearch"
 | 
			
		||||
cd /tmp
 | 
			
		||||
curl -fsSL "https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb" -o $(basename "https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb")
 | 
			
		||||
cd /tmp || exit
 | 
			
		||||
curl -fsSL "https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb" -o "meilisearch.deb"
 | 
			
		||||
$STD dpkg -i meilisearch.deb
 | 
			
		||||
curl -fsSL "https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml" -o "/etc/meilisearch.toml"
 | 
			
		||||
MASTER_KEY=$(openssl rand -base64 12)
 | 
			
		||||
@@ -58,30 +58,30 @@ $STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install -g corepack@0.31.0
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Hoarder"
 | 
			
		||||
cd /opt
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/hoarder-app/hoarder/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip")
 | 
			
		||||
unzip -q v${RELEASE}.zip
 | 
			
		||||
mv hoarder-${RELEASE} /opt/hoarder
 | 
			
		||||
cd /opt/hoarder
 | 
			
		||||
msg_info "Installing karakeep"
 | 
			
		||||
cd /opt || exit
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
 | 
			
		||||
unzip -q "v${RELEASE}.zip"
 | 
			
		||||
mv karakeep-"${RELEASE}" /opt/karakeep
 | 
			
		||||
cd /opt/karakeep || exit
 | 
			
		||||
corepack enable
 | 
			
		||||
export PUPPETEER_SKIP_DOWNLOAD="true"
 | 
			
		||||
export NEXT_TELEMETRY_DISABLED=1
 | 
			
		||||
export CI="true"
 | 
			
		||||
cd /opt/hoarder/apps/web
 | 
			
		||||
cd /opt/karakeep/apps/web || exit
 | 
			
		||||
$STD pnpm install --frozen-lockfile
 | 
			
		||||
$STD pnpm exec next build --experimental-build-mode compile
 | 
			
		||||
cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
 | 
			
		||||
cd /opt/hoarder/apps/workers
 | 
			
		||||
cp -r /opt/karakeep/apps/web/.next/standalone/apps/web/server.js /opt/karakeep/apps/web
 | 
			
		||||
cd /opt/karakeep/apps/workers || exit
 | 
			
		||||
$STD pnpm install --frozen-lockfile
 | 
			
		||||
 | 
			
		||||
export DATA_DIR=/opt/hoarder_data
 | 
			
		||||
HOARDER_SECRET=$(openssl rand -base64 36 | cut -c1-24)
 | 
			
		||||
mkdir -p /etc/hoarder
 | 
			
		||||
cat <<EOF >/etc/hoarder/hoarder.env
 | 
			
		||||
export DATA_DIR=/opt/karakeep_data
 | 
			
		||||
karakeep_SECRET=$(openssl rand -base64 36 | cut -c1-24)
 | 
			
		||||
mkdir -p /etc/karakeep
 | 
			
		||||
cat <<EOF >/etc/karakeep/karakeep.env
 | 
			
		||||
SERVER_VERSION=$RELEASE
 | 
			
		||||
NEXTAUTH_SECRET="$HOARDER_SECRET"
 | 
			
		||||
NEXTAUTH_SECRET="$karakeep_SECRET"
 | 
			
		||||
NEXTAUTH_URL="http://localhost:3000"
 | 
			
		||||
DATA_DIR="$DATA_DIR"
 | 
			
		||||
MEILI_ADDR="http://127.0.0.1:7700"
 | 
			
		||||
@@ -99,11 +99,11 @@ BROWSER_WEB_URL="http://127.0.0.1:9222"
 | 
			
		||||
# INFERENCE_IMAGE_MODEL="gpt-4o-mini" 
 | 
			
		||||
EOF
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed Hoarder"
 | 
			
		||||
msg_ok "Installed karakeep"
 | 
			
		||||
 | 
			
		||||
msg_info "Running Database Migration"
 | 
			
		||||
mkdir -p ${DATA_DIR}
 | 
			
		||||
cd /opt/hoarder/packages/db
 | 
			
		||||
cd /opt/karakeep/packages/db || exit
 | 
			
		||||
$STD pnpm migrate
 | 
			
		||||
msg_ok "Database Migration Completed"
 | 
			
		||||
 | 
			
		||||
@@ -121,25 +121,25 @@ Restart=always
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/hoarder-web.service
 | 
			
		||||
cat <<EOF >/etc/systemd/system/karakeep-web.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Hoarder Web
 | 
			
		||||
Wants=network.target hoarder-workers.service
 | 
			
		||||
After=network.target hoarder-workers.service
 | 
			
		||||
Description=karakeep Web
 | 
			
		||||
Wants=network.target karakeep-workers.service
 | 
			
		||||
After=network.target karakeep-workers.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=pnpm start
 | 
			
		||||
WorkingDirectory=/opt/hoarder/apps/web
 | 
			
		||||
EnvironmentFile=/etc/hoarder/hoarder.env
 | 
			
		||||
WorkingDirectory=/opt/karakeep/apps/web
 | 
			
		||||
EnvironmentFile=/etc/karakeep/karakeep.env
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/hoarder-browser.service
 | 
			
		||||
cat <<EOF >/etc/systemd/system/karakeep-browser.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Hoarder Headless Browser
 | 
			
		||||
Description=karakeep Headless Browser
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
@@ -151,16 +151,16 @@ Restart=always
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/hoarder-workers.service
 | 
			
		||||
cat <<EOF >/etc/systemd/system/karakeep-workers.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Hoarder Workers
 | 
			
		||||
Wants=network.target hoarder-browser.service meilisearch.service
 | 
			
		||||
After=network.target hoarder-browser.service meilisearch.service
 | 
			
		||||
Description=karakeep Workers
 | 
			
		||||
Wants=network.target karakeep-browser.service meilisearch.service
 | 
			
		||||
After=network.target karakeep-browser.service meilisearch.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=pnpm start:prod
 | 
			
		||||
WorkingDirectory=/opt/hoarder/apps/workers
 | 
			
		||||
EnvironmentFile=/etc/hoarder/hoarder.env
 | 
			
		||||
WorkingDirectory=/opt/karakeep/apps/workers
 | 
			
		||||
EnvironmentFile=/etc/karakeep/karakeep.env
 | 
			
		||||
Restart=always
 | 
			
		||||
TimeoutStopSec=5
 | 
			
		||||
 | 
			
		||||
@@ -168,7 +168,7 @@ TimeoutStopSec=5
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
systemctl enable -q --now meilisearch hoarder-browser hoarder-workers hoarder-web
 | 
			
		||||
systemctl enable -q --now meilisearch karakeep-browser karakeep-workers karakeep-web
 | 
			
		||||
msg_ok "Created Services"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
@@ -176,7 +176,7 @@ customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /tmp/meilisearch.deb
 | 
			
		||||
rm -f /opt/v${RELEASE}.zip
 | 
			
		||||
rm -f /opt/v"${RELEASE}".zip
 | 
			
		||||
$STD apt-get autoremove -y
 | 
			
		||||
$STD apt-get autoclean -y
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -24,21 +24,20 @@ $STD apt-get install -y \
 | 
			
		||||
  lsb-release
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup PHP8.4 Repository"
 | 
			
		||||
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
msg_info "Adding PHP8.4 Repository"
 | 
			
		||||
$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
msg_ok "Setup PHP8.4 Repository"
 | 
			
		||||
msg_ok "Added PHP8.4 Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup PHP"
 | 
			
		||||
msg_info "Installing PHP"
 | 
			
		||||
$STD apt-get remove -y php8.2*
 | 
			
		||||
#$STD apt-get remove -y php8.3*
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  php8.3 \
 | 
			
		||||
  php8.3-{mbstring,gd,intl,common,mysql,zip,xml} \
 | 
			
		||||
  libapache2-mod-php8.3
 | 
			
		||||
msg_info "Setup PHP"
 | 
			
		||||
  php8.4 \
 | 
			
		||||
  php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \
 | 
			
		||||
  libapache2-mod-php8.4
 | 
			
		||||
msg_ok "Installed PHP"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up database"
 | 
			
		||||
DB_NAME=kimai_db
 | 
			
		||||
@@ -59,9 +58,9 @@ msg_ok "Set up database"
 | 
			
		||||
msg_info "Installing Kimai (Patience)"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip")
 | 
			
		||||
unzip -q ${RELEASE}.zip
 | 
			
		||||
mv kimai-${RELEASE} /opt/kimai
 | 
			
		||||
cd /opt/kimai
 | 
			
		||||
unzip -q "${RELEASE}".zip
 | 
			
		||||
mv kimai-"${RELEASE}" /opt/kimai
 | 
			
		||||
cd /opt/kimai || exit
 | 
			
		||||
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
 | 
			
		||||
source ~/.bashrc
 | 
			
		||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
 | 
			
		||||
@@ -130,7 +129,7 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf ${RELEASE}.zip
 | 
			
		||||
rm -rf "${RELEASE}".zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										122
									
								
								install/meilisearch-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								install/meilisearch-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
			
		||||
#!/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: https://www.meilisearch.com/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
    gnupg
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup ${APPLICATION}"
 | 
			
		||||
tmp_file=$(mktemp)
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o $tmp_file
 | 
			
		||||
$STD dpkg -i $tmp_file
 | 
			
		||||
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
 | 
			
		||||
MASTER_KEY=$(openssl rand -base64 12)
 | 
			
		||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
 | 
			
		||||
sed -i \
 | 
			
		||||
    -e 's|^env =.*|env = "production"|' \
 | 
			
		||||
    -e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
 | 
			
		||||
    -e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
 | 
			
		||||
    -e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
 | 
			
		||||
    -e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
 | 
			
		||||
    -e 's|^# no_analytics = true|no_analytics = true|' \
 | 
			
		||||
    -e 's|^http_addr =.*|http_addr = "0.0.0.0:7700"|' \
 | 
			
		||||
    /etc/meilisearch.toml
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Setup ${APPLICATION}"
 | 
			
		||||
 | 
			
		||||
read -r -p "Do you want add meilisearch-ui? [y/n]: " prompt
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
    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"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install -y nodejs
 | 
			
		||||
    $STD npm install -g pnpm
 | 
			
		||||
    msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
    msg_info "Setup ${APPLICATION}-ui"
 | 
			
		||||
    tmp_file=$(mktemp)
 | 
			
		||||
    tmp_dir=$(mktemp -d)
 | 
			
		||||
    mkdir -p /opt/meilisearch-ui
 | 
			
		||||
    RELEASE_UI=$(curl -s https://api.github.com/repos/riccox/meilisearch-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o $tmp_file
 | 
			
		||||
    unzip -q "$tmp_file" -d "$tmp_dir"
 | 
			
		||||
    mv "$tmp_dir"/*/* /opt/meilisearch-ui/
 | 
			
		||||
    cd /opt/meilisearch-ui
 | 
			
		||||
    sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    cat <<EOF > /opt/meilisearch-ui/.env.local
 | 
			
		||||
VITE_SINGLETON_MODE=true
 | 
			
		||||
VITE_SINGLETON_HOST=http://${LOCAL_IP}:7700
 | 
			
		||||
VITE_SINGLETON_API_KEY=${MASTER_KEY}
 | 
			
		||||
EOF
 | 
			
		||||
    echo "${RELEASE_UI}" >/opt/${APPLICATION}-ui_version.txt
 | 
			
		||||
    msg_ok "Setup ${APPLICATION}-ui"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Services"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/meilisearch.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Meilisearch
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now meilisearch
 | 
			
		||||
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
cat <<EOF > /etc/systemd/system/meilisearch-ui.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Meilisearch UI Service
 | 
			
		||||
After=network.target meilisearch.service
 | 
			
		||||
Requires=meilisearch.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/opt/meilisearch-ui
 | 
			
		||||
ExecStart=/usr/bin/pnpm start
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=5
 | 
			
		||||
StandardOutput=syslog
 | 
			
		||||
StandardError=syslog
 | 
			
		||||
SyslogIdentifier=meilisearch-ui
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now meilisearch-ui
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_ok "Set up Services"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -15,13 +15,13 @@ update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
    gcc \
 | 
			
		||||
    gnupg \
 | 
			
		||||
    ca-certificates \
 | 
			
		||||
    musl-dev \
 | 
			
		||||
    mupdf \
 | 
			
		||||
    libc6-dev \
 | 
			
		||||
    musl-tools
 | 
			
		||||
  gcc \
 | 
			
		||||
  gnupg \
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  musl-dev \
 | 
			
		||||
  mupdf \
 | 
			
		||||
  libc6-dev \
 | 
			
		||||
  musl-tools
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
@@ -66,16 +66,16 @@ msg_ok "Setup Paperless-GPT"
 | 
			
		||||
mkdir -p /opt/paperless-gpt-data
 | 
			
		||||
read -p "Do you want to enter the Paperless local URL now? (y/n) " input_url
 | 
			
		||||
if [[ "$input_url" =~ ^[Yy]$ ]]; then
 | 
			
		||||
    read -p "Enter your Paperless-NGX instance URL (e.g., http://192.168.1.100:8000): " PAPERLESS_BASE_URL
 | 
			
		||||
  read -p "Enter your Paperless-NGX instance URL (e.g., http://192.168.1.100:8000): " PAPERLESS_BASE_URL
 | 
			
		||||
else
 | 
			
		||||
    PAPERLESS_BASE_URL="http://your_paperless_ngx_url"
 | 
			
		||||
  PAPERLESS_BASE_URL="http://your_paperless_ngx_url"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
read -p "Do you want to enter the Paperless API token now? (y/n) " input_token
 | 
			
		||||
if [[ "$input_token" =~ ^[Yy]$ ]]; then
 | 
			
		||||
    read -p "Enter your Paperless API token: " PAPERLESS_API_TOKEN
 | 
			
		||||
  read -p "Enter your Paperless API token: " PAPERLESS_API_TOKEN
 | 
			
		||||
else
 | 
			
		||||
    PAPERLESS_API_TOKEN="your_paperless_api_token"
 | 
			
		||||
  PAPERLESS_API_TOKEN="your_paperless_api_token"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Environment"
 | 
			
		||||
@@ -116,6 +116,8 @@ ExecStart=/opt/paperless-gpt/paperless-gpt
 | 
			
		||||
Restart=always
 | 
			
		||||
User=root
 | 
			
		||||
EnvironmentFile=/opt/paperless-gpt-data/.env
 | 
			
		||||
StandardOutput=append:/var/log/paperless-gpt.log
 | 
			
		||||
StandardError=append:/var/log/paperless-gpt.log
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
@@ -130,4 +132,4 @@ msg_info "Cleaning up"
 | 
			
		||||
rm -f $temp_file
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -209,7 +209,10 @@ Requires=redis.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
WorkingDirectory=/opt/paperless/src
 | 
			
		||||
ExecStart=/usr/local/bin/gunicorn -c /opt/paperless/gunicorn.conf.py paperless.asgi:application
 | 
			
		||||
ExecStart=granian --interface asginl --ws "paperless.asgi:application"
 | 
			
		||||
Environment=GRANIAN_HOST=::
 | 
			
		||||
Environment=GRANIAN_PORT=8000
 | 
			
		||||
Environment=GRANIAN_WORKERS=1
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
 
 | 
			
		||||
@@ -22,19 +22,19 @@ $STD apt-get install -y \
 | 
			
		||||
  composer
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Adding PHP8.3 Repository"
 | 
			
		||||
$STD curl -fsSL "https://packages.sury.org/debsuryorg-archive-keyring.deb" -o /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
msg_info "Adding PHP8.4 Repository"
 | 
			
		||||
$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
msg_ok "Added PHP8.3 Repository"
 | 
			
		||||
msg_ok "Added PHP8.4 Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing PHP"
 | 
			
		||||
$STD apt-get remove -y php8.2*
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  php8.3 \
 | 
			
		||||
  php8.3-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,sqlite3,fpm} \
 | 
			
		||||
  libapache2-mod-php8.3
 | 
			
		||||
  php8.4 \
 | 
			
		||||
  php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,sqlite3,fpm} \
 | 
			
		||||
  libapache2-mod-php8.4
 | 
			
		||||
msg_info "Installed PHP"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up MariaDB"
 | 
			
		||||
@@ -55,7 +55,7 @@ msg_ok "Set up MariaDB"
 | 
			
		||||
msg_info "Installing Pelican Panel"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/pelican-dev/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
mkdir /opt/pelican-panel
 | 
			
		||||
cd /opt/pelican-panel
 | 
			
		||||
cd /opt/pelican-panel  || exit
 | 
			
		||||
curl -fsSL "https://github.com/pelican-dev/panel/releases/download/v${RELEASE}/panel.tar.gz" -o $(basename "https://github.com/pelican-dev/panel/releases/download/v${RELEASE}/panel.tar.gz")
 | 
			
		||||
tar -xzf "panel.tar.gz"
 | 
			
		||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
 | 
			
		||||
@@ -64,7 +64,7 @@ $STD php artisan p:environment:queue-service --no-interaction
 | 
			
		||||
echo "* * * * * php /opt/pelican-panel/artisan schedule:run >> /dev/null 2>&1" | crontab -u www-data -
 | 
			
		||||
chown -R www-data:www-data /opt/pelican-panel
 | 
			
		||||
chmod -R 755 /opt/pelican-panel/storage /opt/pelican-panel/bootstrap/cache/
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
 | 
			
		||||
msg_ok "Installed Pelican Panel"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
 
 | 
			
		||||
@@ -23,19 +23,19 @@ $STD apt-get install -y \
 | 
			
		||||
  composer
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Adding PHP8.3 Repository"
 | 
			
		||||
$STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
msg_info "Adding PHP8.4 Repository"
 | 
			
		||||
$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
msg_ok "Added PHP8.3 Repository"
 | 
			
		||||
msg_ok "Added PHP8.4 Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing PHP"
 | 
			
		||||
$STD apt-get remove -y php8.2*
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  php8.3 \
 | 
			
		||||
  php8.3-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
 | 
			
		||||
  libapache2-mod-php8.3
 | 
			
		||||
  php8.4 \
 | 
			
		||||
  php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
 | 
			
		||||
  libapache2-mod-php8.4
 | 
			
		||||
msg_ok "Installed PHP"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up MariaDB"
 | 
			
		||||
@@ -60,7 +60,7 @@ read -p "Enter your Last Name: " NAME_LAST
 | 
			
		||||
msg_info "Installing pterodactyl Panel"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/pterodactyl/panel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
mkdir /opt/pterodactyl-panel
 | 
			
		||||
cd /opt/pterodactyl-panel
 | 
			
		||||
cd /opt/pterodactyl-panel || exit
 | 
			
		||||
curl -fsSL "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz" -o $(basename "https://github.com/pterodactyl/panel/releases/download/v${RELEASE}/panel.tar.gz")
 | 
			
		||||
tar -xzf "panel.tar.gz"
 | 
			
		||||
cp .env.example .env
 | 
			
		||||
@@ -68,8 +68,8 @@ IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
 | 
			
		||||
$STD php artisan key:generate --force
 | 
			
		||||
$STD php artisan p:environment:setup --no-interaction --author $ADMIN_EMAIL --url "http://$IP"
 | 
			
		||||
$STD php artisan p:environment:database --no-interaction --database $DB_NAME --username $DB_USER --password $DB_PASS
 | 
			
		||||
$STD php artisan p:environment:setup --no-interaction --author "$ADMIN_EMAIL" --url "http://$IP"
 | 
			
		||||
$STD php artisan p:environment:database --no-interaction --database $DB_NAME --username $DB_USER --password "$DB_PASS"
 | 
			
		||||
$STD php artisan migrate --seed --force --no-interaction
 | 
			
		||||
$STD php artisan p:user:make --no-interaction --admin=1 --email "$ADMIN_EMAIL" --password "$ADMIN_PASS" --name-first "$NAME_FIRST" --name-last "$NAME_LAST" --username "admin"
 | 
			
		||||
echo "* * * * * php /opt/pterodactyl-panel/artisan schedule:run >> /dev/null 2>&1" | crontab -u www-data -
 | 
			
		||||
@@ -82,7 +82,7 @@ chmod -R 755 /opt/pterodactyl-panel/storage/* /opt/pterodactyl-panel/bootstrap/c
 | 
			
		||||
  echo "pterodactyl Admin Password: $ADMIN_PASS"
 | 
			
		||||
} >>~/pterodactyl-panel.creds
 | 
			
		||||
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
echo "${RELEASE}" >/opt/"${APPLICATION}"_version.txt
 | 
			
		||||
msg_ok "Installed pterodactyl Panel"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,8 @@ $STD apt-get install -y \
 | 
			
		||||
  python3 \
 | 
			
		||||
  python3-dev \
 | 
			
		||||
  python3-setuptools \
 | 
			
		||||
  python3-pip
 | 
			
		||||
  python3-pip \
 | 
			
		||||
  python3-xmlsec
 | 
			
		||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
			
		||||
msg_ok "Setup Python3"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 tteck
 | 
			
		||||
# Author: tteck (tteckster)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://www.zabbix.com/
 | 
			
		||||
 | 
			
		||||
@@ -14,8 +14,11 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Zabbix"
 | 
			
		||||
cd /tmp
 | 
			
		||||
curl -fsSL "https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb" -o $(basename "https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")
 | 
			
		||||
cd /tmp || exit
 | 
			
		||||
curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ |
 | 
			
		||||
  grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 |
 | 
			
		||||
  xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \
 | 
			
		||||
  -o /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
$STD dpkg -i /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -39,8 +39,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_ADMIN_USER;"
 | 
			
		||||
msg_ok "Installed PostgreSQL"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Zitadel"
 | 
			
		||||
RELEASE=$(curl -fsSL https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r')
 | 
			
		||||
curl -fsSL https://github.com/zitadel/zitadel/releases/download/$RELEASE/zitadel-linux-amd64.tar.gz | tar -xz
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/zitadel/zitadel/releases/download/v$RELEASE/zitadel-linux-amd64.tar.gz" | tar -xz
 | 
			
		||||
mv zitadel-linux-amd64/zitadel /usr/local/bin
 | 
			
		||||
msg_ok "Installed Zitadel"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -94,12 +94,12 @@ msg_error() {
 | 
			
		||||
# This function sets up the Container OS by generating the locale, setting the timezone, and checking the network connection
 | 
			
		||||
setting_up_container() {
 | 
			
		||||
  msg_info "Setting up Container OS"
 | 
			
		||||
  while [ $i -gt 0 ]; do
 | 
			
		||||
  while [ "$i" -gt 0 ]; do
 | 
			
		||||
    if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" != "" ]; then
 | 
			
		||||
      break
 | 
			
		||||
    fi
 | 
			
		||||
    echo 1>&2 -en "${CROSS}${RD} No Network! "
 | 
			
		||||
    sleep $RETRY_EVERY
 | 
			
		||||
    sleep "$RETRY_EVERY"
 | 
			
		||||
    i=$((i - 1))
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
@@ -194,6 +194,6 @@ customize() {
 | 
			
		||||
    msg_ok "Customized Container"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main/ct/${app}.sh)\"" >/usr/bin/update
 | 
			
		||||
  echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update
 | 
			
		||||
  chmod +x /usr/bin/update
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										190
									
								
								misc/build.func
									
									
									
									
									
								
							
							
						
						
									
										190
									
								
								misc/build.func
									
									
									
									
									
								
							@@ -5,7 +5,7 @@
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
variables() {
 | 
			
		||||
  NSAPP=$(echo ${APP,,} | tr -d ' ')                # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces.
 | 
			
		||||
  NSAPP=$(echo "${APP,,}" | tr -d ' ')              # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces.
 | 
			
		||||
  var_install="${NSAPP}-install"                    # sets the var_install variable by appending "-install" to the value of NSAPP.
 | 
			
		||||
  INTEGER='^[0-9]+([.][0-9]+)?$'                    # it defines the INTEGER regular expression pattern.
 | 
			
		||||
  PVEHOST_NAME=$(hostname)                          # gets the Proxmox Hostname and sets it to Uppercase
 | 
			
		||||
@@ -69,7 +69,7 @@ catch_errors() {
 | 
			
		||||
# This function is called when an error occurs. It receives the exit code, line number, and command that caused the error, and displays an error message.
 | 
			
		||||
error_handler() {
 | 
			
		||||
  source /dev/stdin <<<$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
 | 
			
		||||
  if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
 | 
			
		||||
  if [ -n "$SPINNER_PID" ] && ps -p "$SPINNER_PID" >/dev/null; then kill "$SPINNER_PID" >/dev/null; fi
 | 
			
		||||
  printf "\e[?25h"
 | 
			
		||||
  local exit_code="$?"
 | 
			
		||||
  local line_number="$1"
 | 
			
		||||
@@ -191,7 +191,7 @@ root_check() {
 | 
			
		||||
 | 
			
		||||
# This function checks the version of Proxmox Virtual Environment (PVE) and exits if the version is not supported.
 | 
			
		||||
pve_check() {
 | 
			
		||||
  if ! pveversion | grep -Eq "pve-manager/8\.[1-3](\.[0-9]+)*"; then
 | 
			
		||||
  if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then
 | 
			
		||||
    msg_error "${CROSS}${RD}This version of Proxmox Virtual Environment is not supported"
 | 
			
		||||
    echo -e "Requires Proxmox Virtual Environment Version 8.1 or later."
 | 
			
		||||
    echo -e "Exiting..."
 | 
			
		||||
@@ -289,25 +289,25 @@ update_motd_ip() {
 | 
			
		||||
 | 
			
		||||
# Function to download & save header files
 | 
			
		||||
get_header() {
 | 
			
		||||
    local app_name=$(echo "${APP,,}" | tr -d ' ')
 | 
			
		||||
    local header_url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/headers/${app_name}"
 | 
			
		||||
    local local_header_path="/usr/local/community-scripts/headers/${app_name}"
 | 
			
		||||
  local app_name=$(echo "${APP,,}" | tr -d ' ')
 | 
			
		||||
  local header_url="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/headers/${app_name}"
 | 
			
		||||
  local local_header_path="/usr/local/community-scripts/headers/${app_name}"
 | 
			
		||||
 | 
			
		||||
    mkdir -p "$(dirname "$local_header_path")"
 | 
			
		||||
  mkdir -p "$(dirname "$local_header_path")"
 | 
			
		||||
 | 
			
		||||
    if [ ! -s "$local_header_path" ]; then
 | 
			
		||||
        if ! curl -fsSL "$header_url" -o "$local_header_path"; then
 | 
			
		||||
            echo -e "Failed to download header for ${app_name}. No header will be displayed."
 | 
			
		||||
            return 1
 | 
			
		||||
        fi
 | 
			
		||||
  if [ ! -s "$local_header_path" ]; then
 | 
			
		||||
    if ! curl -fsSL "$header_url" -o "$local_header_path"; then
 | 
			
		||||
      echo -e "Failed to download header for ${app_name}. No header will be displayed."
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
    cat "$local_header_path"
 | 
			
		||||
  cat "$local_header_path"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# This function sets the APP-Name into an ASCII Header in Slant, figlet needed on proxmox main node.
 | 
			
		||||
header_info() {
 | 
			
		||||
  local app_name=$(echo ${APP,,} | tr -d ' ')
 | 
			
		||||
  local app_name=$(echo "${APP,,}" | tr -d ' ')
 | 
			
		||||
  local header_content
 | 
			
		||||
 | 
			
		||||
  # Download & save Header-File locally
 | 
			
		||||
@@ -411,128 +411,6 @@ exit_script() {
 | 
			
		||||
# This function allows the user to configure advanced settings for the script.
 | 
			
		||||
advanced_settings() {
 | 
			
		||||
  whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Here is an instructional tip:" "To make a selection, use the Spacebar." 8 58
 | 
			
		||||
  whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Default distribution for $APP" "Default is: ${var_os} ${var_version} \n \nIf the default Linux distribution is not adhered to, script support will be discontinued. \n" 10 58
 | 
			
		||||
  if [ "$var_os" != "alpine" ]; then
 | 
			
		||||
    var_default_os="${var_os}"
 | 
			
		||||
    var_os=""
 | 
			
		||||
    while [ -z "$var_os" ]; do
 | 
			
		||||
      if [ "$var_default_os" == "debian" ]; then
 | 
			
		||||
        if var_os=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISTRIBUTION" --radiolist "Choose Distribution" 10 58 2 \
 | 
			
		||||
          "debian" "" ON \
 | 
			
		||||
          "ubuntu" "" OFF \
 | 
			
		||||
          3>&1 1>&2 2>&3); then
 | 
			
		||||
          if [ -n "$var_os" ]; then
 | 
			
		||||
            echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
 | 
			
		||||
          fi
 | 
			
		||||
        else
 | 
			
		||||
          exit_script
 | 
			
		||||
        fi
 | 
			
		||||
      fi
 | 
			
		||||
      if [ "$var_default_os" == "ubuntu" ]; then
 | 
			
		||||
        if var_os=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DISTRIBUTION" --radiolist "Choose Distribution" 10 58 2 \
 | 
			
		||||
          "debian" "" OFF \
 | 
			
		||||
          "ubuntu" "" ON \
 | 
			
		||||
          3>&1 1>&2 2>&3); then
 | 
			
		||||
          if [ -n "$var_os" ]; then
 | 
			
		||||
            echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
 | 
			
		||||
          fi
 | 
			
		||||
        else
 | 
			
		||||
          exit_script
 | 
			
		||||
        fi
 | 
			
		||||
      fi
 | 
			
		||||
    done
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ "$var_os" == "debian" ]; then
 | 
			
		||||
    var_default_version="${var_version}"
 | 
			
		||||
    var_version=""
 | 
			
		||||
    while [ -z "$var_version" ]; do
 | 
			
		||||
      if [ "$var_default_version" == "11" ]; then
 | 
			
		||||
        if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
 | 
			
		||||
          "11" "Bullseye" ON \
 | 
			
		||||
          "12" "Bookworm" OFF \
 | 
			
		||||
          3>&1 1>&2 2>&3); then
 | 
			
		||||
          if [ -n "$var_version" ]; then
 | 
			
		||||
            echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
          fi
 | 
			
		||||
        else
 | 
			
		||||
          exit_script
 | 
			
		||||
        fi
 | 
			
		||||
      fi
 | 
			
		||||
      if [ "$var_default_version" == "12" ]; then
 | 
			
		||||
        if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "DEBIAN VERSION" --radiolist "Choose Version" 10 58 2 \
 | 
			
		||||
          "11" "Bullseye" OFF \
 | 
			
		||||
          "12" "Bookworm" ON \
 | 
			
		||||
          3>&1 1>&2 2>&3); then
 | 
			
		||||
          if [ -n "$var_version" ]; then
 | 
			
		||||
            echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
          fi
 | 
			
		||||
        else
 | 
			
		||||
          exit_script
 | 
			
		||||
        fi
 | 
			
		||||
      fi
 | 
			
		||||
    done
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ "$var_os" == "ubuntu" ]; then
 | 
			
		||||
    var_default_version="${var_version}"
 | 
			
		||||
    var_version=""
 | 
			
		||||
    while [ -z "$var_version" ]; do
 | 
			
		||||
      if [ "$var_default_version" == "20.04" ]; then
 | 
			
		||||
        if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
 | 
			
		||||
          "20.04" "Focal" ON \
 | 
			
		||||
          "22.04" "Jammy" OFF \
 | 
			
		||||
          "24.04" "Noble" OFF \
 | 
			
		||||
          "24.10" "Oracular" OFF \
 | 
			
		||||
          3>&1 1>&2 2>&3); then
 | 
			
		||||
          if [ -n "$var_version" ]; then
 | 
			
		||||
            echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
          fi
 | 
			
		||||
        else
 | 
			
		||||
          exit_script
 | 
			
		||||
        fi
 | 
			
		||||
      elif [ "$var_default_version" == "22.04" ]; then
 | 
			
		||||
        if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
 | 
			
		||||
          "20.04" "Focal" OFF \
 | 
			
		||||
          "22.04" "Jammy" ON \
 | 
			
		||||
          "24.04" "Noble" OFF \
 | 
			
		||||
          "24.10" "Oracular" OFF \
 | 
			
		||||
          3>&1 1>&2 2>&3); then
 | 
			
		||||
          if [ -n "$var_version" ]; then
 | 
			
		||||
            echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
          fi
 | 
			
		||||
        else
 | 
			
		||||
          exit_script
 | 
			
		||||
        fi
 | 
			
		||||
      elif [ "$var_default_version" == "24.04" ]; then
 | 
			
		||||
        if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
 | 
			
		||||
          "20.04" "Focal" OFF \
 | 
			
		||||
          "22.04" "Jammy" OFF \
 | 
			
		||||
          "24.04" "Noble" ON \
 | 
			
		||||
          "24.10" "Oracular" OFF \
 | 
			
		||||
          3>&1 1>&2 2>&3); then
 | 
			
		||||
          if [ -n "$var_version" ]; then
 | 
			
		||||
            echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
          fi
 | 
			
		||||
        else
 | 
			
		||||
          exit_script
 | 
			
		||||
        fi
 | 
			
		||||
      else
 | 
			
		||||
        if var_version=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UBUNTU VERSION" --radiolist "Choose Version" 10 58 4 \
 | 
			
		||||
          "20.04" "Focal" OFF \
 | 
			
		||||
          "22.04" "Jammy" OFF \
 | 
			
		||||
          "24.04" "Noble" OFF \
 | 
			
		||||
          "24.10" "Oracular" ON \
 | 
			
		||||
          3>&1 1>&2 2>&3); then
 | 
			
		||||
          if [ -n "$var_version" ]; then
 | 
			
		||||
            echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
          fi
 | 
			
		||||
        else
 | 
			
		||||
          exit_script
 | 
			
		||||
        fi
 | 
			
		||||
      fi
 | 
			
		||||
    done
 | 
			
		||||
  fi
 | 
			
		||||
  # Setting Default Tag for Advanced Settings
 | 
			
		||||
  TAGS="community-script;${var_tags:-}"
 | 
			
		||||
  CT_DEFAULT_TYPE="${CT_TYPE}"
 | 
			
		||||
@@ -548,6 +426,8 @@ advanced_settings() {
 | 
			
		||||
          if [ "$CT_TYPE" -eq 0 ]; then
 | 
			
		||||
            CT_TYPE_DESC="Privileged"
 | 
			
		||||
          fi
 | 
			
		||||
          echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
 | 
			
		||||
          echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
          echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}"
 | 
			
		||||
        fi
 | 
			
		||||
      else
 | 
			
		||||
@@ -564,6 +444,8 @@ advanced_settings() {
 | 
			
		||||
          if [ "$CT_TYPE" -eq 0 ]; then
 | 
			
		||||
            CT_TYPE_DESC="Privileged"
 | 
			
		||||
          fi
 | 
			
		||||
          echo -e "${OS}${BOLD}${DGN}Operating System: ${BGN}$var_os${CL}"
 | 
			
		||||
          echo -e "${OSVERSION}${BOLD}${DGN}Version: ${BGN}$var_version${CL}"
 | 
			
		||||
          echo -e "${CONTAINERTYPE}${BOLD}${DGN}Container Type: ${BGN}$CT_TYPE_DESC${CL}"
 | 
			
		||||
        fi
 | 
			
		||||
      else
 | 
			
		||||
@@ -603,7 +485,7 @@ advanced_settings() {
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  if CT_ID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Container ID" 8 58 $NEXTID --title "CONTAINER ID" 3>&1 1>&2 2>&3); then
 | 
			
		||||
  if CT_ID=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Container ID" 8 58 "$NEXTID" --title "CONTAINER ID" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z "$CT_ID" ]; then
 | 
			
		||||
      CT_ID="$NEXTID"
 | 
			
		||||
      echo -e "${CONTAINERID}${BOLD}${DGN}Container ID: ${BGN}$CT_ID${CL}"
 | 
			
		||||
@@ -614,18 +496,18 @@ advanced_settings() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if CT_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 $NSAPP --title "HOSTNAME" 3>&1 1>&2 2>&3); then
 | 
			
		||||
  if CT_NAME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Hostname" 8 58 "$NSAPP" --title "HOSTNAME" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z "$CT_NAME" ]; then
 | 
			
		||||
      HN="$NSAPP"
 | 
			
		||||
    else
 | 
			
		||||
      HN=$(echo ${CT_NAME,,} | tr -d ' ')
 | 
			
		||||
      HN=$(echo "${CT_NAME,,}" | tr -d ' ')
 | 
			
		||||
    fi
 | 
			
		||||
    echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}$HN${CL}"
 | 
			
		||||
  else
 | 
			
		||||
    exit_script
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GB" 8 58 $var_disk --title "DISK SIZE" 3>&1 1>&2 2>&3); then
 | 
			
		||||
  if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Disk Size in GB" 8 58 "$var_disk" --title "DISK SIZE" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z "$DISK_SIZE" ]; then
 | 
			
		||||
      DISK_SIZE="$var_disk"
 | 
			
		||||
      echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE} GB${CL}"
 | 
			
		||||
@@ -640,7 +522,7 @@ advanced_settings() {
 | 
			
		||||
    exit_script
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 $var_cpu --title "CORE COUNT" 3>&1 1>&2 2>&3); then
 | 
			
		||||
  if CORE_COUNT=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate CPU Cores" 8 58 "$var_cpu" --title "CORE COUNT" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z "$CORE_COUNT" ]; then
 | 
			
		||||
      CORE_COUNT="$var_cpu"
 | 
			
		||||
      echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}$CORE_COUNT${CL}"
 | 
			
		||||
@@ -651,7 +533,7 @@ advanced_settings() {
 | 
			
		||||
    exit_script
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 $var_ram --title "RAM" 3>&1 1>&2 2>&3); then
 | 
			
		||||
  if RAM_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Allocate RAM in MiB" 8 58 "$var_ram" --title "RAM" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z "$RAM_SIZE" ]; then
 | 
			
		||||
      RAM_SIZE="$var_ram"
 | 
			
		||||
      echo -e "${RAMSIZE}${BOLD}${DGN}RAM Size: ${BGN}${RAM_SIZE} MiB${CL}"
 | 
			
		||||
@@ -731,7 +613,7 @@ advanced_settings() {
 | 
			
		||||
  echo -e "${DISABLEIPV6}${BOLD}${DGN}Disable IPv6: ${BGN}$DISABLEIP6${CL}"
 | 
			
		||||
 | 
			
		||||
  if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [The MTU of your selected vmbr, default is 1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z $MTU1 ]; then
 | 
			
		||||
    if [ -z "$MTU1" ]; then
 | 
			
		||||
      MTU1="Default"
 | 
			
		||||
      MTU=""
 | 
			
		||||
    else
 | 
			
		||||
@@ -743,7 +625,7 @@ advanced_settings() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if SD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a DNS Search Domain (leave blank for HOST)" 8 58 --title "DNS Search Domain" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z $SD ]; then
 | 
			
		||||
    if [ -z "$SD" ]; then
 | 
			
		||||
      SX=Host
 | 
			
		||||
      SD=""
 | 
			
		||||
    else
 | 
			
		||||
@@ -756,7 +638,7 @@ advanced_settings() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if NX=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a DNS Server IP (leave blank for HOST)" 8 58 --title "DNS SERVER IP" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z $NX ]; then
 | 
			
		||||
    if [ -z "$NX" ]; then
 | 
			
		||||
      NX=Host
 | 
			
		||||
      NS=""
 | 
			
		||||
    else
 | 
			
		||||
@@ -768,7 +650,7 @@ advanced_settings() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if MAC1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a MAC Address(leave blank for generated MAC)" 8 58 --title "MAC ADDRESS" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z $MAC1 ]; then
 | 
			
		||||
    if [ -z "$MAC1" ]; then
 | 
			
		||||
      MAC1="Default"
 | 
			
		||||
      MAC=""
 | 
			
		||||
    else
 | 
			
		||||
@@ -780,7 +662,7 @@ advanced_settings() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if VLAN1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a Vlan(leave blank for no VLAN)" 8 58 --title "VLAN" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z $VLAN1 ]; then
 | 
			
		||||
    if [ -z "$VLAN1" ]; then
 | 
			
		||||
      VLAN1="Default"
 | 
			
		||||
      VLAN=""
 | 
			
		||||
    else
 | 
			
		||||
@@ -791,7 +673,7 @@ advanced_settings() {
 | 
			
		||||
    exit_script
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if ADV_TAGS=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Custom Tags?[If you remove all, there will be no tags!]" 8 58 ${TAGS} --title "Advanced Tags" 3>&1 1>&2 2>&3); then
 | 
			
		||||
  if ADV_TAGS=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Custom Tags?[If you remove all, there will be no tags!]" 8 58 "${TAGS}" --title "Advanced Tags" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -n "${ADV_TAGS}" ]; then
 | 
			
		||||
      ADV_TAGS=$(echo "$ADV_TAGS" | tr -d '[:space:]')
 | 
			
		||||
      TAGS="${ADV_TAGS}"
 | 
			
		||||
@@ -1095,7 +977,7 @@ build_container() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  TEMP_DIR=$(mktemp -d)
 | 
			
		||||
  pushd $TEMP_DIR >/dev/null
 | 
			
		||||
  pushd "$TEMP_DIR" >/dev/null
 | 
			
		||||
  if [ "$var_os" == "alpine" ]; then
 | 
			
		||||
    export FUNCTIONS_FILE_PATH="$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/alpine-install.func)"
 | 
			
		||||
  else
 | 
			
		||||
@@ -1135,7 +1017,7 @@ build_container() {
 | 
			
		||||
 | 
			
		||||
  LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
 | 
			
		||||
  if [ "$CT_TYPE" == "0" ]; then
 | 
			
		||||
    cat <<EOF >>$LXC_CONFIG
 | 
			
		||||
    cat <<EOF >>"$LXC_CONFIG"
 | 
			
		||||
# USB passthrough
 | 
			
		||||
lxc.cgroup2.devices.allow: a
 | 
			
		||||
lxc.cap.drop:
 | 
			
		||||
@@ -1151,7 +1033,7 @@ EOF
 | 
			
		||||
 | 
			
		||||
  if [ "$CT_TYPE" == "0" ]; then
 | 
			
		||||
    if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" || "$APP" == "FileFlows" ]]; then
 | 
			
		||||
      cat <<EOF >>$LXC_CONFIG
 | 
			
		||||
      cat <<EOF >>"$LXC_CONFIG"
 | 
			
		||||
# VAAPI hardware transcoding
 | 
			
		||||
lxc.cgroup2.devices.allow: c 226:0 rwm
 | 
			
		||||
lxc.cgroup2.devices.allow: c 226:128 rwm
 | 
			
		||||
@@ -1165,13 +1047,13 @@ EOF
 | 
			
		||||
    if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" || "$APP" == "FileFlows" ]]; then
 | 
			
		||||
      if [[ -e "/dev/dri/renderD128" ]]; then
 | 
			
		||||
        if [[ -e "/dev/dri/card0" ]]; then
 | 
			
		||||
          cat <<EOF >>$LXC_CONFIG
 | 
			
		||||
          cat <<EOF >>"$LXC_CONFIG"
 | 
			
		||||
# VAAPI hardware transcoding
 | 
			
		||||
dev0: /dev/dri/card0,gid=44
 | 
			
		||||
dev1: /dev/dri/renderD128,gid=104
 | 
			
		||||
EOF
 | 
			
		||||
        else
 | 
			
		||||
          cat <<EOF >>$LXC_CONFIG
 | 
			
		||||
          cat <<EOF >>"$LXC_CONFIG"
 | 
			
		||||
# VAAPI hardware transcoding
 | 
			
		||||
dev0: /dev/dri/card1,gid=44
 | 
			
		||||
dev1: /dev/dri/renderD128,gid=104
 | 
			
		||||
@@ -1193,7 +1075,7 @@ http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
 | 
			
		||||
EOF'
 | 
			
		||||
    pct exec "$CTID" -- ash -c "apk add bash >/dev/null"
 | 
			
		||||
  fi
 | 
			
		||||
  lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/$var_install.sh)" || exit $?
 | 
			
		||||
  lxc-attach -n "$CTID" -- bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/install/"$var_install".sh)" || exit $?
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@@ -69,7 +69,7 @@ catch_errors() {
 | 
			
		||||
# This function handles errors
 | 
			
		||||
error_handler() {
 | 
			
		||||
  source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
 | 
			
		||||
  if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
 | 
			
		||||
  if [ -n "$SPINNER_PID" ] && ps -p "$SPINNER_PID" >/dev/null; then kill "$SPINNER_PID" >/dev/null; fi
 | 
			
		||||
  printf "\e[?25h"
 | 
			
		||||
  local exit_code="$?"
 | 
			
		||||
  local line_number="$1"
 | 
			
		||||
@@ -110,7 +110,7 @@ msg_info() {
 | 
			
		||||
 | 
			
		||||
# This function displays a success message with a green color.
 | 
			
		||||
msg_ok() {
 | 
			
		||||
  if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
 | 
			
		||||
  if [ -n "$SPINNER_PID" ] && ps -p "$SPINNER_PID" >/dev/null; then kill "$SPINNER_PID" >/dev/null; fi
 | 
			
		||||
  printf "\e[?25h"
 | 
			
		||||
  local msg="$1"
 | 
			
		||||
  echo -e "${BFR}${CM}${GN}${msg}${CL}"
 | 
			
		||||
@@ -118,7 +118,7 @@ msg_ok() {
 | 
			
		||||
 | 
			
		||||
# This function displays a error message with a red color.
 | 
			
		||||
msg_error() {
 | 
			
		||||
  if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
 | 
			
		||||
  if [ -n "$SPINNER_PID" ] && ps -p "$SPINNER_PID" >/dev/null; then kill "$SPINNER_PID" >/dev/null; fi
 | 
			
		||||
  printf "\e[?25h"
 | 
			
		||||
  local msg="$1"
 | 
			
		||||
  echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
 | 
			
		||||
@@ -132,14 +132,14 @@ setting_up_container() {
 | 
			
		||||
  echo "LANG=${locale_line}" >/etc/default/locale
 | 
			
		||||
  locale-gen >/dev/null
 | 
			
		||||
  export LANG=${locale_line}
 | 
			
		||||
  echo $tz >/etc/timezone
 | 
			
		||||
  ln -sf /usr/share/zoneinfo/$tz /etc/localtime
 | 
			
		||||
  echo "$tz" >/etc/timezone
 | 
			
		||||
  ln -sf /usr/share/zoneinfo/"$tz" /etc/localtime
 | 
			
		||||
  for ((i = RETRY_NUM; i > 0; i--)); do
 | 
			
		||||
    if [ "$(hostname -I)" != "" ]; then
 | 
			
		||||
      break
 | 
			
		||||
    fi
 | 
			
		||||
    echo 1>&2 -en "${CROSS}${RD} No Network! "
 | 
			
		||||
    sleep $RETRY_EVERY
 | 
			
		||||
    sleep "$RETRY_EVERY"
 | 
			
		||||
  done
 | 
			
		||||
  if [ "$(hostname -I)" = "" ]; then
 | 
			
		||||
    echo 1>&2 -e "\n${CROSS}${RD} No Network After $RETRY_NUM Tries${CL}"
 | 
			
		||||
@@ -265,7 +265,7 @@ EOF
 | 
			
		||||
    systemctl restart $(basename $(dirname $GETTY_OVERRIDE) | sed 's/\.d//')
 | 
			
		||||
    msg_ok "Customized Container"
 | 
			
		||||
  fi
 | 
			
		||||
  echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/raw/main/ct/${app}.sh)\"" >/usr/bin/update
 | 
			
		||||
  echo "bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/${app}.sh)\"" >/usr/bin/update
 | 
			
		||||
  chmod +x /usr/bin/update
 | 
			
		||||
 | 
			
		||||
  if [[ -n "${SSH_AUTHORIZED_KEY}" ]]; then
 | 
			
		||||
 
 | 
			
		||||
@@ -95,7 +95,7 @@ uninstall() {
 | 
			
		||||
  msg_ok "Completed Successfully!\n"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if ! pveversion | grep -Eq "pve-manager/(8\.[0-9])"; then
 | 
			
		||||
if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then
 | 
			
		||||
  echo -e "This version of Proxmox Virtual Environment is not supported"
 | 
			
		||||
  echo -e "Requires PVE Version 8.0 or higher"
 | 
			
		||||
  echo -e "Exiting..."
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user