mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			76 Commits
		
	
	
		
			2025-01-30
			...
			2025-02-04
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					62dac32400 | ||
| 
						 | 
					401a9e1a45 | ||
| 
						 | 
					569d0ac374 | ||
| 
						 | 
					e75312007d | ||
| 
						 | 
					103a5371e6 | ||
| 
						 | 
					abfe17ce74 | ||
| 
						 | 
					86295fcf67 | ||
| 
						 | 
					c9012c54df | ||
| 
						 | 
					fd051552f3 | ||
| 
						 | 
					169076e68e | ||
| 
						 | 
					971aa5ba16 | ||
| 
						 | 
					6be54478f4 | ||
| 
						 | 
					6b225058de | ||
| 
						 | 
					78d96fdaa2 | ||
| 
						 | 
					8129e3cf39 | ||
| 
						 | 
					0e5f663df5 | ||
| 
						 | 
					de45527d45 | ||
| 
						 | 
					d7b3f33030 | ||
| 
						 | 
					88daaed113 | ||
| 
						 | 
					41744c0ab6 | ||
| 
						 | 
					c3cd5314fe | ||
| 
						 | 
					6f29ab8942 | ||
| 
						 | 
					bd5db081c1 | ||
| 
						 | 
					c5a69d6e8b | ||
| 
						 | 
					a75c0e1562 | ||
| 
						 | 
					a97d76f428 | ||
| 
						 | 
					0e0539af3f | ||
| 
						 | 
					8d46f7266e | ||
| 
						 | 
					7f5ee39b25 | ||
| 
						 | 
					85333212b0 | ||
| 
						 | 
					577a415f10 | ||
| 
						 | 
					db24bf4d02 | ||
| 
						 | 
					21e0e0df98 | ||
| 
						 | 
					83015c8cff | ||
| 
						 | 
					7ca1ed019c | ||
| 
						 | 
					fb8f911c49 | ||
| 
						 | 
					b4a0b74bfd | ||
| 
						 | 
					99556bdbd2 | ||
| 
						 | 
					ec3b70e8fd | ||
| 
						 | 
					50ffcd4734 | ||
| 
						 | 
					55c1f2f3dc | ||
| 
						 | 
					99e04e1ded | ||
| 
						 | 
					884428e113 | ||
| 
						 | 
					00f58d71d6 | ||
| 
						 | 
					fa4ab5c8a3 | ||
| 
						 | 
					1528c46f0b | ||
| 
						 | 
					c5b9e4db64 | ||
| 
						 | 
					36f2fb3e52 | ||
| 
						 | 
					e379db8baf | ||
| 
						 | 
					91ba5cd412 | ||
| 
						 | 
					745d1f9444 | ||
| 
						 | 
					76f12fc596 | ||
| 
						 | 
					995906f299 | ||
| 
						 | 
					05ec444e2d | ||
| 
						 | 
					19911f5b81 | ||
| 
						 | 
					57b37b1e16 | ||
| 
						 | 
					91a3fd10e0 | ||
| 
						 | 
					6f0ebac209 | ||
| 
						 | 
					f40e6e5453 | ||
| 
						 | 
					8a07124457 | ||
| 
						 | 
					41c32af0d6 | ||
| 
						 | 
					3cb4196fee | ||
| 
						 | 
					a33108cd4f | ||
| 
						 | 
					a0d7c5db0e | ||
| 
						 | 
					baef2a0cb9 | ||
| 
						 | 
					f9b84bf5ee | ||
| 
						 | 
					ccab9d1be5 | ||
| 
						 | 
					58a2ece7b7 | ||
| 
						 | 
					aa16f936c8 | ||
| 
						 | 
					c8829beddd | ||
| 
						 | 
					3adc22d837 | ||
| 
						 | 
					71b1288220 | ||
| 
						 | 
					3c58303a9f | ||
| 
						 | 
					b8edf0dd68 | ||
| 
						 | 
					2fa3116c9c | ||
| 
						 | 
					d416ff9cfa | 
							
								
								
									
										2
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							@@ -80,7 +80,7 @@ git switch -c your-feature-branch
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### 4. Change paths in build.func install.func and AppName.sh
 | 
			
		||||
To be able to develop from your own branch you need to change `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main` to `https://raw.githubusercontent.com/[USER]/[REPOSITORY]/refs/head/[BRANCH]`. You need to make this change atleast in misc/build.func misc/install.func and in your ct/AppName.sh. This change is only for testing. Before opening a Pull Request you should change this line change all this back to point to `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main`.
 | 
			
		||||
To be able to develop from your own branch you need to change `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main` to `https://raw.githubusercontent.com/[USER]/[REPOSITORY]/refs/heads/[BRANCH]`. You need to make this change atleast in misc/build.func misc/install.func and in your ct/AppName.sh. This change is only for testing. Before opening a Pull Request you should change this line change all this back to point to `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main`.
 | 
			
		||||
 | 
			
		||||
### 4. Commit changes (without build.func and install.func!)
 | 
			
		||||
```bash
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/CONTRIBUTOR_GUIDE/ct/AppName.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/CONTRIBUTOR_GUIDE/ct/AppName.sh
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: [YourUserName]
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: [SOURCE_URL]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,8 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: [YourUserName]
 | 
			
		||||
# License: MIT
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: [SOURCE_URL]
 | 
			
		||||
 | 
			
		||||
# Import Functions und Setup
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ find ./ct -type f -name "*.sh" | sort | while read -r script; do
 | 
			
		||||
    output_file="${headers_dir}/$(basename "${script%.*}")"
 | 
			
		||||
 | 
			
		||||
    # Generate figlet output
 | 
			
		||||
    figlet_output=$(figlet -f slant "$app_name")
 | 
			
		||||
    figlet_output=$(figlet -w 500 -f slant "$app_name")
 | 
			
		||||
 | 
			
		||||
    # Check if figlet output is not empty
 | 
			
		||||
    if [[ -n "$figlet_output" ]]; then
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
    "files.associations": {
 | 
			
		||||
        "*.func": "shellscript"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										108
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										108
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -17,6 +17,114 @@ All LXC instances created using this repository come pre-installed with Midnight
 | 
			
		||||
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 2025-02-04
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
- Rename & Optimize: Proxmox Backup Server (Renaming & Update fix) [@thost96](https://github.com/thost96) ([#2012](https://github.com/community-scripts/ProxmoxVE/pull/2012))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: Authentik - Remove deprecated GO-Remove in Footer [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2020](https://github.com/community-scripts/ProxmoxVE/pull/2020))
 | 
			
		||||
- Fix: Authentik Fix wrong HDD Size [@thost96](https://github.com/thost96) ([#2001](https://github.com/community-scripts/ProxmoxVE/pull/2001))
 | 
			
		||||
- Fix: Tandoor - node Version [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2010](https://github.com/community-scripts/ProxmoxVE/pull/2010))
 | 
			
		||||
- Fix actual update - missing hidden files, downloaded release cleanup [@maciejmatczak](https://github.com/maciejmatczak) ([#2027](https://github.com/community-scripts/ProxmoxVE/pull/2027))
 | 
			
		||||
- Fix Script: post-pmg-install.sh [@thost96](https://github.com/thost96) ([#2022](https://github.com/community-scripts/ProxmoxVE/pull/2022))
 | 
			
		||||
- Fix Tianji: Add heap-space value for nodejs [@MickLesk](https://github.com/MickLesk) ([#2011](https://github.com/community-scripts/ProxmoxVE/pull/2011))
 | 
			
		||||
- Fix: Ghost LXC - Use Node20 [@MickLesk](https://github.com/MickLesk) ([#2006](https://github.com/community-scripts/ProxmoxVE/pull/2006))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- [API] Massive update to api (remove many, optimize website for users) [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1990](https://github.com/community-scripts/ProxmoxVE/pull/1990))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- Fix header comments on contributor templates [@tremor021](https://github.com/tremor021) ([#2029](https://github.com/community-scripts/ProxmoxVE/pull/2029))
 | 
			
		||||
- [Fix]: Headername of Proxmox-Datacenter-Manager not in CamelCase [@MickLesk](https://github.com/MickLesk) ([#2017](https://github.com/community-scripts/ProxmoxVE/pull/2017))
 | 
			
		||||
- [Fix] Header breaks at long title - add width for figlet github action [@MickLesk](https://github.com/MickLesk) ([#2015](https://github.com/community-scripts/ProxmoxVE/pull/2015))
 | 
			
		||||
 | 
			
		||||
## 2025-02-03
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New Script: Element Synapse [@tremor021](https://github.com/tremor021) ([#1955](https://github.com/community-scripts/ProxmoxVE/pull/1955))
 | 
			
		||||
- New Script: Privatebin [@opastorello](https://github.com/opastorello) ([#1925](https://github.com/community-scripts/ProxmoxVE/pull/1925))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: Monica Install with nodejs [@MickLesk](https://github.com/MickLesk) ([#1996](https://github.com/community-scripts/ProxmoxVE/pull/1996))
 | 
			
		||||
- Element Synapse sed fix [@tremor021](https://github.com/tremor021) ([#1994](https://github.com/community-scripts/ProxmoxVE/pull/1994))
 | 
			
		||||
- Fix Hoarder corepack install/update error [@vhsdream](https://github.com/vhsdream) ([#1957](https://github.com/community-scripts/ProxmoxVE/pull/1957))
 | 
			
		||||
- [Security & Maintenance] Update NodeJS Repo to 22 for new Installs [@MickLesk](https://github.com/MickLesk) ([#1984](https://github.com/community-scripts/ProxmoxVE/pull/1984))
 | 
			
		||||
- [Standardization]: Same Setup for GoLang on all LXC's & Clear Tarball [@MickLesk](https://github.com/MickLesk) ([#1977](https://github.com/community-scripts/ProxmoxVE/pull/1977))
 | 
			
		||||
- Feature: urbackupserver Include fuse&nesting features during install [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1968](https://github.com/community-scripts/ProxmoxVE/pull/1968))
 | 
			
		||||
- Fix: MSSQL-Server: Better gpg handling [@MickLesk](https://github.com/MickLesk) ([#1962](https://github.com/community-scripts/ProxmoxVE/pull/1962))
 | 
			
		||||
- Fix: Grist ran into a heap space during the update [@MickLesk](https://github.com/MickLesk) ([#1964](https://github.com/community-scripts/ProxmoxVE/pull/1964))
 | 
			
		||||
- Fix: FS-Trim Cancel / Error-Button [@MickLesk](https://github.com/MickLesk) ([#1965](https://github.com/community-scripts/ProxmoxVE/pull/1965))
 | 
			
		||||
- Fix: Increase HDD Space for Hoarder [@MickLesk](https://github.com/MickLesk) ([#1970](https://github.com/community-scripts/ProxmoxVE/pull/1970))
 | 
			
		||||
- Feature: Clean Orphan LVM without CEPH [@MickLesk](https://github.com/MickLesk) ([#1974](https://github.com/community-scripts/ProxmoxVE/pull/1974))
 | 
			
		||||
- [Standardization] Fix Spelling for "Setup Python3"  [@MickLesk](https://github.com/MickLesk) ([#1975](https://github.com/community-scripts/ProxmoxVE/pull/1975))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- [Website] update data/page.tsx [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1969](https://github.com/community-scripts/ProxmoxVE/pull/1969))
 | 
			
		||||
- Prometheus Proxmox VE Exporter: Set correct website slug [@andygrunwald](https://github.com/andygrunwald) ([#1961](https://github.com/community-scripts/ProxmoxVE/pull/1961))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- [API] Remove Hostname, Verbose, SSH and TAGS [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1967](https://github.com/community-scripts/ProxmoxVE/pull/1967))
 | 
			
		||||
 | 
			
		||||
## 2025-02-02
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Prometheus PVE Exporter: Add `--default-timeout=300` to pip install commands [@andygrunwald](https://github.com/andygrunwald) ([#1950](https://github.com/community-scripts/ProxmoxVE/pull/1950))
 | 
			
		||||
- fix z2m update function to 2.1.0 [@MickLesk](https://github.com/MickLesk) ([#1938](https://github.com/community-scripts/ProxmoxVE/pull/1938))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- VSCode: Add Shellscript Syntax highlighting for *.func files [@andygrunwald](https://github.com/andygrunwald) ([#1948](https://github.com/community-scripts/ProxmoxVE/pull/1948))
 | 
			
		||||
 | 
			
		||||
## 2025-02-01
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
- [DCMA] Delete scripts 5etools and pf2etools - Copyright abuse [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1922](https://github.com/community-scripts/ProxmoxVE/pull/1922))
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New script: Baïkal [@bvdberg01](https://github.com/bvdberg01) ([#1913](https://github.com/community-scripts/ProxmoxVE/pull/1913))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Bug fix: Paymenter [@opastorello](https://github.com/opastorello) ([#1917](https://github.com/community-scripts/ProxmoxVE/pull/1917))
 | 
			
		||||
 | 
			
		||||
## 2025-01-31
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New Script: Paymenter [@opastorello](https://github.com/opastorello) ([#1827](https://github.com/community-scripts/ProxmoxVE/pull/1827))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- [Fix] Alpine-IT-Tools, add missing ssh package for root ssh access [@CrazyWolf13](https://github.com/CrazyWolf13) ([#1891](https://github.com/community-scripts/ProxmoxVE/pull/1891))
 | 
			
		||||
- [Fix] Change Download of Trilium after there change the tag/release logic [@MickLesk](https://github.com/MickLesk) ([#1892](https://github.com/community-scripts/ProxmoxVE/pull/1892))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- [Website] Enhance DataFetcher with better UI components and add reactive data fetching intervals [@BramSuurdje](https://github.com/BramSuurdje) ([#1902](https://github.com/community-scripts/ProxmoxVE/pull/1902))
 | 
			
		||||
- [Website] Update /data/page.tsx [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1900](https://github.com/community-scripts/ProxmoxVE/pull/1900))
 | 
			
		||||
 | 
			
		||||
## 2025-01-30
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										113
									
								
								ct/5etools.sh
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								ct/5etools.sh
									
									
									
									
									
								
							@@ -1,113 +0,0 @@
 | 
			
		||||
#!/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: TheRealVira
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://5e.tools/
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="5etools"
 | 
			
		||||
var_tags="wiki"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_disk="13"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
# App Output & Base Settings
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
base_settings
 | 
			
		||||
 | 
			
		||||
# Core
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
 | 
			
		||||
    # Check if installation is present | -f for file, -d for folder
 | 
			
		||||
    if [[ ! -d "/opt/${APP}" ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/5etools-mirror-3/5etools-src/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f "/opt/${APP}_version.txt" ]]; then
 | 
			
		||||
        # Crawling the new version and checking whether an update is required
 | 
			
		||||
        msg_info "Updating System"
 | 
			
		||||
        apt-get update &>/dev/null
 | 
			
		||||
        apt-get -y upgrade &>/dev/null
 | 
			
		||||
        msg_ok "Updated System"
 | 
			
		||||
 | 
			
		||||
        # Execute Update
 | 
			
		||||
        msg_info "Updating base 5etools"
 | 
			
		||||
        cd /opt
 | 
			
		||||
        wget -q "https://github.com/5etools-mirror-3/5etools-src/archive/refs/tags/${RELEASE}.zip"
 | 
			
		||||
        unzip -q "${RELEASE}.zip"
 | 
			
		||||
        mv "/opt/${APP}/img" "/opt/img-backup"
 | 
			
		||||
        rm -rf "/opt/${APP}"
 | 
			
		||||
        mv "${APP}-src-${RELEASE:1}" "/opt/${APP}"
 | 
			
		||||
        mv "/opt/img-backup" "/opt/${APP}/img"
 | 
			
		||||
        cd /opt/5etools
 | 
			
		||||
        $STD npm install
 | 
			
		||||
        $STD npm run build
 | 
			
		||||
        cd ~
 | 
			
		||||
        echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
        chown -R www-data: "/opt/${APP}"
 | 
			
		||||
        chmod -R 755 "/opt/${APP}"
 | 
			
		||||
        msg_ok "Updated base 5etools"
 | 
			
		||||
        # Cleaning up
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf /opt/${RELEASE}.zip
 | 
			
		||||
        $STD apt-get -y autoremove
 | 
			
		||||
        $STD apt-get -y autoclean
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. Base ${APP} is already at ${RELEASE}"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    IMG_RELEASE=$(curl -s https://api.github.com/repos/5etools-mirror-2/5etools-img/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    if [[ "${IMG_RELEASE}" != "$(cat /opt/${APP}_IMG_version.txt)" ]] || [[ ! -f "/opt/${APP}_IMG_version.txt" ]]; then
 | 
			
		||||
        # Crawling the new version and checking whether an update is required
 | 
			
		||||
        msg_info "Updating System"
 | 
			
		||||
        apt-get update &>/dev/null
 | 
			
		||||
        apt-get -y upgrade &>/dev/null
 | 
			
		||||
        msg_ok "Updated System"
 | 
			
		||||
 | 
			
		||||
        # Execute Update
 | 
			
		||||
        msg_info "Updating 5etools images"
 | 
			
		||||
        curl -sSL "https://github.com/5etools-mirror-2/5etools-img/archive/refs/tags/${IMG_RELEASE}.zip" > "${IMG_RELEASE}.zip"
 | 
			
		||||
        unzip -q "${IMG_RELEASE}.zip"
 | 
			
		||||
        rm -rf "/opt/${APP}/img"
 | 
			
		||||
        mv "${APP}-img-${IMG_RELEASE:1}" "/opt/${APP}/img"
 | 
			
		||||
        echo "${IMG_RELEASE}" >"/opt/${APP}_IMG_version.txt"
 | 
			
		||||
        chown -R www-data: "/opt/${APP}"
 | 
			
		||||
        chmod -R 755 "/opt/${APP}"
 | 
			
		||||
 | 
			
		||||
        msg_ok "Updating 5etools images"
 | 
			
		||||
 | 
			
		||||
        # Cleaning up
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf /opt/${RELEASE}.zip
 | 
			
		||||
        rm -rf ${IMG_RELEASE}.zip
 | 
			
		||||
        $STD apt-get -y autoremove
 | 
			
		||||
        $STD apt-get -y autoclean
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} images are already at ${IMG_RELEASE}"
 | 
			
		||||
    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}http://${IP}${CL}"
 | 
			
		||||
@@ -44,9 +44,8 @@ function update_script() {
 | 
			
		||||
        cd /tmp
 | 
			
		||||
        wget -q https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz
 | 
			
		||||
        mv /opt/actualbudget /opt/actualbudget_bak
 | 
			
		||||
        mkdir -p /opt/actualbudget/
 | 
			
		||||
        tar -xzf v${RELEASE}.tar.gz >/dev/null 2>&1
 | 
			
		||||
        mv *ctual-server-*/* /opt/actualbudget
 | 
			
		||||
        mv *ctual-server-* /opt/actualbudget
 | 
			
		||||
        rm -rf /opt/actualbudget/.env
 | 
			
		||||
        mv /opt/actualbudget_bak/.env /opt/actualbudget
 | 
			
		||||
        mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
 | 
			
		||||
@@ -61,7 +60,7 @@ function update_script() {
 | 
			
		||||
        
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf /opt/actualbudget_bak
 | 
			
		||||
        rm -rf /tmp/actual-server.tar.gz
 | 
			
		||||
        rm -rf /tmp/v${RELEASE}.tar.gz
 | 
			
		||||
        msg_ok "Cleaned"
 | 
			
		||||
        msg_ok "Updated Successfully"
 | 
			
		||||
    else
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="Authentik"
 | 
			
		||||
var_tags="identity-provider"
 | 
			
		||||
var_disk="15"
 | 
			
		||||
var_disk="12"
 | 
			
		||||
var_cpu="6"
 | 
			
		||||
var_ram="8192"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										75
									
								
								ct/baikal.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								ct/baikal.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
#!/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: bvdberg01
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://sabre.io/baikal/
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="Baikal"
 | 
			
		||||
var_tags="Dav"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
# App Output & Base Settings
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
base_settings
 | 
			
		||||
 | 
			
		||||
# Core
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/baikal ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    wget -q "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip"
 | 
			
		||||
    mv /opt/baikal /opt/baikal-backup
 | 
			
		||||
    unzip -o -q "baikal-${RELEASE}.zip"
 | 
			
		||||
    cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
 | 
			
		||||
    cp -r /opt/baikal-backup/Specific/ /opt/baikal/
 | 
			
		||||
    chown -R www-data:www-data /opt/baikal/
 | 
			
		||||
    chmod -R 755 /opt/baikal/
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf "/opt/baikal-${RELEASE}.zip"
 | 
			
		||||
    rm -rf /opt/baikal-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
@@ -73,7 +73,7 @@ function update_script() {
 | 
			
		||||
    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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
    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"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								ct/elementsynapse.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								ct/elementsynapse.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
#!/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: tremor021
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/element-hq/synapse
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="Element Synapse"
 | 
			
		||||
var_tags="server"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="1024"
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
# App Output & Base Settings
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
base_settings
 | 
			
		||||
 | 
			
		||||
# Core 
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /etc/matrix-synapse ]]; then 
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    apt-get update &>/dev/null
 | 
			
		||||
    apt-get -y upgrade &>/dev/null
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
    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}:8008${CL}"
 | 
			
		||||
@@ -5,9 +5,9 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="Grist"
 | 
			
		||||
var_tags="database;spreadsheet"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="2048"
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="3072"
 | 
			
		||||
var_disk="6"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
    ______     __              __    
 | 
			
		||||
   / ____/__  / /_____  ____  / /____
 | 
			
		||||
  /___ \/ _ \/ __/ __ \/ __ \/ / ___/
 | 
			
		||||
 ____/ /  __/ /_/ /_/ / /_/ / (__  ) 
 | 
			
		||||
/_____/\___/\__/\____/\____/_/____/  
 | 
			
		||||
                                     
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    ___    __      _                  _   __          __       __           
 | 
			
		||||
   /   |  / /___  (_)___  ___        / | / /__  _  __/ /______/ /___  __  __
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______/  |/ / _ \| |/_/ __/ ___/ / __ \/ / / /
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ /|  /  __/>  </ /_/ /__/ / /_/ / /_/ / 
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/     /_/ |_/\___/_/|_|\__/\___/_/\____/\__,_/  
 | 
			
		||||
        /_/                                                                 
 | 
			
		||||
       __
 | 
			
		||||
  ____/ /
 | 
			
		||||
 / __  / 
 | 
			
		||||
/ /_/ /  
 | 
			
		||||
\__,_/   
 | 
			
		||||
         
 | 
			
		||||
    ___    __      _                  _   __          __       __                __
 | 
			
		||||
   /   |  / /___  (_)___  ___        / | / /__  _  __/ /______/ /___  __  ______/ /
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______/  |/ / _ \| |/_/ __/ ___/ / __ \/ / / / __  / 
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ /|  /  __/>  </ /_/ /__/ / /_/ / /_/ / /_/ /  
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/     /_/ |_/\___/_/|_|\__/\___/_/\____/\__,_/\__,_/   
 | 
			
		||||
        /_/                                                                        
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    ___    __      _                _    __            ____                
 | 
			
		||||
   /   |  / /___  (_)___  ___      | |  / /___ ___  __/ / /__      ______ _
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / / / / __/ | /| / / __ `/
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ |/ / /_/ / /_/ / / /_ | |/ |/ / /_/ / 
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/      |___/\__,_/\__,_/_/\__/ |__/|__/\__,_/  
 | 
			
		||||
        /_/                                                                
 | 
			
		||||
             __         
 | 
			
		||||
   _________/ /__  ____ 
 | 
			
		||||
  / ___/ __  / _ \/ __ \
 | 
			
		||||
 / /  / /_/ /  __/ / / /
 | 
			
		||||
