mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			tremor021-
			...
			deb13_g_to
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					66409ac1cf | 
							
								
								
									
										113
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										113
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,125 +10,12 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-10-30
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Livebook ([#8739](https://github.com/community-scripts/ProxmoxVE/pull/8739))
 | 
			
		||||
- Reitti ([#8736](https://github.com/community-scripts/ProxmoxVE/pull/8736))
 | 
			
		||||
- BentoPDF ([#8735](https://github.com/community-scripts/ProxmoxVE/pull/8735))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Add explicit exit calls to update_script functions [@MickLesk](https://github.com/MickLesk) ([#8752](https://github.com/community-scripts/ProxmoxVE/pull/8752))
 | 
			
		||||
    - kimai: Set global SQL mode to empty in install script [@MickLesk](https://github.com/MickLesk) ([#8747](https://github.com/community-scripts/ProxmoxVE/pull/8747))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - core: add function cleanup_lxc [@MickLesk](https://github.com/MickLesk) ([#8749](https://github.com/community-scripts/ProxmoxVE/pull/8749))
 | 
			
		||||
    - Asterisk: add interactive version selection to installer [@MickLesk](https://github.com/MickLesk) ([#8726](https://github.com/community-scripts/ProxmoxVE/pull/8726))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Cronicle: Update default credentials [@tremor021](https://github.com/tremor021) ([#8720](https://github.com/community-scripts/ProxmoxVE/pull/8720))
 | 
			
		||||
 | 
			
		||||
## 2025-10-29
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Docker-VM: add workaround for libguestfs issue on Proxmox VE 9+ [@MickLesk](https://github.com/MickLesk) ([#8722](https://github.com/community-scripts/ProxmoxVE/pull/8722))
 | 
			
		||||
    - Dispatcharr: add folders in installer / add more build ressources [@MickLesk](https://github.com/MickLesk) ([#8708](https://github.com/community-scripts/ProxmoxVE/pull/8708))
 | 
			
		||||
    - LibreTranslate: bump torch version [@MickLesk](https://github.com/MickLesk) ([#8710](https://github.com/community-scripts/ProxmoxVE/pull/8710))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Archivebox: add Chromium and Node modules [@MickLesk](https://github.com/MickLesk) ([#8725](https://github.com/community-scripts/ProxmoxVE/pull/8725))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - tracktor: refactor envfile [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8711](https://github.com/community-scripts/ProxmoxVE/pull/8711))
 | 
			
		||||
    - Kimai / Ghost / ManageMyDamnLife: Switch to MariaDB [@MickLesk](https://github.com/MickLesk) ([#8712](https://github.com/community-scripts/ProxmoxVE/pull/8712))
 | 
			
		||||
 | 
			
		||||
## 2025-10-28
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Update alpine-komodo.sh fixing missing pull images command [@glopes](https://github.com/glopes) ([#8689](https://github.com/community-scripts/ProxmoxVE/pull/8689))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Update SABnzbd. Include par2cmdline-turbo [@burgerga](https://github.com/burgerga) ([#8648](https://github.com/community-scripts/ProxmoxVE/pull/8648))
 | 
			
		||||
    - jotty: Add more ENV VARS (disabled) [@vhsdream](https://github.com/vhsdream) ([#8688](https://github.com/community-scripts/ProxmoxVE/pull/8688))
 | 
			
		||||
    - Bump bazarr to Debian 13 [@burgerga](https://github.com/burgerga) ([#8677](https://github.com/community-scripts/ProxmoxVE/pull/8677))
 | 
			
		||||
    - Update flaresolverr to Debian 13 [@burgerga](https://github.com/burgerga) ([#8672](https://github.com/community-scripts/ProxmoxVE/pull/8672))
 | 
			
		||||
 | 
			
		||||
## 2025-10-27
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Dispatcharr ([#8658](https://github.com/community-scripts/ProxmoxVE/pull/8658))
 | 
			
		||||
- Garage | Alpine-Garage ([#8656](https://github.com/community-scripts/ProxmoxVE/pull/8656))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Add typescript and esbuild to browserless setup [@MickLesk](https://github.com/MickLesk) ([#8666](https://github.com/community-scripts/ProxmoxVE/pull/8666))
 | 
			
		||||
    - jellyfin: fix: intel deps [@CrazyWolf13](https://github.com/CrazyWolf13) ([#8657](https://github.com/community-scripts/ProxmoxVE/pull/8657))
 | 
			
		||||
 | 
			
		||||
## 2025-10-26
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - ComfyUI ([#8633](https://github.com/community-scripts/ProxmoxVE/pull/8633))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - PiHole: Bump to Debian 12 [@MickLesk](https://github.com/MickLesk) ([#8649](https://github.com/community-scripts/ProxmoxVE/pull/8649))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Mylar3 [@tremor021](https://github.com/tremor021) ([#8642](https://github.com/community-scripts/ProxmoxVE/pull/8642))
 | 
			
		||||
 | 
			
		||||
## 2025-10-25
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - PatchMon ([#8632](https://github.com/community-scripts/ProxmoxVE/pull/8632))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - UrBackup Server: Fix install going interactive [@tremor021](https://github.com/tremor021) ([#8622](https://github.com/community-scripts/ProxmoxVE/pull/8622))
 | 
			
		||||
 | 
			
		||||
## 2025-10-24
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Fix config path for BunkerWeb [@Nonolanlan1007](https://github.com/Nonolanlan1007) ([#8618](https://github.com/community-scripts/ProxmoxVE/pull/8618))
 | 
			
		||||
    - Update logo URL in guardian.json [@HydroshieldMKII](https://github.com/HydroshieldMKII) ([#8615](https://github.com/community-scripts/ProxmoxVE/pull/8615))
 | 
			
		||||
 | 
			
		||||
## 2025-10-23
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Radicale: Update dependencies [@ilofX](https://github.com/ilofX) ([#8603](https://github.com/community-scripts/ProxmoxVE/pull/8603))
 | 
			
		||||
    - Various Downgrades to Debian 12 (MySQL / OMW / Technitium)  [@MickLesk](https://github.com/MickLesk) ([#8595](https://github.com/community-scripts/ProxmoxVE/pull/8595))
 | 
			
		||||
    - MeTube: Fix inserting path into .bashrc [@tremor021](https://github.com/tremor021) ([#8589](https://github.com/community-scripts/ProxmoxVE/pull/8589))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@ function update_script() {
 | 
			
		||||
  msg_info "Restarting AdGuard Home"
 | 
			
		||||
  $STD rc-service adguardhome restart
 | 
			
		||||
  msg_ok "Restarted AdGuard Home"
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -75,6 +75,7 @@ function update_script() {
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ function update_script() {
 | 
			
		||||
  msg_info "Restarting Caddy"
 | 
			
		||||
  rc-service caddy restart
 | 
			
		||||
  msg_ok "Restarted Caddy"
 | 
			
		||||
  exit 0
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,6 @@ function update_script() {
 | 
			
		||||
      ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ function update_script() {
 | 
			
		||||
  msg_info "Restarting Forgejo"
 | 
			
		||||
  $STD rc-service forgejo restart
 | 
			
		||||
  msg_ok "Restarted Forgejo"
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,63 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
APP="Alpine-Garage"
 | 
			
		||||
var_tags="${var_tags:-alpine;object-storage}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-alpine}"
 | 
			
		||||
var_version="${var_version:-3.22}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  if [[ ! -f /usr/local/bin/garage ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
  if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    rc-service garage stop || true
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing Up Data"
 | 
			
		||||
    cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
 | 
			
		||||
    cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
 | 
			
		||||
    msg_ok "Backed Up Data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Garage"
 | 
			
		||||
    curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
    chmod +x /usr/local/bin/garage
 | 
			
		||||
    echo "${GITEA_RELEASE}" >~/.garage
 | 
			
		||||
    msg_ok "Updated Garage"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    rc-service garage start || rc-service garage restart
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Update Successfully!"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Garage is already at ${GITEA_RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
@@ -48,6 +48,7 @@ function update_script() {
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,6 @@ function update_script() {
 | 
			
		||||
  msg_info "Restarting Gitea"
 | 
			
		||||
  rc-service gitea restart
 | 
			
		||||
  msg_ok "Restarted Gitea"
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -54,7 +54,6 @@ function update_script() {
 | 
			
		||||
      ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -41,6 +41,7 @@ function update_script() {
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -52,10 +52,9 @@ function update_script() {
 | 
			
		||||
    mv "$BACKUP_FILE" "$COMPOSE_FILE"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  $STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull
 | 
			
		||||
  $STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d
 | 
			
		||||
  msg_ok "Updated ${APP}"
 | 
			
		||||
  exit 0
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ function update_script() {
 | 
			
		||||
  msg_info "Restarting MariaDB"
 | 
			
		||||
  $STD rc-service mariadb restart
 | 
			
		||||
  msg_ok "Restarted MariaDB"
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,6 @@ function update_script() {
 | 
			
		||||
      ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ function update_script() {
 | 
			
		||||
  msg_info "Updating Node-RED"
 | 
			
		||||
  $STD npm install -g --unsafe-perm node-red
 | 
			
		||||
  msg_ok "Updated Node-RED"
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ function update_script() {
 | 
			
		||||
  msg_info "Restarting PostgreSQL"
 | 
			
		||||
  $STD rc-service postgresql restart
 | 
			
		||||
  msg_ok "Restarted PostgreSQL"
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ function update_script() {
 | 
			
		||||
  msg_info "Restarting Prometheus"
 | 
			
		||||
  $STD rc-service prometheus restart
 | 
			
		||||
  msg_ok "Restarted Prometheus"
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -38,6 +38,7 @@ function update_script() {
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -41,8 +41,9 @@ function update_script() {
 | 
			
		||||
  msg_info "Starting Service"
 | 
			
		||||
  $STD rc-service redlib start
 | 
			
		||||
  msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
  msg_ok "Update Successful"
 | 
			
		||||
  exit 0
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,8 @@ function update_script() {
 | 
			
		||||
  msg_info "Restarting Syncthing"
 | 
			
		||||
  $STD rc-service syncthing restart
 | 
			
		||||
  msg_ok "Restarted Syncthing"
 | 
			
		||||
  exit 0
 | 
			
		||||
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -44,6 +44,7 @@ function update_script() {
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ function update_script() {
 | 
			
		||||
  msg_info "Upgrading traefik from edge"
 | 
			
		||||
  $STD apk add traefik --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community
 | 
			
		||||
  msg_ok "Upgraded traefik"
 | 
			
		||||
  exit 0
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,8 @@ function update_script() {
 | 
			
		||||
  msg_info "Restarting Transmission"
 | 
			
		||||
  $STD rc-service transmission-daemon restart
 | 
			
		||||
  msg_ok "Restarted Transmission"
 | 
			
		||||
  exit 0
 | 
			
		||||
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,7 @@ function update_script() {
 | 
			
		||||
    $STD ./wgd.sh start
 | 
			
		||||
    msg_ok "WGDashboard updated"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,18 +28,12 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="@postlight/parser@latest,single-file-cli@latest" setup_nodejs
 | 
			
		||||
  NODE_VERSION="22" setup_nodejs
 | 
			
		||||
  PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
 | 
			
		||||
  if ! dpkg -l | grep -q "^ii  chromium "; then
 | 
			
		||||
    msg_info "Installing System Dependencies"
 | 
			
		||||
    $STD apt-get install -y chromium
 | 
			
		||||
    msg_ok "Installed System Dependencies"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Stopping Service"
 | 
			
		||||
  msg_info "Stopping ArchiveBox"
 | 
			
		||||
  systemctl stop archivebox
 | 
			
		||||
  msg_ok "Stopped Service"
 | 
			
		||||
  msg_ok "Stopped ArchiveBox"
 | 
			
		||||
 | 
			
		||||
  msg_info "Upgrading Playwright"
 | 
			
		||||
  $STD uv pip install playwright --system
 | 
			
		||||
@@ -52,10 +46,11 @@ function update_script() {
 | 
			
		||||
  sudo -u archivebox archivebox init
 | 
			
		||||
  msg_ok "Updated ArchiveBox"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting Service"
 | 
			
		||||
  msg_info "Starting ArchiveBox"
 | 
			
		||||
  systemctl start archivebox
 | 
			
		||||
  msg_ok "Started Service"
 | 
			
		||||
  msg_ok "Updated Successfully!"
 | 
			
		||||
  msg_ok "Started ArchiveBox"
 | 
			
		||||
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								ct/bazarr.sh
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								ct/bazarr.sh
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -28,28 +28,15 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if check_for_gh_release "bazarr" "morpheus65535/bazarr"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop bazarr
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
    PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
    fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
 | 
			
		||||
 | 
			
		||||
    msg_info "Setup Bazarr"
 | 
			
		||||
    mkdir -p /var/lib/bazarr/
 | 
			
		||||
    chmod 775 /opt/bazarr /var/lib/bazarr/
 | 
			
		||||
    if [[ ! -d /opt/bazarr/venv/ ]]; then
 | 
			
		||||
      $STD uv venv /opt/bazarr/venv --python 3.12
 | 
			
		||||
      sed -i "s|ExecStart=/usr/bin/python3 /opt/bazarr/bazarr.py|ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py|g" /etc/systemd/system/bazarr.service
 | 
			
		||||
      systemctl daemon-reload
 | 
			
		||||
    fi
 | 
			
		||||
    sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
 | 
			
		||||
    $STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
 | 
			
		||||
    $STD uv pip install -r /opt/bazarr/requirements.txt --system
 | 
			
		||||
    msg_ok "Setup Bazarr"
 | 
			
		||||
    
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start bazarr
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
 
 | 
			
		||||
@@ -1,62 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/alam00000/bentopdf
 | 
			
		||||
 | 
			
		||||
APP="BentoPDF"
 | 
			
		||||
var_tags="${var_tags:-pdf-editor}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/bentopdf ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  NODE_VERSION="24" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "bentopdf" "alam00000/bentopdf"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop bentopdf
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    CLEAN_INSTALL=1 fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "/opt/bentopdf"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating BentoPDF"
 | 
			
		||||
    cd /opt/bentopdf
 | 
			
		||||
    $STD npm ci --no-audit --no-fund
 | 
			
		||||
    export SIMPLE_MODE=true
 | 
			
		||||
    $STD npm run build -- --mode production
 | 
			
		||||
    msg_ok "Updated BentoPDF"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start bentopdf
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  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}:8080${CL}"
 | 
			
		||||
@@ -54,9 +54,8 @@ function update_script() {
 | 
			
		||||
      msg_error "PLEASE MAKE A BACKUP FIRST!"
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -1,42 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL  https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: jdacode
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/comfyanonymous/ComfyUI
 | 
			
		||||
 | 
			
		||||
APP="ComfyUI"
 | 
			
		||||
var_tags="${var_tags:-ai}"
 | 
			
		||||
var_cpu="${var_cpu:-4}"
 | 
			
		||||
var_ram="${var_ram:-8192}"
 | 
			
		||||
var_disk="${var_disk:-25}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /opt/${APP} ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_error "To update use the ${APP} Manager."
 | 
			
		||||
  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}:8188${CL}"
 | 
			
		||||
@@ -28,7 +28,6 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_ok "${APP} updates itself automatically!"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -38,4 +37,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}${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
@@ -62,6 +62,7 @@ function update_script() {
 | 
			
		||||
      sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
 | 
			
		||||
      $STD /opt/cronicle/bin/control.sh start
 | 
			
		||||
      msg_ok "Installed Cronicle Worker"
 | 
			
		||||
 | 
			
		||||
      echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
 
 | 
			
		||||
@@ -1,136 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: ekke85 | MickLesk
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/Dispatcharr/Dispatcharr
 | 
			
		||||
 | 
			
		||||
APP="Dispatcharr"
 | 
			
		||||
var_tags="${var_tags:-media;arr}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-8}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d "/opt/dispatcharr" ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  setup_uv
 | 
			
		||||
  NODE_VERSION="24" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "Dispatcharr" "Dispatcharr/Dispatcharr"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop dispatcharr-celery
 | 
			
		||||
    systemctl stop dispatcharr-celerybeat
 | 
			
		||||
    systemctl stop dispatcharr-daphne
 | 
			
		||||
    systemctl stop dispatcharr
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    BACKUP_FILE="/opt/dispatcharr_backup_$(date +%F_%H-%M-%S).tar.gz"
 | 
			
		||||
    if [[ -f /opt/dispatcharr/.env ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/.env /tmp/dispatcharr.env.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-gunicorn.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-gunicorn.sh /tmp/start-gunicorn.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-celery.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-celery.sh /tmp/start-celery.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-celerybeat.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-celerybeat.sh /tmp/start-celerybeat.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/start-daphne.sh ]]; then
 | 
			
		||||
      cp /opt/dispatcharr/start-daphne.sh /tmp/start-daphne.sh.backup
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /opt/dispatcharr/.env ]]; then
 | 
			
		||||
      set -o allexport
 | 
			
		||||
      source /opt/dispatcharr/.env
 | 
			
		||||
      set +o allexport
 | 
			
		||||
      if [[ -n "$POSTGRES_DB" ]] && [[ -n "$POSTGRES_USER" ]] && [[ -n "$POSTGRES_PASSWORD" ]]; then
 | 
			
		||||
        PGPASSWORD=$POSTGRES_PASSWORD pg_dump -U $POSTGRES_USER -h ${POSTGRES_HOST:-localhost} $POSTGRES_DB >/tmp/dispatcharr_db_$(date +%F).sql
 | 
			
		||||
        msg_info "Database backup created"
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
    $STD tar -czf "$BACKUP_FILE" -C /opt dispatcharr /tmp/dispatcharr_db_*.sql
 | 
			
		||||
    msg_ok "Backup created: $BACKUP_FILE"
 | 
			
		||||
 | 
			
		||||
    CLEAN_INSTALL=1 fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Dispatcharr Backend"
 | 
			
		||||
    if [[ -f /tmp/dispatcharr.env.backup ]]; then
 | 
			
		||||
      mv /tmp/dispatcharr.env.backup /opt/dispatcharr/.env
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-gunicorn.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-gunicorn.sh.backup /opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-celery.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-celery.sh.backup /opt/dispatcharr/start-celery.sh
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-celerybeat.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-celerybeat.sh.backup /opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ -f /tmp/start-daphne.sh.backup ]]; then
 | 
			
		||||
      mv /tmp/start-daphne.sh.backup /opt/dispatcharr/start-daphne.sh
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    cd /opt/dispatcharr
 | 
			
		||||
    rm -rf .venv
 | 
			
		||||
    $STD uv venv
 | 
			
		||||
    $STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
 | 
			
		||||
    $STD uv pip install gunicorn gevent celery redis daphne
 | 
			
		||||
    msg_ok "Updated Dispatcharr Backend"
 | 
			
		||||
 | 
			
		||||
    msg_info "Building Frontend"
 | 
			
		||||
    cd /opt/dispatcharr/frontend
 | 
			
		||||
    $STD npm install --legacy-peer-deps
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    msg_ok "Built Frontend"
 | 
			
		||||
 | 
			
		||||
    msg_info "Running Django Migrations"
 | 
			
		||||
    cd /opt/dispatcharr
 | 
			
		||||
    if [[ -f .env ]]; then
 | 
			
		||||
      set -o allexport
 | 
			
		||||
      source .env
 | 
			
		||||
      set +o allexport
 | 
			
		||||
    fi
 | 
			
		||||
    $STD uv run python manage.py migrate --noinput
 | 
			
		||||
    $STD uv run python manage.py collectstatic --noinput
 | 
			
		||||
    msg_ok "Migrations Complete"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start dispatcharr
 | 
			
		||||
    systemctl start dispatcharr-celery
 | 
			
		||||
    systemctl start dispatcharr-celerybeat
 | 
			
		||||
    systemctl start dispatcharr-daphne
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -f /tmp/dispatcharr_db_*.sql
 | 
			
		||||
    msg_ok "Cleanup completed"
 | 
			
		||||
    msg_ok "Update Successfully!"
 | 
			
		||||
  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}"
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -28,18 +28,13 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ $(grep -E '^VERSION_ID=' /etc/os-release) == *"12"* ]]; then
 | 
			
		||||
    msg_error "Wrong Debian version detected!"
 | 
			
		||||
    msg_error "You must upgrade your LXC to Debian Trixie before updating."
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr"; then
 | 
			
		||||
  if check_for_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "3.3.25"; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop flaresolverr
 | 
			
		||||
    msg_ok "Stopped service"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/flaresolverr
 | 
			
		||||
    fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.3.25" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl start flaresolverr
 | 
			
		||||
 
 | 
			
		||||
@@ -20,24 +20,23 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/freshrss ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /opt/freshrss ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
  if [ ! -x /opt/freshrss/cli/sensitive-log.sh ]; then
 | 
			
		||||
    msg_info "Fixing wrong permissions"
 | 
			
		||||
    chmod +x /opt/freshrss/cli/sensitive-log.sh
 | 
			
		||||
    systemctl restart apache2
 | 
			
		||||
    msg_ok "Fixed wrong permissions"
 | 
			
		||||
    exit
 | 
			
		||||
  else
 | 
			
		||||
    msg_error "FreshRSS should be updated via the user interface."
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
    if [ ! -x /opt/freshrss/cli/sensitive-log.sh ]; then
 | 
			
		||||
        msg_info "Fixing wrong permissions"
 | 
			
		||||
        chmod +x /opt/freshrss/cli/sensitive-log.sh
 | 
			
		||||
        systemctl restart apache2
 | 
			
		||||
        msg_ok "Fixed wrong permissions"
 | 
			
		||||
    else
 | 
			
		||||
        msg_error "FreshRSS should be updated via the user interface."
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										64
									
								
								ct/garage.sh
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								ct/garage.sh
									
									
									
									
									
								
							@@ -1,64 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
APP="Garage"
 | 
			
		||||
var_tags="${var_tags:-object-storage}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -f /usr/local/bin/garage ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  GITEA_RELEASE=$(curl -fsSL https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
  if [[ "${GITEA_RELEASE}" != "$(cat ~/.garage 2>/dev/null)" ]] || [[ ! -f ~/.garage ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop garage
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing Up Data"
 | 
			
		||||
    cp /usr/local/bin/garage /usr/local/bin/garage.old 2>/dev/null || true
 | 
			
		||||
    cp /etc/garage.toml /etc/garage.toml.bak 2>/dev/null || true
 | 
			
		||||
    msg_ok "Backed Up Data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Garage"
 | 
			
		||||
    curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
    chmod +x /usr/local/bin/garage
 | 
			
		||||
    echo "${GITEA_RELEASE}" >~/.garage
 | 
			
		||||
    msg_ok "Updated Garage"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start garage
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Update Successfully!"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Garage is already at ${GITEA_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}"
 | 
			
		||||
@@ -24,9 +24,12 @@ function update_script() {
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if ! dpkg-query -W -f='${Status}' mariadb-server 2>/dev/null | grep -q "install ok installed"; then
 | 
			
		||||
    setup_mysql
 | 
			
		||||
  fi
 | 
			
		||||
  NODE_VERSION="22" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating Ghost"
 | 
			
		||||
  msg_info "Updating ${APP} LXC"
 | 
			
		||||
  if command -v ghost &>/dev/null; then
 | 
			
		||||
    current_version=$(ghost version | grep 'Ghost-CLI version' | awk '{print $3}')
 | 
			
		||||
    latest_version=$(npm show ghost-cli version)
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,6 @@ function update_script() {
 | 
			
		||||
  $STD apt update
 | 
			
		||||
  $STD apt -y upgrade
 | 
			
		||||
  msg_ok "Updated $APP LXC"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
    ___    __      _                  ______                          
 | 
			
		||||
   /   |  / /___  (_)___  ___        / ____/___ __________ _____ ____ 
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______/ / __/ __ `/ ___/ __ `/ __ `/ _ \
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ /_/ / /_/ / /  / /_/ / /_/ /  __/
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/      \____/\__,_/_/   \__,_/\__, /\___/ 
 | 
			
		||||
        /_/                                              /____/       
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
    ____             __        ____  ____  ______
 | 
			
		||||
   / __ )___  ____  / /_____  / __ \/ __ \/ ____/
 | 
			
		||||
  / __  / _ \/ __ \/ __/ __ \/ /_/ / / / / /_    
 | 
			
		||||
 / /_/ /  __/ / / / /_/ /_/ / ____/ /_/ / __/    
 | 
			
		||||
/_____/\___/_/ /_/\__/\____/_/   /_____/_/       
 | 
			
		||||
                                                 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
   ______                ____      __  ______
 | 
			
		||||
  / ____/___  ____ ___  / __/_  __/ / / /  _/
 | 
			
		||||
 / /   / __ \/ __ `__ \/ /_/ / / / / / // /  
 | 
			
		||||
/ /___/ /_/ / / / / / / __/ /_/ / /_/ // /   
 | 
			
		||||
\____/\____/_/ /_/ /_/_/  \__, /\____/___/   
 | 
			
		||||
                         /____/              
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
    ____  _                  __       __                   
 | 
			
		||||
   / __ \(_)________  ____ _/ /______/ /_  ____ ___________
 | 
			
		||||
  / / / / / ___/ __ \/ __ `/ __/ ___/ __ \/ __ `/ ___/ ___/
 | 
			
		||||
 / /_/ / (__  ) /_/ / /_/ / /_/ /__/ / / / /_/ / /  / /    
 | 
			
		||||
/_____/_/____/ .___/\__,_/\__/\___/_/ /_/\__,_/_/  /_/     
 | 
			
		||||
            /_/                                            
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
   ______                          
 | 
			
		||||
  / ____/___ __________ _____ ____ 
 | 
			
		||||
 / / __/ __ `/ ___/ __ `/ __ `/ _ \
 | 
			
		||||
/ /_/ / /_/ / /  / /_/ / /_/ /  __/
 | 
			
		||||
\____/\__,_/_/   \__,_/\__, /\___/ 
 | 
			
		||||
                      /____/       
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
    __    _            __                __  
 | 
			
		||||
   / /   (_)   _____  / /_  ____  ____  / /__
 | 
			
		||||
  / /   / / | / / _ \/ __ \/ __ \/ __ \/ //_/
 | 
			
		||||
 / /___/ /| |/ /  __/ /_/ / /_/ / /_/ / ,<   
 | 
			
		||||
/_____/_/ |___/\___/_.___/\____/\____/_/|_|  
 | 
			
		||||
                                             
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
    ____        __       __    __  ___          
 | 
			
		||||
   / __ \____ _/ /______/ /_  /  |/  /___  ____ 
 | 
			
		||||
  / /_/ / __ `/ __/ ___/ __ \/ /|_/ / __ \/ __ \
 | 
			
		||||
 / ____/ /_/ / /_/ /__/ / / / /  / / /_/ / / / /
 | 
			
		||||
/_/    \__,_/\__/\___/_/ /_/_/  /_/\____/_/ /_/ 
 | 
			
		||||
                                                
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
    ____       _ __  __  _ 
 | 
			
		||||
   / __ \___  (_) /_/ /_(_)
 | 
			
		||||
  / /_/ / _ \/ / __/ __/ / 
 | 
			
		||||
 / _, _/  __/ / /_/ /_/ /  
 | 
			
		||||
/_/ |_|\___/_/\__/\__/_/   
 | 
			
		||||
                           
 | 
			
		||||
@@ -42,4 +42,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
@@ -30,7 +30,6 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
  if ! grep -qEi 'ubuntu' /etc/os-release; then
 | 
			
		||||
    msg_info "Updating Intel Dependencies"
 | 
			
		||||
    rm .intel-*
 | 
			
		||||
    fetch_and_deploy_gh_release "intel-igc-core-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-core-2_*_amd64.deb"
 | 
			
		||||
    fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
 | 
			
		||||
    fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								ct/kimai.sh
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								ct/kimai.sh
									
									
									
									
									
								
							@@ -23,21 +23,32 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if ! command -v lsb_release; then
 | 
			
		||||
    apt install -y lsb-release
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ ! -d /opt/kimai ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
 | 
			
		||||
  if [[ "$CURRENT_PHP" != "8.4" ]]; then
 | 
			
		||||
    msg_info "Migrating PHP $CURRENT_PHP to 8.4"
 | 
			
		||||
    PHP_VERSION="8.4" PHP_MODULE="gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm" PHP_APACHE="YES" setup_php
 | 
			
		||||
    $STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
    $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
    $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get remove -y php"${CURRENT_PHP//./}"*
 | 
			
		||||
    $STD apt-get install -y \
 | 
			
		||||
      php8.4 composer \
 | 
			
		||||
      php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl,fpm} \
 | 
			
		||||
      libapache2-mod-php8.4
 | 
			
		||||
    msg_ok "Migrated PHP $CURRENT_PHP to 8.4"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "kimai" "kimai/kimai"; then
 | 
			
		||||
    BACKUP_DIR="/opt/kimai_backup"
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  BACKUP_DIR="/opt/kimai_backup"
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Stopping Apache2"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    msg_ok "Stopped Apache2"
 | 
			
		||||
@@ -49,9 +60,15 @@ function update_script() {
 | 
			
		||||
    [ -f /opt/kimai/config/packages/local.yaml ] && cp /opt/kimai/config/packages/local.yaml "$BACKUP_DIR/"
 | 
			
		||||
    msg_ok "Backup completed"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "kimai" "kimai/kimai"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Kimai"
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    trap "echo Unable to download release file for version ${RELEASE}; try again later" ERR
 | 
			
		||||
    set -e
 | 
			
		||||
    curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip")
 | 
			
		||||
    $STD unzip "${RELEASE}".zip
 | 
			
		||||
    set +e
 | 
			
		||||
    trap - ERR
 | 
			
		||||
    rm -rf /opt/kimai
 | 
			
		||||
    mv kimai-"${RELEASE}" /opt/kimai
 | 
			
		||||
    [ -d "$BACKUP_DIR/var" ] && cp -r "$BACKUP_DIR/var" /opt/kimai/
 | 
			
		||||
    [ -f "$BACKUP_DIR/.env" ] && cp "$BACKUP_DIR/.env" /opt/kimai/
 | 
			
		||||
    [ -f "$BACKUP_DIR/local.yaml" ] && cp "$BACKUP_DIR/local.yaml" /opt/kimai/config/packages/
 | 
			
		||||
@@ -59,7 +76,8 @@ function update_script() {
 | 
			
		||||
    cd /opt/kimai
 | 
			
		||||
    $STD composer install --no-dev --optimize-autoloader
 | 
			
		||||
    $STD bin/console kimai:update
 | 
			
		||||
    msg_ok "Updated Kimai"
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Apache2"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
@@ -72,7 +90,14 @@ function update_script() {
 | 
			
		||||
    chown -R www-data:www-data /opt/*
 | 
			
		||||
    chmod -R 777 /opt/*
 | 
			
		||||
    msg_ok "Setup Permissions"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf "${RELEASE}".zip
 | 
			
		||||
    rm -rf "$BACKUP_DIR"
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -28,24 +28,21 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  setup_uv
 | 
			
		||||
  
 | 
			
		||||
  if check_for_gh_release "libretranslate" "LibreTranslate/LibreTranslate"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop libretranslate
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating LibreTranslate"
 | 
			
		||||
    msg_info "Updating $APP"
 | 
			
		||||
    cd /opt/libretranslate
 | 
			
		||||
    source .venv/bin/activate
 | 
			
		||||
    $STD pip install -U libretranslate
 | 
			
		||||
    msg_ok "Updated LibreTranslate"
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start libretranslate
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Update Successfully!"
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,64 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/refs/heads/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: dkuku
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/livebook-dev/livebook
 | 
			
		||||
 | 
			
		||||
APP="Livebook"
 | 
			
		||||
var_tags="${var_tags:-development}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_os="${var_os:-ubuntu}"
 | 
			
		||||
var_version="${var_version:-24.04}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /opt/livebook/.mix/escripts/livebook ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "livebook" "livebook-dev/livebook"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop livebook
 | 
			
		||||
    msg_info "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Container"
 | 
			
		||||
    $STD apt update
 | 
			
		||||
    $STD apt upgrade -y
 | 
			
		||||
    msg_ok "Updated Container"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Livebook"
 | 
			
		||||
    source /opt/livebook/.env
 | 
			
		||||
    cd /opt/livebook
 | 
			
		||||
    $STD mix escript.install hex livebook --force
 | 
			
		||||
 | 
			
		||||
    chown -R livebook:livebook /opt/livebook /data
 | 
			
		||||
    
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start livebook
 | 
			
		||||
    msg_info "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
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}"
 | 
			
		||||
@@ -50,7 +50,6 @@ function update_script() {
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "$APP is already up to date (${RELEASE})"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								ct/mylar3.sh
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								ct/mylar3.sh
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: davalanche | Co-Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# Author: davalanche
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/mylar3/mylar3
 | 
			
		||||
 | 
			
		||||
@@ -25,10 +25,16 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "mylar3" "mylar3/mylar3"; then
 | 
			
		||||
    fetch_and_deploy_gh_release "mylar3" "mylar3/mylar3" "tarball"
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    rm -rf /opt/mylar3/* /opt/mylar3/.*
 | 
			
		||||
curl -fsSL "https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz --strip-components=1 -C /opt/mylar3
 | 
			
		||||
    systemctl restart mylar3
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
@@ -40,4 +46,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}:8090${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
 | 
			
		||||
							
								
								
									
										26
									
								
								ct/mysql.sh
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								ct/mysql.sh
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -20,18 +20,18 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -f /usr/share/keyrings/mysql.gpg ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -f /usr/share/keyrings/mysql.gpg ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
    $STD apt update
 | 
			
		||||
    $STD apt -y upgrade
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating ${APP} LXC"
 | 
			
		||||
  $STD apt update
 | 
			
		||||
  $STD apt -y upgrade
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -41,4 +41,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}:3306${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}:3306${CL}"
 | 
			
		||||
@@ -40,7 +40,6 @@ function update_script() {
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Updated successfully!\n"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								ct/omv.sh
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								ct/omv.sh
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -20,18 +20,18 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -f /etc/apt/sources.list.d/openmediavault.list ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -f /etc/apt/sources.list.d/openmediavault.list ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
    $STD apt update
 | 
			
		||||
    $STD apt -y upgrade
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating ${APP} LXC"
 | 
			
		||||
  $STD apt update
 | 
			
		||||
  $STD apt -y upgrade
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -41,4 +41,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
@@ -1,76 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/PatchMon/PatchMon
 | 
			
		||||
 | 
			
		||||
APP="PatchMon"
 | 
			
		||||
var_tags="${var_tags:-monitoring}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d "/opt/patchmon" ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  NODE_VERSION="24" setup_nodejs
 | 
			
		||||
  if check_for_gh_release "PatchMon" "PatchMon/PatchMon"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop patchmon-server
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    cp /opt/patchmon/backend/.env /opt/backend.env
 | 
			
		||||
    cp /opt/patchmon/frontend/.env /opt/frontend.env
 | 
			
		||||
    msg_ok "Backup Created"
 | 
			
		||||
 | 
			
		||||
    CLEAN_INSTALL=1 fetch_and_deploy_gh_release "PatchMon" "PatchMon/PatchMon" "tarball" "latest" "/opt/patchmon"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating PatchMon"
 | 
			
		||||
    cd /opt/patchmon
 | 
			
		||||
    export NODE_ENV=production
 | 
			
		||||
    $STD npm install --no-audit --no-fund --no-save --ignore-scripts
 | 
			
		||||
    cd /opt/patchmon/backend
 | 
			
		||||
    $STD npm install --no-audit --no-fund --no-save --ignore-scripts
 | 
			
		||||
    cd /opt/patchmon/frontend
 | 
			
		||||
    $STD npm install --include=dev --no-audit --no-fund --no-save --ignore-scripts
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    cd /opt/patchmon/backend
 | 
			
		||||
    mv /opt/backend.env /opt/patchmon/backend/.env
 | 
			
		||||
    mv /opt/frontend.env /opt/patchmon/frontend/.env
 | 
			
		||||
    $STD npx prisma migrate deploy
 | 
			
		||||
    $STD npx prisma generate
 | 
			
		||||
    msg_ok "Updated PatchMon"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start patchmon-server
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  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}"
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -27,13 +27,12 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating PiHole"
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    set +e
 | 
			
		||||
    $STD apt update
 | 
			
		||||
    $STD apt upgrade -y
 | 
			
		||||
    /usr/local/bin/pihole -up
 | 
			
		||||
    msg_ok "Updated PiHole"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -66,8 +66,6 @@ function update_script() {
 | 
			
		||||
    $STD unzip "$brwsr_tmp"
 | 
			
		||||
    mv browserless-"$TAG"/ /opt/browserless
 | 
			
		||||
    cd /opt/browserless
 | 
			
		||||
    $STD npm install typescript
 | 
			
		||||
    $STD npm install esbuild
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    rm -rf src/routes/{chrome,edge,firefox,webkit}
 | 
			
		||||
    $STD node_modules/playwright-core/cli.js install --with-deps chromium
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										68
									
								
								ct/reitti.sh
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								ct/reitti.sh
									
									
									
									
									
								
							@@ -1,68 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/dedicatedcode/reitti
 | 
			
		||||
 | 
			
		||||
APP="Reitti"
 | 
			
		||||
var_tags="${var_tags:-location-tracker}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-15}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -f /opt/reitti/reitti.jar ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if check_for_gh_release "reitti" "dedicatedcode/reitti"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop reitti
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    rm -f /opt/reitti/reitti.jar
 | 
			
		||||
    USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "reitti" "dedicatedcode/reitti" "singlefile" "latest" "/opt/reitti" "reitti-app.jar"
 | 
			
		||||
    mv /opt/reitti/reitti-*.jar /opt/reitti/reitti.jar
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start reitti
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  fi
 | 
			
		||||
  if check_for_gh_release "photon" "dedicatedcode/reitti"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop photon
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    rm -f /opt/photon/photon.jar
 | 
			
		||||
    USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "photon" "komoot/photon" "singlefile" "latest" "/opt/photon" "photon-0*.jar"
 | 
			
		||||
    mv /opt/photon/photon-*.jar /opt/photon/photon.jar
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start photon
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  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}:8080${CL}"
 | 
			
		||||
@@ -24,38 +24,40 @@ function update_script() {
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
 | 
			
		||||
    if par2 --version | grep -q "par2cmdline-turbo"; then
 | 
			
		||||
        fetch_and_deploy_gh_release "par2cmdline-turbo" "animetosho/par2cmdline-turbo" "prebuild" "latest" "/usr/bin/" "*-linux-amd64.zip"
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    if [[ ! -d /opt/sabnzbd ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    if check_for_gh_release "sabnzbd-org" "sabnzbd/sabnzbd"; then
 | 
			
		||||
        PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
        systemctl stop sabnzbd
 | 
			
		||||
        cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
 | 
			
		||||
        fetch_and_deploy_gh_release "sabnzbd-org" "sabnzbd/sabnzbd" "prebuild" "latest" "/opt/sabnzbd" "SABnzbd-*-src.tar.gz"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if [[ ! -d /opt/sabnzbd/venv ]]; then
 | 
			
		||||
            msg_info "Migrating SABnzbd to uv virtual environment"
 | 
			
		||||
            $STD uv venv /opt/sabnzbd/venv
 | 
			
		||||
            msg_ok "Created uv venv at /opt/sabnzbd/venv"
 | 
			
		||||
 | 
			
		||||
            if grep -q "ExecStart=python3 SABnzbd.py" /etc/systemd/system/sabnzbd.service; then
 | 
			
		||||
                sed -i "s|ExecStart=python3 SABnzbd.py|ExecStart=/opt/sabnzbd/venv/bin/python SABnzbd.py|" /etc/systemd/system/sabnzbd.service
 | 
			
		||||
                systemctl daemon-reload
 | 
			
		||||
                msg_ok "Updated SABnzbd service to use uv venv"
 | 
			
		||||
            fi
 | 
			
		||||
        fi
 | 
			
		||||
        $STD uv pip install --upgrade pip --python=/opt/sabnzbd/venv/bin/python
 | 
			
		||||
        $STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
 | 
			
		||||
 | 
			
		||||
        systemctl start sabnzbd
 | 
			
		||||
        msg_ok "Updated Successfully"
 | 
			
		||||
    setup_uv
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/sabnzbd/sabnzbd/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_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    setup_uv
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    systemctl stop sabnzbd
 | 
			
		||||
    cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/sabnzbd/sabnzbd/releases/download/${RELEASE}/SABnzbd-${RELEASE}-src.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar -xzf "$temp_file" -C /opt/sabnzbd --strip-components=1
 | 
			
		||||
    rm -f "$temp_file"
 | 
			
		||||
    if [[ ! -d /opt/sabnzbd/venv ]]; then
 | 
			
		||||
        msg_info "Migrating SABnzbd to uv virtual environment"
 | 
			
		||||
        $STD uv venv /opt/sabnzbd/venv
 | 
			
		||||
        msg_ok "Created uv venv at /opt/sabnzbd/venv"
 | 
			
		||||
 | 
			
		||||
        if grep -q "ExecStart=python3 SABnzbd.py" /etc/systemd/system/sabnzbd.service; then
 | 
			
		||||
            sed -i "s|ExecStart=python3 SABnzbd.py|ExecStart=/opt/sabnzbd/venv/bin/python SABnzbd.py|" /etc/systemd/system/sabnzbd.service
 | 
			
		||||
            systemctl daemon-reload
 | 
			
		||||
            msg_ok "Updated SABnzbd service to use uv venv"
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
    $STD uv pip install --upgrade pip --python=/opt/sabnzbd/venv/bin/python
 | 
			
		||||
    $STD uv pip install -r /opt/sabnzbd/requirements.txt --python=/opt/sabnzbd/venv/bin/python
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    systemctl start sabnzbd
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,6 @@ function update_script() {
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "${APP} is already up to date (${RELEASE})"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
 
 | 
			
		||||
@@ -40,29 +40,6 @@ function update_script() {
 | 
			
		||||
        sed -i 's|^EnvironmentFile=.*|EnvironmentFile=/opt/tracktor.env|' /etc/systemd/system/tracktor.service
 | 
			
		||||
        systemctl daemon-reload
 | 
			
		||||
    fi
 | 
			
		||||
    if [ ! -d "/opt/tracktor-data/uploads" ]; then
 | 
			
		||||
        mkdir -p /opt/tracktor-data/{uploads,logs}
 | 
			
		||||
        EXISTING_AUTH_PIN=$(grep '^AUTH_PIN=' /opt/tracktor.env 2>/dev/null | cut -d'=' -f2)
 | 
			
		||||
        AUTH_PIN=${EXISTING_AUTH_PIN:-123456}
 | 
			
		||||
        cat <<EOF >/opt/tracktor.env
 | 
			
		||||
NODE_ENV=production
 | 
			
		||||
DB_PATH=/opt/tracktor-data/tracktor.db
 | 
			
		||||
UPLOADS_DIR="/opt/tracktor-data/uploads"
 | 
			
		||||
LOG_DIR="/opt/tracktor-data/logs"
 | 
			
		||||
# If server host is not set by default it will run on all interfaces - 0.0.0.0
 | 
			
		||||
# SERVER_HOST="" 
 | 
			
		||||
SERVER_PORT=3000
 | 
			
		||||
# Set this if you want to secure your endpoints otherwise default will be "*"
 | 
			
		||||
CORS_ORIGINS="*"
 | 
			
		||||
# Set this if you are using backend and frontend separately.
 | 
			
		||||
# PUBLIC_API_BASE_URL=""
 | 
			
		||||
LOG_REQUESTS=true
 | 
			
		||||
LOG_LEVEL="info"
 | 
			
		||||
AUTH_PIN=${AUTH_PIN}
 | 
			
		||||
# PUBLIC_DEMO_MODE=false
 | 
			
		||||
# FORCE_DATA_SEED=false
 | 
			
		||||
EOF
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Corrected Services"
 | 
			
		||||
 | 
			
		||||
    setup_nodejs
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "BentoPDF",
 | 
			
		||||
  "slug": "bentopdf",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    12
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-30",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8080,
 | 
			
		||||
  "documentation": "https://github.com/alam00000/bentopdf",
 | 
			
		||||
  "website": "https://www.bentopdf.com",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bentopdf.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "A privacy-first, 100% client-side PDF Toolkit. No signups/accounts, works in the browser, online or offline.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/bentopdf.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
  "documentation": "https://docs.bunkerweb.io/latest/",
 | 
			
		||||
  "website": "https://www.bunkerweb.io/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bunkerweb.webp",
 | 
			
		||||
  "config_path": "/etc/bunkerweb/variables.env",
 | 
			
		||||
  "config_path": "/opt/bunkerweb/variables.env",
 | 
			
		||||
  "description": "BunkerWeb is a security-focused web server that enhances web application protection. It guards against common web vulnerabilities like SQL injection, XSS, and CSRF. It features simple setup and configuration using a YAML file, customizable security rules, and provides detailed logs for traffic monitoring and threat detection.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,44 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "ComfyUI",
 | 
			
		||||
  "slug": "comfyui",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    20
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-26",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "config_path": "/opt",
 | 
			
		||||
  "interface_port": 8188,
 | 
			
		||||
  "documentation": "https://github.com/comfyanonymous/ComfyUI",
 | 
			
		||||
  "website": "https://www.comfy.org/",
 | 
			
		||||
  "logo": "https://framerusercontent.com/images/3cNQMWKzIhIrQ5KErBm7dSmbd2w.png",
 | 
			
		||||
  "description": "ComfyUI is a node-based interface and inference engine for generative AI. Users can combine various AI models and operations through nodes to achieve highly customizable and controllable content generation.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/comfyui.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 4,
 | 
			
		||||
        "ram": 8192,
 | 
			
		||||
        "hdd": 25,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Application takes long time to install. Please be patient!",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Please check that you have installed the drivers for your GPU.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -28,8 +28,8 @@
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": "admin",
 | 
			
		||||
    "password": "admin"
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Dispatcharr",
 | 
			
		||||
  "slug": "dispatcharr",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    14
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-27",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 9191,
 | 
			
		||||
  "documentation": "https://dispatcharr.github.io/Dispatcharr-Docs/",
 | 
			
		||||
  "website": "https://github.com/Dispatcharr/Dispatcharr",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/dispatcharr.webp",
 | 
			
		||||
  "config_path": "/opt/dispatcharr/.env",
 | 
			
		||||
  "description": "Dispatcharr is an open-source powerhouse for managing IPTV streams and EPG data with elegance and control. Born from necessity and built with passion, it started as a personal project by OkinawaBoss and evolved with contributions from legends like dekzter, SergeantPanda and Bucatini.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/dispatcharr.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 8,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
@@ -31,5 +31,10 @@
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Flaresolverr is pinned to Version 3.3.25 because they add an breaking python package which doesn't work with debian 12.`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,59 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Garage",
 | 
			
		||||
  "slug": "garage",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    8
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-27",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3900,
 | 
			
		||||
  "documentation": "https://garagehq.deuxfleurs.fr/documentation/quick-start/",
 | 
			
		||||
  "website": "https://garagehq.deuxfleurs.fr/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/garage.webp",
 | 
			
		||||
  "config_path": "/etc/garage.toml",
 | 
			
		||||
  "description": "Garage is a lightweight, self-hosted, S3-compatible object storage service built for distributed environments. It is designed to be simple, efficient, and easy to deploy across multiple nodes.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/garage.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "alpine",
 | 
			
		||||
      "script": "ct/alpine-garage.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "alpine",
 | 
			
		||||
        "version": "3.22"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "The Garage configuration file is located at `/etc/garage.toml`. You can edit RPC and API bindings, tokens, and data directories there.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Admin API runs by default on port `3903`, S3 API on port `3900`, Web UI on `3902`. Adjust firewall rules accordingly.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To view your generated tokens and RPC secret, check `~/garage.creds` after installation.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
  "documentation": "https://github.com/HydroshieldMKII/Guardian/blob/main/README.md",
 | 
			
		||||
  "config_path": "/opt/guardian/.env",
 | 
			
		||||
  "website": "https://github.com/HydroshieldMKII/Guardian",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/guardian-plex.webp",
 | 
			
		||||
  "logo": null,
 | 
			
		||||
  "description": "Guardian is a lightweight companion app for Plex that lets you monitor, approve or block devices in real time. It helps you enforce per-user or global policies, stop unwanted sessions automatically and grant temporary access - all through a simple web interface.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,40 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Livebook",
 | 
			
		||||
  "slug": "livebook",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    20
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-30",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8080,
 | 
			
		||||
  "documentation": "https://hexdocs.pm/livebook/readme.html",
 | 
			
		||||
  "config_path": null,
 | 
			
		||||
  "website": "https://livebook.dev",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/livebook.webp",
 | 
			
		||||
  "description": "Elixir Livebook is an interactive, web-based notebook platform for Elixir that combines code, documentation, and visualizations in a single document. Similar to Jupyter notebooks, it allows developers to write and execute Elixir code in real-time, making it ideal for data exploration, prototyping, learning, and collaborative development. Livebook features rich markdown support, built-in charting capabilities, and seamless integration with the Elixir ecosystem.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/livebook.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "Ubuntu",
 | 
			
		||||
        "version": "24.04"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Show initial Livebook password: `cat ~/livebook.creds`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										48
									
								
								frontend/public/json/mysql.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								frontend/public/json/mysql.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "MySQL",
 | 
			
		||||
    "slug": "mysql",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        8
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-10-10",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": null,
 | 
			
		||||
    "documentation": "https://dev.mysql.com/doc/",
 | 
			
		||||
    "website": "https://www.mysql.com/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp",
 | 
			
		||||
    "config_path": "",
 | 
			
		||||
    "description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL for managing and manipulating data. It is known for its scalability, reliability, and high performance, making it suitable for small to large-scale applications. Key features include support for ACID transactions, data replication for high availability, and compatibility with various programming languages like Python, PHP, and Java.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/mysql.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "13"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Database credentials: `cat mysql.creds`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "If installed, access phpMyAdmin at `http://<LXC_IP>/phpMyAdmin`, case sensitive.",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,48 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "MySQL",
 | 
			
		||||
  "slug": "mysql",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    8
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-10-10",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": "https://dev.mysql.com/doc/",
 | 
			
		||||
  "website": "https://www.mysql.com/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mysql.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "MySQL is an open-source relational database management system (RDBMS) that uses SQL for managing and manipulating data. It is known for its scalability, reliability, and high performance, making it suitable for small to large-scale applications. Key features include support for ACID transactions, data replication for high availability, and compatibility with various programming languages like Python, PHP, and Java.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/mysql.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Database credentials: `cat mysql.creds`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "If installed, access phpMyAdmin at `http://<LXC_IP>/phpMyAdmin`, case sensitive.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "PatchMon",
 | 
			
		||||
  "slug": "patchmon",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    9
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-25",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3399,
 | 
			
		||||
  "documentation": "https://docs.patchmon.net",
 | 
			
		||||
  "website": "https://patchmon.net",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/patchmon.webp",
 | 
			
		||||
  "config_path": "/opt/patchmon/backend/.env, /opt/patchmon/frontend/.env",
 | 
			
		||||
  "description": "Monitor Linux patches across all your hosts with real-time visibility, security update tracking, and comprehensive package management.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/patchmon.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 2,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
                "version": "13"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
@@ -1,40 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Reitti",
 | 
			
		||||
  "slug": "reitti",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    21
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-10-30",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8080,
 | 
			
		||||
  "documentation": "https://www.dedicatedcode.com/projects/reitti/",
 | 
			
		||||
  "config_path": "/opt/reitti/.env",
 | 
			
		||||
  "website": "https://www.dedicatedcode.com/projects/reitti/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/reitti.webp",
 | 
			
		||||
  "description": "Reitti is a self-hosted location tracking and analysis platform that detects significant places, trip patterns, and integrates with OwnTracks, GPSLogger, and Immich. It uses PostgreSQL + PostGIS, RabbitMQ, Redis, and an optional Photon geocoder.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/reitti.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 15,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": "admin",
 | 
			
		||||
    "password": "admin"
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Photon Geocoder running at http://127.0.0.1:2322. Photon is fully setup, but without sample data. (filesize is big) -> checkout our guide: `https://github.com/community-scripts/ProxmoxVE/discussions/8737`.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -9,9 +9,9 @@
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://github.com/javedh-dev/tracktor/tree/main/docs",
 | 
			
		||||
  "documentation": "https://tracktor.bytedge.in/introduction.html",
 | 
			
		||||
  "config_path": "/opt/tracktor.env",
 | 
			
		||||
  "website": "https://github.com/javedh-dev/tracktor",
 | 
			
		||||
  "website": "https://tracktor.bytedge.in/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tracktor.webp",
 | 
			
		||||
  "description": "Tracktor is an open-source web application for comprehensive vehicle management.\nEasily track fuel consumption, maintenance, insurance, and regulatory documents for all your vehicles in one place.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
 
 | 
			
		||||
@@ -35,10 +35,6 @@
 | 
			
		||||
    {
 | 
			
		||||
      "text": "You probably want to drastically extend the storage space to fit whatever clients you want to back up",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Directory `/opt/urbackup/backups` is set as initial backup path. Change it to your liking",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,84 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apk add --no-cache openssl
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
chmod +x /usr/local/bin/garage
 | 
			
		||||
mkdir -p /var/lib/garage/{data,meta,snapshots}
 | 
			
		||||
mkdir -p /etc/garage
 | 
			
		||||
RPC_SECRET=$(openssl rand -hex 64 | cut -c1-64)
 | 
			
		||||
ADMIN_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
METRICS_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
{
 | 
			
		||||
  echo "Garage Tokens and Secrets"
 | 
			
		||||
  echo "RPC Secret: $RPC_SECRET"
 | 
			
		||||
  echo "Admin Token: $ADMIN_TOKEN"
 | 
			
		||||
  echo "Metrics Token: $METRICS_TOKEN"
 | 
			
		||||
} >~/garage.creds
 | 
			
		||||
echo $GITEA_RELEASE >>~/.garage
 | 
			
		||||
cat <<EOF >/etc/garage.toml
 | 
			
		||||
metadata_dir = "/var/lib/garage/meta"
 | 
			
		||||
data_dir = "/var/lib/garage/data"
 | 
			
		||||
db_engine = "sqlite"
 | 
			
		||||
replication_factor = 1
 | 
			
		||||
 | 
			
		||||
rpc_bind_addr = "0.0.0.0:3901"
 | 
			
		||||
rpc_public_addr = "127.0.0.1:3901"
 | 
			
		||||
rpc_secret = "${RPC_SECRET}"
 | 
			
		||||
 | 
			
		||||
[s3_api]
 | 
			
		||||
s3_region = "garage"
 | 
			
		||||
api_bind_addr = "0.0.0.0:3900"
 | 
			
		||||
root_domain = ".s3.garage"
 | 
			
		||||
 | 
			
		||||
[s3_web]
 | 
			
		||||
bind_addr = "0.0.0.0:3902"
 | 
			
		||||
root_domain = ".web.garage"
 | 
			
		||||
index = "index.html"
 | 
			
		||||
 | 
			
		||||
[k2v_api]
 | 
			
		||||
api_bind_addr = "0.0.0.0:3904"
 | 
			
		||||
 | 
			
		||||
[admin]
 | 
			
		||||
api_bind_addr = "0.0.0.0:3903"
 | 
			
		||||
admin_token = "${ADMIN_TOKEN}"
 | 
			
		||||
metrics_token = "${METRICS_TOKEN}"
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Configured Garage"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<'EOF' >/etc/init.d/garage
 | 
			
		||||
#!/sbin/openrc-run
 | 
			
		||||
name="Garage Object Storage"
 | 
			
		||||
command="/usr/local/bin/garage"
 | 
			
		||||
command_args="server"
 | 
			
		||||
command_background="yes"
 | 
			
		||||
pidfile="/run/garage.pid"
 | 
			
		||||
depend() {
 | 
			
		||||
    need net
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
chmod +x /etc/init.d/garage
 | 
			
		||||
$STD rc-update add garage default
 | 
			
		||||
$STD rc-service garage restart || rc-service garage start
 | 
			
		||||
msg_ok "Service active"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
@@ -22,8 +22,7 @@ $STD apt-get install -y \
 | 
			
		||||
  libsasl2-dev \
 | 
			
		||||
  procps \
 | 
			
		||||
  dnsutils \
 | 
			
		||||
  ripgrep \
 | 
			
		||||
  chromium
 | 
			
		||||
  ripgrep
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python Dependencies"
 | 
			
		||||
@@ -33,7 +32,7 @@ $STD apt-get install -y \
 | 
			
		||||
  python3-regex
 | 
			
		||||
msg_ok "Installed Python Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" NODE_MODULE="@postlight/parser@latest,single-file-cli@latest" setup_nodejs
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Playwright"
 | 
			
		||||
@@ -41,7 +40,7 @@ $STD uv pip install playwright --system
 | 
			
		||||
$STD playwright install-deps chromium
 | 
			
		||||
msg_ok "Installed Playwright"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing ArchiveBox"
 | 
			
		||||
msg_info "Installing Chromium and ArchiveBox"
 | 
			
		||||
mkdir -p /opt/archivebox/{data,.npm,.cache,.local}
 | 
			
		||||
$STD adduser --system --shell /bin/bash --gecos 'Archive Box User' --group --disabled-password --home /home/archivebox archivebox
 | 
			
		||||
chown -R archivebox:archivebox /opt/archivebox/{data,.npm,.cache,.local}
 | 
			
		||||
@@ -93,7 +92,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -13,65 +13,8 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
ASTERISK_VERSIONS_URL="https://www.asterisk.org/downloads/asterisk/all-asterisk-versions/"
 | 
			
		||||
html=$(curl -fsSL "$ASTERISK_VERSIONS_URL")
 | 
			
		||||
 | 
			
		||||
LTS_VERSION=""
 | 
			
		||||
for major in 20 22 24 26; do
 | 
			
		||||
  block=$(echo "$html" | awk "/Asterisk $major - LTS/,/<ul>/")
 | 
			
		||||
  ver=$(echo "$block" | grep -oE 'Download Latest - [0-9]+\.[0-9]+(\.[0-9]+)?' | head -n1 | sed -E 's/.* - //')
 | 
			
		||||
  if [ -n "$ver" ]; then
 | 
			
		||||
    LTS_VERSION="$LTS_VERSION $ver"
 | 
			
		||||
  fi
 | 
			
		||||
  unset ver block
 | 
			
		||||
done
 | 
			
		||||
LTS_VERSION=$(echo "$LTS_VERSION" | xargs | tr ' ' '\n' | sort -V | tail -n1)
 | 
			
		||||
 | 
			
		||||
STD_VERSION=""
 | 
			
		||||
for major in 21 23 25 27; do
 | 
			
		||||
  block=$(echo "$html" | awk "/Asterisk $major</,/<ul>/")
 | 
			
		||||
  ver=$(echo "$block" | grep -oE 'Download (Latest - )?[0-9]+\.[0-9]+(\.[0-9]+)?' | head -n1 | sed -E 's/.* - //;s/Download //')
 | 
			
		||||
  if [ -n "$ver" ]; then
 | 
			
		||||
    STD_VERSION="$STD_VERSION $ver"
 | 
			
		||||
  fi
 | 
			
		||||
  unset ver block
 | 
			
		||||
done
 | 
			
		||||
STD_VERSION=$(echo "$STD_VERSION" | xargs | tr ' ' '\n' | sort -V | tail -n1)
 | 
			
		||||
 | 
			
		||||
cert_block=$(echo "$html" | awk '/Certified Asterisk/,/<ul>/')
 | 
			
		||||
CERT_VERSION=$(echo "$cert_block" | grep -oE 'Download Latest - [0-9]+\.[0-9]+-cert[0-9]+' | head -n1 | sed -E 's/.* - //')
 | 
			
		||||
 | 
			
		||||
cat <<EOF
 | 
			
		||||
Choose Asterisk version to install:
 | 
			
		||||
1) Latest Standard ($STD_VERSION)
 | 
			
		||||
2) Latest LTS ($LTS_VERSION)
 | 
			
		||||
3) Latest Certified ($CERT_VERSION)
 | 
			
		||||
EOF
 | 
			
		||||
read -rp "Enter choice [1-3]: " ASTERISK_CHOICE
 | 
			
		||||
 | 
			
		||||
case "$ASTERISK_CHOICE" in
 | 
			
		||||
2)
 | 
			
		||||
  ASTERISK_VERSION="$LTS_VERSION"
 | 
			
		||||
  ;;
 | 
			
		||||
3)
 | 
			
		||||
  ASTERISK_VERSION="$CERT_VERSION"
 | 
			
		||||
  CERTIFIED=1
 | 
			
		||||
  ;;
 | 
			
		||||
*)
 | 
			
		||||
  ASTERISK_VERSION="$STD_VERSION"
 | 
			
		||||
  ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
if [[ "$CERTIFIED" == "1" ]]; then
 | 
			
		||||
  RELEASE="certified-asterisk-${ASTERISK_VERSION}.tar.gz"
 | 
			
		||||
  DOWNLOAD_URL="https://downloads.asterisk.org/pub/telephony/certified-asterisk/$RELEASE"
 | 
			
		||||
else
 | 
			
		||||
  RELEASE="asterisk-${ASTERISK_VERSION}.tar.gz"
 | 
			
		||||
  DOWNLOAD_URL="https://downloads.asterisk.org/pub/telephony/asterisk/$RELEASE"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt install -y \
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  libsrtp2-dev \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  libedit-dev \
 | 
			
		||||
@@ -82,12 +25,13 @@ $STD apt install -y \
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Downloading Asterisk"
 | 
			
		||||
RELEASE=$(curl -fsSL https://downloads.asterisk.org/pub/telephony/asterisk/ | grep -o 'asterisk-[0-9]\+-current\.tar\.gz' | sort -V | tail -n1)
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
curl -fsSL "$DOWNLOAD_URL" -o "$temp_file"
 | 
			
		||||
curl -fsSL "https://downloads.asterisk.org/pub/telephony/asterisk/${RELEASE}" -o "$temp_file"
 | 
			
		||||
mkdir -p /opt/asterisk
 | 
			
		||||
tar zxf "$temp_file" --strip-components=1 -C /opt/asterisk
 | 
			
		||||
cd /opt/asterisk
 | 
			
		||||
msg_ok "Downloaded Asterisk ($RELEASE)"
 | 
			
		||||
msg_ok "Downloaded Asterisk"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Asterisk"
 | 
			
		||||
$STD ./contrib/scripts/install_prereq install
 | 
			
		||||
@@ -107,7 +51,6 @@ customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -13,15 +13,20 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
msg_info "Setup Python3"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  python3 \
 | 
			
		||||
  python3-dev
 | 
			
		||||
msg_ok "Setup Python3"
 | 
			
		||||
 | 
			
		||||
PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Bazarr"
 | 
			
		||||
mkdir -p /var/lib/bazarr/
 | 
			
		||||
chmod 775 /opt/bazarr /var/lib/bazarr/
 | 
			
		||||
sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
 | 
			
		||||
$STD uv venv /opt/bazarr/venv --python 3.12
 | 
			
		||||
$STD uv pip install -r /opt/bazarr/requirements.txt --python /opt/bazarr/venv/bin/python3
 | 
			
		||||
$STD uv pip install -r /opt/bazarr/requirements.txt --system
 | 
			
		||||
msg_ok "Installed Bazarr"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
@@ -36,7 +41,7 @@ UMask=0002
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=5
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/opt/bazarr/venv/bin/python3 /opt/bazarr/bazarr.py
 | 
			
		||||
ExecStart=/usr/bin/python3 /opt/bazarr/bazarr.py
 | 
			
		||||
KillSignal=SIGINT
 | 
			
		||||
TimeoutStopSec=20
 | 
			
		||||
SyslogIdentifier=bazarr
 | 
			
		||||
 
 | 
			
		||||
@@ -1,53 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/alam00000/bentopdf
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="24" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "bentopdf" "alam00000/bentopdf" "tarball" "latest" "/opt/bentopdf"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup BentoPDF"
 | 
			
		||||
cd /opt/bentopdf
 | 
			
		||||
$STD npm ci --no-audit --no-fund
 | 
			
		||||
export SIMPLE_MODE=true
 | 
			
		||||
$STD npm run build -- --mode production
 | 
			
		||||
msg_ok "Setup BentoPDF"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/bentopdf.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=BentoPDF Service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/bentopdf
 | 
			
		||||
ExecStart=/usr/bin/npx serve dist -p 8080
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=10
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
systemctl enable -q --now bentopdf
 | 
			
		||||
msg_ok "Created & started service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -1,87 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: jdacode
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/comfyanonymous/ComfyUI
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
echo
 | 
			
		||||
echo "${TAB3}Choose the GPU type for ComfyUI:"
 | 
			
		||||
echo "${TAB3}[1]-None  [2]-NVIDIA  [3]-AMD  [4]-Intel"
 | 
			
		||||
read -rp "${TAB3}Enter your choice [1-4] (default: 1): " gpu_choice
 | 
			
		||||
gpu_choice=${gpu_choice:-1}
 | 
			
		||||
case "$gpu_choice" in
 | 
			
		||||
1) comfyui_gpu_type="none";;
 | 
			
		||||
2) comfyui_gpu_type="nvidia";;
 | 
			
		||||
3) comfyui_gpu_type="amd";;
 | 
			
		||||
4) comfyui_gpu_type="intel";;
 | 
			
		||||
*) comfyui_gpu_type="none"; echo "${TAB3}Invalid choice. Defaulting to ${comfyui_gpu_type}." ;;
 | 
			
		||||
esac
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "ComfyUI" "comfyanonymous/ComfyUI" "tarball" "latest" "/opt/ComfyUI"
 | 
			
		||||
 | 
			
		||||
msg_info "Python dependencies"
 | 
			
		||||
$STD uv venv "/opt/ComfyUI/venv"
 | 
			
		||||
if [[ "${comfyui_gpu_type,,}" == "nvidia" ]]; then
 | 
			
		||||
  $STD uv pip install \
 | 
			
		||||
      torch \
 | 
			
		||||
      torchvision \
 | 
			
		||||
      torchaudio \
 | 
			
		||||
      --extra-index-url "https://download.pytorch.org/whl/cu128" \
 | 
			
		||||
      --python="/opt/ComfyUI/venv/bin/python"
 | 
			
		||||
elif [[ "${comfyui_gpu_type,,}" == "amd" ]]; then
 | 
			
		||||
  $STD uv pip install \
 | 
			
		||||
      torch \
 | 
			
		||||
      torchvision \
 | 
			
		||||
      torchaudio \
 | 
			
		||||
      --index-url "https://download.pytorch.org/whl/rocm6.3" \
 | 
			
		||||
      --python="/opt/ComfyUI/venv/bin/python"
 | 
			
		||||
elif [[ "${comfyui_gpu_type,,}" == "intel" ]]; then
 | 
			
		||||
  $STD uv pip install \
 | 
			
		||||
      torch \
 | 
			
		||||
      torchvision \
 | 
			
		||||
      torchaudio \
 | 
			
		||||
      --index-url "https://download.pytorch.org/whl/xpu" \
 | 
			
		||||
      --python="/opt/ComfyUI/venv/bin/python"
 | 
			
		||||
fi
 | 
			
		||||
$STD uv pip install -r "/opt/ComfyUI/requirements.txt" --python="/opt/ComfyUI/venv/bin/python"
 | 
			
		||||
msg_ok "Python dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/comfyui.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=ComfyUI Service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/opt/ComfyUI
 | 
			
		||||
ExecStart=/opt/ComfyUI/venv/bin/python /opt/ComfyUI/main.py --listen --port 8188 --cpu
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now comfyui
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -1,268 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: ekke85
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/Dispatcharr/Dispatcharr
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt install -y \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  python3-dev \
 | 
			
		||||
  libpq-dev \
 | 
			
		||||
  nginx \
 | 
			
		||||
  redis-server \
 | 
			
		||||
  ffmpeg \
 | 
			
		||||
  procps \
 | 
			
		||||
  streamlink
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
setup_uv
 | 
			
		||||
NODE_VERSION="24" setup_nodejs
 | 
			
		||||
PG_VERSION="16" setup_postgresql
 | 
			
		||||
 | 
			
		||||
msg_info "Creating PostgreSQL Database"
 | 
			
		||||
DB_NAME=dispatcharr_db
 | 
			
		||||
DB_USER=dispatcharr_usr
 | 
			
		||||
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 ENCODING 'UTF8' TEMPLATE template0;"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';"
 | 
			
		||||
{
 | 
			
		||||
  echo "Dispatcharr Credentials"
 | 
			
		||||
  echo "Database Name: $DB_NAME"
 | 
			
		||||
  echo "Database User: $DB_USER"
 | 
			
		||||
  echo "Database Password: $DB_PASS"
 | 
			
		||||
  echo ""
 | 
			
		||||
} >>~/dispatcharr.creds
 | 
			
		||||
msg_ok "Created PostgreSQL Database"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "dispatcharr" "Dispatcharr/Dispatcharr"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python Dependencies with uv"
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
$STD uv venv
 | 
			
		||||
$STD uv pip install -r requirements.txt --index-strategy unsafe-best-match
 | 
			
		||||
$STD uv pip install gunicorn gevent celery redis daphne
 | 
			
		||||
msg_ok "Installed Python Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Dispatcharr"
 | 
			
		||||
install -d -m 755 \
 | 
			
		||||
  /data/{logos,recordings,plugins,db} \
 | 
			
		||||
  /data/uploads/{m3us,epgs} \
 | 
			
		||||
  /data/{m3us,epgs}
 | 
			
		||||
chown -R root:root /data
 | 
			
		||||
export DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}"
 | 
			
		||||
export POSTGRES_DB=$DB_NAME
 | 
			
		||||
export POSTGRES_USER=$DB_USER
 | 
			
		||||
export POSTGRES_PASSWORD=$DB_PASS
 | 
			
		||||
export POSTGRES_HOST=localhost
 | 
			
		||||
$STD uv run python manage.py migrate --noinput
 | 
			
		||||
$STD uv run python manage.py collectstatic --noinput
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/.env
 | 
			
		||||
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:5432/${DB_NAME}
 | 
			
		||||
POSTGRES_DB=$DB_NAME
 | 
			
		||||
POSTGRES_USER=$DB_USER
 | 
			
		||||
POSTGRES_PASSWORD=$DB_PASS
 | 
			
		||||
POSTGRES_HOST=localhost
 | 
			
		||||
CELERY_BROKER_URL=redis://localhost:6379/0
 | 
			
		||||
EOF
 | 
			
		||||
cd /opt/dispatcharr/frontend
 | 
			
		||||
$STD npm install --legacy-peer-deps
 | 
			
		||||
$STD npm run build
 | 
			
		||||
msg_ok "Configured Dispatcharr"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Nginx"
 | 
			
		||||
cat <<EOF >/etc/nginx/sites-available/dispatcharr.conf
 | 
			
		||||
server {
 | 
			
		||||
    listen 80;
 | 
			
		||||
    server_name _;
 | 
			
		||||
 | 
			
		||||
    # Serve static assets with correct MIME types
 | 
			
		||||
    location /assets/ {
 | 
			
		||||
        alias /opt/dispatcharr/frontend/dist/assets/;
 | 
			
		||||
        expires 30d;
 | 
			
		||||
        add_header Cache-Control "public, immutable";
 | 
			
		||||
 | 
			
		||||
        # Explicitly set MIME types for webpack-built assets
 | 
			
		||||
        types {
 | 
			
		||||
            text/javascript js;
 | 
			
		||||
            text/css css;
 | 
			
		||||
            image/png png;
 | 
			
		||||
            image/svg+xml svg svgz;
 | 
			
		||||
            font/woff2 woff2;
 | 
			
		||||
            font/woff woff;
 | 
			
		||||
            font/ttf ttf;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /static/ {
 | 
			
		||||
        alias /opt/dispatcharr/static/;
 | 
			
		||||
        expires 30d;
 | 
			
		||||
        add_header Cache-Control "public, immutable";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /media/ {
 | 
			
		||||
        alias /opt/dispatcharr/media/;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /ws/ {
 | 
			
		||||
        proxy_pass http://127.0.0.1:8001;
 | 
			
		||||
        proxy_http_version 1.1;
 | 
			
		||||
        proxy_set_header Upgrade \$http_upgrade;
 | 
			
		||||
        proxy_set_header Connection "Upgrade";
 | 
			
		||||
        proxy_set_header Host \$host;
 | 
			
		||||
        proxy_set_header X-Real-IP \$remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
 | 
			
		||||
        proxy_set_header X-Forwarded-Proto \$scheme;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # All other requests proxy to Gunicorn
 | 
			
		||||
    location / {
 | 
			
		||||
        include proxy_params;
 | 
			
		||||
        proxy_pass http://127.0.0.1:5656;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
ln -sf /etc/nginx/sites-available/dispatcharr.conf /etc/nginx/sites-enabled/dispatcharr.conf
 | 
			
		||||
rm -f /etc/nginx/sites-enabled/default
 | 
			
		||||
systemctl restart nginx
 | 
			
		||||
msg_ok "Configured Nginx"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Services"
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run gunicorn \\
 | 
			
		||||
    --workers=4 \\
 | 
			
		||||
    --worker-class=gevent \\
 | 
			
		||||
    --timeout=300 \\
 | 
			
		||||
    --bind 0.0.0.0:5656 \\
 | 
			
		||||
    dispatcharr.wsgi:application
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-celery.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run celery -A dispatcharr worker -l info -c 4
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-celery.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run celery -A dispatcharr beat -l info
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/dispatcharr/start-daphne.sh
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
cd /opt/dispatcharr
 | 
			
		||||
set -a
 | 
			
		||||
source .env
 | 
			
		||||
set +a
 | 
			
		||||
exec uv run daphne -b 0.0.0.0 -p 8001 dispatcharr.asgi:application
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/dispatcharr/start-daphne.sh
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr Web Server
 | 
			
		||||
After=network.target postgresql.service redis-server.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-gunicorn.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr-celery.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr Celery Worker
 | 
			
		||||
After=network.target redis-server.service
 | 
			
		||||
Requires=dispatcharr.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-celery.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr-celerybeat.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr Celery Beat Scheduler
 | 
			
		||||
After=network.target redis-server.service
 | 
			
		||||
Requires=dispatcharr.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-celerybeat.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dispatcharr-daphne.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Dispatcharr WebSocket Server (Daphne)
 | 
			
		||||
After=network.target
 | 
			
		||||
Requires=dispatcharr.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/dispatcharr
 | 
			
		||||
ExecStart=/opt/dispatcharr/start-daphne.sh
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now dispatcharr dispatcharr-celery dispatcharr-celerybeat dispatcharr-daphne
 | 
			
		||||
msg_ok "Created Services"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -21,18 +21,13 @@ $STD apt-get install -y \
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Chrome"
 | 
			
		||||
setup_deb822_repo \
 | 
			
		||||
  "google-chrome" \
 | 
			
		||||
  "https://dl.google.com/linux/linux_signing_key.pub" \
 | 
			
		||||
  "https://dl.google.com/linux/chrome/deb/" \
 | 
			
		||||
  "stable"
 | 
			
		||||
curl -fsSL "https://dl.google.com/linux/linux_signing_key.pub" | gpg --dearmor -o /usr/share/keyrings/google-chrome.gpg
 | 
			
		||||
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main" >/etc/apt/sources.list.d/google-chrome.list
 | 
			
		||||
$STD apt update
 | 
			
		||||
$STD apt install -y google-chrome-stable
 | 
			
		||||
# remove google-chrome.list added by google-chrome-stable
 | 
			
		||||
rm /etc/apt/sources.list.d/google-chrome.list
 | 
			
		||||
msg_ok "Installed Chrome"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
 | 
			
		||||
fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "v3.3.25" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/flaresolverr.service
 | 
			
		||||
 
 | 
			
		||||
@@ -1,95 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://garagehq.deuxfleurs.fr/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Garage"
 | 
			
		||||
GITEA_RELEASE=$(curl -s https://api.github.com/repos/deuxfleurs-org/garage/tags | jq -r '.[0].name')
 | 
			
		||||
curl -fsSL "https://garagehq.deuxfleurs.fr/_releases/${GITEA_RELEASE}/x86_64-unknown-linux-musl/garage" -o /usr/local/bin/garage
 | 
			
		||||
chmod +x /usr/local/bin/garage
 | 
			
		||||
mkdir -p /var/lib/garage/{data,meta,snapshots}
 | 
			
		||||
mkdir -p /etc/garage
 | 
			
		||||
RPC_SECRET=$(openssl rand -hex 32)
 | 
			
		||||
ADMIN_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
METRICS_TOKEN=$(openssl rand -base64 32)
 | 
			
		||||
{
 | 
			
		||||
    echo "Garage Tokens and Secrets"
 | 
			
		||||
    echo "RPC Secret: $RPC_SECRET"
 | 
			
		||||
    echo "Admin Token: $ADMIN_TOKEN"
 | 
			
		||||
    echo "Metrics Token: $METRICS_TOKEN"
 | 
			
		||||
} >>~/garage.creds
 | 
			
		||||
echo $GITEA_RELEASE >>~/.garage
 | 
			
		||||
cat <<EOF >/etc/garage.toml
 | 
			
		||||
metadata_dir = "/var/lib/garage/meta"
 | 
			
		||||
data_dir = "/var/lib/garage/data"
 | 
			
		||||
db_engine = "sqlite"
 | 
			
		||||
replication_factor = 1
 | 
			
		||||
 | 
			
		||||
rpc_bind_addr = "[::]:3901"
 | 
			
		||||
rpc_public_addr = "127.0.0.1:3901"
 | 
			
		||||
rpc_secret = "${RPC_SECRET}"
 | 
			
		||||
 | 
			
		||||
[s3_api]
 | 
			
		||||
s3_region = "garage"
 | 
			
		||||
api_bind_addr = "[::]:3900"
 | 
			
		||||
root_domain = ".s3.garage.localhost"
 | 
			
		||||
 | 
			
		||||
[s3_web]
 | 
			
		||||
bind_addr = "[::]:3902"
 | 
			
		||||
root_domain = ".web.garage.localhost"
 | 
			
		||||
index = "index.html"
 | 
			
		||||
 | 
			
		||||
[k2v_api]
 | 
			
		||||
api_bind_addr = "[::]:3904"
 | 
			
		||||
 | 
			
		||||
[admin]
 | 
			
		||||
api_bind_addr = "[::]:3903"
 | 
			
		||||
admin_token = "${ADMIN_TOKEN}"
 | 
			
		||||
metrics_token = "${METRICS_TOKEN}"
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Set up Garage"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
msg_info "Creating service"
 | 
			
		||||
cat <<'EOF' >/etc/systemd/system/garage.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Garage Object Storage (Deuxfleurs)
 | 
			
		||||
After=network-online.target
 | 
			
		||||
Wants=network-online.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/usr/local/bin/garage -c /etc/garage.toml server
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=5
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/var/lib/garage
 | 
			
		||||
Environment=RUST_LOG=info
 | 
			
		||||
StandardOutput=append:/var/log/garage.log
 | 
			
		||||
StandardError=append:/var/log/garage.log
 | 
			
		||||
LimitNOFILE=65536
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
$STD systemctl enable -q --now garage
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -20,22 +20,22 @@ $STD apt-get install -y \
 | 
			
		||||
  libjemalloc2
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
setup_mariadb
 | 
			
		||||
setup_mysql
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Database"
 | 
			
		||||
DB_NAME=ghost
 | 
			
		||||
DB_USER=ghostuser
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
 | 
			
		||||
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
 | 
			
		||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
 | 
			
		||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
 | 
			
		||||
{
 | 
			
		||||
  echo "Ghost-Credentials"
 | 
			
		||||
  echo "Ghost Database User: $DB_USER"
 | 
			
		||||
  echo "Ghost Database Password: $DB_PASS"
 | 
			
		||||
  echo "Ghost Database Name: $DB_NAME"
 | 
			
		||||
} >>~/ghost.creds
 | 
			
		||||
msg_ok "Configured MariaDB"
 | 
			
		||||
msg_ok "Configured MySQL"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
 | 
			
		||||
@@ -60,5 +60,4 @@ customize
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
$STD apt-get -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -19,11 +19,9 @@ if ! grep -qEi 'ubuntu' /etc/os-release; then
 | 
			
		||||
  fetch_and_deploy_gh_release "intel-igc-opencl-2" "intel/intel-graphics-compiler" "binary" "latest" "" "intel-igc-opencl-2_*_amd64.deb"
 | 
			
		||||
  fetch_and_deploy_gh_release "intel-libgdgmm12" "intel/compute-runtime" "binary" "latest" "" "libigdgmm12_*_amd64.deb"
 | 
			
		||||
  fetch_and_deploy_gh_release "intel-opencl-icd" "intel/compute-runtime" "binary" "latest" "" "intel-opencl-icd_*_amd64.deb"
 | 
			
		||||
else
 | 
			
		||||
  $STD apt -y install intel-opencl-icd
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,vainfo,intel-gpu-tools}
 | 
			
		||||
$STD apt -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
 | 
			
		||||
if [[ "$CTTYPE" == "0" ]]; then
 | 
			
		||||
  chgrp video /dev/dri
 | 
			
		||||
  chmod 755 /dev/dri
 | 
			
		||||
 
 | 
			
		||||
@@ -25,15 +25,7 @@ mkdir -p data/{users,checklists,notes}
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/jotty/.env
 | 
			
		||||
NODE_ENV=production
 | 
			
		||||
 | 
			
		||||
# --- Uncomment to enable
 | 
			
		||||
# HTTPS=true
 | 
			
		||||
# SERVE_PUBLIC_IMAGES=yes
 | 
			
		||||
# SERVE_PUBLIC_FILES=yes
 | 
			
		||||
# SERVE_PUBLIC_VIDEOS=yes
 | 
			
		||||
# STOP_CHECK_UPDATES=yes
 | 
			
		||||
# --- For troubleshooting
 | 
			
		||||
# DEBUGGER=true
 | 
			
		||||
 | 
			
		||||
# --- SSO with OIDC (optional)
 | 
			
		||||
# SSO_MODE=oidc
 | 
			
		||||
 
 | 
			
		||||
@@ -18,22 +18,36 @@ $STD apt-get install -y \
 | 
			
		||||
  apt-transport-https \
 | 
			
		||||
  apache2 \
 | 
			
		||||
  git \
 | 
			
		||||
  expect
 | 
			
		||||
  expect \
 | 
			
		||||
  composer \
 | 
			
		||||
  lsb-release
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
setup_mariadb
 | 
			
		||||
PHP_VERSION="8.4" PHP_MODULE="gd,mysql,mbstring,bcmath,xml,curl,zip,intl" PHP_APACHE="YES" setup_php
 | 
			
		||||
setup_composer
 | 
			
		||||
setup_mysql
 | 
			
		||||
 | 
			
		||||
msg_info "Adding PHP8.4 Repository"
 | 
			
		||||
$STD curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
$STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
$STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
msg_ok "Added PHP8.4 Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing PHP"
 | 
			
		||||
$STD apt-get remove -y php8.2*
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  php8.4 \
 | 
			
		||||
  php8.4-{gd,mysql,mbstring,bcmath,xml,curl,zip,intl} \
 | 
			
		||||
  libapache2-mod-php8.4
 | 
			
		||||
msg_ok "Installed PHP"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up database"
 | 
			
		||||
DB_NAME=kimai_db
 | 
			
		||||
DB_USER=kimai
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
MYSQL_VERSION=$(mariadb --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
 | 
			
		||||
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
 | 
			
		||||
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
 | 
			
		||||
$STD mariadb -u root -e "SET GLOBAL sql_mode='';"
 | 
			
		||||
MYSQL_VERSION=$(mysql --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
 | 
			
		||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
 | 
			
		||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
 | 
			
		||||
{
 | 
			
		||||
  echo "Kimai-Credentials"
 | 
			
		||||
  echo "Kimai Database User: $DB_USER"
 | 
			
		||||
@@ -42,15 +56,17 @@ $STD mariadb -u root -e "SET GLOBAL sql_mode='';"
 | 
			
		||||
} >>~/kimai.creds
 | 
			
		||||
msg_ok "Set up database"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "kimai" "kimai/kimai"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Kimai"
 | 
			
		||||
msg_info "Installing Kimai (Patience)"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
curl -fsSL "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip" -o "${RELEASE}".zip
 | 
			
		||||
$STD unzip "${RELEASE}".zip
 | 
			
		||||
mv kimai-"${RELEASE}" /opt/kimai
 | 
			
		||||
cd /opt/kimai
 | 
			
		||||
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
 | 
			
		||||
source ~/.bashrc
 | 
			
		||||
$STD composer install --no-dev --optimize-autoloader --no-interaction
 | 
			
		||||
cp .env.dist .env
 | 
			
		||||
sed -i "/^DATABASE_URL=/c\DATABASE_URL=mysql://$DB_USER:$DB_PASS@127.0.0.1:3306/$DB_NAME?charset=utf8mb4&serverVersion=mariadb-$MYSQL_VERSION" /opt/kimai/.env
 | 
			
		||||
sed -i "/^DATABASE_URL=/c\DATABASE_URL=mysql://$DB_USER:$DB_PASS@127.0.0.1:3306/$DB_NAME?charset=utf8mb4&serverVersion=$MYSQL_VERSION" /opt/kimai/.env
 | 
			
		||||
$STD bin/console kimai:install -n
 | 
			
		||||
$STD expect <<EOF
 | 
			
		||||
set timeout -1
 | 
			
		||||
@@ -76,6 +92,8 @@ admin_lte:
 | 
			
		||||
    options:
 | 
			
		||||
        default_avatar: build/apple-touch-icon.png
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed Kimai"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
@@ -112,7 +130,7 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
rm -rf "${RELEASE}".zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,14 +14,10 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing dependencies"
 | 
			
		||||
$STD apt install -y \
 | 
			
		||||
$STD apt install -y --no-install-recommends \
 | 
			
		||||
  pkg-config \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  gcc \
 | 
			
		||||
  g++ \
 | 
			
		||||
  cmake \
 | 
			
		||||
  libprotobuf-dev \
 | 
			
		||||
  protobuf-compiler \
 | 
			
		||||
  libsentencepiece-dev \
 | 
			
		||||
  libicu-dev
 | 
			
		||||
msg_ok "Installed dependencies"
 | 
			
		||||
 | 
			
		||||
@@ -36,18 +32,13 @@ setup_uv
 | 
			
		||||
fetch_and_deploy_gh_release "libretranslate" "LibreTranslate/LibreTranslate"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup LibreTranslate (Patience)"
 | 
			
		||||
TORCH_VERSION=$(grep -Eo '"torch ==[0-9]+\.[0-9]+\.[0-9]+' /opt/libretranslate/pyproject.toml | \
 | 
			
		||||
  tail -n1 | sed 's/.*==//')
 | 
			
		||||
if [[ -z "$TORCH_VERSION" ]]; then
 | 
			
		||||
  TORCH_VERSION="2.5.0"
 | 
			
		||||
fi
 | 
			
		||||
cd /opt/libretranslate
 | 
			
		||||
$STD uv venv .venv
 | 
			
		||||
$STD source .venv/bin/activate
 | 
			
		||||
$STD uv pip install --upgrade pip setuptools
 | 
			
		||||
$STD uv pip install Babel==2.12.1
 | 
			
		||||
$STD .venv/bin/python scripts/compile_locales.py
 | 
			
		||||
$STD uv pip install "torch==${TORCH_VERSION}" --extra-index-url https://download.pytorch.org/whl/cpu
 | 
			
		||||
$STD uv pip install torch==2.2.0 --extra-index-url https://download.pytorch.org/whl/cpu
 | 
			
		||||
$STD uv pip install "numpy<2"
 | 
			
		||||
$STD uv pip install .
 | 
			
		||||
$STD uv pip install libretranslate
 | 
			
		||||
 
 | 
			
		||||
@@ -1,106 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: dkuku
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/livebook-dev/livebook
 | 
			
		||||
 | 
			
		||||
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 \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  cmake \
 | 
			
		||||
  git \
 | 
			
		||||
  libncurses5-dev
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating livebook user"
 | 
			
		||||
mkdir -p /opt/livebook /data
 | 
			
		||||
export HOME=/opt/livebook
 | 
			
		||||
$STD adduser --system --group --home /opt/livebook --shell /bin/bash livebook
 | 
			
		||||
msg_ok "Created livebook user"
 | 
			
		||||
 | 
			
		||||
msg_warn "WARNING: This script will run an external installer from a third-party source (https://elixir-lang.org)."
 | 
			
		||||
msg_warn "The following code is NOT maintained or audited by our repository."
 | 
			
		||||
msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:"
 | 
			
		||||
msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→  https://elixir-lang.org/install.sh"
 | 
			
		||||
echo
 | 
			
		||||
read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM
 | 
			
		||||
if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then
 | 
			
		||||
  msg_error "Aborted by user. No changes have been made."
 | 
			
		||||
  exit 10
 | 
			
		||||
fi
 | 
			
		||||
curl -fsSO https://elixir-lang.org/install.sh
 | 
			
		||||
$STD sh install.sh elixir@latest otp@latest
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Erlang and Elixir"
 | 
			
		||||
ERLANG_VERSION=$(ls /opt/livebook/.elixir-install/installs/otp/ | head -n1)
 | 
			
		||||
ELIXIR_VERSION=$(ls /opt/livebook/.elixir-install/installs/elixir/ | head -n1)
 | 
			
		||||
LIVEBOOK_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
 | 
			
		||||
 | 
			
		||||
export ERLANG_BIN="/opt/livebook/.elixir-install/installs/otp/$ERLANG_VERSION/bin"
 | 
			
		||||
export ELIXIR_BIN="/opt/livebook/.elixir-install/installs/elixir/$ELIXIR_VERSION/bin"
 | 
			
		||||
export PATH="$ERLANG_BIN:$ELIXIR_BIN:$PATH"
 | 
			
		||||
 | 
			
		||||
$STD mix local.hex --force
 | 
			
		||||
$STD mix local.rebar --force
 | 
			
		||||
$STD mix escript.install hex livebook --force
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/livebook/.env
 | 
			
		||||
export HOME=/opt/livebook
 | 
			
		||||
export ERLANG_VERSION=$ERLANG_VERSION
 | 
			
		||||
export ELIXIR_VERSION=$ELIXIR_VERSION
 | 
			
		||||
export LIVEBOOK_PORT=8080
 | 
			
		||||
export LIVEBOOK_IP="::"
 | 
			
		||||
export LIVEBOOK_HOME=/data
 | 
			
		||||
export LIVEBOOK_PASSWORD="$LIVEBOOK_PASSWORD"
 | 
			
		||||
export ESCRIPTS_BIN=/opt/livebook/.mix/escripts
 | 
			
		||||
export ERLANG_BIN="/opt/livebook/.elixir-install/installs/otp/\${ERLANG_VERSION}/bin"
 | 
			
		||||
export ELIXIR_BIN="/opt/livebook/.elixir-install/installs/elixir/\${ELIXIR_VERSION}/bin"
 | 
			
		||||
export PATH="\$ESCRIPTS_BIN:\$ERLANG_BIN:\$ELIXIR_BIN:\$PATH"
 | 
			
		||||
EOF
 | 
			
		||||
{
 | 
			
		||||
  echo "Livebook-Credentials"
 | 
			
		||||
  echo "Livebook Password: $LIVEBOOK_PASSWORD"
 | 
			
		||||
} >>~/livebook.creds
 | 
			
		||||
msg_ok "Installed Erlang $ERLANG_VERSION and Elixir $ELIXIR_VERSION"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Livebook"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/livebook.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Livebook
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=exec
 | 
			
		||||
User=livebook
 | 
			
		||||
Group=livebook
 | 
			
		||||
WorkingDirectory=/data
 | 
			
		||||
EnvironmentFile=-/opt/livebook/.env
 | 
			
		||||
ExecStart=/bin/bash -c 'source /opt/livebook/.env && cd /opt/livebook && livebook server'
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=5
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
chown -R livebook:livebook /opt/livebook /data
 | 
			
		||||
systemctl enable -q --now livebook
 | 
			
		||||
msg_ok "Installed Livebook"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning Up"
 | 
			
		||||
$STD apt autoremove -y
 | 
			
		||||
$STD apt autoclean -y
 | 
			
		||||
$STD apt clean -y
 | 
			
		||||
msg_ok "Cleaned Up"
 | 
			
		||||
@@ -14,19 +14,19 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing dependencies"
 | 
			
		||||
$STD apt install -y build-essential
 | 
			
		||||
$STD apt install --no-install-recommends -y build-essential
 | 
			
		||||
msg_ok "Installed dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
setup_mariadb
 | 
			
		||||
MYSQL_VERSION="8.0" setup_mysql
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Database"
 | 
			
		||||
DB_NAME="mmdl"
 | 
			
		||||
DB_USER="mmdl"
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED by '$DB_PASS';"
 | 
			
		||||
$STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
 | 
			
		||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED by '$DB_PASS';"
 | 
			
		||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
 | 
			
		||||
{
 | 
			
		||||
  echo "Manage My Damn Life Credentials"
 | 
			
		||||
  echo "Database User: $DB_USER"
 | 
			
		||||
@@ -59,7 +59,7 @@ msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/mmdl.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=${APPLICATION} Service
 | 
			
		||||
After=network.target mariadb.service
 | 
			
		||||
After=network.target mysql.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
WorkingDirectory=/opt/mmdl
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user