/_/   \__,_/\___/_/ /_/ 
 | 
			
		||||
                        
 | 
			
		||||
    ___    __      _                _    __            ____                          __         
 | 
			
		||||
   /   |  / /___  (_)___  ___      | |  / /___ ___  __/ / /__      ______ __________/ /__  ____ 
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / / / / __/ | /| / / __ `/ ___/ __  / _ \/ __ \
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ |/ / /_/ / /_/ / / /_ | |/ |/ / /_/ / /  / /_/ /  __/ / / /
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/      |___/\__,_/\__,_/_/\__/ |__/|__/\__,_/_/   \__,_/\___/_/ /_/ 
 | 
			
		||||
        /_/                                                                                     
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    ___    __      _               _____   _       __             ___   __  ___
 | 
			
		||||
   /   |  / /___  (_)___  ___     /__  /  (_)___ _/ /_  ___  ___ |__ \ /  |/  /
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______/ /  / / __ `/ __ \/ _ \/ _ \__/ // /|_/ / 
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ /__/ / /_/ / /_/ /  __/  __/ __// /  / /  
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/     /____/_/\__, /_.___/\___/\___/____/_/  /_/   
 | 
			
		||||
        /_/                              /____/                                
 | 
			
		||||
   ____  ____________
 | 
			
		||||
  / __ \/_  __/_  __/
 | 
			
		||||
 / / / / / /   / /   
 | 
			
		||||
/ /_/ / / /   / /    
 | 
			
		||||
\___\_\/_/   /_/     
 | 
			
		||||
                     
 | 
			
		||||
    ___    __      _               _____   _       __             ___   __  _______  ____________
 | 
			
		||||
   /   |  / /___  (_)___  ___     /__  /  (_)___ _/ /_  ___  ___ |__ \ /  |/  / __ \/_  __/_  __/
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______/ /  / / __ `/ __ \/ _ \/ _ \__/ // /|_/ / / / / / /   / /   
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ /__/ / /_/ / /_/ /  __/  __/ __// /  / / /_/ / / /   / /    
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/     /____/_/\__, /_.___/\___/\___/____/_/  /_/\___\_\/_/   /_/     
 | 
			
		||||
        /_/                              /____/                                                  
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    ___                     __               ______                          
 | 
			
		||||
   /   |  ____  ____ ______/ /_  ___        / ____/___ _______________ _____ 
 | 
			
		||||
  / /| | / __ \/ __ `/ ___/ __ \/ _ \______/ /   / __ `/ ___/ ___/ __ `/ __ \
 | 
			
		||||
 / ___ |/ /_/ / /_/ / /__/ / / /  __/_____/ /___/ /_/ (__  |__  ) /_/ / / / /
 | 
			
		||||
/_/  |_/ .___/\__,_/\___/_/ /_/\___/      \____/\__,_/____/____/\__,_/_/ /_/ 
 | 
			
		||||
      /_/                                                                    
 | 
			
		||||
       __          
 | 
			
		||||
  ____/ /________ _
 | 
			
		||||
 / __  / ___/ __ `/
 | 
			
		||||
/ /_/ / /  / /_/ / 
 | 
			
		||||
\__,_/_/   \__,_/  
 | 
			
		||||
                   
 | 
			
		||||
    ___                     __               ______                                __          
 | 
			
		||||
   /   |  ____  ____ ______/ /_  ___        / ____/___ _______________ _____  ____/ /________ _
 | 
			
		||||
  / /| | / __ \/ __ `/ ___/ __ \/ _ \______/ /   / __ `/ ___/ ___/ __ `/ __ \/ __  / ___/ __ `/
 | 
			
		||||
 / ___ |/ /_/ / /_/ / /__/ / / /  __/_____/ /___/ /_/ (__  |__  ) /_/ / / / / /_/ / /  / /_/ / 
 | 
			
		||||
/_/  |_/ .___/\__,_/\___/_/ /_/\___/      \____/\__,_/____/____/\__,_/_/ /_/\__,_/_/   \__,_/  
 | 
			
		||||
      /_/                                                                                      
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    ___                     __               ______                 __    ____ 
 | 
			
		||||
   /   |  ____  ____ ______/ /_  ___        / ____/___  __  _______/ /_  / __ \
 | 
			
		||||
  / /| | / __ \/ __ `/ ___/ __ \/ _ \______/ /   / __ \/ / / / ___/ __ \/ / / /
 | 
			
		||||
 / ___ |/ /_/ / /_/ / /__/ / / /  __/_____/ /___/ /_/ / /_/ / /__/ / / / /_/ / 
 | 
			
		||||
/_/  |_/ .___/\__,_/\___/_/ /_/\___/      \____/\____/\__,_/\___/_/ /_/_____/  
 | 
			
		||||
      /_/                                                                      
 | 
			
		||||
    ____ 
 | 
			
		||||
   / __ )
 | 
			
		||||
  / __  |
 | 
			
		||||
 / /_/ / 
 | 
			
		||||
/_____/  
 | 
			
		||||
         
 | 
			
		||||
    ___                     __               ______                 __    ____  ____ 
 | 
			
		||||
   /   |  ____  ____ ______/ /_  ___        / ____/___  __  _______/ /_  / __ \/ __ )
 | 
			
		||||
  / /| | / __ \/ __ `/ ___/ __ \/ _ \______/ /   / __ \/ / / / ___/ __ \/ / / / __  |
 | 
			
		||||
 / ___ |/ /_/ / /_/ / /__/ / / /  __/_____/ /___/ /_/ / /_/ / /__/ / / / /_/ / /_/ / 
 | 
			
		||||
/_/  |_/ .___/\__,_/\___/_/ /_/\___/      \____/\____/\__,_/\___/_/ /_/_____/_____/  
 | 
			
		||||
      /_/                                                                            
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    ___                     __               ______                      
 | 
			
		||||
   /   |  ____  ____ ______/ /_  ___        / ____/_  ______ __________ _
 | 
			
		||||
  / /| | / __ \/ __ `/ ___/ __ \/ _ \______/ / __/ / / / __ `/ ___/ __ `/
 | 
			
		||||
 / ___ |/ /_/ / /_/ / /__/ / / /  __/_____/ /_/ / /_/ / /_/ / /__/ /_/ / 
 | 
			
		||||
/_/  |_/ .___/\__,_/\___/_/ /_/\___/      \____/\__,_/\__,_/\___/\__,_/  
 | 
			
		||||
      /_/                                                                
 | 
			
		||||
                    __   
 | 
			
		||||
   ____ ___  ____  / /__ 
 | 
			
		||||
  / __ `__ \/ __ \/ / _ \
 | 
			
		||||
 / / / / / / /_/ / /  __/
 | 
			
		||||
/_/ /_/ /_/\____/_/\___/ 
 | 
			
		||||
                         
 | 
			
		||||
    ___                     __               ______                                       __   
 | 
			
		||||
   /   |  ____  ____ ______/ /_  ___        / ____/_  ______ __________ _____ ___  ____  / /__ 
 | 
			
		||||
  / /| | / __ \/ __ `/ ___/ __ \/ _ \______/ / __/ / / / __ `/ ___/ __ `/ __ `__ \/ __ \/ / _ \
 | 
			
		||||
 / ___ |/ /_/ / /_/ / /__/ / / /  __/_____/ /_/ / /_/ / /_/ / /__/ /_/ / / / / / / /_/ / /  __/
 | 
			
		||||
/_/  |_/ .___/\__,_/\___/_/ /_/\___/      \____/\__,_/\__,_/\___/\__,_/_/ /_/ /_/\____/_/\___/ 
 | 
			
		||||
      /_/                                                                                      
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/baikal
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/baikal
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____        _ __         __
 | 
			
		||||
   / __ )____ _(_) /______ _/ /
 | 
			
		||||
  / __  / __ `/ / //_/ __ `/ / 
 | 
			
		||||
 / /_/ / /_/ / / ,< / /_/ / /  
 | 
			
		||||
/_____/\__,_/_/_/|_|\__,_/_/   
 | 
			
		||||
                               
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
   ________                         
 | 
			
		||||
  / ____/ /_  ____ _____  ____ ____ 
 | 
			
		||||
 / /   / __ \/ __ `/ __ \/ __ `/ _ \
 | 
			
		||||
/ /___/ / / / /_/ / / / / /_/ /  __/
 | 
			
		||||
\____/_/ /_/\__,_/_/ /_/\__, /\___/ 
 | 
			
		||||
                       /____/       
 | 
			
		||||
    ____       __            __  _           
 | 
			
		||||
   / __ \___  / /____  _____/ /_(_)___  ____ 
 | 
			
		||||
  / / / / _ \/ __/ _ \/ ___/ __/ / __ \/ __ \
 | 
			
		||||
 / /_/ /  __/ /_/  __/ /__/ /_/ / /_/ / / / /
 | 
			
		||||
/_____/\___/\__/\___/\___/\__/_/\____/_/ /_/ 
 | 
			
		||||
                                             
 | 
			
		||||
   ________                              ____       __            __  _           
 | 
			
		||||
  / ____/ /_  ____ _____  ____ ____     / __ \___  / /____  _____/ /_(_)___  ____ 
 | 
			
		||||
 / /   / __ \/ __ `/ __ \/ __ `/ _ \   / / / / _ \/ __/ _ \/ ___/ __/ / __ \/ __ \
 | 
			
		||||
/ /___/ / / / /_/ / / / / /_/ /  __/  / /_/ /  __/ /_/  __/ /__/ /_/ / /_/ / / / /
 | 
			
		||||
\____/_/ /_/\__,_/_/ /_/\__, /\___/  /_____/\___/\__/\___/\___/\__/_/\____/_/ /_/ 
 | 
			
		||||
                       /____/                                                     
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    ____        __             __     ___   _____ ____     _       __     __  
 | 
			
		||||
   / __ \____  / /_____  ___  / /_   /   | / ___// __ \   | |     / /__  / /_ 
 | 
			
		||||
  / / / / __ \/ __/ __ \/ _ \/ __/  / /| | \__ \/ /_/ /   | | /| / / _ \/ __ \
 | 
			
		||||
 / /_/ / /_/ / /_/ / / /  __/ /_   / ___ |___/ / ____/    | |/ |/ /  __/ /_/ /
 | 
			
		||||
/_____/\____/\__/_/ /_/\___/\__/  /_/  |_/____/_/         |__/|__/\___/_.___/ 
 | 
			
		||||
                                                                              
 | 
			
		||||
    ___    ____  ____
 | 
			
		||||
   /   |  / __ \/  _/
 | 
			
		||||
  / /| | / /_/ // /  
 | 
			
		||||
 / ___ |/ ____// /   
 | 
			
		||||
/_/  |_/_/   /___/   
 | 
			
		||||
                     
 | 
			
		||||
    ____        __             __     ___   _____ ____     _       __     __       ___    ____  ____
 | 
			
		||||
   / __ \____  / /_____  ___  / /_   /   | / ___// __ \   | |     / /__  / /_     /   |  / __ \/  _/
 | 
			
		||||
  / / / / __ \/ __/ __ \/ _ \/ __/  / /| | \__ \/ /_/ /   | | /| / / _ \/ __ \   / /| | / /_/ // /  
 | 
			
		||||
 / /_/ / /_/ / /_/ / / /  __/ /_   / ___ |___/ / ____/    | |/ |/ /  __/ /_/ /  / ___ |/ ____// /   
 | 
			
		||||
/_____/\____/\__/_/ /_/\___/\__/  /_/  |_/____/_/         |__/|__/\___/_.___/  /_/  |_/_/   /___/   
 | 
			
		||||
                                                                                                    
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/elementsynapse
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/elementsynapse
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ________                          __     _____                                 
 | 
			
		||||
   / ____/ /__  ____ ___  ___  ____  / /_   / ___/__  ______  ____ _____  ________ 
 | 
			
		||||
  / __/ / / _ \/ __ `__ \/ _ \/ __ \/ __/   \__ \/ / / / __ \/ __ `/ __ \/ ___/ _ \
 | 
			
		||||
 / /___/ /  __/ / / / / /  __/ / / / /_    ___/ / /_/ / / / / /_/ / /_/ (__  )  __/
 | 
			
		||||
/_____/_/\___/_/ /_/ /_/\___/_/ /_/\__/   /____/\__, /_/ /_/\__,_/ .___/____/\___/ 
 | 
			
		||||
                                               /____/           /_/                
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    __  __     _               __      ____      ____             __    __  
 | 
			
		||||
   / / / /__  (_)___ ___  ____/ /___ _/ / /     / __ \____ ______/ /_  / /_ 
 | 
			
		||||
  / /_/ / _ \/ / __ `__ \/ __  / __ `/ / /_____/ / / / __ `/ ___/ __ \/ __ \
 | 
			
		||||
 / __  /  __/ / / / / / / /_/ / /_/ / / /_____/ /_/ / /_/ (__  ) / / / /_/ /
 | 
			
		||||
/_/ /_/\___/_/_/ /_/ /_/\__,_/\__,_/_/_/     /_____/\__,_/____/_/ /_/_.___/ 
 | 
			
		||||
                                                                            
 | 
			
		||||
                        __
 | 
			
		||||
  ____  ____ __________/ /
 | 
			
		||||
 / __ \/ __ `/ ___/ __  / 
 | 
			
		||||
/ /_/ / /_/ / /  / /_/ /  
 | 
			
		||||
\____/\__,_/_/   \__,_/   
 | 
			
		||||
                          
 | 
			
		||||
    __  __     _               __      ____      ____             __    __                         __
 | 
			
		||||
   / / / /__  (_)___ ___  ____/ /___ _/ / /     / __ \____ ______/ /_  / /_  ____  ____ __________/ /
 | 
			
		||||
  / /_/ / _ \/ / __ `__ \/ __  / __ `/ / /_____/ / / / __ `/ ___/ __ \/ __ \/ __ \/ __ `/ ___/ __  / 
 | 
			
		||||
 / __  /  __/ / / / / / / /_/ / /_/ / / /_____/ /_/ / /_/ (__  ) / / / /_/ / /_/ / /_/ / /  / /_/ /  
 | 
			
		||||
/_/ /_/\___/_/_/ /_/ /_/\__,_/\__,_/_/_/     /_____/\__,_/____/_/ /_/_.___/\____/\__,_/_/   \__,_/   
 | 
			
		||||
                                                                                                     
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    __  __                   
 | 
			
		||||
   / / / /___  ____ ___  ___ 
 | 
			
		||||
  / /_/ / __ \/ __ `__ \/ _ \
 | 
			
		||||
 / __  / /_/ / / / / / /  __/
 | 
			
		||||
/_/ /_/\____/_/ /_/ /_/\___/ 
 | 
			
		||||
                             
 | 
			
		||||
    ___              _      __              __        ______              
 | 
			
		||||
   /   |  __________(_)____/ /_____ _____  / /_      / ____/___  ________ 
 | 
			
		||||
  / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ /   / __ \/ ___/ _ \
 | 
			
		||||
 / ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / /  /  __/
 | 
			
		||||
/_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/      \____/\____/_/   \___/ 
 | 
			
		||||
                                                                          
 | 
			
		||||
    __  __                        ___              _      __              __        ______              
 | 
			
		||||
   / / / /___  ____ ___  ___     /   |  __________(_)____/ /_____ _____  / /_      / ____/___  ________ 
 | 
			
		||||
  / /_/ / __ \/ __ `__ \/ _ \   / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ /   / __ \/ ___/ _ \
 | 
			
		||||
 / __  / /_/ / / / / / /  __/  / ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / /  /  __/
 | 
			
		||||
/_/ /_/\____/_/ /_/ /_/\___/  /_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/      \____/\____/_/   \___/ 
 | 
			
		||||
                                                                                                        
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    _   __      _               ____                       
 | 
			
		||||
   / | / /___ _(_)___  _  __   / __ \_________  _  ____  __
 | 
			
		||||
  /  |/ / __ `/ / __ \| |/_/  / /_/ / ___/ __ \| |/_/ / / /
 | 
			
		||||
 / /|  / /_/ / / / / />  <   / ____/ /  / /_/ />  </ /_/ / 
 | 
			
		||||
/_/ |_/\__, /_/_/ /_/_/|_|  /_/   /_/   \____/_/|_|\__, /  
 | 
			
		||||
      /____/                                      /____/   
 | 
			
		||||
    __  ___                                 
 | 
			
		||||
   /  |/  /___ _____  ____ _____ ____  _____
 | 
			
		||||
  / /|_/ / __ `/ __ \/ __ `/ __ `/ _ \/ ___/
 | 
			
		||||
 / /  / / /_/ / / / / /_/ / /_/ /  __/ /    
 | 
			
		||||
/_/  /_/\__,_/_/ /_/\__,_/\__, /\___/_/     
 | 
			
		||||
                         /____/             
 | 
			
		||||
    _   __      _               ____                           __  ___                                 
 | 
			
		||||
   / | / /___ _(_)___  _  __   / __ \_________  _  ____  __   /  |/  /___ _____  ____ _____ ____  _____
 | 
			
		||||
  /  |/ / __ `/ / __ \| |/_/  / /_/ / ___/ __ \| |/_/ / / /  / /|_/ / __ `/ __ \/ __ `/ __ `/ _ \/ ___/
 | 
			
		||||
 / /|  / /_/ / / / / />  <   / ____/ /  / /_/ />  </ /_/ /  / /  / / /_/ / / / / /_/ / /_/ /  __/ /    
 | 
			
		||||
/_/ |_/\__, /_/_/ /_/_/|_|  /_/   /_/   \____/_/|_|\__, /  /_/  /_/\__,_/_/ /_/\__,_/\__, /\___/_/     
 | 
			
		||||
      /____/                                      /____/                            /____/             
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/paymenter
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/paymenter
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____                                   __           
 | 
			
		||||
   / __ \____ ___  ______ ___  ___  ____  / /____  _____
 | 
			
		||||
  / /_/ / __ `/ / / / __ `__ \/ _ \/ __ \/ __/ _ \/ ___/
 | 
			
		||||
 / ____/ /_/ / /_/ / / / / / /  __/ / / / /_/  __/ /    
 | 
			
		||||
/_/    \__,_/\__, /_/ /_/ /_/\___/_/ /_/\__/\___/_/     
 | 
			
		||||
            /____/                                      
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
    ____  ____ _____
 | 
			
		||||
   / __ \/ __ ) ___/
 | 
			
		||||
  / /_/ / __  \__ \ 
 | 
			
		||||
 / ____/ /_/ /__/ / 
 | 
			
		||||
/_/   /_____/____/  
 | 
			
		||||
                    
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
    ____  _______      ______            __    
 | 
			
		||||
   / __ \/ __/__ \ ___/_  __/___  ____  / /____
 | 
			
		||||
  / /_/ / /_ __/ // _ \/ / / __ \/ __ \/ / ___/
 | 
			
		||||
 / ____/ __// __//  __/ / / /_/ / /_/ / (__  ) 
 | 
			
		||||
/_/   /_/  /____/\___/_/  \____/\____/_/____/  
 | 
			
		||||
                                               
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    ____            __                            __  __                   
 | 
			
		||||
   / __ \____  ____/ /___ ___  ____ _____        / / / /___  ____ ___  ___ 
 | 
			
		||||
  / /_/ / __ \/ __  / __ `__ \/ __ `/ __ \______/ /_/ / __ \/ __ `__ \/ _ \
 | 
			
		||||
 / ____/ /_/ / /_/ / / / / / / /_/ / / / /_____/ __  / /_/ / / / / / /  __/
 | 
			
		||||
/_/    \____/\__,_/_/ /_/ /_/\__,_/_/ /_/     /_/ /_/\____/_/ /_/ /_/\___/ 
 | 
			
		||||
                                                                           
 | 
			
		||||
    ___              _      __              __ 
 | 
			
		||||
   /   |  __________(_)____/ /_____ _____  / /_
 | 
			
		||||
  / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/
 | 
			
		||||
 / ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_  
 | 
			
		||||
/_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/  
 | 
			
		||||
                                               
 | 
			
		||||
    ____            __                            __  __                        ___              _      __              __ 
 | 
			
		||||
   / __ \____  ____/ /___ ___  ____ _____        / / / /___  ____ ___  ___     /   |  __________(_)____/ /_____ _____  / /_
 | 
			
		||||
  / /_/ / __ \/ __  / __ `__ \/ __ `/ __ \______/ /_/ / __ \/ __ `__ \/ _ \   / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/
 | 
			
		||||
 / ____/ /_/ / /_/ / / / / / / /_/ / / / /_____/ __  / /_/ / / / / / /  __/  / ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_  
 | 
			
		||||
/_/    \____/\__,_/_/ /_/ /_/\__,_/_/ /_/     /_/ /_/\____/_/ /_/ /_/\___/  /_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/  
 | 
			
		||||
                                                                                                                           
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/privatebin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/privatebin
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____       _             __       ____  _     
 | 
			
		||||
   / __ \_____(_)   ______ _/ /____  / __ )(_)___ 
 | 
			
		||||
  / /_/ / ___/ / | / / __ `/ __/ _ \/ __  / / __ \
 | 
			
		||||
 / ____/ /  / /| |/ / /_/ / /_/  __/ /_/ / / / / /
 | 
			
		||||
/_/   /_/  /_/ |___/\__,_/\__/\___/_____/_/_/ /_/ 
 | 
			
		||||
                                                  
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    ____                            __  __                          ___    __
 | 
			
		||||
   / __ \_________  ____ ___  ___  / /_/ /_  ___  __  _______      /   |  / /
 | 
			
		||||
  / /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /| | / / 
 | 
			
		||||
 / ____/ /  / /_/ / / / / / /  __/ /_/ / / /  __/ /_/ (__  )_____/ ___ |/ /  
 | 
			
		||||
/_/   /_/   \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/     /_/  |_/_/   
 | 
			
		||||
                                                                             
 | 
			
		||||
             __                                             
 | 
			
		||||
  ___  _____/ /_____ ___  ____ _____  ____ _____ ____  _____
 | 
			
		||||
 / _ \/ ___/ __/ __ `__ \/ __ `/ __ \/ __ `/ __ `/ _ \/ ___/
 | 
			
		||||
/  __/ /  / /_/ / / / / / /_/ / / / / /_/ / /_/ /  __/ /    
 | 
			
		||||
\___/_/   \__/_/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/     
 | 
			
		||||
                                         /____/             
 | 
			
		||||
    ____                            __  __                          ___    __          __                                             
 | 
			
		||||
   / __ \_________  ____ ___  ___  / /_/ /_  ___  __  _______      /   |  / /__  _____/ /_____ ___  ____ _____  ____ _____ ____  _____
 | 
			
		||||
  / /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /| | / / _ \/ ___/ __/ __ `__ \/ __ `/ __ \/ __ `/ __ `/ _ \/ ___/
 | 
			
		||||
 / ____/ /  / /_/ / / / / / /  __/ /_/ / / /  __/ /_/ (__  )_____/ ___ |/ /  __/ /  / /_/ / / / / / /_/ / / / / /_/ / /_/ /  __/ /    
 | 
			
		||||
/_/   /_/   \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/     /_/  |_/_/\___/_/   \__/_/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/     
 | 
			
		||||
                                                                                                                   /____/             
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
    ____                            __  __                          ____ 
 | 
			
		||||
   / __ \_________  ____ ___  ___  / /_/ /_  ___  __  _______      / __ \
 | 
			
		||||
  / /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /_/ /
 | 
			
		||||
 / ____/ /  / /_/ / / / / / /  __/ /_/ / / /  __/ /_/ (__  )_____/ ____/ 
 | 
			
		||||
/_/   /_/   \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/     /_/      
 | 
			
		||||
                                                                         
 | 
			
		||||
 _    ________     ______                      __           
 | 
			
		||||
| |  / / ____/    / ____/  ______  ____  _____/ /____  _____
 | 
			
		||||
| | / / __/______/ __/ | |/_/ __ \/ __ \/ ___/ __/ _ \/ ___/
 | 
			
		||||
| |/ / /__/_____/ /____>  </ /_/ / /_/ / /  / /_/  __/ /    
 | 
			
		||||
|___/_____/    /_____/_/|_/ .___/\____/_/   \__/\___/_/     
 | 
			
		||||
                         /_/                                
 | 
			
		||||
    ____                            __  __                          ____ _    ________     ______                      __           
 | 
			
		||||
   / __ \_________  ____ ___  ___  / /_/ /_  ___  __  _______      / __ \ |  / / ____/    / ____/  ______  ____  _____/ /____  _____
 | 
			
		||||
  / /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /_/ / | / / __/______/ __/ | |/_/ __ \/ __ \/ ___/ __/ _ \/ ___/
 | 
			
		||||
 / ____/ /  / /_/ / / / / / /  __/ /_/ / / /  __/ /_/ (__  )_____/ ____/| |/ / /__/_____/ /____>  </ /_/ / /_/ / /  / /_/  __/ /    
 | 
			
		||||
/_/   /_/   \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/     /_/     |___/_____/    /_____/_/|_/ .___/\____/_/   \__/\___/_/     
 | 
			
		||||
                                                                                                 /_/                                
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/proxmox-backup-server
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/proxmox-backup-server
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____                                             ____             __                    _____                          
 | 
			
		||||
   / __ \_________  _  ______ ___  ____  _  __      / __ )____ ______/ /____  ______       / ___/___  ______   _____  _____
 | 
			
		||||
  / /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ __  / __ `/ ___/ //_/ / / / __ \______\__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
			
		||||
 / ____/ /  / /_/ />  </ / / / / / /_/ />  </_____/ /_/ / /_/ / /__/ ,< / /_/ / /_/ /_____/__/ /  __/ /   | |/ /  __/ /    
 | 
			
		||||
/_/   /_/   \____/_/|_/_/ /_/ /_/\____/_/|_|     /_____/\__,_/\___/_/|_|\__,_/ .___/     /____/\___/_/    |___/\___/_/     
 | 
			
		||||
                                                                            /_/                                            
 | 
			
		||||
@@ -1,18 +1,6 @@
 | 
			
		||||
                                                          __      __       
 | 
			
		||||
    ____  _________  _  ______ ___  ____  _  __      ____/ /___ _/ /_____ _
 | 
			
		||||
   / __ \/ ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ __  / __ `/ __/ __ `/
 | 
			
		||||
  / /_/ / /  / /_/ />  </ / / / / / /_/ />  </_____/ /_/ / /_/ / /_/ /_/ / 
 | 
			
		||||
 / .___/_/   \____/_/|_/_/ /_/ /_/\____/_/|_|      \__,_/\__,_/\__/\__,_/  
 | 
			
		||||
/_/                                                                        
 | 
			
		||||
                   __                                                       
 | 
			
		||||
  ________  ____  / /____  _____      ____ ___  ____ _____  ____ _____ ____ 
 | 
			
		||||
 / ___/ _ \/ __ \/ __/ _ \/ ___/_____/ __ `__ \/ __ `/ __ \/ __ `/ __ `/ _ \
 | 
			
		||||
/ /__/  __/ / / / /_/  __/ /  /_____/ / / / / / /_/ / / / / /_/ / /_/ /  __/
 | 
			
		||||
\___/\___/_/ /_/\__/\___/_/        /_/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/ 
 | 
			
		||||
                                                               /____/       
 | 
			
		||||
        
 | 
			
		||||
   _____
 | 
			
		||||
  / ___/
 | 
			
		||||
 / /    
 | 
			
		||||
/_/     
 | 
			
		||||
        
 | 
			
		||||
    ____                                             ____        __                        __                  __  ___                                 
 | 
			
		||||
   / __ \_________  _  ______ ___  ____  _  __      / __ \____ _/ /_____ _________  ____  / /____  _____      /  |/  /___ _____  ____ _____ ____  _____
 | 
			
		||||
  / /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ / / / __ `/ __/ __ `/ ___/ _ \/ __ \/ __/ _ \/ ___/_____/ /|_/ / __ `/ __ \/ __ `/ __ `/ _ \/ ___/
 | 
			
		||||
 / ____/ /  / /_/ />  </ / / / / / /_/ />  </_____/ /_/ / /_/ / /_/ /_/ / /__/  __/ / / / /_/  __/ /  /_____/ /  / / /_/ / / / / /_/ / /_/ /  __/ /    
 | 
			
		||||
/_/   /_/   \____/_/|_/_/ /_/ /_/\____/_/|_|     /_____/\__,_/\__/\__,_/\___/\___/_/ /_/\__/\___/_/        /_/  /_/\__,_/_/ /_/\__,_/\__, /\___/_/     
 | 
			
		||||
                                                                                                                                    /____/             
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
   _____ ____    __       _____                          
 | 
			
		||||
  / ___// __ \  / /      / ___/___  ______   _____  _____
 | 
			
		||||
  \__ \/ / / / / /       \__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
			
		||||
 ___/ / /_/ / / /___    ___/ /  __/ /   | |/ /  __/ /    
 | 
			
		||||
/____/\___\_\/_____/   /____/\___/_/    |___/\___/_/     
 | 
			
		||||
                                                         
 | 
			
		||||
   ___   ____ ___  ___ 
 | 
			
		||||
  |__ \ / __ \__ \|__ \
 | 
			
		||||
  __/ // / / /_/ /__/ /
 | 
			
		||||
 / __// /_/ / __// __/ 
 | 
			
		||||
/____/\____/____/____/ 
 | 
			
		||||
                       
 | 
			
		||||
   _____ ____    __       _____                              ___   ____ ___  ___ 
 | 
			
		||||
  / ___// __ \  / /      / ___/___  ______   _____  _____   |__ \ / __ \__ \|__ \
 | 
			
		||||
  \__ \/ / / / / /       \__ \/ _ \/ ___/ | / / _ \/ ___/   __/ // / / /_/ /__/ /
 | 
			
		||||
 ___/ / /_/ / / /___    ___/ /  __/ /   | |/ /  __/ /      / __// /_/ / __// __/ 
 | 
			
		||||
/____/\___\_\/_____/   /____/\___/_/    |___/\___/_/      /____/\____/____/____/ 
 | 
			
		||||
                                                                                 
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,6 @@
 | 
			
		||||
   __  __     ____             __             
 | 
			
		||||
  / / / /____/ __ )____ ______/ /____  ______ 
 | 
			
		||||
 / / / / ___/ __  / __ `/ ___/ //_/ / / / __ \
 | 
			
		||||
/ /_/ / /  / /_/ / /_/ / /__/ ,< / /_/ / /_/ /
 | 
			
		||||
\____/_/  /_____/\__,_/\___/_/|_|\__,_/ .___/ 
 | 
			
		||||
                                     /_/      
 | 
			
		||||
   _____                          
 | 
			
		||||
  / ___/___  ______   _____  _____
 | 
			
		||||
  \__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
			
		||||
 ___/ /  __/ /   | |/ /  __/ /    
 | 
			
		||||
/____/\___/_/    |___/\___/_/     
 | 
			
		||||
                                  
 | 
			
		||||
   __  __     ____             __                  _____                          
 | 
			
		||||
  / / / /____/ __ )____ ______/ /____  ______     / ___/___  ______   _____  _____
 | 
			
		||||
 / / / / ___/ __  / __ `/ ___/ //_/ / / / __ \    \__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
			
		||||
/ /_/ / /  / /_/ / /_/ / /__/ ,< / /_/ / /_/ /   ___/ /  __/ /   | |/ /  __/ /    
 | 
			
		||||
\____/_/  /_____/\__,_/\___/_/|_|\__,_/ .___/   /____/\___/_/    |___/\___/_/     
 | 
			
		||||
                                     /_/                                          
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ APP="Hoarder"
 | 
			
		||||
var_tags="bookmark"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="4096"
 | 
			
		||||
var_disk="8"
 | 
			
		||||
var_disk="10"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
@@ -39,6 +39,9 @@ function update_script() {
 | 
			
		||||
    systemctl stop hoarder-web hoarder-workers hoarder-browser
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    if [[ $(corepack -v) < "0.31.0" ]]; then
 | 
			
		||||
      npm install -g corepack@0.31.0 &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
    cd /opt
 | 
			
		||||
    if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
 | 
			
		||||
      mkdir -p /etc/hoarder
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								ct/paymenter.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								ct/paymenter.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
#!/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: Nícolas Pastorello (opastorello)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="Paymenter"
 | 
			
		||||
var_tags="hosting;ecommerce;marketplace;"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="1024"
 | 
			
		||||
var_disk="5"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
# App Output & Base Settings
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
base_settings
 | 
			
		||||
 | 
			
		||||
# Core
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/paymenter ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/paymenter/paymenter/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    cd /opt/paymenter
 | 
			
		||||
    php artisan p:upgrade --no-interaction &>/dev/null
 | 
			
		||||
    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}:80${CL}"
 | 
			
		||||
@@ -1,81 +0,0 @@
 | 
			
		||||
#!/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: TheRealVira
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://pf2etools.com/
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="Pf2eTools"
 | 
			
		||||
var_tags="wiki"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_disk="6"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
# App Output & Base Settings
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
base_settings
 | 
			
		||||
 | 
			
		||||
# Core
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
 | 
			
		||||
    # Check if installation is present | -f for file, -d for folder
 | 
			
		||||
    if [[ ! -d "/opt/${APP}" ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f "/opt/${APP}_version.txt" ]]; then
 | 
			
		||||
        # Crawling the new version and checking whether an update is required
 | 
			
		||||
        msg_info "Updating System"
 | 
			
		||||
        apt-get update &>/dev/null
 | 
			
		||||
        apt-get -y upgrade &>/dev/null
 | 
			
		||||
        msg_ok "Updated System"
 | 
			
		||||
 | 
			
		||||
        # Execute Update
 | 
			
		||||
        msg_info "Updating ${APP}"
 | 
			
		||||
        cd /opt
 | 
			
		||||
        wget -q "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip"
 | 
			
		||||
        unzip -q ${RELEASE}.zip
 | 
			
		||||
        rm -rf "/opt/${APP}"
 | 
			
		||||
        mv ${APP}-${RELEASE:1} /opt/${APP}
 | 
			
		||||
        cd /opt/Pf2eTools
 | 
			
		||||
        $STD npm install
 | 
			
		||||
        $STD npm run build
 | 
			
		||||
        echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
        msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
        chown -R www-data: "/opt/${APP}"
 | 
			
		||||
        chmod -R 755 "/opt/${APP}"
 | 
			
		||||
 | 
			
		||||
        # Cleaning up
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf /opt/${RELEASE}.zip
 | 
			
		||||
        $STD apt-get -y autoremove
 | 
			
		||||
        $STD apt-get -y autoclean
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
    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}${CL}"
 | 
			
		||||
							
								
								
									
										64
									
								
								ct/privatebin.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								ct/privatebin.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
#!/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: Nícolas Pastorello (opastorello)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="PrivateBin"
 | 
			
		||||
var_tags="paste;secure"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="1024"
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
var_unprivileged="1"
 | 
			
		||||
 | 
			
		||||
# App Output & Base Settings
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
base_settings
 | 
			
		||||
 | 
			
		||||
# Core
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/privatebin ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/PrivateBin/PrivateBin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    cp -f /opt/privatebin/cfg/conf.php /tmp/privatebin_conf.bak
 | 
			
		||||
    wget -q "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip"
 | 
			
		||||
    unzip -q ${RELEASE}.zip
 | 
			
		||||
    rm -rf /opt/privatebin/*
 | 
			
		||||
    mv PrivateBin-${RELEASE}/* /opt/privatebin/
 | 
			
		||||
    mv /tmp/privatebin_conf.bak /opt/privatebin/cfg/conf.php
 | 
			
		||||
    chown -R www-data:www-data /opt/privatebin
 | 
			
		||||
    chmod -R 0755 /opt/privatebin/data
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    rm -rf ${RELEASE}.zip PrivateBin-${RELEASE}
 | 
			
		||||
    systemctl reload nginx php8.2-fpm
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}${CL}"
 | 
			
		||||
@@ -37,7 +37,7 @@ function update_script() {
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    pip install prometheus-pve-exporter --upgrade --root-user-action=ignore &>/dev/null
 | 
			
		||||
    pip install prometheus-pve-exporter --default-timeout=300 --upgrade --root-user-action=ignore &>/dev/null
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ cat <<"EOF"
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
APP="PBS"
 | 
			
		||||
APP="Proxmox-Backup-Server"
 | 
			
		||||
var_tags="backup"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="2048"
 | 
			
		||||
@@ -37,7 +37,7 @@ function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
    if [[ ! -e /usr/sbin/proxmox-backup-manager ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
        msg_info "Updating $APP LXC"
 | 
			
		||||
        apt-get update &>/dev/null
 | 
			
		||||
        apt-get -y upgrade &>/dev/null
 | 
			
		||||
@@ -6,7 +6,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
 | 
			
		||||
# Source: Proxmox Server Solution GmbH
 | 
			
		||||
 | 
			
		||||
# App Default Values
 | 
			
		||||
APP="proxmox-datacenter-manager"
 | 
			
		||||
APP="Proxmox-Datacenter-Manager"
 | 
			
		||||
var_tags="datacenter"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="2048"
 | 
			
		||||
 
 | 
			
		||||
@@ -45,6 +45,7 @@ function update_script() {
 | 
			
		||||
    unzip -q v${RELEASE}.zip
 | 
			
		||||
    mv tianji-${RELEASE} /opt/tianji
 | 
			
		||||
    cd tianji
 | 
			
		||||
    export NODE_OPTIONS="--max_old_space_size=4096"
 | 
			
		||||
    pnpm install --filter @tianji/client... --config.dedupe-peer-dependents=false --frozen-lockfile >/dev/null 2>&1
 | 
			
		||||
    pnpm build:static >/dev/null 2>&1
 | 
			
		||||
    pnpm install --filter @tianji/server... --config.dedupe-peer-dependents=false >/dev/null 2>&1
 | 
			
		||||
 
 | 
			
		||||
@@ -35,22 +35,22 @@ function update_script() {
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop trilium.service
 | 
			
		||||
    systemctl stop trilium
 | 
			
		||||
    sleep 1
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating to ${RELEASE}"
 | 
			
		||||
    wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-${RELEASE}-server-linux-x64.tar.xz
 | 
			
		||||
    tar -xf TriliumNextNotes-${RELEASE}-server-linux-x64.tar.xz
 | 
			
		||||
    wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
			
		||||
    tar -xf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
			
		||||
    cp -r trilium-linux-x64-server/* /opt/trilium/
 | 
			
		||||
    msg_ok "Updated to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf TriliumNextNotes-${RELEASE}-server-linux-x64.tar.xz trilium-linux-x64-server
 | 
			
		||||
    rm -rf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz trilium-linux-x64-server
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start trilium.service
 | 
			
		||||
    systemctl start trilium
 | 
			
		||||
    sleep 1
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
@@ -64,4 +64,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}:8080${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -43,6 +43,9 @@ start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
pct set $CTID -features fuse=1,nesting=1
 | 
			
		||||
pct reboot $CTID
 | 
			
		||||
 | 
			
		||||
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}"
 | 
			
		||||
 
 | 
			
		||||
@@ -39,24 +39,33 @@ function update_script() {
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    mkdir -p /opt/z2m_backup
 | 
			
		||||
    tar -czf /opt/z2m_backup/${APP}_backup_$(date +%Y%m%d%H%M%S).tar.gz -C /opt zigbee2mqtt &>/dev/null
 | 
			
		||||
    mv /opt/zigbee2mqtt/data /opt/z2m_backup
 | 
			
		||||
      rm -rf /opt/${APP}_backup*.tar.gz
 | 
			
		||||
      mkdir -p /opt/z2m_backup
 | 
			
		||||
      tar -czf /opt/z2m_backup/${APP}_backup_$(date +%Y%m%d%H%M%S).tar.gz -C /opt zigbee2mqtt &>/dev/null
 | 
			
		||||
      mv /opt/zigbee2mqtt/data /opt/z2m_backup
 | 
			
		||||
    msg_ok "Backup Created"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    wget -q "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip"
 | 
			
		||||
    unzip -q ${RELEASE}.zip
 | 
			
		||||
    mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt
 | 
			
		||||
    rm -rf /opt/zigbee2mqtt/data
 | 
			
		||||
    mv /opt/z2m_backup/data /opt/zigbee2mqtt
 | 
			
		||||
    cd /opt/zigbee2mqtt 
 | 
			
		||||
    pnpm install --frozen-lockfile &>/dev/null
 | 
			
		||||
    pnpm build &>/dev/null
 | 
			
		||||
      cd /opt
 | 
			
		||||
      wget -q "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip"
 | 
			
		||||
      unzip -q ${RELEASE}.zip
 | 
			
		||||
      rm -rf /opt/zigbee2mqtt
 | 
			
		||||
      mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt
 | 
			
		||||
      rm -rf /opt/zigbee2mqtt/data
 | 
			
		||||
      mv /opt/z2m_backup/data /opt/zigbee2mqtt
 | 
			
		||||
      cd /opt/zigbee2mqtt 
 | 
			
		||||
      pnpm install --frozen-lockfile &>/dev/null
 | 
			
		||||
      pnpm build &>/dev/null
 | 
			
		||||
    msg_ok "Updated Zigbee2MQTT"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start zigbee2mqtt
 | 
			
		||||
      systemctl start zigbee2mqtt
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
      rm -rf /opt/z2m_backup
 | 
			
		||||
      rm -rf /opt/${RELEASE}.zip
 | 
			
		||||
    msg_ok "Cleaned up"
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,6 @@
 | 
			
		||||
import React, { useEffect, useState } from "react";
 | 
			
		||||
import DatePicker from 'react-datepicker';
 | 
			
		||||
import 'react-datepicker/dist/react-datepicker.css';
 | 
			
		||||
import { string } from "zod";
 | 
			
		||||
import ApplicationChart from "../../components/ApplicationChart";
 | 
			
		||||
 | 
			
		||||
interface DataModel {
 | 
			
		||||
@@ -12,18 +11,16 @@ interface DataModel {
 | 
			
		||||
  disk_size: number;
 | 
			
		||||
  core_count: number;
 | 
			
		||||
  ram_size: number;
 | 
			
		||||
  verbose: string;
 | 
			
		||||
  os_type: string;
 | 
			
		||||
  os_version: string;
 | 
			
		||||
  hn: string;
 | 
			
		||||
  disableip6: string;
 | 
			
		||||
  ssh: string;
 | 
			
		||||
  tags: string;
 | 
			
		||||
  nsapp: string;
 | 
			
		||||
  created_at: string;
 | 
			
		||||
  method: string;
 | 
			
		||||
  pve_version: string;
 | 
			
		||||
  status: string;
 | 
			
		||||
  error: string;
 | 
			
		||||
  type: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -35,9 +32,11 @@ const DataFetcher: React.FC = () => {
 | 
			
		||||
  const [startDate, setStartDate] = useState<Date | null>(null);
 | 
			
		||||
  const [endDate, setEndDate] = useState<Date | null>(null);
 | 
			
		||||
  const [sortConfig, setSortConfig] = useState<{ key: keyof DataModel | null, direction: 'ascending' | 'descending' }>({ key: 'id', direction: 'descending' });
 | 
			
		||||
  const [itemsPerPage, setItemsPerPage] = useState(5);
 | 
			
		||||
  const [itemsPerPage, setItemsPerPage] = useState(25);
 | 
			
		||||
  const [currentPage, setCurrentPage] = useState(1);
 | 
			
		||||
  const [showChart, setShowChart] = useState<boolean>(false);
 | 
			
		||||
 | 
			
		||||
  const [showErrorRow, setShowErrorRow] = useState<number | null>(null);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
    const fetchData = async () => {
 | 
			
		||||
@@ -117,9 +116,27 @@ const DataFetcher: React.FC = () => {
 | 
			
		||||
 | 
			
		||||
  const paginatedData = sortedData.slice((currentPage - 1) * itemsPerPage, currentPage * itemsPerPage);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  if (loading) return <p>Loading...</p>;
 | 
			
		||||
  if (error) return <p>Error: {error}</p>;
 | 
			
		||||
 | 
			
		||||
  var installingCounts: number = 0;
 | 
			
		||||
  var failedCounts: number = 0;
 | 
			
		||||
  var doneCounts: number = 0
 | 
			
		||||
  var unknownCounts: number = 0;
 | 
			
		||||
  data.forEach((item) => {
 | 
			
		||||
    if (item.status === "installing") {
 | 
			
		||||
      installingCounts += 1;
 | 
			
		||||
    } else if (item.status === "failed") {
 | 
			
		||||
      failedCounts += 1;
 | 
			
		||||
    }
 | 
			
		||||
    else if (item.status === "done") {
 | 
			
		||||
      doneCounts += 1;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      unknownCounts += 1;
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="p-6 mt-20">
 | 
			
		||||
@@ -164,6 +181,7 @@ const DataFetcher: React.FC = () => {
 | 
			
		||||
      <ApplicationChart data={filteredData} />
 | 
			
		||||
      <div className="mb-4 flex justify-between items-center">
 | 
			
		||||
        <p className="text-lg font-bold">{filteredData.length} results found</p>
 | 
			
		||||
        <p className="text-lg font">Status Legend: 🔄 installing {installingCounts} | ✔️ completetd {doneCounts} | ❌ failed {failedCounts} | ❓ unknown {unknownCounts}</p>
 | 
			
		||||
        <select value={itemsPerPage} onChange={handleItemsPerPageChange} className="p-2 border">
 | 
			
		||||
          <option value={25}>25</option>
 | 
			
		||||
          <option value={50}>50</option>
 | 
			
		||||
@@ -177,18 +195,16 @@ const DataFetcher: React.FC = () => {
 | 
			
		||||
            <thead>
 | 
			
		||||
              <tr>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('status')}>Status</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('type')}>Type</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('nsapp')}>Application</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('os_type')}>OS</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('os_version')}>OS Version</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('disk_size')}>Disk Size</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('core_count')}>Core Count</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('ram_size')}>RAM Size</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('hn')}>Hostname</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('ssh')}>SSH</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('verbose')}>Verb</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('tags')}>Tags</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('method')}>Method</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('pve_version')}>PVE Version</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('error')}>Error Message</th>
 | 
			
		||||
                <th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('created_at')}>Created At</th>
 | 
			
		||||
              </tr>
 | 
			
		||||
            </thead>
 | 
			
		||||
@@ -201,23 +217,40 @@ const DataFetcher: React.FC = () => {
 | 
			
		||||
                    ) : item.status === "failed" ? (
 | 
			
		||||
                      "❌"
 | 
			
		||||
                    ) : item.status === "installing" ? (
 | 
			
		||||
                      "🔄"  
 | 
			
		||||
                      "🔄"
 | 
			
		||||
                    ) : (
 | 
			
		||||
                      item.status
 | 
			
		||||
                    )}
 | 
			
		||||
                  </td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.type === "lxc" ? (
 | 
			
		||||
                    "📦"
 | 
			
		||||
                  ) : item.type === "vm" ? (
 | 
			
		||||
                    "🖥️"
 | 
			
		||||
                  ) : (
 | 
			
		||||
                    item.type
 | 
			
		||||
                  )}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.nsapp}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.os_type}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.os_version}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.disk_size}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.core_count}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.ram_size}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.hn}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.ssh}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.verbose}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.tags.replace(/;/g, ' ')}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.method}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{item.pve_version}</td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">
 | 
			
		||||
                    {item.error && item.error !== "none" ? (
 | 
			
		||||
                      showErrorRow === index ? (
 | 
			
		||||
                        <>
 | 
			
		||||
                          {item.error}
 | 
			
		||||
                          <button onClick={() => setShowErrorRow(null)}>{item.error}</button>
 | 
			
		||||
                        </>
 | 
			
		||||
                      ) : (
 | 
			
		||||
                        <button onClick={() => setShowErrorRow(index)}>Click to show error</button>
 | 
			
		||||
                      )
 | 
			
		||||
                    ) : (
 | 
			
		||||
                      "none"
 | 
			
		||||
                    )}
 | 
			
		||||
                  </td>
 | 
			
		||||
                  <td className="px-4 py-2 border-b">{formatDate(item.created_at)}</td>
 | 
			
		||||
                </tr>
 | 
			
		||||
              ))}
 | 
			
		||||
@@ -245,4 +278,7 @@ const DataFetcher: React.FC = () => {
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
export default DataFetcher;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,132 +1,193 @@
 | 
			
		||||
"use client";
 | 
			
		||||
 | 
			
		||||
import { Button } from "@/components/ui/button";
 | 
			
		||||
import {
 | 
			
		||||
  Dialog,
 | 
			
		||||
  DialogContent,
 | 
			
		||||
  DialogHeader,
 | 
			
		||||
  DialogTitle,
 | 
			
		||||
} from "@/components/ui/dialog";
 | 
			
		||||
import {
 | 
			
		||||
  Table,
 | 
			
		||||
  TableBody,
 | 
			
		||||
  TableCell,
 | 
			
		||||
  TableHead,
 | 
			
		||||
  TableHeader,
 | 
			
		||||
  TableRow,
 | 
			
		||||
} from "@/components/ui/table";
 | 
			
		||||
import {
 | 
			
		||||
  Tooltip,
 | 
			
		||||
  TooltipContent,
 | 
			
		||||
  TooltipProvider,
 | 
			
		||||
  TooltipTrigger,
 | 
			
		||||
} from "@/components/ui/tooltip";
 | 
			
		||||
import { Chart as ChartJS, ArcElement, Tooltip as ChartTooltip, Legend } from "chart.js";
 | 
			
		||||
import ChartDataLabels from "chartjs-plugin-datalabels";
 | 
			
		||||
import { BarChart3, PieChart } from "lucide-react";
 | 
			
		||||
import React, { useState } from "react";
 | 
			
		||||
import { Pie } from "react-chartjs-2";
 | 
			
		||||
import { Chart as ChartJS, ArcElement, Tooltip, Legend } from "chart.js";
 | 
			
		||||
import ChartDataLabels from "chartjs-plugin-datalabels";
 | 
			
		||||
import Modal from "@/components/Modal"; 
 | 
			
		||||
 | 
			
		||||
ChartJS.register(ArcElement, Tooltip, Legend, ChartDataLabels);
 | 
			
		||||
ChartJS.register(ArcElement, ChartTooltip, Legend, ChartDataLabels);
 | 
			
		||||
 | 
			
		||||
interface ApplicationChartProps {
 | 
			
		||||
  data: { nsapp: string }[];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const ApplicationChart: React.FC<ApplicationChartProps> = ({ data }) => {
 | 
			
		||||
const ITEMS_PER_PAGE = 20;
 | 
			
		||||
const CHART_COLORS = [
 | 
			
		||||
  "#ff6384",
 | 
			
		||||
  "#36a2eb",
 | 
			
		||||
  "#ffce56",
 | 
			
		||||
  "#4bc0c0",
 | 
			
		||||
  "#9966ff",
 | 
			
		||||
  "#ff9f40",
 | 
			
		||||
  "#4dc9f6",
 | 
			
		||||
  "#f67019",
 | 
			
		||||
  "#537bc4",
 | 
			
		||||
  "#acc236",
 | 
			
		||||
  "#166a8f",
 | 
			
		||||
  "#00a950",
 | 
			
		||||
  "#58595b",
 | 
			
		||||
  "#8549ba",
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
export default function ApplicationChart({ data }: ApplicationChartProps) {
 | 
			
		||||
  const [isChartOpen, setIsChartOpen] = useState(false);
 | 
			
		||||
  const [isTableOpen, setIsTableOpen] = useState(false);
 | 
			
		||||
  const [chartStartIndex, setChartStartIndex] = useState(0);
 | 
			
		||||
  const [tableLimit, setTableLimit] = useState(20);
 | 
			
		||||
  const [tableLimit, setTableLimit] = useState(ITEMS_PER_PAGE);
 | 
			
		||||
 | 
			
		||||
  const appCounts: Record<string, number> = {};
 | 
			
		||||
  data.forEach((item) => {
 | 
			
		||||
    appCounts[item.nsapp] = (appCounts[item.nsapp] || 0) + 1;
 | 
			
		||||
  });
 | 
			
		||||
  // Calculate application counts
 | 
			
		||||
  const appCounts = data.reduce((acc, item) => {
 | 
			
		||||
    acc[item.nsapp] = (acc[item.nsapp] || 0) + 1;
 | 
			
		||||
    return acc;
 | 
			
		||||
  }, {} as Record<string, number>);
 | 
			
		||||
 | 
			
		||||
  const sortedApps = Object.entries(appCounts).sort(([, a], [, b]) => b - a);
 | 
			
		||||
  const chartApps = sortedApps.slice(chartStartIndex, chartStartIndex + 20);
 | 
			
		||||
  const sortedApps = Object.entries(appCounts)
 | 
			
		||||
    .sort(([, a], [, b]) => b - a);
 | 
			
		||||
 | 
			
		||||
  const chartApps = sortedApps.slice(
 | 
			
		||||
    chartStartIndex,
 | 
			
		||||
    chartStartIndex + ITEMS_PER_PAGE
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  const chartData = {
 | 
			
		||||
    labels: chartApps.map(([name]) => name),
 | 
			
		||||
    datasets: [
 | 
			
		||||
      {
 | 
			
		||||
        label: "Applications",
 | 
			
		||||
        data: chartApps.map(([, count]) => count),
 | 
			
		||||
        backgroundColor: [
 | 
			
		||||
          "#ff6384",
 | 
			
		||||
          "#36a2eb",
 | 
			
		||||
          "#ffce56",
 | 
			
		||||
          "#4bc0c0",
 | 
			
		||||
          "#9966ff",
 | 
			
		||||
          "#ff9f40",
 | 
			
		||||
        ],
 | 
			
		||||
        backgroundColor: CHART_COLORS,
 | 
			
		||||
      },
 | 
			
		||||
    ],
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const chartOptions = {
 | 
			
		||||
    plugins: {
 | 
			
		||||
      legend: { display: false },
 | 
			
		||||
      datalabels: {
 | 
			
		||||
        color: "white",
 | 
			
		||||
        font: { weight: "bold" as const },
 | 
			
		||||
        formatter: (value: number, context: any) => {
 | 
			
		||||
          const label = context.chart.data.labels?.[context.dataIndex];
 | 
			
		||||
          return `${label}\n(${value})`;
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
    responsive: true,
 | 
			
		||||
    maintainAspectRatio: false,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="mt-6 text-center">
 | 
			
		||||
      <button
 | 
			
		||||
        onClick={() => setIsChartOpen(true)}
 | 
			
		||||
        className="m-2 p-2 bg-blue-500 text-white rounded"
 | 
			
		||||
      >
 | 
			
		||||
        📊 Open Chart
 | 
			
		||||
      </button>
 | 
			
		||||
      <button
 | 
			
		||||
        onClick={() => setIsTableOpen(true)}
 | 
			
		||||
        className="m-2 p-2 bg-green-500 text-white rounded"
 | 
			
		||||
      >
 | 
			
		||||
        📋 Open Table
 | 
			
		||||
      </button>
 | 
			
		||||
    <div className="mt-6 flex justify-center gap-4">
 | 
			
		||||
      <TooltipProvider>
 | 
			
		||||
        <Tooltip>
 | 
			
		||||
          <TooltipTrigger asChild>
 | 
			
		||||
            <Button
 | 
			
		||||
              variant="outline"
 | 
			
		||||
              size="icon"
 | 
			
		||||
              onClick={() => setIsChartOpen(true)}
 | 
			
		||||
            >
 | 
			
		||||
              <PieChart className="h-5 w-5" />
 | 
			
		||||
            </Button>
 | 
			
		||||
          </TooltipTrigger>
 | 
			
		||||
          <TooltipContent>Open Chart View</TooltipContent>
 | 
			
		||||
        </Tooltip>
 | 
			
		||||
 | 
			
		||||
      <Modal isOpen={isChartOpen} onClose={() => setIsChartOpen(false)}>
 | 
			
		||||
        <h2 className="text-xl font-bold text-black dark:text-white mb-4">Top Applications (Chart)</h2>
 | 
			
		||||
        <div className="w-3/4 mx-auto">
 | 
			
		||||
          <Pie
 | 
			
		||||
            data={chartData}
 | 
			
		||||
            options={{
 | 
			
		||||
              plugins: {
 | 
			
		||||
                legend: { display: false },
 | 
			
		||||
                datalabels: {
 | 
			
		||||
                  color: "white",
 | 
			
		||||
                  font: { weight: "bold" },
 | 
			
		||||
                  formatter: (value, context) =>
 | 
			
		||||
                    context.chart.data.labels?.[context.dataIndex] || "",
 | 
			
		||||
                },
 | 
			
		||||
              },
 | 
			
		||||
            }}
 | 
			
		||||
          />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div className="flex justify-center space-x-4 mt-4">
 | 
			
		||||
          <button
 | 
			
		||||
            onClick={() => setChartStartIndex(Math.max(0, chartStartIndex - 20))}
 | 
			
		||||
            disabled={chartStartIndex === 0}
 | 
			
		||||
            className="p-2 border rounded bg-blue-500 text-white"
 | 
			
		||||
          >
 | 
			
		||||
            ◀ Last 20
 | 
			
		||||
          </button>
 | 
			
		||||
          <button
 | 
			
		||||
            onClick={() => setChartStartIndex(chartStartIndex + 20)}
 | 
			
		||||
            disabled={chartStartIndex + 20 >= sortedApps.length}
 | 
			
		||||
            className="p-2 border rounded bg-blue-500 text-white"
 | 
			
		||||
          >
 | 
			
		||||
            Next 20 ▶
 | 
			
		||||
          </button>
 | 
			
		||||
        </div>
 | 
			
		||||
      </Modal>
 | 
			
		||||
        <Tooltip>
 | 
			
		||||
          <TooltipTrigger asChild>
 | 
			
		||||
            <Button
 | 
			
		||||
              variant="outline"
 | 
			
		||||
              size="icon"
 | 
			
		||||
              onClick={() => setIsTableOpen(true)}
 | 
			
		||||
            >
 | 
			
		||||
              <BarChart3 className="h-5 w-5" />
 | 
			
		||||
            </Button>
 | 
			
		||||
          </TooltipTrigger>
 | 
			
		||||
          <TooltipContent>Open Table View</TooltipContent>
 | 
			
		||||
        </Tooltip>
 | 
			
		||||
      </TooltipProvider>
 | 
			
		||||
 | 
			
		||||
      <Modal isOpen={isTableOpen} onClose={() => setIsTableOpen(false)}>
 | 
			
		||||
        <h2 className="text-xl font-bold text-black dark:text-white mb-4">Application Count Table</h2>
 | 
			
		||||
        <table className="w-full border-collapse border border-gray-600 dark:border-gray-500">
 | 
			
		||||
          <thead>
 | 
			
		||||
            <tr className="bg-gray-800 text-white">
 | 
			
		||||
              <th className="p-2 border">Application</th>
 | 
			
		||||
              <th className="p-2 border">Count</th>
 | 
			
		||||
            </tr>
 | 
			
		||||
          </thead>
 | 
			
		||||
          <tbody>
 | 
			
		||||
            {sortedApps.slice(0, tableLimit).map(([name, count]) => (
 | 
			
		||||
              <tr key={name} className="hover:bg-gray-200 dark:hover:bg-gray-700 text-black dark:text-white">
 | 
			
		||||
                <td className="p-2 border">{name}</td>
 | 
			
		||||
                <td className="p-2 border">{count}</td>
 | 
			
		||||
              </tr>
 | 
			
		||||
            ))}
 | 
			
		||||
          </tbody>
 | 
			
		||||
        </table>
 | 
			
		||||
      <Dialog open={isChartOpen} onOpenChange={setIsChartOpen}>
 | 
			
		||||
        <DialogContent className="max-w-3xl">
 | 
			
		||||
          <DialogHeader>
 | 
			
		||||
            <DialogTitle>Applications Distribution</DialogTitle>
 | 
			
		||||
          </DialogHeader>
 | 
			
		||||
          <div className="h-[60vh] w-full">
 | 
			
		||||
            <Pie data={chartData} options={chartOptions} />
 | 
			
		||||
          </div>
 | 
			
		||||
          <div className="flex justify-center gap-4">
 | 
			
		||||
            <Button
 | 
			
		||||
              variant="outline"
 | 
			
		||||
              onClick={() => setChartStartIndex(Math.max(0, chartStartIndex - ITEMS_PER_PAGE))}
 | 
			
		||||
              disabled={chartStartIndex === 0}
 | 
			
		||||
            >
 | 
			
		||||
              Previous {ITEMS_PER_PAGE}
 | 
			
		||||
            </Button>
 | 
			
		||||
            <Button
 | 
			
		||||
              variant="outline"
 | 
			
		||||
              onClick={() => setChartStartIndex(chartStartIndex + ITEMS_PER_PAGE)}
 | 
			
		||||
              disabled={chartStartIndex + ITEMS_PER_PAGE >= sortedApps.length}
 | 
			
		||||
            >
 | 
			
		||||
              Next {ITEMS_PER_PAGE}
 | 
			
		||||
            </Button>
 | 
			
		||||
          </div>
 | 
			
		||||
        </DialogContent>
 | 
			
		||||
      </Dialog>
 | 
			
		||||
 | 
			
		||||
        {tableLimit < sortedApps.length && (
 | 
			
		||||
          <div className="text-center mt-4">
 | 
			
		||||
            <button
 | 
			
		||||
              onClick={() => setTableLimit(tableLimit + 20)}
 | 
			
		||||
              className="p-2 bg-green-500 text-white rounded"
 | 
			
		||||
      <Dialog open={isTableOpen} onOpenChange={setIsTableOpen}>
 | 
			
		||||
        <DialogContent className="max-w-2xl">
 | 
			
		||||
          <DialogHeader>
 | 
			
		||||
            <DialogTitle>Applications Count</DialogTitle>
 | 
			
		||||
          </DialogHeader>
 | 
			
		||||
          <div className="max-h-[60vh] overflow-y-auto">
 | 
			
		||||
            <Table>
 | 
			
		||||
              <TableHeader>
 | 
			
		||||
                <TableRow>
 | 
			
		||||
                  <TableHead>Application</TableHead>
 | 
			
		||||
                  <TableHead className="text-right">Count</TableHead>
 | 
			
		||||
                </TableRow>
 | 
			
		||||
              </TableHeader>
 | 
			
		||||
              <TableBody>
 | 
			
		||||
                {sortedApps.slice(0, tableLimit).map(([name, count]) => (
 | 
			
		||||
                  <TableRow key={name}>
 | 
			
		||||
                    <TableCell>{name}</TableCell>
 | 
			
		||||
                    <TableCell className="text-right">{count}</TableCell>
 | 
			
		||||
                  </TableRow>
 | 
			
		||||
                ))}
 | 
			
		||||
              </TableBody>
 | 
			
		||||
            </Table>
 | 
			
		||||
          </div>
 | 
			
		||||
          {tableLimit < sortedApps.length && (
 | 
			
		||||
            <Button
 | 
			
		||||
              variant="outline"
 | 
			
		||||
              className="w-full"
 | 
			
		||||
              onClick={() => setTableLimit(prev => prev + ITEMS_PER_PAGE)}
 | 
			
		||||
            >
 | 
			
		||||
              Load More
 | 
			
		||||
            </button>
 | 
			
		||||
          </div>
 | 
			
		||||
        )}
 | 
			
		||||
      </Modal>
 | 
			
		||||
            </Button>
 | 
			
		||||
          )}
 | 
			
		||||
        </DialogContent>
 | 
			
		||||
      </Dialog>
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default ApplicationChart;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										120
									
								
								frontend/src/components/ui/table.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								frontend/src/components/ui/table.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
			
		||||
import * as React from "react"
 | 
			
		||||
 | 
			
		||||
import { cn } from "@/lib/utils"
 | 
			
		||||
 | 
			
		||||
const Table = React.forwardRef<
 | 
			
		||||
  HTMLTableElement,
 | 
			
		||||
  React.HTMLAttributes<HTMLTableElement>
 | 
			
		||||
>(({ className, ...props }, ref) => (
 | 
			
		||||
  <div className="relative w-full overflow-auto">
 | 
			
		||||
    <table
 | 
			
		||||
      ref={ref}
 | 
			
		||||
      className={cn("w-full caption-bottom text-sm", className)}
 | 
			
		||||
      {...props}
 | 
			
		||||
    />
 | 
			
		||||
  </div>
 | 
			
		||||
))
 | 
			
		||||
Table.displayName = "Table"
 | 
			
		||||
 | 
			
		||||
const TableHeader = React.forwardRef<
 | 
			
		||||
  HTMLTableSectionElement,
 | 
			
		||||
  React.HTMLAttributes<HTMLTableSectionElement>
 | 
			
		||||
>(({ className, ...props }, ref) => (
 | 
			
		||||
  <thead ref={ref} className={cn("[&_tr]:border-b", className)} {...props} />
 | 
			
		||||
))
 | 
			
		||||
TableHeader.displayName = "TableHeader"
 | 
			
		||||
 | 
			
		||||
const TableBody = React.forwardRef<
 | 
			
		||||
  HTMLTableSectionElement,
 | 
			
		||||
  React.HTMLAttributes<HTMLTableSectionElement>
 | 
			
		||||
>(({ className, ...props }, ref) => (
 | 
			
		||||
  <tbody
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn("[&_tr:last-child]:border-0", className)}
 | 
			
		||||
    {...props}
 | 
			
		||||
  />
 | 
			
		||||
))
 | 
			
		||||
TableBody.displayName = "TableBody"
 | 
			
		||||
 | 
			
		||||
const TableFooter = React.forwardRef<
 | 
			
		||||
  HTMLTableSectionElement,
 | 
			
		||||
  React.HTMLAttributes<HTMLTableSectionElement>
 | 
			
		||||
>(({ className, ...props }, ref) => (
 | 
			
		||||
  <tfoot
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
 | 
			
		||||
      className
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
  />
 | 
			
		||||
))
 | 
			
		||||
TableFooter.displayName = "TableFooter"
 | 
			
		||||
 | 
			
		||||
const TableRow = React.forwardRef<
 | 
			
		||||
  HTMLTableRowElement,
 | 
			
		||||
  React.HTMLAttributes<HTMLTableRowElement>
 | 
			
		||||
>(({ className, ...props }, ref) => (
 | 
			
		||||
  <tr
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
 | 
			
		||||
      className
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
  />
 | 
			
		||||
))
 | 
			
		||||
TableRow.displayName = "TableRow"
 | 
			
		||||
 | 
			
		||||
const TableHead = React.forwardRef<
 | 
			
		||||
  HTMLTableCellElement,
 | 
			
		||||
  React.ThHTMLAttributes<HTMLTableCellElement>
 | 
			
		||||
>(({ className, ...props }, ref) => (
 | 
			
		||||
  <th
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
 | 
			
		||||
      className
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
  />
 | 
			
		||||
))
 | 
			
		||||
TableHead.displayName = "TableHead"
 | 
			
		||||
 | 
			
		||||
const TableCell = React.forwardRef<
 | 
			
		||||
  HTMLTableCellElement,
 | 
			
		||||
  React.TdHTMLAttributes<HTMLTableCellElement>
 | 
			
		||||
>(({ className, ...props }, ref) => (
 | 
			
		||||
  <td
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
 | 
			
		||||
      className
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
  />
 | 
			
		||||
))
 | 
			
		||||
TableCell.displayName = "TableCell"
 | 
			
		||||
 | 
			
		||||
const TableCaption = React.forwardRef<
 | 
			
		||||
  HTMLTableCaptionElement,
 | 
			
		||||
  React.HTMLAttributes<HTMLTableCaptionElement>
 | 
			
		||||
>(({ className, ...props }, ref) => (
 | 
			
		||||
  <caption
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn("mt-4 text-sm text-muted-foreground", className)}
 | 
			
		||||
    {...props}
 | 
			
		||||
  />
 | 
			
		||||
))
 | 
			
		||||
TableCaption.displayName = "TableCaption"
 | 
			
		||||
 | 
			
		||||
export {
 | 
			
		||||
  Table,
 | 
			
		||||
  TableHeader,
 | 
			
		||||
  TableBody,
 | 
			
		||||
  TableFooter,
 | 
			
		||||
  TableHead,
 | 
			
		||||
  TableRow,
 | 
			
		||||
  TableCell,
 | 
			
		||||
  TableCaption,
 | 
			
		||||
}
 | 
			
		||||
@@ -1,83 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: TheRealVira
 | 
			
		||||
# License: MIT
 | 
			
		||||
# Source: https://5e.tools/
 | 
			
		||||
 | 
			
		||||
# Import Functions und Setup
 | 
			
		||||
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 \
 | 
			
		||||
  curl \
 | 
			
		||||
  mc \
 | 
			
		||||
  sudo \
 | 
			
		||||
  git \
 | 
			
		||||
  gpg \
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  apache2
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.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
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
# Setup App
 | 
			
		||||
msg_info "Set up 5etools Base"
 | 
			
		||||
cd /opt
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/5etools-mirror-3/5etools-src/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
wget -q "https://github.com/5etools-mirror-3/5etools-src/archive/refs/tags/${RELEASE}.zip"
 | 
			
		||||
unzip -q "${RELEASE}.zip"
 | 
			
		||||
mv "5etools-src-${RELEASE:1}" /opt/5etools
 | 
			
		||||
cd /opt/5etools
 | 
			
		||||
$STD npm install
 | 
			
		||||
$STD npm run build
 | 
			
		||||
echo "${RELEASE}" >"/opt/5etools_version.txt"
 | 
			
		||||
msg_ok "Set up 5etools Base"
 | 
			
		||||
 | 
			
		||||
msg_info "Set up 5etools Image"
 | 
			
		||||
cd /opt
 | 
			
		||||
IMG_RELEASE=$(curl -s https://api.github.com/repos/5etools-mirror-2/5etools-img/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
curl -sSL "https://github.com/5etools-mirror-2/5etools-img/archive/refs/tags/${IMG_RELEASE}.zip" > "${IMG_RELEASE}.zip"
 | 
			
		||||
unzip -q "${IMG_RELEASE}.zip"
 | 
			
		||||
mv "5etools-img-${IMG_RELEASE:1}" /opt/5etools/img
 | 
			
		||||
echo "${IMG_RELEASE}" >"/opt/5etools_IMG_version.txt"
 | 
			
		||||
msg_ok "Set up 5etools Image"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >> /etc/apache2/apache2.conf
 | 
			
		||||
<Location /server-status>
 | 
			
		||||
    SetHandler server-status
 | 
			
		||||
    Order deny,allow
 | 
			
		||||
    Allow from all
 | 
			
		||||
</Location>
 | 
			
		||||
EOF
 | 
			
		||||
rm -rf /var/www/html
 | 
			
		||||
ln -s "/opt/5etools" /var/www/html
 | 
			
		||||
chown -R www-data: "/opt/5etools"
 | 
			
		||||
chmod -R 755 "/opt/5etools"
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/${IMG_RELEASE}.zip
 | 
			
		||||
rm -rf /opt/${RELEASE}.zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
@@ -31,7 +31,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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 "Setting up PostgreSQL Repository"
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,7 @@ msg_info "Installing Dependencies"
 | 
			
		||||
$STD apk add \
 | 
			
		||||
  curl \
 | 
			
		||||
  mc \
 | 
			
		||||
  openssh \
 | 
			
		||||
  nginx \
 | 
			
		||||
  unzip
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ msg_ok "Installed Python Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -81,12 +81,13 @@ $STD apt-get install -y nodejs
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Golang"
 | 
			
		||||
cd /tmp
 | 
			
		||||
set +o pipefail
 | 
			
		||||
GO_RELEASE=$(curl -s https://go.dev/dl/ | grep -o -m 1 "go.*\linux-amd64.tar.gz")
 | 
			
		||||
wget -q https://golang.org/dl/${GO_RELEASE}
 | 
			
		||||
tar -xzf ${GO_RELEASE} -C /usr/local
 | 
			
		||||
ln -s /usr/local/go/bin/go /usr/bin/go
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
 | 
			
		||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
 | 
			
		||||
tar -C /usr/local -xzf "$temp_file"
 | 
			
		||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
set -o pipefail
 | 
			
		||||
msg_ok "Installed Golang"
 | 
			
		||||
 | 
			
		||||
@@ -186,7 +187,6 @@ msg_info "Cleaning up"
 | 
			
		||||
rm -rf /tmp/Python-3.12.1
 | 
			
		||||
rm -rf /tmp/Python.tgz
 | 
			
		||||
rm -rf go/
 | 
			
		||||
rm -rf /tmp/${GO_RELEASE}
 | 
			
		||||
rm -rf /tmp/geoipupdate.deb
 | 
			
		||||
rm -rf authentik.tar.gz
 | 
			
		||||
$STD apt-get -y remove yq
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										97
									
								
								install/baikal-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								install/baikal-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: bvdberg01
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /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 \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  postgresql \
 | 
			
		||||
  apache2 \
 | 
			
		||||
  libapache2-mod-php \
 | 
			
		||||
  php-{pgsql,dom}
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL"
 | 
			
		||||
DB_NAME=baikal
 | 
			
		||||
DB_USER=baikal
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
 | 
			
		||||
{
 | 
			
		||||
echo "Baikal Credentials"
 | 
			
		||||
echo "Baikal Database User: $DB_USER"
 | 
			
		||||
echo "Baikal Database Password: $DB_PASS"
 | 
			
		||||
echo "Baikal Database Name: $DB_NAME"
 | 
			
		||||
} >> ~/baikal.creds
 | 
			
		||||
msg_ok "Set up PostgreSQL"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Baikal"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
cd /opt
 | 
			
		||||
wget -q "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip"
 | 
			
		||||
unzip -q "baikal-${RELEASE}.zip"
 | 
			
		||||
cat <<EOF >/opt/baikal/config/baikal.yaml
 | 
			
		||||
database:
 | 
			
		||||
    backend: pgsql
 | 
			
		||||
    pgsql_host: localhost
 | 
			
		||||
    pgsql_dbname: $DB_NAME
 | 
			
		||||
    pgsql_username: $DB_USER
 | 
			
		||||
    pgsql_password: $DB_PASS
 | 
			
		||||
EOF
 | 
			
		||||
chown -R www-data:www-data /opt/baikal/
 | 
			
		||||
chmod -R 755 /opt/baikal/
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Installed Baikal"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF > /etc/apache2/sites-available/baikal.conf
 | 
			
		||||
<VirtualHost *:80>
 | 
			
		||||
    ServerName baikal
 | 
			
		||||
    DocumentRoot /opt/baikal/html
 | 
			
		||||
 | 
			
		||||
    RewriteEngine on
 | 
			
		||||
    RewriteRule /.well-known/carddav /dav.php [R=308,L]
 | 
			
		||||
    RewriteRule /.well-known/caldav  /dav.php [R=308,L]
 | 
			
		||||
    RewriteCond %{REQUEST_URI} ^/dav.php$ [NC]
 | 
			
		||||
    RewriteRule ^(.*)$ /dav.php/ [R=301,L]
 | 
			
		||||
        
 | 
			
		||||
    <Directory /opt/baikal/html>
 | 
			
		||||
        Options FollowSymLinks
 | 
			
		||||
        AllowOverride All
 | 
			
		||||
        Require all granted
 | 
			
		||||
    </Directory>
 | 
			
		||||
 | 
			
		||||
    <IfModule mod_expires.c>
 | 
			
		||||
        ExpiresActive Off
 | 
			
		||||
    </IfModule>
 | 
			
		||||
 | 
			
		||||
    ErrorLog /var/log/apache2/baikal_error.log
 | 
			
		||||
    CustomLog /var/log/apache2/baikal_access.log combined
 | 
			
		||||
</VirtualHost>
 | 
			
		||||
EOF
 | 
			
		||||
$STD a2ensite baikal
 | 
			
		||||
$STD a2enmod rewrite
 | 
			
		||||
$STD a2dissite 000-default.conf
 | 
			
		||||
$STD systemctl reload apache2
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf "/opt/baikal-${RELEASE}.zip"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
# Author: tteck (tteckster) | Co-Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
@@ -33,16 +33,16 @@ msg_ok "Installed Caddy"
 | 
			
		||||
read -r -p "Would you like to install xCaddy Addon? <y/N> " prompt
 | 
			
		||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Installing Golang"
 | 
			
		||||
  cd /opt
 | 
			
		||||
  set +o pipefail
 | 
			
		||||
  GOLANG=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-amd64.tar.gz" | head -n 1)
 | 
			
		||||
  wget -q https://golang.org/dl/$GOLANG
 | 
			
		||||
  tar -xzf $GOLANG -C /usr/local
 | 
			
		||||
  ln -s /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
  temp_file=$(mktemp)
 | 
			
		||||
  golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
 | 
			
		||||
  wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
 | 
			
		||||
  tar -C /usr/local -xzf "$temp_file"
 | 
			
		||||
  ln -sf /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
  rm -f "$temp_file"
 | 
			
		||||
  set -o pipefail
 | 
			
		||||
  rm -rf /opt/go*
 | 
			
		||||
  msg_ok "Installed Golang"
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
  msg_info "Setup xCaddy"
 | 
			
		||||
  cd /opt
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,7 @@ msg_ok "Setup Python3"
 | 
			
		||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								install/elementsynapse-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								install/elementsynapse-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: tremor021
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  sudo \
 | 
			
		||||
  curl \
 | 
			
		||||
  mc \
 | 
			
		||||
  lsb-release \
 | 
			
		||||
  wget \
 | 
			
		||||
  apt-transport-https \
 | 
			
		||||
  debconf-utils
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Element Synapse"
 | 
			
		||||
wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
 | 
			
		||||
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/matrix-org.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
echo "matrix-synapse-py3 matrix-synapse/server-name string matrix" | debconf-set-selections
 | 
			
		||||
echo "matrix-synapse-py3 matrix-synapse/report-stats boolean false" | debconf-set-selections
 | 
			
		||||
$STD apt-get install matrix-synapse-py3 -y
 | 
			
		||||
sed -i 's/127.0.0.1/0.0.0.0/g' /etc/matrix-synapse/homeserver.yaml
 | 
			
		||||
sed -i 's/'\''::1'\'', //g' /etc/matrix-synapse/homeserver.yaml
 | 
			
		||||
systemctl enable -q --now matrix-synapse
 | 
			
		||||
msg_ok "Installed Element Synapse"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -23,7 +23,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ msg_ok "Setup Python3"
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install -g yarn
 | 
			
		||||
 
 | 
			
		||||
@@ -56,6 +56,7 @@ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dea
 | 
			
		||||
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
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install -g corepack@0.31.0
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Hoarder"
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ $STD apt-get install -y \
 | 
			
		||||
    imagemagick
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python3 Dependencies"
 | 
			
		||||
msg_info "Setup Python3"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
    pip \
 | 
			
		||||
    python3-irc
 | 
			
		||||
@@ -34,7 +34,7 @@ $STD pip install jaraco.stream
 | 
			
		||||
$STD pip install python-Levenshtein
 | 
			
		||||
$STD pip install soupsieve
 | 
			
		||||
$STD pip install pypdf
 | 
			
		||||
msg_ok "Installed Python3 Dependencies"
 | 
			
		||||
msg_ok "Setup Python3"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing LazyLibrarian"
 | 
			
		||||
$STD git clone https://gitlab.com/LazyLibrarian/LazyLibrarian /opt/LazyLibrarian
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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/Yarn"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
@@ -42,10 +42,12 @@ msg_ok "Installed pnpm"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Golang"
 | 
			
		||||
set +o pipefail
 | 
			
		||||
GOLANG=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-amd64.tar.gz" | head -n 1)
 | 
			
		||||
wget -q https://golang.org/dl/$GOLANG
 | 
			
		||||
tar -xzf $GOLANG -C /usr/local
 | 
			
		||||
ln -s /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
 | 
			
		||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
 | 
			
		||||
tar -C /usr/local -xzf "$temp_file"
 | 
			
		||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
set -o pipefail
 | 
			
		||||
msg_ok "Installed Golang"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -33,18 +33,18 @@ $STD apt-get install -y --no-install-recommends \
 | 
			
		||||
  mc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python3"
 | 
			
		||||
msg_info "Setup Python3"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  python3 \
 | 
			
		||||
  python3-dev \
 | 
			
		||||
  python3-pip \
 | 
			
		||||
  python3-venv
 | 
			
		||||
msg_ok "Installed Python3"
 | 
			
		||||
msg_ok "Setup Python3"
 | 
			
		||||
 | 
			
		||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -26,10 +26,14 @@ $STD apt-get install -y cmake
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Golang"
 | 
			
		||||
$STD wget https://golang.org/dl/go1.23.2.linux-amd64.tar.gz
 | 
			
		||||
$STD tar -xzf go1.23.2.linux-amd64.tar.gz -C /usr/local
 | 
			
		||||
$STD ln -s /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
rm -rf go1.23.2.linux-amd64.tar.gz
 | 
			
		||||
set +o pipefail
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
 | 
			
		||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
 | 
			
		||||
tar -C /usr/local -xzf "$temp_file"
 | 
			
		||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
set -o pipefail
 | 
			
		||||
msg_ok "Installed Golang"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Intel® Repositories"
 | 
			
		||||
 
 | 
			
		||||
@@ -24,16 +24,16 @@ $STD apt-get install -y \
 | 
			
		||||
  ffmpeg
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python3 Dependencies"
 | 
			
		||||
msg_info "Setup Python3"
 | 
			
		||||
$STD apt-get install -y --no-install-recommends \
 | 
			
		||||
  python3 \
 | 
			
		||||
  python3-pip
 | 
			
		||||
msg_ok "Installed Python3 Dependencies"
 | 
			
		||||
msg_ok "Setup Python3"
 | 
			
		||||
 | 
			
		||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -40,14 +40,14 @@ $STD apt-get install -y \
 | 
			
		||||
  mc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python3 Dependencies (Patience)"
 | 
			
		||||
msg_info "Setup Python3"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  python3 \
 | 
			
		||||
  python3-pip \
 | 
			
		||||
  python3-dev \
 | 
			
		||||
  python3-setuptools \
 | 
			
		||||
  python3-wheel
 | 
			
		||||
msg_ok "Installed Python3 Dependencies"
 | 
			
		||||
msg_ok "Setup Python3"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing OCR Dependencies (Patience)"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,7 @@ msg_ok "Set up PostgreSQL"
 | 
			
		||||
msg_info "Setting up Node.js/Yarn"
 | 
			
		||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install -g npm@latest
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										140
									
								
								install/paymenter-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								install/paymenter-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,140 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Nícolas Pastorello (opastorello)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
    curl \
 | 
			
		||||
    sudo \
 | 
			
		||||
    mc \
 | 
			
		||||
    git \
 | 
			
		||||
    software-properties-common \
 | 
			
		||||
    apt-transport-https \
 | 
			
		||||
    ca-certificates \
 | 
			
		||||
    gnupg \
 | 
			
		||||
    php8.2 \
 | 
			
		||||
    php8.2-{common,cli,gd,mysql,mbstring,bcmath,xml,fpm,curl,zip} \
 | 
			
		||||
    mariadb-server \
 | 
			
		||||
    nginx \
 | 
			
		||||
    redis-server
 | 
			
		||||
$STD curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Paymenter"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/paymenter/paymenter/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
mkdir -p /opt/paymenter
 | 
			
		||||
cd /opt/paymenter
 | 
			
		||||
wget -q "https://github.com/paymenter/paymenter/releases/download/${RELEASE}/paymenter.tar.gz"
 | 
			
		||||
$STD tar -xzvf paymenter.tar.gz
 | 
			
		||||
chmod -R 755 storage/* bootstrap/cache/
 | 
			
		||||
msg_ok "Installed Paymenter"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up database"
 | 
			
		||||
DB_NAME=paymenter
 | 
			
		||||
DB_USER=paymenter
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql
 | 
			
		||||
mysql -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
 | 
			
		||||
mysql -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost' WITH GRANT OPTION;"
 | 
			
		||||
{
 | 
			
		||||
    echo "Paymenter Database Credentials"
 | 
			
		||||
    echo "Database: $DB_NAME"
 | 
			
		||||
    echo "Username: $DB_USER"
 | 
			
		||||
    echo "Password: $DB_PASS"
 | 
			
		||||
} >> ~/paymenter_db.creds
 | 
			
		||||
cp .env.example .env
 | 
			
		||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
 | 
			
		||||
$STD php artisan key:generate --force
 | 
			
		||||
$STD php artisan storage:link
 | 
			
		||||
sed -i "s/^DB_DATABASE=.*/DB_DATABASE=${DB_NAME}/" .env
 | 
			
		||||
sed -i "s/^DB_USERNAME=.*/DB_USERNAME=${DB_USER}/" .env
 | 
			
		||||
sed -i "s/^DB_PASSWORD=.*/DB_PASSWORD=${DB_PASS}/" .env
 | 
			
		||||
$STD php artisan migrate --force --seed
 | 
			
		||||
msg_ok "Set up database"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Admin User"
 | 
			
		||||
$STD php artisan p:user:create <<EOF
 | 
			
		||||
admin@paymenter.org
 | 
			
		||||
paymenter
 | 
			
		||||
admin
 | 
			
		||||
paymenter
 | 
			
		||||
0
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Created Admin User"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Nginx"
 | 
			
		||||
cat <<EOF >/etc/nginx/sites-available/paymenter.conf
 | 
			
		||||
server {
 | 
			
		||||
    listen 80;
 | 
			
		||||
    listen [::]:80;
 | 
			
		||||
    server_name localhost;
 | 
			
		||||
    root /opt/paymenter/public;
 | 
			
		||||
 | 
			
		||||
    index index.php;
 | 
			
		||||
 | 
			
		||||
    location / {
 | 
			
		||||
        try_files \$uri \$uri/ /index.php?\$query_string;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location ~ \.php\$ {
 | 
			
		||||
        include snippets/fastcgi-php.conf;
 | 
			
		||||
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
 | 
			
		||||
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
 | 
			
		||||
        include fastcgi_params;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location ~ /\.ht {
 | 
			
		||||
        deny all;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
ln -s /etc/nginx/sites-available/paymenter.conf /etc/nginx/sites-enabled/
 | 
			
		||||
rm -f /etc/nginx/sites-enabled/default
 | 
			
		||||
$STD systemctl reload nginx
 | 
			
		||||
chown -R www-data:www-data /opt/paymenter/*
 | 
			
		||||
msg_ok "Configured Nginx"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Cronjob"
 | 
			
		||||
echo "* * * * * php /opt/paymenter/artisan schedule:run >> /dev/null 2>&1" | crontab -
 | 
			
		||||
msg_ok "Setup Cronjob"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/paymenter.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Paymenter Queue Worker
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
User=www-data
 | 
			
		||||
Group=www-data
 | 
			
		||||
Restart=always
 | 
			
		||||
ExecStart=/usr/bin/php /opt/paymenter/artisan queue:work
 | 
			
		||||
StartLimitInterval=180
 | 
			
		||||
StartLimitBurst=30
 | 
			
		||||
RestartSec=5s
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
$STD systemctl enable --now paymenter.service
 | 
			
		||||
msg_ok "Setup Service"
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/paymenter/paymenter.tar.gz
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,75 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: TheRealVira
 | 
			
		||||
# License: MIT
 | 
			
		||||
# Source: https://pf2etools.com/
 | 
			
		||||
 | 
			
		||||
# Import Functions und Setup
 | 
			
		||||
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 \
 | 
			
		||||
  curl \
 | 
			
		||||
  mc \
 | 
			
		||||
  sudo \
 | 
			
		||||
  apache2 \
 | 
			
		||||
  gpg \
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  git
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.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
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
# Setup App
 | 
			
		||||
msg_info "Setup Pf2eTools"
 | 
			
		||||
cd /opt
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/Pf2eToolsOrg/Pf2eTools/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
wget -q "https://github.com/Pf2eToolsOrg/Pf2eTools/archive/refs/tags/${RELEASE}.zip"
 | 
			
		||||
unzip -q "${RELEASE}.zip"
 | 
			
		||||
mv "Pf2eTools-${RELEASE:1}" /opt/Pf2eTools
 | 
			
		||||
cd /opt/Pf2eTools
 | 
			
		||||
$STD npm install
 | 
			
		||||
$STD npm run build
 | 
			
		||||
cd ~
 | 
			
		||||
echo "${RELEASE}" >/opt/Pf2eTools_version.txt
 | 
			
		||||
msg_ok "Set up Pf2eTools"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >> /etc/apache2/apache2.conf
 | 
			
		||||
<Location /server-status>
 | 
			
		||||
    SetHandler server-status
 | 
			
		||||
    Order deny,allow
 | 
			
		||||
    Allow from all
 | 
			
		||||
</Location>
 | 
			
		||||
EOF
 | 
			
		||||
rm -rf /var/www/html
 | 
			
		||||
ln -s "/opt/Pf2eTools" /var/www/html
 | 
			
		||||
chown -R www-data: "/opt/Pf2eTools"
 | 
			
		||||
chmod -R 755 "/opt/Pf2eTools"
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
# Cleanup
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/${RELEASE}.zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
@@ -26,7 +26,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -35,12 +35,13 @@ $STD apt-get install -y nodejs
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Golang"
 | 
			
		||||
cd /tmp
 | 
			
		||||
set +o pipefail
 | 
			
		||||
GO_RELEASE=$(curl -s https://go.dev/dl/ | grep -o -m 1 "go.*\linux-amd64.tar.gz")
 | 
			
		||||
wget -q https://golang.org/dl/${GO_RELEASE}
 | 
			
		||||
tar -xzf ${GO_RELEASE} -C /usr/local
 | 
			
		||||
ln -s /usr/local/go/bin/go /usr/bin/go
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
 | 
			
		||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
 | 
			
		||||
tar -C /usr/local -xzf "$temp_file"
 | 
			
		||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
set -o pipefail
 | 
			
		||||
msg_ok "Installed Golang"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										110
									
								
								install/privatebin-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								install/privatebin-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,110 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Nícolas Pastorello (opastorello)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
    curl \
 | 
			
		||||
    sudo \
 | 
			
		||||
    mc \
 | 
			
		||||
    nginx \
 | 
			
		||||
    php8.2-fpm \
 | 
			
		||||
    php8.2-{common,cli,gd,mbstring,xml,fpm,curl,zip} \
 | 
			
		||||
    unzip \
 | 
			
		||||
    openssl
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing PrivateBin"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/PrivateBin/PrivateBin/releases/latest | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
mkdir -p /opt/privatebin
 | 
			
		||||
cd /opt/privatebin
 | 
			
		||||
wget -q "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip"
 | 
			
		||||
$STD unzip -q ${RELEASE}.zip
 | 
			
		||||
mv PrivateBin-${RELEASE}/* .
 | 
			
		||||
msg_ok "Installed PrivateBin"
 | 
			
		||||
 | 
			
		||||
msg_info "Generating Universal SSL Certificate"
 | 
			
		||||
mkdir -p /etc/ssl/privatebin
 | 
			
		||||
$STD openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
 | 
			
		||||
    -keyout /etc/ssl/privatebin/key.pem \
 | 
			
		||||
    -out /etc/ssl/privatebin/cert.pem \
 | 
			
		||||
    -subj "/CN=PrivateBin"
 | 
			
		||||
msg_ok "Certificate Generated"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Environment"
 | 
			
		||||
mkdir -p /opt/privatebin/data
 | 
			
		||||
cp cfg/conf.sample.php /opt/privatebin/cfg/conf.php
 | 
			
		||||
sed -i "s|// 'traffic'|'traffic'|g" /opt/privatebin/cfg/conf.php
 | 
			
		||||
chown -R www-data:www-data /opt/privatebin
 | 
			
		||||
chmod -R 0755 /opt/privatebin/data
 | 
			
		||||
msg_ok "Configured Environment"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring PHP"
 | 
			
		||||
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/8.2/fpm/php.ini
 | 
			
		||||
systemctl restart php8.2-fpm
 | 
			
		||||
msg_ok "Configured PHP"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Universal Nginx"
 | 
			
		||||
cat <<EOF >/etc/nginx/sites-available/privatebin.conf
 | 
			
		||||
server {
 | 
			
		||||
    listen 80 default_server;
 | 
			
		||||
    listen [::]:80 default_server;
 | 
			
		||||
    return 301 https://\$host\$request_uri;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
server {
 | 
			
		||||
    listen 443 ssl default_server;
 | 
			
		||||
    listen [::]:443 ssl default_server;
 | 
			
		||||
    
 | 
			
		||||
    ssl_certificate /etc/ssl/privatebin/cert.pem;
 | 
			
		||||
    ssl_certificate_key /etc/ssl/privatebin/key.pem;
 | 
			
		||||
    
 | 
			
		||||
    root /opt/privatebin;
 | 
			
		||||
    index index.php;
 | 
			
		||||
 | 
			
		||||
    location / {
 | 
			
		||||
        try_files \$uri \$uri/ /index.php\$is_args\$args;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location ~ \.php\$ {
 | 
			
		||||
        include snippets/fastcgi-php.conf;
 | 
			
		||||
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
 | 
			
		||||
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
 | 
			
		||||
        include fastcgi_params;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location ~ /\.ht {
 | 
			
		||||
        deny all;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
 | 
			
		||||
    add_header X-Content-Type-Options nosniff;
 | 
			
		||||
    add_header X-Frame-Options "SAMEORIGIN";
 | 
			
		||||
    add_header X-XSS-Protection "1; mode=block";
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
ln -s /etc/nginx/sites-available/privatebin.conf /etc/nginx/sites-enabled/
 | 
			
		||||
rm -f /etc/nginx/sites-enabled/default
 | 
			
		||||
systemctl reload nginx
 | 
			
		||||
msg_ok "Nginx Configured"
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/privatebin/${RELEASE}.zip 
 | 
			
		||||
rm -rf /opt/privatebin/PrivateBin-${RELEASE}
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
@@ -28,7 +28,7 @@ rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
			
		||||
msg_ok "Setup Python3"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Prometheus Proxmox VE Exporter"
 | 
			
		||||
python3 -m pip install --quiet --root-user-action=ignore prometheus-pve-exporter
 | 
			
		||||
python3 -m pip install --default-timeout=300 --quiet --root-user-action=ignore prometheus-pve-exporter
 | 
			
		||||
mkdir -p /opt/prometheus-pve-exporter
 | 
			
		||||
cat <<EOF > /opt/prometheus-pve-exporter/pve.yml
 | 
			
		||||
default:
 | 
			
		||||
 
 | 
			
		||||
@@ -14,9 +14,11 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y curl
 | 
			
		||||
$STD apt-get install -y sudo
 | 
			
		||||
$STD apt-get install -y mc
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
    curl \
 | 
			
		||||
    sudo \
 | 
			
		||||
    gpg \
 | 
			
		||||
    mc 
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Proxmox Backup Server"
 | 
			
		||||
@@ -21,10 +21,14 @@ $STD apt-get install -y mc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Golang"
 | 
			
		||||
$STD wget https://golang.org/dl/go1.20.1.linux-amd64.tar.gz
 | 
			
		||||
$STD tar -xzf go1.20.1.linux-amd64.tar.gz -C /usr/local
 | 
			
		||||
$STD ln -s /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
rm -rf go1.20.1.linux-amd64.tar.gz
 | 
			
		||||
set +o pipefail
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
 | 
			
		||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
 | 
			
		||||
tar -C /usr/local -xzf "$temp_file"
 | 
			
		||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
set -o pipefail
 | 
			
		||||
msg_ok "Installed Golang"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing RTSPtoWeb"
 | 
			
		||||
 
 | 
			
		||||
@@ -23,10 +23,12 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Golang"
 | 
			
		||||
set +o pipefail
 | 
			
		||||
RELEASE=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-amd64.tar.gz" | head -n 1)
 | 
			
		||||
wget -q https://golang.org/dl/$RELEASE
 | 
			
		||||
tar -xzf $RELEASE -C /usr/local
 | 
			
		||||
$STD ln -s /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
 | 
			
		||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
 | 
			
		||||
tar -C /usr/local -xzf "$temp_file"
 | 
			
		||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
set -o pipefail
 | 
			
		||||
msg_ok "Installed Golang"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,13 +27,13 @@ $STD apt-get install -y \
 | 
			
		||||
  mc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python3"
 | 
			
		||||
msg_info "Setup Python3"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  python3-dev \
 | 
			
		||||
  python3-setuptools \
 | 
			
		||||
  python3-wheel \
 | 
			
		||||
  python3-pip
 | 
			
		||||
msg_ok "Installed Python3"
 | 
			
		||||
msg_ok "Setup Python3"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Spoolman"
 | 
			
		||||
RELEASE=$(wget -q https://github.com/Donkie/Spoolman/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
 | 
			
		||||
 
 | 
			
		||||
@@ -23,8 +23,7 @@ $STD apt install -y \
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup SQL Server 2022"
 | 
			
		||||
$STD curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
 | 
			
		||||
$STD curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc
 | 
			
		||||
$STD curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
 | 
			
		||||
$STD curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list
 | 
			
		||||
$STD apt-get clean *
 | 
			
		||||
$STD apt-get update -y
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
mkdir -p /etc/apt/keyrings
 | 
			
		||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
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
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install -g pnpm@9.7.1
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user