mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			62 Commits
		
	
	
		
			2025-07-10
			...
			2025-07-15
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					a7f67e5534 | ||
| 
						 | 
					03c4e54da6 | ||
| 
						 | 
					eb86d3e960 | ||
| 
						 | 
					968b7cdf43 | ||
| 
						 | 
					688d296d13 | ||
| 
						 | 
					0379223ead | ||
| 
						 | 
					7a0ca05153 | ||
| 
						 | 
					fb3bf03332 | ||
| 
						 | 
					6d312c9c8d | ||
| 
						 | 
					a2dde6594e | ||
| 
						 | 
					f7c9d77019 | ||
| 
						 | 
					8f4f2f4d92 | ||
| 
						 | 
					f15e4ea552 | ||
| 
						 | 
					1a90d90d5e | ||
| 
						 | 
					11f1e86500 | ||
| 
						 | 
					9d84657763 | ||
| 
						 | 
					31d57da5ab | ||
| 
						 | 
					7d223b984b | ||
| 
						 | 
					417c4e466c | ||
| 
						 | 
					b16fa8d34f | ||
| 
						 | 
					3a2f0bf2cc | ||
| 
						 | 
					a83b58f1df | ||
| 
						 | 
					e5e8b1e020 | ||
| 
						 | 
					3b3e62c4cf | ||
| 
						 | 
					478b65b2c2 | ||
| 
						 | 
					1982ca80d2 | ||
| 
						 | 
					b060de68c0 | ||
| 
						 | 
					a437a7896b | ||
| 
						 | 
					561a2f2712 | ||
| 
						 | 
					aa0a2e1654 | ||
| 
						 | 
					b34b4e09d8 | ||
| 
						 | 
					f48593ac81 | ||
| 
						 | 
					eba06a27f3 | ||
| 
						 | 
					ac1d7f8169 | ||
| 
						 | 
					595fb1ecd9 | ||
| 
						 | 
					207616ec66 | ||
| 
						 | 
					9297ee5e7b | ||
| 
						 | 
					3fc21c7705 | ||
| 
						 | 
					a514a7ff97 | ||
| 
						 | 
					591106adb4 | ||
| 
						 | 
					149b2f1602 | ||
| 
						 | 
					3aff85b730 | ||
| 
						 | 
					c116e773b3 | ||
| 
						 | 
					1e58019e2e | ||
| 
						 | 
					17e671cae9 | ||
| 
						 | 
					4d236e6382 | ||
| 
						 | 
					f4ac341c15 | ||
| 
						 | 
					20e9e9efe8 | ||
| 
						 | 
					ee5cd20915 | ||
| 
						 | 
					5dcd39231f | ||
| 
						 | 
					8f79823c95 | ||
| 
						 | 
					ba00a1d3f0 | ||
| 
						 | 
					599d65768e | ||
| 
						 | 
					471e2f758f | ||
| 
						 | 
					f3a4bd461d | ||
| 
						 | 
					b115fe9120 | ||
| 
						 | 
					f9429ecf5a | ||
| 
						 | 
					ebea43f299 | ||
| 
						 | 
					d693c9361b | ||
| 
						 | 
					3ca53067a7 | ||
| 
						 | 
					93e204850b | ||
| 
						 | 
					8595d48cec | 
							
								
								
									
										2
									
								
								.github/workflows/auto-update-app-headers.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/auto-update-app-headers.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -11,7 +11,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  update-app-files:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -9,7 +9,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  autolabeler:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
    env:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/changelog-pr.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/changelog-pr.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -8,7 +8,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  update-changelog-pull-request:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    env:
 | 
			
		||||
      CONFIG_PATH: .github/changelog-pr-config.json
 | 
			
		||||
      BRANCH_NAME: github-action-update-changelog
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/close-discussion.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/close-discussion.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -12,7 +12,7 @@ permissions:
 | 
			
		||||
jobs:
 | 
			
		||||
  close-discussion:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Repository
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/crawl-versions.yaml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/crawl-versions.yaml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -13,7 +13,7 @@ permissions:
 | 
			
		||||
jobs:
 | 
			
		||||
  crawl-versions:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Repository
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/delete-json-branch.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/delete-json-branch.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -10,7 +10,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  delete_branch:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout the code
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/frontend-cicd.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/frontend-cicd.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -26,7 +26,7 @@ concurrency:
 | 
			
		||||
jobs:
 | 
			
		||||
  build:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    defaults:
 | 
			
		||||
      run:
 | 
			
		||||
        working-directory: frontend  # Set default working directory for all run steps
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/github-release.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/github-release.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -8,7 +8,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  create-daily-release:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
    steps:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/update-json-date.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/update-json-date.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -11,7 +11,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  update-app-files:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/validate-filenames.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/validate-filenames.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -11,7 +11,7 @@ jobs:
 | 
			
		||||
  check-files:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    name: Check changed files
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										60
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,68 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-07-16
 | 
			
		||||
 | 
			
		||||
## 2025-07-15
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - checkmk: change password crawling based on there docs [@MickLesk](https://github.com/MickLesk) ([#6001](https://github.com/community-scripts/ProxmoxVE/pull/6001))
 | 
			
		||||
    - Whiptail: Improve Dialogue to work with ESC [@MickLesk](https://github.com/MickLesk) ([#6003](https://github.com/community-scripts/ProxmoxVE/pull/6003))
 | 
			
		||||
    - 2FAuth: Improve Update-Check [@MickLesk](https://github.com/MickLesk) ([#5998](https://github.com/community-scripts/ProxmoxVE/pull/5998))
 | 
			
		||||
 | 
			
		||||
  - #### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
    - EMQX: Purge Old Install (remove acl.conf too!) [@MickLesk](https://github.com/MickLesk) ([#5999](https://github.com/community-scripts/ProxmoxVE/pull/5999))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: PeaNUT [@MickLesk](https://github.com/MickLesk) ([#6002](https://github.com/community-scripts/ProxmoxVE/pull/6002))
 | 
			
		||||
 | 
			
		||||
## 2025-07-14
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Bar Assistant ([#5977](https://github.com/community-scripts/ProxmoxVE/pull/5977))
 | 
			
		||||
- Mealie ([#5968](https://github.com/community-scripts/ProxmoxVE/pull/5968))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Config-File: Some Addons, Bugfixes...  [@MickLesk](https://github.com/MickLesk) ([#5978](https://github.com/community-scripts/ProxmoxVE/pull/5978))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - add --break-system-packages certbot-dns-cloudflare to the nginxproxym… [@tug-benson](https://github.com/tug-benson) ([#5957](https://github.com/community-scripts/ProxmoxVE/pull/5957))
 | 
			
		||||
    - Dashy: remove unbound variable (RELEASE) [@MickLesk](https://github.com/MickLesk) ([#5974](https://github.com/community-scripts/ProxmoxVE/pull/5974))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Update nic-offloading-fix: add Intel as search Text  [@calvin-li-developer](https://github.com/calvin-li-developer) ([#5954](https://github.com/community-scripts/ProxmoxVE/pull/5954))
 | 
			
		||||
 | 
			
		||||
## 2025-07-12
 | 
			
		||||
 | 
			
		||||
## 2025-07-11
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - immich: hotfix #5921 [@vhsdream](https://github.com/vhsdream) ([#5938](https://github.com/community-scripts/ProxmoxVE/pull/5938))
 | 
			
		||||
    - bookstack: add setup_composer in update [@MickLesk](https://github.com/MickLesk) ([#5935](https://github.com/community-scripts/ProxmoxVE/pull/5935))
 | 
			
		||||
    - Quickfix: Immich: revert install sequence [@vhsdream](https://github.com/vhsdream) ([#5932](https://github.com/community-scripts/ProxmoxVE/pull/5932))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Refactor & Function Bump: Docker [@MickLesk](https://github.com/MickLesk) ([#5889](https://github.com/community-scripts/ProxmoxVE/pull/5889))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Immich: handle custom library dependency updates; other fixes [@vhsdream](https://github.com/vhsdream) ([#5896](https://github.com/community-scripts/ProxmoxVE/pull/5896))
 | 
			
		||||
 | 
			
		||||
## 2025-07-10
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								ct/2fauth.sh
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								ct/2fauth.sh
									
									
									
									
									
								
							@@ -28,8 +28,11 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null || cat /opt/2fauth_version.txt 2>/dev/null)" ]]; then
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null)" ]] || [[ ! -f ~/.2fauth ]]; then
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
@@ -45,10 +48,11 @@ function update_script() {
 | 
			
		||||
      $STD apt-get install -y \
 | 
			
		||||
        lsb-release \
 | 
			
		||||
        gnupg2
 | 
			
		||||
      PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
 | 
			
		||||
      PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
 | 
			
		||||
      sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
 | 
			
		||||
    fi
 | 
			
		||||
    fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
 | 
			
		||||
    setup_composer
 | 
			
		||||
    mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
 | 
			
		||||
    mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
 | 
			
		||||
    cd "/opt/2fauth" || return
 | 
			
		||||
 
 | 
			
		||||
@@ -45,6 +45,8 @@ function update_script() {
 | 
			
		||||
    cp -r /opt/baikal-backup/Specific/ /opt/baikal/
 | 
			
		||||
    chown -R www-data:www-data /opt/baikal/
 | 
			
		||||
    chmod -R 755 /opt/baikal/
 | 
			
		||||
    cd /opt/baikal
 | 
			
		||||
    $STD composer install
 | 
			
		||||
    msg_ok "Configured Baikal"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										128
									
								
								ct/bar-assistant.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								ct/bar-assistant.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,128 @@
 | 
			
		||||
#!/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: bvdberg01 | CanbiZ
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/karlomikus/bar-assistant
 | 
			
		||||
# Source: https://github.com/karlomikus/vue-salt-rim
 | 
			
		||||
# Source: https://www.meilisearch.com/
 | 
			
		||||
 | 
			
		||||
APP="Bar-Assistant"
 | 
			
		||||
var_tags="${var_tags:-cocktails;drinks}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/bar-assistant ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE_MEILISEARCH=$(curl -fsSL https://api.github.com/repos/meilisearch/meilisearch/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
  RELEASE_BARASSISTANT=$(curl -fsSL https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
  RELEASE_SALTRIM=$(curl -fsSL https://api.github.com/repos/karlomikus/vue-salt-rim/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE_BARASSISTANT}" != "$(cat ~/.bar-assistant 2>/dev/null)" ]] || [[ ! -f ~/.bar-assistant ]]; then
 | 
			
		||||
    msg_info "Stopping nginx"
 | 
			
		||||
    systemctl stop nginx
 | 
			
		||||
    msg_ok "Stopped nginx"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up Bar Assistant"
 | 
			
		||||
    mv /opt/bar-assistant /opt/bar-assistant-backup
 | 
			
		||||
    msg_ok "Backed up Bar Assistant"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE_BARASSISTANT}"
 | 
			
		||||
    cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env
 | 
			
		||||
    cp -r /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant
 | 
			
		||||
    cd /opt/bar-assistant
 | 
			
		||||
    $STD composer install --no-interaction
 | 
			
		||||
    $STD php artisan migrate --force
 | 
			
		||||
    $STD php artisan storage:link
 | 
			
		||||
    $STD php artisan bar:setup-meilisearch
 | 
			
		||||
    $STD php artisan scout:sync-index-settings
 | 
			
		||||
    $STD php artisan config:cache
 | 
			
		||||
    $STD php artisan route:cache
 | 
			
		||||
    $STD php artisan event:cache
 | 
			
		||||
    chown -R www-data:www-data /opt/bar-assistant
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE_BARASSISTANT}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting nginx"
 | 
			
		||||
    systemctl start nginx
 | 
			
		||||
    msg_ok "Started nginx"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/bar-assistant-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE_BARASSISTANT}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE_SALTRIM}" != "$(cat ~/.vue-salt-rim 2>/dev/null)" ]] || [[ ! -f ~/.vue-salt-rim ]]; then
 | 
			
		||||
    msg_info "Backing up Vue Salt Rim"
 | 
			
		||||
    mv /opt/vue-salt-rim /opt/vue-salt-rim-backup
 | 
			
		||||
    msg_ok "Backed up Vue Salt Rim"
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping nginx"
 | 
			
		||||
    systemctl stop nginx
 | 
			
		||||
    msg_ok "Stopped nginx"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Salt Rim to ${RELEASE_SALTRIM}"
 | 
			
		||||
    cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js
 | 
			
		||||
    cd /opt/vue-salt-rim
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE_SALTRIM}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting nginx"
 | 
			
		||||
    systemctl start nginx
 | 
			
		||||
    msg_ok "Started nginx"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/vue-salt-rim-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Salt Rim is already at ${RELEASE_SALTRIM}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE_MEILISEARCH}" != "$(cat ~/.meilisearch 2>/dev/null)" ]] || [[ ! -f ~/.meilisearch ]]; then
 | 
			
		||||
    msg_info "Stopping Meilisearch"
 | 
			
		||||
    systemctl stop meilisearch
 | 
			
		||||
    msg_ok "Stopped Meilisearch"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Meilisearch"
 | 
			
		||||
    systemctl start meilisearch
 | 
			
		||||
    msg_ok "Started Meilisearch"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Meilisearch"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Meilisearch is already at ${RELEASE_MEILISEARCH}"
 | 
			
		||||
  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}"
 | 
			
		||||
@@ -40,6 +40,7 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
 | 
			
		||||
    PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
 | 
			
		||||
    setup_composer
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring backup"
 | 
			
		||||
    cp /opt/bookstack-backup/.env /opt/bookstack/.env
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										76
									
								
								ct/docker.sh
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								ct/docker.sh
									
									
									
									
									
								
							@@ -20,18 +20,68 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated ${APP} LXC"
 | 
			
		||||
    exit
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  get_latest_release() {
 | 
			
		||||
    curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating base system"
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get -y upgrade
 | 
			
		||||
  msg_ok "Base system updated"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating Docker Engine"
 | 
			
		||||
  $STD apt-get install --only-upgrade -y docker-ce docker-ce-cli containerd.io
 | 
			
		||||
  msg_ok "Docker Engine updated"
 | 
			
		||||
 | 
			
		||||
  if [[ -f /usr/local/lib/docker/cli-plugins/docker-compose ]]; then
 | 
			
		||||
    COMPOSE_BIN="/usr/local/lib/docker/cli-plugins/docker-compose"
 | 
			
		||||
    COMPOSE_NEW_VERSION=$(get_latest_release "docker/compose")
 | 
			
		||||
    msg_info "Updating Docker Compose to $COMPOSE_NEW_VERSION"
 | 
			
		||||
    curl -fsSL "https://github.com/docker/compose/releases/download/${COMPOSE_NEW_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
 | 
			
		||||
      -o "$COMPOSE_BIN"
 | 
			
		||||
    chmod +x "$COMPOSE_BIN"
 | 
			
		||||
    msg_ok "Docker Compose updated"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if docker ps -a --format '{{.Names}}' | grep -q '^portainer$'; then
 | 
			
		||||
    msg_info "Updating Portainer"
 | 
			
		||||
    $STD docker pull portainer/portainer-ce:latest
 | 
			
		||||
    $STD docker stop portainer && docker rm portainer
 | 
			
		||||
    $STD docker volume create portainer_data >/dev/null 2>&1
 | 
			
		||||
    $STD docker run -d \
 | 
			
		||||
      -p 8000:8000 \
 | 
			
		||||
      -p 9443:9443 \
 | 
			
		||||
      --name=portainer \
 | 
			
		||||
      --restart=always \
 | 
			
		||||
      -v /var/run/docker.sock:/var/run/docker.sock \
 | 
			
		||||
      -v portainer_data:/data \
 | 
			
		||||
      portainer/portainer-ce:latest
 | 
			
		||||
    msg_ok "Updated Portainer"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if docker ps -a --format '{{.Names}}' | grep -q '^portainer_agent$'; then
 | 
			
		||||
    msg_info "Updating Portainer Agent"
 | 
			
		||||
    $STD docker pull portainer/agent:latest
 | 
			
		||||
    $STD docker stop portainer_agent && docker rm portainer_agent
 | 
			
		||||
    $STD docker run -d \
 | 
			
		||||
      -p 9001:9001 \
 | 
			
		||||
      --name=portainer_agent \
 | 
			
		||||
      --restart=always \
 | 
			
		||||
      -v /var/run/docker.sock:/var/run/docker.sock \
 | 
			
		||||
      -v /var/lib/docker/volumes:/var/lib/docker/volumes \
 | 
			
		||||
      portainer/agent
 | 
			
		||||
    msg_ok "Updated Portainer Agent"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Cleaning up"
 | 
			
		||||
  $STD apt-get -y autoremove
 | 
			
		||||
  $STD apt-get -y autoclean
 | 
			
		||||
  msg_ok "Cleanup complete"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -39,4 +89,4 @@ build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,10 @@ function update_script() {
 | 
			
		||||
    systemctl stop emqx
 | 
			
		||||
    msg_ok "Stopped EMQX"
 | 
			
		||||
 | 
			
		||||
    msg_info "Removing old EMQX"
 | 
			
		||||
    $STD apt-get remove --purge -y emqx
 | 
			
		||||
    msg_ok "Removed old EMQX"
 | 
			
		||||
 | 
			
		||||
    msg_info "Downloading EMQX v${RELEASE}"
 | 
			
		||||
    DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
 | 
			
		||||
    curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ function update_script() {
 | 
			
		||||
    cp -r /opt/firefly/storage /opt/storage
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii"
 | 
			
		||||
    fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    rm -rf /opt/firefly/storage
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/bar-assistant
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/bar-assistant
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____                   ___              _      __              __ 
 | 
			
		||||
   / __ )____ ______      /   |  __________(_)____/ /_____ _____  / /_
 | 
			
		||||
  / __  / __ `/ ___/_____/ /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/
 | 
			
		||||
 / /_/ / /_/ / /  /_____/ ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_  
 | 
			
		||||
/_____/\__,_/_/        /_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/  
 | 
			
		||||
                                                                      
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/mealie
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/mealie
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __  ___           ___    
 | 
			
		||||
   /  |/  /__  ____ _/ (_)__ 
 | 
			
		||||
  / /|_/ / _ \/ __ `/ / / _ \
 | 
			
		||||
 / /  / /  __/ /_/ / / /  __/
 | 
			
		||||
/_/  /_/\___/\__,_/_/_/\___/ 
 | 
			
		||||
                             
 | 
			
		||||
							
								
								
									
										278
									
								
								ct/immich.sh
									
									
									
									
									
								
							
							
						
						
									
										278
									
								
								ct/immich.sh
									
									
									
									
									
								
							@@ -51,134 +51,12 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ -f ~/.immich_library_revisions ]]; then
 | 
			
		||||
    libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
 | 
			
		||||
    readarray -d '' NEW_REVISIONS < <(for library in "${libraries[@]}"; do
 | 
			
		||||
      echo "$library: $(curl -fsSL https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/sources/"$library".json | jq -cr '.revision' -)"
 | 
			
		||||
    done)
 | 
			
		||||
    UPDATED_REVISIONS="$(comm -13 <(sort ~/.immich_library_revisions) <(echo -n "${NEW_REVISIONS[@]}" | sort))"
 | 
			
		||||
    if [[ "$UPDATED_REVISIONS" ]]; then
 | 
			
		||||
      readarray -t NAMES < <(echo "$UPDATED_REVISIONS" | awk -F ':' '{print $1}')
 | 
			
		||||
      rm -rf "$SOURCE_DIR"
 | 
			
		||||
      mkdir -p "$SOURCE_DIR"
 | 
			
		||||
      cd "$BASE_DIR"
 | 
			
		||||
      $STD git pull
 | 
			
		||||
      cd "$STAGING_DIR"
 | 
			
		||||
      for name in "${NAMES[@]}"; do
 | 
			
		||||
        if [[ "$name" == "libjxl" ]]; then
 | 
			
		||||
          msg_info "Recompiling libjxl"
 | 
			
		||||
          SOURCE=${SOURCE_DIR}/libjxl
 | 
			
		||||
          JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
 | 
			
		||||
          JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
 | 
			
		||||
          : "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}"
 | 
			
		||||
          $STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
 | 
			
		||||
          cd "$SOURCE"
 | 
			
		||||
          $STD git reset --hard "$LIBJXL_REVISION"
 | 
			
		||||
          $STD git submodule update --init --recursive --depth 1 --recommend-shallow
 | 
			
		||||
          $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
 | 
			
		||||
          $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
 | 
			
		||||
          mkdir build
 | 
			
		||||
          cd build
 | 
			
		||||
          $STD cmake \
 | 
			
		||||
            -DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
            -DBUILD_TESTING=OFF \
 | 
			
		||||
            -DJPEGXL_ENABLE_DOXYGEN=OFF \
 | 
			
		||||
            -DJPEGXL_ENABLE_MANPAGES=OFF \
 | 
			
		||||
            -DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \
 | 
			
		||||
            -DJPEGXL_ENABLE_BENCHMARK=OFF \
 | 
			
		||||
            -DJPEGXL_ENABLE_EXAMPLES=OFF \
 | 
			
		||||
            -DJPEGXL_FORCE_SYSTEM_BROTLI=ON \
 | 
			
		||||
            -DJPEGXL_FORCE_SYSTEM_HWY=ON \
 | 
			
		||||
            -DJPEGXL_ENABLE_JPEGLI=ON \
 | 
			
		||||
            -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \
 | 
			
		||||
            -DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \
 | 
			
		||||
            -DJPEGXL_ENABLE_PLUGINS=ON \
 | 
			
		||||
            -DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \
 | 
			
		||||
            -DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \
 | 
			
		||||
            -DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \
 | 
			
		||||
            ..
 | 
			
		||||
          $STD cmake --build . -- -j"$(nproc)"
 | 
			
		||||
          $STD cmake --install .
 | 
			
		||||
          ldconfig /usr/local/lib
 | 
			
		||||
          $STD make clean
 | 
			
		||||
          cd "$STAGING_DIR"
 | 
			
		||||
          rm -rf "$SOURCE"/{build,third_party}
 | 
			
		||||
          msg_ok "Recompiled libjxl"
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ "$name" == "libheif" ]]; then
 | 
			
		||||
          msg_info "Recompiling libheif"
 | 
			
		||||
          SOURCE=${SOURCE_DIR}/libheif
 | 
			
		||||
          : "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
 | 
			
		||||
          $STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
 | 
			
		||||
          cd "$SOURCE"
 | 
			
		||||
          $STD git reset --hard "$LIBHEIF_REVISION"
 | 
			
		||||
          mkdir build
 | 
			
		||||
          cd build
 | 
			
		||||
          $STD cmake --preset=release-noplugins \
 | 
			
		||||
            -DWITH_DAV1D=ON \
 | 
			
		||||
            -DENABLE_PARALLEL_TILE_DECODING=ON \
 | 
			
		||||
            -DWITH_LIBSHARPYUV=ON \
 | 
			
		||||
            -DWITH_LIBDE265=ON \
 | 
			
		||||
            -DWITH_AOM_DECODER=OFF \
 | 
			
		||||
            -DWITH_AOM_ENCODER=OFF \
 | 
			
		||||
            -DWITH_X265=OFF \
 | 
			
		||||
            -DWITH_EXAMPLES=OFF \
 | 
			
		||||
            ..
 | 
			
		||||
          $STD make install -j "$(nproc)"
 | 
			
		||||
          ldconfig /usr/local/lib
 | 
			
		||||
          $STD make clean
 | 
			
		||||
          cd "$STAGING_DIR"
 | 
			
		||||
          rm -rf "$SOURCE"/build
 | 
			
		||||
          msg_ok "Recompiled libheif"
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ "$name" == "libraw" ]]; then
 | 
			
		||||
          msg_info "Recompiling libraw"
 | 
			
		||||
          SOURCE=${SOURCE_DIR}/libraw
 | 
			
		||||
          : "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
 | 
			
		||||
          $STD git clone https://github.com/libraw/libraw.git "$SOURCE"
 | 
			
		||||
          cd "$SOURCE"
 | 
			
		||||
          $STD git reset --hard "$LIBRAW_REVISION"
 | 
			
		||||
          $STD autoreconf --install
 | 
			
		||||
          $STD ./configure
 | 
			
		||||
          $STD make -j"$(nproc)"
 | 
			
		||||
          $STD make install
 | 
			
		||||
          ldconfig /usr/local/lib
 | 
			
		||||
          $STD make clean
 | 
			
		||||
          cd "$STAGING_DIR"
 | 
			
		||||
          msg_ok "Recompiled libraw"
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ "$name" == "imagemagick" ]]; then
 | 
			
		||||
          msg_info "Recompiling ImageMagick"
 | 
			
		||||
          SOURCE=$SOURCE_DIR/imagemagick
 | 
			
		||||
          : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
 | 
			
		||||
          $STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
 | 
			
		||||
          cd "$SOURCE"
 | 
			
		||||
          $STD git reset --hard "$IMAGEMAGICK_REVISION"
 | 
			
		||||
          $STD ./configure --with-modules
 | 
			
		||||
          $STD make -j"$(nproc)"
 | 
			
		||||
          $STD make install
 | 
			
		||||
          ldconfig /usr/local/lib
 | 
			
		||||
          $STD make clean
 | 
			
		||||
          cd "$STAGING_DIR"
 | 
			
		||||
          msg_ok "Recompiled ImageMagick"
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ "$name" == "libvips" ]]; then
 | 
			
		||||
          msg_info "Recompiling libvips"
 | 
			
		||||
          SOURCE=$SOURCE_DIR/libvips
 | 
			
		||||
          : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
 | 
			
		||||
          $STD git clone https://github.com/libvips/libvips.git "$SOURCE"
 | 
			
		||||
          cd "$SOURCE"
 | 
			
		||||
          $STD git reset --hard "$LIBVIPS_REVISION"
 | 
			
		||||
          $STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
 | 
			
		||||
          cd build
 | 
			
		||||
          $STD ninja install
 | 
			
		||||
          ldconfig /usr/local/lib
 | 
			
		||||
          cd "$STAGING_DIR"
 | 
			
		||||
          rm -rf "$SOURCE"/build
 | 
			
		||||
          msg_ok "Recompiled libvips"
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
      echo -n "${NEW_REVISIONS[@]}" >~/.immich_library_revisions
 | 
			
		||||
      msg_ok "Image-processing libraries compiled"
 | 
			
		||||
    fi
 | 
			
		||||
    cd "$BASE_DIR"
 | 
			
		||||
    $STD git pull
 | 
			
		||||
    for library in "${libraries[@]}"; do
 | 
			
		||||
      compile_"$library"
 | 
			
		||||
    done
 | 
			
		||||
    msg_ok "Image-processing libraries updated"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
 | 
			
		||||
@@ -245,6 +123,10 @@ function update_script() {
 | 
			
		||||
  cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
 | 
			
		||||
  cp -a web/build "$APP_DIR"/www
 | 
			
		||||
  cp LICENSE "$APP_DIR"
 | 
			
		||||
  cd "$APP_DIR"
 | 
			
		||||
  export SHARP_FORCE_GLOBAL_LIBVIPS=true
 | 
			
		||||
  $STD npm install sharp
 | 
			
		||||
  rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
 | 
			
		||||
  msg_ok "Updated ${APP} web and microservices"
 | 
			
		||||
 | 
			
		||||
  cd "$SRC_DIR"/machine-learning
 | 
			
		||||
@@ -276,8 +158,6 @@ function update_script() {
 | 
			
		||||
  ln -s "$GEO_DIR" "$APP_DIR"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating Immich CLI"
 | 
			
		||||
  $STD npm install --build-from-source sharp
 | 
			
		||||
  rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
 | 
			
		||||
  $STD npm i -g @immich/cli
 | 
			
		||||
  msg_ok "Updated Immich CLI"
 | 
			
		||||
 | 
			
		||||
@@ -293,6 +173,144 @@ function update_script() {
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function compile_libjxl() {
 | 
			
		||||
  SOURCE=${SOURCE_DIR}/libjxl
 | 
			
		||||
  JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
 | 
			
		||||
  JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
 | 
			
		||||
  : "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libjxl"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
 | 
			
		||||
    cd "$SOURCE"
 | 
			
		||||
    $STD git reset --hard "$LIBJXL_REVISION"
 | 
			
		||||
    $STD git submodule update --init --recursive --depth 1 --recommend-shallow
 | 
			
		||||
    $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
 | 
			
		||||
    $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
 | 
			
		||||
    mkdir build
 | 
			
		||||
    cd build
 | 
			
		||||
    $STD cmake \
 | 
			
		||||
      -DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
      -DBUILD_TESTING=OFF \
 | 
			
		||||
      -DJPEGXL_ENABLE_DOXYGEN=OFF \
 | 
			
		||||
      -DJPEGXL_ENABLE_MANPAGES=OFF \
 | 
			
		||||
      -DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \
 | 
			
		||||
      -DJPEGXL_ENABLE_BENCHMARK=OFF \
 | 
			
		||||
      -DJPEGXL_ENABLE_EXAMPLES=OFF \
 | 
			
		||||
      -DJPEGXL_FORCE_SYSTEM_BROTLI=ON \
 | 
			
		||||
      -DJPEGXL_FORCE_SYSTEM_HWY=ON \
 | 
			
		||||
      -DJPEGXL_ENABLE_JPEGLI=ON \
 | 
			
		||||
      -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \
 | 
			
		||||
      -DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \
 | 
			
		||||
      -DJPEGXL_ENABLE_PLUGINS=ON \
 | 
			
		||||
      -DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \
 | 
			
		||||
      -DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \
 | 
			
		||||
      -DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \
 | 
			
		||||
      ..
 | 
			
		||||
    $STD cmake --build . -- -j"$(nproc)"
 | 
			
		||||
    $STD cmake --install .
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    rm -rf "$SOURCE"/{build,third_party}
 | 
			
		||||
    msg_ok "Recompiled libjxl"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function compile_libheif() {
 | 
			
		||||
  SOURCE=${SOURCE_DIR}/libheif
 | 
			
		||||
  if ! dpkg -l | grep -q libaom; then
 | 
			
		||||
    $STD apt-get install -y libaom-dev
 | 
			
		||||
    local update="required"
 | 
			
		||||
  fi
 | 
			
		||||
  : "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libheif"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
 | 
			
		||||
    cd "$SOURCE"
 | 
			
		||||
    $STD git reset --hard "$LIBHEIF_REVISION"
 | 
			
		||||
    mkdir build
 | 
			
		||||
    cd build
 | 
			
		||||
    $STD cmake --preset=release-noplugins \
 | 
			
		||||
      -DWITH_DAV1D=ON \
 | 
			
		||||
      -DENABLE_PARALLEL_TILE_DECODING=ON \
 | 
			
		||||
      -DWITH_LIBSHARPYUV=ON \
 | 
			
		||||
      -DWITH_LIBDE265=ON \
 | 
			
		||||
      -DWITH_AOM_DECODER=OFF \
 | 
			
		||||
      -DWITH_AOM_ENCODER=ON \
 | 
			
		||||
      -DWITH_X265=OFF \
 | 
			
		||||
      -DWITH_EXAMPLES=OFF \
 | 
			
		||||
      ..
 | 
			
		||||
    $STD make install -j "$(nproc)"
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    rm -rf "$SOURCE"/build
 | 
			
		||||
    msg_ok "Recompiled libheif"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function compile_libraw() {
 | 
			
		||||
  SOURCE=${SOURCE_DIR}/libraw
 | 
			
		||||
  local update
 | 
			
		||||
  : "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libraw"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/libraw/libraw.git "$SOURCE"
 | 
			
		||||
    cd "$SOURCE"
 | 
			
		||||
    $STD git reset --hard "$LIBRAW_REVISION"
 | 
			
		||||
    $STD autoreconf --install
 | 
			
		||||
    $STD ./configure
 | 
			
		||||
    $STD make -j"$(nproc)"
 | 
			
		||||
    $STD make install
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    msg_ok "Recompiled libraw"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function compile_imagemagick() {
 | 
			
		||||
  SOURCE=$SOURCE_DIR/imagemagick
 | 
			
		||||
  : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling ImageMagick"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
 | 
			
		||||
    cd "$SOURCE"
 | 
			
		||||
    $STD git reset --hard "$IMAGEMAGICK_REVISION"
 | 
			
		||||
    $STD ./configure --with-modules
 | 
			
		||||
    $STD make -j"$(nproc)"
 | 
			
		||||
    $STD make install
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    msg_ok "Recompiled ImageMagick"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function compile_libvips() {
 | 
			
		||||
  SOURCE=$SOURCE_DIR/libvips
 | 
			
		||||
  # : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
 | 
			
		||||
  : "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libvips"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/libvips/libvips.git "$SOURCE"
 | 
			
		||||
    cd "$SOURCE"
 | 
			
		||||
    $STD git reset --hard "$LIBVIPS_REVISION"
 | 
			
		||||
    $STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
 | 
			
		||||
    cd build
 | 
			
		||||
    $STD ninja install
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    rm -rf "$SOURCE"/build
 | 
			
		||||
    msg_ok "Recompiled libvips"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										97
									
								
								ct/mealie.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								ct/mealie.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
#!/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://mealie.io
 | 
			
		||||
 | 
			
		||||
APP="Mealie"
 | 
			
		||||
var_tags="${var_tags:-recipes}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/mealie ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/mealie-recipes/mealie/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.mealie 2>/dev/null)" ]] || [[ ! -f ~/.mealie ]]; then
 | 
			
		||||
 | 
			
		||||
    PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
    NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop mealie
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up .env and start.sh"
 | 
			
		||||
    cp -f /opt/mealie/mealie.env /opt/mealie/mealie.env.bak
 | 
			
		||||
    cp -f /opt/mealie/start.sh /opt/mealie/start.sh.bak
 | 
			
		||||
    msg_ok "Backup completed"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
 | 
			
		||||
 | 
			
		||||
    msg_info "Rebuilding Frontend"
 | 
			
		||||
    export NUXT_TELEMETRY_DISABLED=1
 | 
			
		||||
    cd /opt/mealie/frontend
 | 
			
		||||
    $STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
 | 
			
		||||
    $STD yarn generate
 | 
			
		||||
    cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend
 | 
			
		||||
    msg_ok "Frontend rebuilt"
 | 
			
		||||
 | 
			
		||||
    msg_info "Rebuilding Backend Environment"
 | 
			
		||||
    cd /opt/mealie
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9"
 | 
			
		||||
    MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short)
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/poetry build --output dist
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt
 | 
			
		||||
    echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt
 | 
			
		||||
    /opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt
 | 
			
		||||
    echo " \\" >>dist/requirements.txt
 | 
			
		||||
    /opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt
 | 
			
		||||
    msg_ok "Backend prepared"
 | 
			
		||||
 | 
			
		||||
    msg_info "Finalize Installation"
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist
 | 
			
		||||
    msg_ok "Mealie installed"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring Configuration"
 | 
			
		||||
    mv -f /opt/mealie/mealie.env.bak /opt/mealie/mealie.env
 | 
			
		||||
    mv -f /opt/mealie/start.sh.bak /opt/mealie/start.sh
 | 
			
		||||
    chmod +x /opt/mealie/start.sh
 | 
			
		||||
    msg_ok "Configuration restored"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start mealie
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update to $RELEASE Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
 | 
			
		||||
@@ -99,7 +99,7 @@ function update_script() {
 | 
			
		||||
  mkdir -p /app/global /app/frontend/images
 | 
			
		||||
  cp -r backend/* /app
 | 
			
		||||
  cp -r global/* /app/global
 | 
			
		||||
  $STD python3 -m pip install --no-cache-dir certbot-dns-cloudflare
 | 
			
		||||
  $STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare
 | 
			
		||||
  msg_ok "Setup Enviroment"
 | 
			
		||||
 | 
			
		||||
  msg_info "Building Frontend"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								ct/peanut.sh
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								ct/peanut.sh
									
									
									
									
									
								
							@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
APP="PeaNUT"
 | 
			
		||||
var_tags="${var_tags:-network;ups;}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-3072}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-7}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
@@ -27,22 +27,31 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.peanut 2>/dev/null)" ]] || [[ ! -f ~/.peanut ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop peanut
 | 
			
		||||
    curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz"
 | 
			
		||||
    tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1
 | 
			
		||||
    rm peanut.tar.gz
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    cd /opt/peanut
 | 
			
		||||
    $STD pnpm i
 | 
			
		||||
    $STD pnpm run build
 | 
			
		||||
    $STD pnpm run build:local
 | 
			
		||||
    cp -r .next/static .next/standalone/.next/
 | 
			
		||||
    mkdir -p /opt/peanut/.next/standalone/config
 | 
			
		||||
    ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
 | 
			
		||||
    systemctl start peanut
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start peanut
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.threadfin 2>/dev/null)" ]] || [[ ! -f ~/.threadfin ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.threadfin_version 2>/dev/null)" ]] || [[ ! -f ~/.threadfin_version ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop threadfin
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/bar-assistant.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/bar-assistant.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Bar-Assistant",
 | 
			
		||||
  "slug": "bar-assistant",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    24
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-07-14",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 80,
 | 
			
		||||
  "documentation": "https://docs.barassistant.app/",
 | 
			
		||||
  "website": "https://barassistant.app/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bar-assistant.webp",
 | 
			
		||||
  "config_path": "/opt/bar-assistant",
 | 
			
		||||
  "description": "Bar Assistant is all-in-one solution for managing your home bar. Compared to other recipe management software that usually tries to be more for general use, Bar Assistant is made specifically for managing cocktail recipes. This means that there are a lot of cocktail-oriented features, like ingredient substitutes, first-class ingredients, ABV calculations, unit switching and more..",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/bar-assistant.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/mealie.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/mealie.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Mealie",
 | 
			
		||||
  "slug": "mealie",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    13
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-07-14",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "config_path": "/opt/mealie/mealie.env",
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://mealie.io/",
 | 
			
		||||
  "website": "https://mealie.io/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mealie.webp",
 | 
			
		||||
  "description": "Mealie is a self hosted recipe manager, meal planner and shopping list with a RestAPI backend and a reactive frontend built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the URL and Mealie will automatically import the relevant data, or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/mealie.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 10,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2
									
								
								frontend/public/json/nic-offloading-fix.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/nic-offloading-fix.json
									
									
									
										generated
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "NIC Offloading Fix",
 | 
			
		||||
  "name": "Intel e1000e NIC Offloading Fix",
 | 
			
		||||
  "slug": "nic-offloading-fix",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										66
									
								
								frontend/public/json/peanut.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										66
									
								
								frontend/public/json/peanut.json
									
									
									
										generated
									
									
									
								
							@@ -1,35 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "PeaNUT",
 | 
			
		||||
    "slug": "peanut",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        4
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-06-14",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 3000,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://github.com/Brandawg93/PeaNUT/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp",
 | 
			
		||||
    "config_path": "/etc/peanut/settings.yml",
 | 
			
		||||
    "description": "PeaNUT is a small dashboard for Network UPS Tools (NUT). It provides a web interface to monitor and manage UPS devices. PeaNUT allows users to view device status, retrieve information, and manage UPS parameters through its API. It's customizable for different UPS devices and supports integration with the Homepage dashboard.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/peanut.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 3072,
 | 
			
		||||
                "hdd": 7,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
  "name": "PeaNUT",
 | 
			
		||||
  "slug": "peanut",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    4
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-06-14",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://github.com/Brandawg93/PeaNUT/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp",
 | 
			
		||||
  "config_path": "/etc/peanut/settings.yml",
 | 
			
		||||
  "description": "PeaNUT is a small dashboard for Network UPS Tools (NUT). It provides a web interface to monitor and manage UPS devices. PeaNUT allows users to view device status, retrieve information, and manage UPS parameters through its API. It's customizable for different UPS devices and supports integration with the Homepage dashboard.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/peanut.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 7,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										630
									
								
								frontend/public/json/versions.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										630
									
								
								frontend/public/json/versions.json
									
									
									
										generated
									
									
									
								
							@@ -1,13 +1,323 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.518",
 | 
			
		||||
    "date": "2025-07-08T13:52:55Z"
 | 
			
		||||
    "name": "esphome/esphome",
 | 
			
		||||
    "version": "2025.6.3",
 | 
			
		||||
    "date": "2025-07-03T01:07:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.101.2",
 | 
			
		||||
    "date": "2025-06-25T21:18:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.1",
 | 
			
		||||
    "date": "2025-07-12T13:41:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sbondCo/Watcharr",
 | 
			
		||||
    "version": "v2.1.1",
 | 
			
		||||
    "date": "2025-07-15T22:38:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rcourtman/Pulse",
 | 
			
		||||
    "version": "v3.41.1",
 | 
			
		||||
    "date": "2025-07-10T17:10:46Z"
 | 
			
		||||
    "version": "v3.42.0",
 | 
			
		||||
    "date": "2025-07-14T22:07:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r8.2.0-alpha2",
 | 
			
		||||
    "date": "2025-07-15T20:47:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "plexguide/Huntarr.io",
 | 
			
		||||
    "version": "8.1.12",
 | 
			
		||||
    "date": "2025-07-15T20:06:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "netbox-community/netbox",
 | 
			
		||||
    "version": "v4.3.4",
 | 
			
		||||
    "date": "2025-07-15T18:01:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.0.13",
 | 
			
		||||
    "date": "2025-07-15T17:22:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gethomepage/homepage",
 | 
			
		||||
    "version": "v1.4.0",
 | 
			
		||||
    "date": "2025-07-15T16:43:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.24.0",
 | 
			
		||||
    "date": "2025-07-15T16:02:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "duplicati/duplicati",
 | 
			
		||||
    "version": "v2.1.0.125-2.1.0.125_canary_2025-07-15",
 | 
			
		||||
    "date": "2025-07-15T15:39:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v2.70.14",
 | 
			
		||||
    "date": "2025-07-15T15:27:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "WordPress/WordPress",
 | 
			
		||||
    "version": "6.8.2",
 | 
			
		||||
    "date": "2025-07-15T15:14:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.519",
 | 
			
		||||
    "date": "2025-07-15T14:43:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fallenbagel/jellyseerr",
 | 
			
		||||
    "version": "v2.7.1",
 | 
			
		||||
    "date": "2025-07-15T14:22:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.134.0",
 | 
			
		||||
    "date": "2025-07-15T13:43:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Checkmk/checkmk",
 | 
			
		||||
    "version": "v2.4.0p8-rc1",
 | 
			
		||||
    "date": "2025-07-15T12:09:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zabbix/zabbix",
 | 
			
		||||
    "version": "7.2.11rc1",
 | 
			
		||||
    "date": "2025-07-15T11:47:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.50.7",
 | 
			
		||||
    "date": "2025-07-15T11:29:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.3-beta.10",
 | 
			
		||||
    "date": "2025-07-15T06:07:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gotson/komga",
 | 
			
		||||
    "version": "1.22.1",
 | 
			
		||||
    "date": "2025-07-15T06:44:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2159",
 | 
			
		||||
    "date": "2025-07-15T05:47:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "go-gitea/gitea",
 | 
			
		||||
    "version": "v1.24.3",
 | 
			
		||||
    "date": "2025-07-15T04:56:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jhuckaby/Cronicle",
 | 
			
		||||
    "version": "v0.9.82",
 | 
			
		||||
    "date": "2025-07-15T03:45:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pi-hole/pi-hole",
 | 
			
		||||
    "version": "v6.1.4",
 | 
			
		||||
    "date": "2025-07-14T21:22:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "postgres/postgres",
 | 
			
		||||
    "version": "REL_18_BETA2",
 | 
			
		||||
    "date": "2025-07-14T20:12:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ipfs/kubo",
 | 
			
		||||
    "version": "v0.36.0",
 | 
			
		||||
    "date": "2025-07-14T18:59:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "open-webui/open-webui",
 | 
			
		||||
    "version": "v0.6.16",
 | 
			
		||||
    "date": "2025-07-14T17:39:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "prometheus/prometheus",
 | 
			
		||||
    "version": "v3.5.0",
 | 
			
		||||
    "date": "2025-07-14T16:54:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Paymenter/Paymenter",
 | 
			
		||||
    "version": "v1.2.3",
 | 
			
		||||
    "date": "2025-07-14T16:28:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.102.3",
 | 
			
		||||
    "date": "2025-07-14T14:53:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
    "version": "2025.7.2",
 | 
			
		||||
    "date": "2025-07-14T11:29:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "theonedev/onedev",
 | 
			
		||||
    "version": "v12.0.0",
 | 
			
		||||
    "date": "2025-07-14T06:19:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "coverity-w28-4.13.0",
 | 
			
		||||
    "date": "2025-07-08T11:25:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.1.3",
 | 
			
		||||
    "date": "2025-07-14T07:14:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.20",
 | 
			
		||||
    "date": "2025-07-02T04:03:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homebridge/homebridge",
 | 
			
		||||
    "version": "v1.11.0",
 | 
			
		||||
    "date": "2025-07-13T19:22:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wavelog/wavelog",
 | 
			
		||||
    "version": "2.0.6",
 | 
			
		||||
    "date": "2025-07-13T19:10:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
    "date": "2025-06-26T22:08:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openhab/openhab-core",
 | 
			
		||||
    "version": "5.0.0.M4",
 | 
			
		||||
    "date": "2025-07-13T16:04:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mayswind/AriaNg",
 | 
			
		||||
    "version": "1.3.11",
 | 
			
		||||
    "date": "2025-07-13T13:33:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "evcc-io/evcc",
 | 
			
		||||
    "version": "0.205.0",
 | 
			
		||||
    "date": "2025-07-13T12:27:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "authelia/authelia",
 | 
			
		||||
    "version": "v4.39.5",
 | 
			
		||||
    "date": "2025-07-13T06:12:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.11.1",
 | 
			
		||||
    "date": "2025-04-29T01:14:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "OliveTin/OliveTin",
 | 
			
		||||
    "version": "2025.7.13",
 | 
			
		||||
    "date": "2025-07-12T23:32:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Ombi-app/Ombi",
 | 
			
		||||
    "version": "v4.47.1",
 | 
			
		||||
    "date": "2025-01-05T21:14:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "advplyr/audiobookshelf",
 | 
			
		||||
    "version": "v2.26.0",
 | 
			
		||||
    "date": "2025-07-12T19:31:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jellyfin/jellyfin",
 | 
			
		||||
    "version": "v10.10.7",
 | 
			
		||||
    "date": "2025-04-05T19:14:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cross-seed/cross-seed",
 | 
			
		||||
    "version": "v6.13.0",
 | 
			
		||||
    "date": "2025-07-12T15:52:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "blakeblackshear/frigate",
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
    "date": "2024-08-29T22:32:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homarr-labs/homarr",
 | 
			
		||||
    "version": "v1.28.1",
 | 
			
		||||
    "date": "2025-07-12T08:50:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "leiweibau/Pi.Alert",
 | 
			
		||||
    "version": "v2025-07-12",
 | 
			
		||||
    "date": "2025-07-12T07:53:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumadocs-openapi@9.1.2",
 | 
			
		||||
    "date": "2025-07-12T03:58:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.9.7-rc1",
 | 
			
		||||
    "date": "2025-07-11T22:15:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "eclipse-mosquitto/mosquitto",
 | 
			
		||||
    "version": "v2.0.22",
 | 
			
		||||
    "date": "2025-07-11T21:34:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "1.5.35",
 | 
			
		||||
    "date": "2025-06-22T08:30:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "neo4j/neo4j",
 | 
			
		||||
    "version": "2025.06.2",
 | 
			
		||||
    "date": "2025-07-11T18:03:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "FlowiseAI/Flowise",
 | 
			
		||||
    "version": "flowise@3.0.4",
 | 
			
		||||
    "date": "2025-07-11T13:26:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v10.9.0",
 | 
			
		||||
    "date": "2025-07-11T12:57:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "traefik/traefik",
 | 
			
		||||
    "version": "v3.4.4",
 | 
			
		||||
    "date": "2025-07-11T08:41:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "preview-v0.1",
 | 
			
		||||
    "date": "2025-06-27T14:35:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.12.2-rc.1",
 | 
			
		||||
    "date": "2025-07-11T02:55:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v0.85.1",
 | 
			
		||||
    "date": "2025-07-11T01:17:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "LibreTranslate/LibreTranslate",
 | 
			
		||||
@@ -19,21 +329,6 @@
 | 
			
		||||
    "version": "v2.13.0",
 | 
			
		||||
    "date": "2025-07-10T19:27:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.9.6",
 | 
			
		||||
    "date": "2025-07-08T01:26:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.23.4",
 | 
			
		||||
    "date": "2025-07-10T18:13:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r6.0.25",
 | 
			
		||||
    "date": "2025-07-10T16:59:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "forgejo/forgejo",
 | 
			
		||||
    "version": "v11.0.3",
 | 
			
		||||
@@ -44,36 +339,11 @@
 | 
			
		||||
    "version": "v1.6.10",
 | 
			
		||||
    "date": "2025-07-10T12:04:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "neo4j/neo4j",
 | 
			
		||||
    "version": "5.26.9",
 | 
			
		||||
    "date": "2025-07-10T10:04:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "prototype-incremental-vector-store-3",
 | 
			
		||||
    "date": "2025-07-07T10:27:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "preview-v0.1",
 | 
			
		||||
    "date": "2025-06-27T14:35:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2140",
 | 
			
		||||
    "date": "2025-07-10T05:54:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.2.20",
 | 
			
		||||
    "date": "2025-07-02T04:03:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.0",
 | 
			
		||||
    "date": "2025-07-09T23:15:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.6.2",
 | 
			
		||||
@@ -104,16 +374,6 @@
 | 
			
		||||
    "version": "v1.4.9",
 | 
			
		||||
    "date": "2025-07-09T16:27:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "duplicati/duplicati",
 | 
			
		||||
    "version": "v2.1.0.123-2.1.0.123_canary_2025-07-09",
 | 
			
		||||
    "date": "2025-07-09T16:08:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.3.1",
 | 
			
		||||
    "date": "2025-07-09T15:41:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nicolargo/glances",
 | 
			
		||||
    "version": "v4.3.3",
 | 
			
		||||
@@ -129,46 +389,16 @@
 | 
			
		||||
    "version": "16.0",
 | 
			
		||||
    "date": "2025-07-09T13:28:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.133.0",
 | 
			
		||||
    "date": "2025-07-01T15:13:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AdguardTeam/AdGuardHome",
 | 
			
		||||
    "version": "v0.107.63",
 | 
			
		||||
    "date": "2025-06-26T14:34:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.102.0",
 | 
			
		||||
    "date": "2025-07-07T15:32:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumadocs-ui@15.6.3",
 | 
			
		||||
    "date": "2025-07-09T09:28:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cockpit-project/cockpit",
 | 
			
		||||
    "version": "342",
 | 
			
		||||
    "date": "2025-07-09T08:48:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "esphome/esphome",
 | 
			
		||||
    "version": "2025.6.3",
 | 
			
		||||
    "date": "2025-07-03T01:07:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
    "date": "2025-06-26T22:08:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.11.1",
 | 
			
		||||
    "date": "2025-04-29T01:14:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Prowlarr/Prowlarr",
 | 
			
		||||
    "version": "v1.37.0.5076",
 | 
			
		||||
@@ -179,11 +409,6 @@
 | 
			
		||||
    "version": "v5.26.2.10099",
 | 
			
		||||
    "date": "2025-06-11T20:10:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ipfs/kubo",
 | 
			
		||||
    "version": "v0.35.0",
 | 
			
		||||
    "date": "2025-05-21T18:00:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grokability/snipe-it",
 | 
			
		||||
    "version": "v8.1.18",
 | 
			
		||||
@@ -204,26 +429,11 @@
 | 
			
		||||
    "version": "v1.6.2",
 | 
			
		||||
    "date": "2025-07-08T13:52:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "coverity-w28-4.13.0",
 | 
			
		||||
    "date": "2025-07-08T11:25:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "docker/compose",
 | 
			
		||||
    "version": "v2.38.2",
 | 
			
		||||
    "date": "2025-07-08T09:35:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Checkmk/checkmk",
 | 
			
		||||
    "version": "v2.4.0p7",
 | 
			
		||||
    "date": "2025-07-08T05:51:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "1.5.35",
 | 
			
		||||
    "date": "2025-06-22T08:30:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.121.0",
 | 
			
		||||
@@ -244,26 +454,11 @@
 | 
			
		||||
    "version": "v25.05.2",
 | 
			
		||||
    "date": "2025-07-07T14:08:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Paymenter/Paymenter",
 | 
			
		||||
    "version": "v1.2.1",
 | 
			
		||||
    "date": "2025-07-07T10:11:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v25.2",
 | 
			
		||||
    "date": "2025-07-04T08:21:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v10.8.0",
 | 
			
		||||
    "date": "2025-07-07T08:37:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.2",
 | 
			
		||||
    "date": "2025-05-11T16:40:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "slskd/slskd",
 | 
			
		||||
    "version": "0.23.1",
 | 
			
		||||
@@ -279,11 +474,6 @@
 | 
			
		||||
    "version": "v1.0.0-beta14",
 | 
			
		||||
    "date": "2025-07-06T21:07:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.1.2",
 | 
			
		||||
    "date": "2025-07-06T20:55:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bluenviron/mediamtx",
 | 
			
		||||
    "version": "v1.13.0",
 | 
			
		||||
@@ -304,11 +494,6 @@
 | 
			
		||||
    "version": "8.0.3",
 | 
			
		||||
    "date": "2025-07-06T12:19:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fallenbagel/jellyseerr",
 | 
			
		||||
    "version": "preview-OIDC",
 | 
			
		||||
    "date": "2025-07-06T00:51:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hyperion-project/hyperion.ng",
 | 
			
		||||
    "version": "2.1.1",
 | 
			
		||||
@@ -319,41 +504,16 @@
 | 
			
		||||
    "version": "v0.8.7",
 | 
			
		||||
    "date": "2025-07-05T20:08:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cross-seed/cross-seed",
 | 
			
		||||
    "version": "v6.12.7",
 | 
			
		||||
    "date": "2025-06-18T03:44:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "v4.3.0",
 | 
			
		||||
    "date": "2025-07-05T12:14:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "theonedev/onedev",
 | 
			
		||||
    "version": "v11.11.4",
 | 
			
		||||
    "date": "2025-07-05T09:23:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "linkwarden/linkwarden",
 | 
			
		||||
    "version": "v2.11.3",
 | 
			
		||||
    "date": "2025-07-05T04:34:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
    "version": "2025.7.1",
 | 
			
		||||
    "date": "2025-07-04T20:02:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homarr-labs/homarr",
 | 
			
		||||
    "version": "v1.27.0",
 | 
			
		||||
    "date": "2025-07-04T19:16:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v3.3.0",
 | 
			
		||||
    "date": "2025-06-12T06:54:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "e6.0.0-M1.202507-alpha.1",
 | 
			
		||||
@@ -369,11 +529,6 @@
 | 
			
		||||
    "version": "6.3.1",
 | 
			
		||||
    "date": "2025-07-04T11:20:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v0.85.0",
 | 
			
		||||
    "date": "2025-07-04T00:06:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cloudflare/cloudflared",
 | 
			
		||||
    "version": "2025.7.0",
 | 
			
		||||
@@ -399,11 +554,6 @@
 | 
			
		||||
    "version": "v25.7.1",
 | 
			
		||||
    "date": "2025-07-03T01:03:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.12.2-rc.0",
 | 
			
		||||
    "date": "2025-07-03T00:31:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Koenkk/zigbee2mqtt",
 | 
			
		||||
    "version": "2.5.1",
 | 
			
		||||
@@ -454,11 +604,6 @@
 | 
			
		||||
    "version": "v0.57.0",
 | 
			
		||||
    "date": "2025-07-01T16:47:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zabbix/zabbix",
 | 
			
		||||
    "version": "7.4.0",
 | 
			
		||||
    "date": "2025-07-01T04:36:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openobserve/openobserve",
 | 
			
		||||
    "version": "v0.15.0-rc3",
 | 
			
		||||
@@ -469,16 +614,6 @@
 | 
			
		||||
    "version": "v2.32.0",
 | 
			
		||||
    "date": "2025-06-30T22:12:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jhuckaby/Cronicle",
 | 
			
		||||
    "version": "v0.9.81",
 | 
			
		||||
    "date": "2025-06-30T16:40:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "prometheus/prometheus",
 | 
			
		||||
    "version": "v2.53.5",
 | 
			
		||||
    "date": "2025-06-30T11:01:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jupyter/notebook",
 | 
			
		||||
    "version": "v7.4.4",
 | 
			
		||||
@@ -494,16 +629,6 @@
 | 
			
		||||
    "version": "v29.0",
 | 
			
		||||
    "date": "2025-06-30T03:52:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.50.5",
 | 
			
		||||
    "date": "2025-06-29T08:54:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "plexguide/Huntarr.io",
 | 
			
		||||
    "version": "8.1.11",
 | 
			
		||||
    "date": "2025-06-28T03:42:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tobychui/zoraxy",
 | 
			
		||||
    "version": "v3.2.4",
 | 
			
		||||
@@ -514,26 +639,11 @@
 | 
			
		||||
    "version": "version/2025.6.3",
 | 
			
		||||
    "date": "2025-06-27T14:01:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "FlowiseAI/Flowise",
 | 
			
		||||
    "version": "flowise@3.0.3",
 | 
			
		||||
    "date": "2025-06-27T09:53:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "netbox-community/netbox",
 | 
			
		||||
    "version": "v4.3.3",
 | 
			
		||||
    "date": "2025-06-26T18:42:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tailscale/tailscale",
 | 
			
		||||
    "version": "v1.84.3",
 | 
			
		||||
    "date": "2025-06-26T16:31:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "traefik/traefik",
 | 
			
		||||
    "version": "v3.5.0-rc1",
 | 
			
		||||
    "date": "2025-06-26T15:08:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "node-red/node-red",
 | 
			
		||||
    "version": "4.1.0-beta.2",
 | 
			
		||||
@@ -544,26 +654,11 @@
 | 
			
		||||
    "version": "v1.6.1",
 | 
			
		||||
    "date": "2025-06-25T21:19:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.101.2",
 | 
			
		||||
    "date": "2025-06-25T21:18:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wavelog/wavelog",
 | 
			
		||||
    "version": "2.0.5",
 | 
			
		||||
    "date": "2025-06-25T14:53:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "moghtech/komodo",
 | 
			
		||||
    "version": "v1.18.4",
 | 
			
		||||
    "date": "2025-06-25T00:06:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "evcc-io/evcc",
 | 
			
		||||
    "version": "0.204.5",
 | 
			
		||||
    "date": "2025-06-24T19:17:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ErsatzTV/ErsatzTV",
 | 
			
		||||
    "version": "v25.2.0",
 | 
			
		||||
@@ -579,16 +674,6 @@
 | 
			
		||||
    "version": "RELEASE.2025-06-13T11-33-47Z",
 | 
			
		||||
    "date": "2025-06-23T20:58:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gotson/komga",
 | 
			
		||||
    "version": "1.22.0",
 | 
			
		||||
    "date": "2025-06-23T03:11:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "OliveTin/OliveTin",
 | 
			
		||||
    "version": "2025.6.22",
 | 
			
		||||
    "date": "2025-06-22T22:41:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "clusterzx/paperless-ai",
 | 
			
		||||
    "version": "v3.0.7",
 | 
			
		||||
@@ -609,11 +694,6 @@
 | 
			
		||||
    "version": "v0.28.4",
 | 
			
		||||
    "date": "2025-06-21T08:29:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "go-gitea/gitea",
 | 
			
		||||
    "version": "v1.24.2",
 | 
			
		||||
    "date": "2025-06-20T20:37:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "immich-app/immich",
 | 
			
		||||
    "version": "v1.135.3",
 | 
			
		||||
@@ -659,11 +739,6 @@
 | 
			
		||||
    "version": "v3.12.7",
 | 
			
		||||
    "date": "2025-06-18T14:22:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openhab/openhab-core",
 | 
			
		||||
    "version": "5.0.0.M3",
 | 
			
		||||
    "date": "2025-06-18T14:18:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Bubka/2FAuth",
 | 
			
		||||
    "version": "v5.6.0",
 | 
			
		||||
@@ -694,16 +769,6 @@
 | 
			
		||||
    "version": "2.402",
 | 
			
		||||
    "date": "2025-06-17T05:20:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "open-webui/open-webui",
 | 
			
		||||
    "version": "v0.6.15",
 | 
			
		||||
    "date": "2025-06-16T14:34:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jellyfin/jellyfin",
 | 
			
		||||
    "version": "v10.10.7",
 | 
			
		||||
    "date": "2025-04-05T19:14:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crafty-controller/crafty-4",
 | 
			
		||||
    "version": "v4.4.11",
 | 
			
		||||
@@ -729,11 +794,6 @@
 | 
			
		||||
    "version": "v2.12.4.4658",
 | 
			
		||||
    "date": "2025-06-09T17:27:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "advplyr/audiobookshelf",
 | 
			
		||||
    "version": "v2.25.1",
 | 
			
		||||
    "date": "2025-06-14T23:32:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "semaphoreui/semaphore",
 | 
			
		||||
    "version": "v2.15.0",
 | 
			
		||||
@@ -744,11 +804,6 @@
 | 
			
		||||
    "version": "v3.3.25",
 | 
			
		||||
    "date": "2025-06-14T02:52:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "leiweibau/Pi.Alert",
 | 
			
		||||
    "version": "v2025-06-12",
 | 
			
		||||
    "date": "2025-06-12T20:59:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "autobrr/autobrr",
 | 
			
		||||
    "version": "v1.63.1",
 | 
			
		||||
@@ -794,11 +849,6 @@
 | 
			
		||||
    "version": "v1.5.8",
 | 
			
		||||
    "date": "2025-06-07T11:39:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homebridge/homebridge",
 | 
			
		||||
    "version": "v1.10.0",
 | 
			
		||||
    "date": "2025-06-07T08:31:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ioBroker/ioBroker",
 | 
			
		||||
    "version": "2025-05-31",
 | 
			
		||||
@@ -814,11 +864,6 @@
 | 
			
		||||
    "version": "1.6.14",
 | 
			
		||||
    "date": "2025-06-05T16:40:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pi-hole/pi-hole",
 | 
			
		||||
    "version": "v6.1.2",
 | 
			
		||||
    "date": "2025-06-05T11:32:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MariaDB/server",
 | 
			
		||||
    "version": "mariadb-11.8.2",
 | 
			
		||||
@@ -849,16 +894,6 @@
 | 
			
		||||
    "version": "v0.24.4",
 | 
			
		||||
    "date": "2025-06-02T02:49:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gethomepage/homepage",
 | 
			
		||||
    "version": "v1.3.2",
 | 
			
		||||
    "date": "2025-06-01T19:02:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "blakeblackshear/frigate",
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
    "date": "2024-08-29T22:32:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "release-argus/Argus",
 | 
			
		||||
    "version": "0.26.3",
 | 
			
		||||
@@ -894,11 +929,6 @@
 | 
			
		||||
    "version": "v3.5.4",
 | 
			
		||||
    "date": "2025-05-25T06:53:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "authelia/authelia",
 | 
			
		||||
    "version": "v4.39.4",
 | 
			
		||||
    "date": "2025-05-25T02:27:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "0xERR0R/blocky",
 | 
			
		||||
    "version": "v0.26.2",
 | 
			
		||||
@@ -909,11 +939,6 @@
 | 
			
		||||
    "version": "0.5",
 | 
			
		||||
    "date": "2025-05-21T20:19:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sbondCo/Watcharr",
 | 
			
		||||
    "version": "v2.1.0",
 | 
			
		||||
    "date": "2025-05-18T18:20:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "YunoHost/yunohost",
 | 
			
		||||
    "version": "debian/12.1.6.1",
 | 
			
		||||
@@ -929,11 +954,6 @@
 | 
			
		||||
    "version": "v25.05.2",
 | 
			
		||||
    "date": "2025-05-17T12:53:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Ombi-app/Ombi",
 | 
			
		||||
    "version": "v4.47.1",
 | 
			
		||||
    "date": "2025-01-05T21:14:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "motioneye-project/motioneye",
 | 
			
		||||
    "version": "0.42.1",
 | 
			
		||||
@@ -969,21 +989,11 @@
 | 
			
		||||
    "version": "v1.8.1",
 | 
			
		||||
    "date": "2025-05-06T04:27:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "postgres/postgres",
 | 
			
		||||
    "version": "REL_13_21",
 | 
			
		||||
    "date": "2025-05-05T20:34:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/couchdb",
 | 
			
		||||
    "version": "3.5.0",
 | 
			
		||||
    "date": "2025-05-05T16:28:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "WordPress/WordPress",
 | 
			
		||||
    "version": "6.8.1",
 | 
			
		||||
    "date": "2025-04-30T16:44:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "deluge-torrent/deluge",
 | 
			
		||||
    "version": "deluge-2.2.0",
 | 
			
		||||
@@ -1154,11 +1164,6 @@
 | 
			
		||||
    "version": "v0.28.1",
 | 
			
		||||
    "date": "2025-03-07T15:41:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "eclipse-mosquitto/mosquitto",
 | 
			
		||||
    "version": "v2.0.21",
 | 
			
		||||
    "date": "2025-03-06T16:24:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "toniebox-reverse-engineering/teddycloud",
 | 
			
		||||
    "version": "tc_v0.6.4",
 | 
			
		||||
@@ -1199,11 +1204,6 @@
 | 
			
		||||
    "version": "v7.4.1",
 | 
			
		||||
    "date": "2025-02-15T20:54:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mayswind/AriaNg",
 | 
			
		||||
    "version": "1.3.10",
 | 
			
		||||
    "date": "2025-02-14T16:23:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TryGhost/Ghost-CLI",
 | 
			
		||||
    "version": "v1.27.0",
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ $STD apt-get install -y \
 | 
			
		||||
  nginx
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
 | 
			
		||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
 | 
			
		||||
setup_composer
 | 
			
		||||
setup_mariadb
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ update_os
 | 
			
		||||
 | 
			
		||||
PG_VERSION="16" setup_postgresql
 | 
			
		||||
PHP_APACHE="YES" PHP_MODULE="pgsql" PHP_VERSION="8.2" setup_php
 | 
			
		||||
setup_composer
 | 
			
		||||
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL Database"
 | 
			
		||||
@@ -32,6 +33,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
 | 
			
		||||
msg_ok "Set up PostgreSQL Database"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Baikal"
 | 
			
		||||
cd /opt/baikal
 | 
			
		||||
$STD composer install
 | 
			
		||||
cat <<EOF >/opt/baikal/config/baikal.yaml
 | 
			
		||||
database:
 | 
			
		||||
    backend: pgsql
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										195
									
								
								install/bar-assistant-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								install/bar-assistant-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,195 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: bvdberg01 | CanbiZ
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/karlomikus/bar-assistant
 | 
			
		||||
# Source: https://github.com/karlomikus/vue-salt-rim
 | 
			
		||||
# Source: https://www.meilisearch.com/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  redis-server \
 | 
			
		||||
  nginx \
 | 
			
		||||
  lsb-release \
 | 
			
		||||
  libvips
 | 
			
		||||
#php-{ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm}
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PHP_VERSION="8.3" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
 | 
			
		||||
setup_composer
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
 | 
			
		||||
fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
 | 
			
		||||
fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring PHP"
 | 
			
		||||
PHPVER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";')
 | 
			
		||||
sed -i.bak -E 's/^\s*;?\s*ffi\.enable\s*=.*/ffi.enable=true/' /etc/php/${PHPVER}/fpm/php.ini
 | 
			
		||||
$STD systemctl reload php${PHPVER}-fpm
 | 
			
		||||
msg_info "configured PHP"
 | 
			
		||||
 | 
			
		||||
msg_info "Configure MeiliSearch"
 | 
			
		||||
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml
 | 
			
		||||
MASTER_KEY=$(openssl rand -base64 12)
 | 
			
		||||
sed -i \
 | 
			
		||||
  -e 's|^env =.*|env = "production"|' \
 | 
			
		||||
  -e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
 | 
			
		||||
  -e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
 | 
			
		||||
  -e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
 | 
			
		||||
  -e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
 | 
			
		||||
  -e 's|^# no_analytics = true|no_analytics = true|' \
 | 
			
		||||
  -e 's|^http_addr =.*|http_addr = "127.0.0.1:7700"|' \
 | 
			
		||||
  /etc/meilisearch.toml
 | 
			
		||||
msg_ok "Configured MeiliSearch"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating MeiliSearch service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/meilisearch.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Meilisearch
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now meilisearch
 | 
			
		||||
sleep 5
 | 
			
		||||
msg_ok "Created Service MeiliSearch"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Bar Assistant"
 | 
			
		||||
cd /opt/bar-assistant
 | 
			
		||||
cp /opt/bar-assistant/.env.dist /opt/bar-assistant/.env
 | 
			
		||||
MeiliSearch_API_KEY=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"key":"[^"]*"' | head -n 1 | sed 's/"key":"//;s/"//')
 | 
			
		||||
MeiliSearch_API_KEY_UID=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"uid":"[^"]*"' | head -n 1 | sed 's/"uid":"//;s/"//')
 | 
			
		||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
sed -i -e "s|^APP_URL=|APP_URL=http://${LOCAL_IP}/bar/|" \
 | 
			
		||||
  -e "s|^MEILISEARCH_HOST=|MEILISEARCH_HOST=http://127.0.0.1:7700|" \
 | 
			
		||||
  -e "s|^MEILISEARCH_KEY=|MEILISEARCH_KEY=${MASTER_KEY}|" \
 | 
			
		||||
  -e "s|^MEILISEARCH_API_KEY=|MEILISEARCH_API_KEY=${MeiliSearch_API_KEY}|" \
 | 
			
		||||
  -e "s|^MEILISEARCH_API_KEY_UID=|MEILISEARCH_API_KEY_UID=${MeiliSearch_API_KEY_UID}|" \
 | 
			
		||||
  /opt/bar-assistant/.env
 | 
			
		||||
$STD composer install --no-interaction
 | 
			
		||||
$STD php artisan key:generate
 | 
			
		||||
touch storage/bar-assistant/database.ba3.sqlite
 | 
			
		||||
$STD php artisan migrate --force
 | 
			
		||||
$STD php artisan storage:link
 | 
			
		||||
$STD php artisan bar:setup-meilisearch
 | 
			
		||||
$STD php artisan scout:sync-index-settings
 | 
			
		||||
$STD php artisan config:cache
 | 
			
		||||
$STD php artisan route:cache
 | 
			
		||||
$STD php artisan event:cache
 | 
			
		||||
mkdir /opt/bar-assistant/storage/bar-assistant/uploads/temp
 | 
			
		||||
chown -R www-data:www-data /opt/bar-assistant
 | 
			
		||||
msg_ok "Installed Bar Assistant"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Salt Rim"
 | 
			
		||||
cd /opt/vue-salt-rim
 | 
			
		||||
cat <<EOF >/opt/vue-salt-rim/public/config.js
 | 
			
		||||
window.srConfig = {}
 | 
			
		||||
window.srConfig.API_URL = "http://${LOCAL_IP}/bar"
 | 
			
		||||
window.srConfig.MEILISEARCH_URL = "http://${LOCAL_IP}/search"
 | 
			
		||||
EOF
 | 
			
		||||
$STD npm install
 | 
			
		||||
$STD npm run build
 | 
			
		||||
msg_ok "Installed Salt Rim"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/nginx/sites-available/barassistant.conf
 | 
			
		||||
server {
 | 
			
		||||
    listen 80 default_server;
 | 
			
		||||
    listen [::]:80 default_server;
 | 
			
		||||
    server_name _;
 | 
			
		||||
 | 
			
		||||
    location = /favicon.ico { access_log off; log_not_found off; }
 | 
			
		||||
    location = /robots.txt  { access_log off; log_not_found off; }
 | 
			
		||||
 | 
			
		||||
    client_max_body_size 100M;
 | 
			
		||||
 | 
			
		||||
    location /bar/ {
 | 
			
		||||
        proxy_pass http://127.0.0.1:8080/;
 | 
			
		||||
        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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /search/ {
 | 
			
		||||
        proxy_pass http://127.0.0.1:7700/;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location / {
 | 
			
		||||
        proxy_pass http://127.0.0.1:8081/;
 | 
			
		||||
        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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
server {
 | 
			
		||||
    listen 127.0.0.1:8080;
 | 
			
		||||
    server_name example.com;
 | 
			
		||||
    root /opt/bar-assistant/public;
 | 
			
		||||
 | 
			
		||||
    add_header X-Frame-Options "SAMEORIGIN";
 | 
			
		||||
    add_header X-Content-Type-Options "nosniff";
 | 
			
		||||
 | 
			
		||||
    index index.php;
 | 
			
		||||
    charset utf-8;
 | 
			
		||||
 | 
			
		||||
    location / {
 | 
			
		||||
        try_files \$uri \$uri/ /index.php?\$query_string;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location = /favicon.ico { access_log off; log_not_found off; }
 | 
			
		||||
    location = /robots.txt  { access_log off; log_not_found off; }
 | 
			
		||||
 | 
			
		||||
    error_page 404 /index.php;
 | 
			
		||||
 | 
			
		||||
    location ~ ^/index\.php(/|$) {
 | 
			
		||||
        fastcgi_pass unix:/var/run/php/php$PHPVER-fpm.sock;
 | 
			
		||||
        fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
 | 
			
		||||
        include fastcgi_params;
 | 
			
		||||
        fastcgi_hide_header X-Powered-By;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location ~ /\.(?!well-known).* {
 | 
			
		||||
        deny all;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
server {
 | 
			
		||||
    listen 127.0.0.1:8081;
 | 
			
		||||
    server_name _;
 | 
			
		||||
    root /opt/vue-salt-rim/dist;
 | 
			
		||||
 | 
			
		||||
    location / {
 | 
			
		||||
        try_files \$uri \$uri/ /index.html;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
ln -s /etc/nginx/sites-available/barassistant.conf /etc/nginx/sites-enabled/
 | 
			
		||||
rm -f /etc/nginx/sites-enabled/default
 | 
			
		||||
$STD systemctl reload nginx
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -14,12 +14,10 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  apache2 \
 | 
			
		||||
  redis
 | 
			
		||||
$STD apt-get install -y redis
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="date, json, redis, sqlite3, sockets" setup_php
 | 
			
		||||
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="redis, sqlite3" setup_php
 | 
			
		||||
fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring barcodebuddy"
 | 
			
		||||
 
 | 
			
		||||
@@ -24,13 +24,20 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
PASSWORD=$(omd create monitoring | grep "password:" | awk '{print $NF}')
 | 
			
		||||
$STD omd start
 | 
			
		||||
SITE_NAME="monitoring"
 | 
			
		||||
$STD omd create "$SITE_NAME"
 | 
			
		||||
MKPASSWORD=$(openssl rand -base64 18 | tr -d '/+=' | cut -c1-16)
 | 
			
		||||
 | 
			
		||||
echo -e "$MKPASSWORD\n$MKPASSWORD" | su - "$SITE_NAME" -c "cmk-passwd cmkadmin --stdin"
 | 
			
		||||
$STD omd start "$SITE_NAME"
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
    echo "Application-Credentials"
 | 
			
		||||
    echo "Username: cmkadmin"
 | 
			
		||||
    echo "Password: $PASSWORD"
 | 
			
		||||
  echo "Application-Credentials"
 | 
			
		||||
  echo "Username: cmkadmin"
 | 
			
		||||
  echo "Password: $MKPASSWORD"
 | 
			
		||||
  echo "Site: $SITE_NAME"
 | 
			
		||||
} >>~/checkmk.creds
 | 
			
		||||
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
 
 | 
			
		||||
@@ -16,11 +16,11 @@ update_os
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dashy ${RELEASE} (Patience)"
 | 
			
		||||
msg_info "Installing Dashy"
 | 
			
		||||
cd /opt/dashy
 | 
			
		||||
$STD npm install
 | 
			
		||||
$STD npm run build
 | 
			
		||||
msg_ok "Installed Dashy ${RELEASE}"
 | 
			
		||||
msg_ok "Installed Dashy"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dashy.service
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,17 @@ echo -e '{\n  "log-driver": "journald"\n}' >/etc/docker/daemon.json
 | 
			
		||||
$STD sh <(curl -fsSL https://get.docker.com)
 | 
			
		||||
msg_ok "Installed Docker $DOCKER_LATEST_VERSION"
 | 
			
		||||
 | 
			
		||||
read -r -p "${TAB3}Would you like to add Portainer? <y/N> " prompt
 | 
			
		||||
read -r -p "${TAB3}Install Docker Compose v2 plugin? <y/N> " prompt_compose
 | 
			
		||||
if [[ ${prompt_compose,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Installing Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
 | 
			
		||||
  mkdir -p /usr/local/lib/docker/cli-plugins
 | 
			
		||||
  curl -fsSL "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_LATEST_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
 | 
			
		||||
    -o /usr/local/lib/docker/cli-plugins/docker-compose
 | 
			
		||||
  chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
 | 
			
		||||
  msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
read -r -p "${TAB3}Would you like to add Portainer (UI)? <y/N> " prompt
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Installing Portainer $PORTAINER_LATEST_VERSION"
 | 
			
		||||
  docker volume create portainer_data >/dev/null
 | 
			
		||||
@@ -43,9 +53,9 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
    portainer/portainer-ce:latest
 | 
			
		||||
  msg_ok "Installed Portainer $PORTAINER_LATEST_VERSION"
 | 
			
		||||
else
 | 
			
		||||
  read -r -p "${TAB3}Would you like to add the Portainer Agent? <y/N> " prompt
 | 
			
		||||
  if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
    msg_info "Installing Portainer agent $PORTAINER_AGENT_LATEST_VERSION"
 | 
			
		||||
  read -r -p "${TAB3}Would you like to install the Portainer Agent (for remote management)? <y/N> " prompt_agent
 | 
			
		||||
  if [[ ${prompt_agent,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
    msg_info "Installing Portainer Agent $PORTAINER_AGENT_LATEST_VERSION"
 | 
			
		||||
    $STD docker run -d \
 | 
			
		||||
      -p 9001:9001 \
 | 
			
		||||
      --name portainer_agent \
 | 
			
		||||
@@ -57,12 +67,25 @@ else
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
read -r -p "${TAB3}Expose Docker TCP socket (⚠️ insecure)? <y/N> " prompt
 | 
			
		||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Enabling Docker TCP socket on port 2375 (insecure)"
 | 
			
		||||
  
 | 
			
		||||
  mkdir -p /etc/docker
 | 
			
		||||
  echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json
 | 
			
		||||
read -r -p "${TAB3}Expose Docker TCP socket (insecure) ? [n = No, l = Local only (127.0.0.1), a = All interfaces (0.0.0.0)] <n/l/a>: " socket_choice
 | 
			
		||||
case "${socket_choice,,}" in
 | 
			
		||||
  l)
 | 
			
		||||
    socket="tcp://127.0.0.1:2375"
 | 
			
		||||
    ;;
 | 
			
		||||
  a)
 | 
			
		||||
    socket="tcp://0.0.0.0:2375"
 | 
			
		||||
    ;;
 | 
			
		||||
  *)
 | 
			
		||||
    socket=""
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
if [[ -n "$socket" ]]; then
 | 
			
		||||
  msg_info "Enabling Docker TCP socket on $socket"
 | 
			
		||||
  $STD apt-get install -y jq
 | 
			
		||||
 | 
			
		||||
  tmpfile=$(mktemp)
 | 
			
		||||
  jq --arg sock "$socket" '. + { "hosts": ["unix:///var/run/docker.sock", $sock] }' /etc/docker/daemon.json > "$tmpfile" && mv "$tmpfile" /etc/docker/daemon.json
 | 
			
		||||
 | 
			
		||||
  mkdir -p /etc/systemd/system/docker.service.d
 | 
			
		||||
  cat <<EOF > /etc/systemd/system/docker.service.d/override.conf
 | 
			
		||||
@@ -75,14 +98,13 @@ EOF
 | 
			
		||||
  $STD systemctl daemon-reload
 | 
			
		||||
 | 
			
		||||
  if systemctl restart docker; then
 | 
			
		||||
    msg_ok "Docker TCP socket now available on tcp://0.0.0.0:2375"
 | 
			
		||||
    msg_ok "Docker TCP socket available on $socket"
 | 
			
		||||
  else
 | 
			
		||||
    msg_error "Docker failed to restart. Check journalctl -xeu docker.service"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
 | 
			
		||||
FFMPEG_VERSION="latest" FFMPEG_TYPE="full" setup_ffmpeg
 | 
			
		||||
 | 
			
		||||
msg_info "Setting Up Hardware Acceleration"
 | 
			
		||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
 | 
			
		||||
 
 | 
			
		||||
@@ -13,14 +13,9 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y apache2
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="mysql" setup_php
 | 
			
		||||
setup_composer
 | 
			
		||||
setup_mariadb
 | 
			
		||||
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii"
 | 
			
		||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up database"
 | 
			
		||||
@@ -38,6 +33,8 @@ mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRI
 | 
			
		||||
} >>~/firefly.creds
 | 
			
		||||
msg_ok "Set up database"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Firefly III (Patience)"
 | 
			
		||||
chown -R www-data:www-data /opt/firefly
 | 
			
		||||
chmod -R 775 /opt/firefly/storage
 | 
			
		||||
@@ -45,8 +42,6 @@ cd /opt/firefly
 | 
			
		||||
cp .env.example .env
 | 
			
		||||
sed -i "s/DB_HOST=.*/DB_HOST=localhost/" /opt/firefly/.env
 | 
			
		||||
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/firefly/.env
 | 
			
		||||
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
 | 
			
		||||
source ~/.bashrc
 | 
			
		||||
$STD composer install --no-dev --no-plugins --no-interaction
 | 
			
		||||
$STD php artisan firefly:upgrade-database
 | 
			
		||||
$STD php artisan firefly:correct-database
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,7 @@ $STD apt-get install --no-install-recommends -y \
 | 
			
		||||
  mesa-vulkan-drivers \
 | 
			
		||||
  ocl-icd-libopencl1 \
 | 
			
		||||
  tini \
 | 
			
		||||
  libaom-dev \
 | 
			
		||||
  zlib1g
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  libgdk-pixbuf-2.0-dev librsvg2-dev libtool
 | 
			
		||||
@@ -153,7 +154,6 @@ if [[ -f ~/.openvino ]]; then
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Packages from Testing Repo Installed"
 | 
			
		||||
 | 
			
		||||
# Fix default DB collation issue after libc update
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER DATABASE postgres REFRESH COLLATION VERSION;"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME REFRESH COLLATION VERSION;"
 | 
			
		||||
 | 
			
		||||
@@ -218,7 +218,7 @@ $STD cmake --preset=release-noplugins \
 | 
			
		||||
  -DWITH_LIBSHARPYUV=ON \
 | 
			
		||||
  -DWITH_LIBDE265=ON \
 | 
			
		||||
  -DWITH_AOM_DECODER=OFF \
 | 
			
		||||
  -DWITH_AOM_ENCODER=OFF \
 | 
			
		||||
  -DWITH_AOM_ENCODER=ON \
 | 
			
		||||
  -DWITH_X265=OFF \
 | 
			
		||||
  -DWITH_EXAMPLES=OFF \
 | 
			
		||||
  ..
 | 
			
		||||
@@ -254,7 +254,8 @@ $STD make clean
 | 
			
		||||
cd "$STAGING_DIR"
 | 
			
		||||
 | 
			
		||||
SOURCE=$SOURCE_DIR/libvips
 | 
			
		||||
: "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
 | 
			
		||||
# : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
 | 
			
		||||
: "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
 | 
			
		||||
$STD git clone https://github.com/libvips/libvips.git "$SOURCE"
 | 
			
		||||
cd "$SOURCE"
 | 
			
		||||
$STD git reset --hard "$LIBVIPS_REVISION"
 | 
			
		||||
@@ -301,6 +302,10 @@ cd "$SRC_DIR"
 | 
			
		||||
cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
 | 
			
		||||
cp -a web/build "$APP_DIR"/www
 | 
			
		||||
cp LICENSE "$APP_DIR"
 | 
			
		||||
cd "$APP_DIR"
 | 
			
		||||
export SHARP_FORCE_GLOBAL_LIBVIPS=true
 | 
			
		||||
$STD npm install sharp
 | 
			
		||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
 | 
			
		||||
msg_ok "Installed Immich Web Components"
 | 
			
		||||
 | 
			
		||||
cd "$SRC_DIR"/machine-learning
 | 
			
		||||
@@ -331,8 +336,6 @@ ln -s "$UPLOAD_DIR" "$APP_DIR"/upload
 | 
			
		||||
ln -s "$UPLOAD_DIR" "$ML_DIR"/upload
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Immich CLI"
 | 
			
		||||
$STD npm install --build-from-source sharp
 | 
			
		||||
rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
 | 
			
		||||
$STD npm i -g @immich/cli
 | 
			
		||||
msg_ok "Installed Immich CLI"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										148
									
								
								install/mealie-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								install/mealie-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,148 @@
 | 
			
		||||
#!/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://mealie.io
 | 
			
		||||
 | 
			
		||||
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 \
 | 
			
		||||
  libpq-dev \
 | 
			
		||||
  libwebp-dev \
 | 
			
		||||
  libsasl2-dev \
 | 
			
		||||
  libldap2-dev \
 | 
			
		||||
  libssl-dev
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
POSTGRES_VERSION="16" setup_postgresql
 | 
			
		||||
NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Database"
 | 
			
		||||
DB_NAME=mealie_db
 | 
			
		||||
DB_USER=mealie__user
 | 
			
		||||
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'"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
 | 
			
		||||
{
 | 
			
		||||
  echo "Mealie-Credentials"
 | 
			
		||||
  echo "Mealie Database User: $DB_USER"
 | 
			
		||||
  echo "Mealie Database Password: $DB_PASS"
 | 
			
		||||
  echo "Mealie Database Name: $DB_NAME"
 | 
			
		||||
} >>~/mealie.creds
 | 
			
		||||
msg_ok "Set up Database"
 | 
			
		||||
 | 
			
		||||
msg_info "Building Frontend"
 | 
			
		||||
export NUXT_TELEMETRY_DISABLED=1
 | 
			
		||||
cd /opt/mealie/frontend
 | 
			
		||||
$STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
 | 
			
		||||
$STD yarn generate
 | 
			
		||||
msg_ok "Built Frontend"
 | 
			
		||||
 | 
			
		||||
msg_info "Copying Built Frontend into Backend Package"
 | 
			
		||||
cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend
 | 
			
		||||
msg_ok "Copied Frontend"
 | 
			
		||||
 | 
			
		||||
msg_info "Preparing Backend (Poetry)"
 | 
			
		||||
$STD uv venv /opt/mealie/.venv
 | 
			
		||||
$STD /opt/mealie/.venv/bin/python -m ensurepip --upgrade
 | 
			
		||||
$STD /opt/mealie/.venv/bin/python -m pip install --upgrade pip
 | 
			
		||||
$STD /opt/mealie/.venv/bin/pip install uv
 | 
			
		||||
cd /opt/mealie
 | 
			
		||||
$STD /opt/mealie/.venv/bin/uv pip install poetry==2.0.1
 | 
			
		||||
$STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9"
 | 
			
		||||
msg_ok "Prepared Poetry"
 | 
			
		||||
 | 
			
		||||
msg_info "Writing Environment File"
 | 
			
		||||
cat <<EOF >/opt/mealie/mealie.env
 | 
			
		||||
HOST=0.0.0.0
 | 
			
		||||
PORT=9000
 | 
			
		||||
DB_ENGINE=postgres
 | 
			
		||||
POSTGRES_SERVER=localhost
 | 
			
		||||
POSTGRES_PORT=5432
 | 
			
		||||
POSTGRES_USER=${DB_USER}
 | 
			
		||||
POSTGRES_PASSWORD=${DB_PASS}
 | 
			
		||||
POSTGRES_DB=${DB_NAME}
 | 
			
		||||
NLTK_DATA=/nltk_data
 | 
			
		||||
PRODUCTION=true
 | 
			
		||||
STATIC_FILES=/opt/mealie/frontend/dist
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Wrote Environment File"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Start Script"
 | 
			
		||||
cat <<'EOF' >/opt/mealie/start.sh
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
set -a
 | 
			
		||||
source /opt/mealie/mealie.env
 | 
			
		||||
set +a
 | 
			
		||||
exec /opt/mealie/.venv/bin/mealie
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /opt/mealie/start.sh
 | 
			
		||||
msg_ok "Created Start Script"
 | 
			
		||||
 | 
			
		||||
msg_info "Building Mealie Backend Wheel"
 | 
			
		||||
cd /opt/mealie
 | 
			
		||||
$STD /opt/mealie/.venv/bin/poetry build --output dist
 | 
			
		||||
MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short)
 | 
			
		||||
$STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt
 | 
			
		||||
echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt
 | 
			
		||||
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt
 | 
			
		||||
echo " \\" >>dist/requirements.txt
 | 
			
		||||
/opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt
 | 
			
		||||
msg_ok "Built Wheel + Requirements"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Mealie via uv"
 | 
			
		||||
cd /opt/mealie
 | 
			
		||||
$STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist
 | 
			
		||||
msg_ok "Installed Mealie"
 | 
			
		||||
 | 
			
		||||
msg_info "Downloading NLTK Data"
 | 
			
		||||
mkdir -p /nltk_data/
 | 
			
		||||
$STD /opt/mealie/.venv/bin/python -m nltk.downloader -d /nltk_data averaged_perceptron_tagger_eng
 | 
			
		||||
msg_ok "Downloaded NLTK Data"
 | 
			
		||||
 | 
			
		||||
msg_info "Set Symbolic Links for Mealie"
 | 
			
		||||
ln -sf /opt/mealie/.venv/bin/mealie /usr/local/bin/mealie
 | 
			
		||||
ln -sf /opt/mealie/.venv/bin/poetry /usr/local/bin/poetry
 | 
			
		||||
msg_ok "Set Symbolic Links"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Systemd Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/mealie.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Mealie Backend Server
 | 
			
		||||
After=network.target postgresql.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/opt/mealie
 | 
			
		||||
ExecStart=/opt/mealie/start.sh
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now mealie
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -15,7 +15,7 @@ update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Mosquitto MQTT Broker"
 | 
			
		||||
source /etc/os-release
 | 
			
		||||
curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key >/usr/share/keyrings/mosquitto-repo.gpg.key
 | 
			
		||||
curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg >/usr/share/keyrings/mosquitto-repo.gpg.key
 | 
			
		||||
chmod go+r /usr/share/keyrings/mosquitto-repo.gpg.key
 | 
			
		||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mosquitto-repo.gpg.key] http://repo.mosquitto.org/debian ${VERSION_CODENAME} main" >/etc/apt/sources.list.d/mosquitto.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
 
 | 
			
		||||
@@ -14,22 +14,17 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
 | 
			
		||||
msg_info "Installing NUT"
 | 
			
		||||
$STD apt-get install -y nut-client
 | 
			
		||||
msg_ok "Installed NUT"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Peanut"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz"
 | 
			
		||||
mkdir -p /opt/peanut
 | 
			
		||||
tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1
 | 
			
		||||
rm peanut.tar.gz
 | 
			
		||||
NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Peanut"
 | 
			
		||||
cd /opt/peanut
 | 
			
		||||
$STD npm install -g pnpm
 | 
			
		||||
$STD pnpm i
 | 
			
		||||
$STD pnpm run build
 | 
			
		||||
$STD pnpm run build:local
 | 
			
		||||
cp -r .next/static .next/standalone/.next/
 | 
			
		||||
mkdir -p /opt/peanut/.next/standalone/config
 | 
			
		||||
mkdir -p /etc/peanut/
 | 
			
		||||
@@ -40,7 +35,7 @@ NUT_HOST: 0.0.0.0
 | 
			
		||||
NUT_PORT: 3493
 | 
			
		||||
EOF
 | 
			
		||||
ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
 | 
			
		||||
msg_ok "Installed Peanut"
 | 
			
		||||
msg_ok "Setup Peanut"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/peanut.service
 | 
			
		||||
 
 | 
			
		||||
@@ -20,6 +20,8 @@ $STD apt-get install -y \
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64"
 | 
			
		||||
mv /root/.threadfin /root/.threadfin_version
 | 
			
		||||
mkdir -p /root/.threadfin
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/threadfin.service
 | 
			
		||||
 
 | 
			
		||||
@@ -192,7 +192,6 @@ base_settings() {
 | 
			
		||||
  GATE=""
 | 
			
		||||
  APT_CACHER=""
 | 
			
		||||
  APT_CACHER_IP=""
 | 
			
		||||
  #DISABLEIP6="no"
 | 
			
		||||
  MTU=""
 | 
			
		||||
  SD=""
 | 
			
		||||
  NS=""
 | 
			
		||||
@@ -236,25 +235,30 @@ CT_TYPE="${CT_TYPE}"
 | 
			
		||||
DISK_SIZE="${DISK_SIZE}"
 | 
			
		||||
CORE_COUNT="${CORE_COUNT}"
 | 
			
		||||
RAM_SIZE="${RAM_SIZE}"
 | 
			
		||||
VERBOSE="${VERBOSE}"
 | 
			
		||||
PW="${PW##-password }"
 | 
			
		||||
#CT_ID=$NEXTID
 | 
			
		||||
HN="${HN}"
 | 
			
		||||
BRG="${BRG}"
 | 
			
		||||
NET="${NET}"
 | 
			
		||||
IPV6_METHOD="${IPV6_METHOD:-none}"
 | 
			
		||||
# Set this only if using "IPV6_METHOD=static"
 | 
			
		||||
#IPV6STATIC="fd00::1234/64"
 | 
			
		||||
 | 
			
		||||
GATE="${GATE:-none}"
 | 
			
		||||
APT_CACHER_IP="${APT_CACHER_IP:-none}"
 | 
			
		||||
DISABLEIP6=""
 | 
			
		||||
PW='${PW:-none}'
 | 
			
		||||
MTU="${MTU:-1500}"
 | 
			
		||||
SD="${SD:-none}"
 | 
			
		||||
NS="${NS:-none}"
 | 
			
		||||
MAC="${MAC:-none}"
 | 
			
		||||
VLAN="${VLAN:-none}"
 | 
			
		||||
SSH="${SSH}"
 | 
			
		||||
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
 | 
			
		||||
VERBOSE="${VERBOSE}"
 | 
			
		||||
TAGS="${TAGS:-none}"
 | 
			
		||||
VLAN="${VLAN:-none}"
 | 
			
		||||
MTU="${MTU:-1500}"
 | 
			
		||||
GATE="${GATE:-none}"
 | 
			
		||||
SD="${SD:-none}"
 | 
			
		||||
MAC="${MAC:-none}"
 | 
			
		||||
NS="${NS:-none}"
 | 
			
		||||
NET="${NET}"
 | 
			
		||||
FUSE="${ENABLE_FUSE}"
 | 
			
		||||
 | 
			
		||||
ENABLE_FUSE="$ENABLE_FUSE"
 | 
			
		||||
ENABLE_TUN="$ENABLE_TUN"
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
      echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}"
 | 
			
		||||
    else
 | 
			
		||||
      echo -e "${INFO}${BOLD}${RD}Configuration file already exists at ${FILEPATH}${CL}"
 | 
			
		||||
@@ -268,24 +272,29 @@ CT_TYPE="${CT_TYPE}"
 | 
			
		||||
DISK_SIZE="${DISK_SIZE}"
 | 
			
		||||
CORE_COUNT="${CORE_COUNT}"
 | 
			
		||||
RAM_SIZE="${RAM_SIZE}"
 | 
			
		||||
VERBOSE="${VERBOSE}"
 | 
			
		||||
PW="${PW##-password }"
 | 
			
		||||
#CT_ID=$NEXTID
 | 
			
		||||
HN="${HN}"
 | 
			
		||||
BRG="${BRG}"
 | 
			
		||||
NET="${NET}"
 | 
			
		||||
IPV6_METHOD="${IPV6_METHOD:-none}"
 | 
			
		||||
 | 
			
		||||
# Set this only if using "IPV6_METHOD=static"
 | 
			
		||||
#IPV6STATIC="fd00::1234/64"
 | 
			
		||||
 | 
			
		||||
GATE="${GATE:-none}"
 | 
			
		||||
APT_CACHER_IP="${APT_CACHER_IP:-none}"
 | 
			
		||||
DISABLEIP6=""
 | 
			
		||||
PW='${PW:-none}'
 | 
			
		||||
MTU="${MTU:-1500}"
 | 
			
		||||
SD="${SD:-none}"
 | 
			
		||||
NS="${NS:-none}"
 | 
			
		||||
MAC="${MAC:-none}"
 | 
			
		||||
VLAN="${VLAN:-none}"
 | 
			
		||||
SSH="${SSH}"
 | 
			
		||||
SSH_AUTHORIZED_KEY="${SSH_AUTHORIZED_KEY}"
 | 
			
		||||
VERBOSE="${VERBOSE}"
 | 
			
		||||
TAGS="${TAGS:-none}"
 | 
			
		||||
VLAN="${VLAN:-none}"
 | 
			
		||||
MTU="${MTU:-1500}"
 | 
			
		||||
GATE="${GATE:-none}"
 | 
			
		||||
SD="${SD:-none}"
 | 
			
		||||
MAC="${MAC:-none}"
 | 
			
		||||
NS="${NS:-none}"
 | 
			
		||||
NET="${NET}"
 | 
			
		||||
FUSE="${ENABLE_FUSE}"
 | 
			
		||||
 | 
			
		||||
ENABLE_FUSE="$ENABLE_FUSE"
 | 
			
		||||
ENABLE_TUN="$ENABLE_TUN"
 | 
			
		||||
EOF
 | 
			
		||||
        echo -e "${INFO}${BOLD}${GN}Writing configuration to ${FILEPATH}${CL}"
 | 
			
		||||
      else
 | 
			
		||||
@@ -667,13 +676,6 @@ advanced_settings() {
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "IPv6" --yesno "Disable IPv6?" 10 58); then
 | 
			
		||||
  #   DISABLEIP6="yes"
 | 
			
		||||
  # else
 | 
			
		||||
  #   DISABLEIP6="no"
 | 
			
		||||
  # fi
 | 
			
		||||
  # echo -e "${DISABLEIPV6}${BOLD}${DGN}Disable IPv6: ${BGN}$DISABLEIP6${CL}"
 | 
			
		||||
 | 
			
		||||
  if MTU1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set Interface MTU Size (leave blank for default [The MTU of your selected vmbr, default is 1500])" 8 58 --title "MTU SIZE" 3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ -z "$MTU1" ]; then
 | 
			
		||||
      MTU1="Default"
 | 
			
		||||
@@ -815,7 +817,6 @@ DIAGNOSTICS=yes
 | 
			
		||||
#"ram_size"
 | 
			
		||||
#"os_type"
 | 
			
		||||
#"os_version"
 | 
			
		||||
#"disableip6"
 | 
			
		||||
#"nsapp"
 | 
			
		||||
#"method"
 | 
			
		||||
#"pve_version"
 | 
			
		||||
@@ -842,7 +843,6 @@ DIAGNOSTICS=no
 | 
			
		||||
#"ram_size"
 | 
			
		||||
#"os_type"
 | 
			
		||||
#"os_version"
 | 
			
		||||
#"disableip6"
 | 
			
		||||
#"nsapp"
 | 
			
		||||
#"method"
 | 
			
		||||
#"pve_version"
 | 
			
		||||
@@ -875,20 +875,24 @@ install_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  while true; do
 | 
			
		||||
 | 
			
		||||
    CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SETTINGS" --menu "Choose an option:" \
 | 
			
		||||
      18 60 6 \
 | 
			
		||||
    TMP_CHOICE=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
 | 
			
		||||
      --title "SETTINGS" \
 | 
			
		||||
      --menu "Choose an option:" 20 60 6 \
 | 
			
		||||
      "1" "Default Settings" \
 | 
			
		||||
      "2" "Default Settings (with verbose)" \
 | 
			
		||||
      "3" "Advanced Settings" \
 | 
			
		||||
      "4" "Use Config File" \
 | 
			
		||||
      "5" "Diagnostic Settings" \
 | 
			
		||||
      "6" "Exit" --nocancel --default-item "1" 3>&1 1>&2 2>&3)
 | 
			
		||||
      "6" "Exit" \
 | 
			
		||||
      --default-item "1" 3>&1 1>&2 2>&3) || true
 | 
			
		||||
 | 
			
		||||
    if [ $? -ne 0 ]; then
 | 
			
		||||
      echo -e "${CROSS}${RD} Menu canceled. Exiting.${CL}"
 | 
			
		||||
    if [ -z "$TMP_CHOICE" ]; then
 | 
			
		||||
      echo -e "\n${CROSS}${RD}Menu canceled. Exiting script.${CL}\n"
 | 
			
		||||
      exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    CHOICE="$TMP_CHOICE"
 | 
			
		||||
 | 
			
		||||
    case $CHOICE in
 | 
			
		||||
    1)
 | 
			
		||||
      header_info
 | 
			
		||||
@@ -943,11 +947,11 @@ install_script() {
 | 
			
		||||
 | 
			
		||||
      ;;
 | 
			
		||||
    6)
 | 
			
		||||
      echo -e "${CROSS}${RD}Exiting.${CL}"
 | 
			
		||||
      echo -e "\n${CROSS}${RD}Script terminated. Have a great day!${CL}\n"
 | 
			
		||||
      exit 0
 | 
			
		||||
      ;;
 | 
			
		||||
    *)
 | 
			
		||||
      echo -e "${CROSS}${RD}Invalid option, please try again.${CL}"
 | 
			
		||||
      echo -e "\n${CROSS}${RD}Invalid option, please try again.${CL}\n"
 | 
			
		||||
      ;;
 | 
			
		||||
    esac
 | 
			
		||||
  done
 | 
			
		||||
@@ -1064,7 +1068,6 @@ build_container() {
 | 
			
		||||
  export CACHER="$APT_CACHER"
 | 
			
		||||
  export CACHER_IP="$APT_CACHER_IP"
 | 
			
		||||
  export tz="$timezone"
 | 
			
		||||
  #export DISABLEIPV6="$DISABLEIP6"
 | 
			
		||||
  export APPLICATION="$APP"
 | 
			
		||||
  export app="$NSAPP"
 | 
			
		||||
  export PASSWORD="$PW"
 | 
			
		||||
 
 | 
			
		||||
@@ -446,6 +446,22 @@ config_file() {
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "$IPV6_METHOD" == "static" ]]; then
 | 
			
		||||
    if [[ -n "$IPV6STATIC" ]]; then
 | 
			
		||||
      IP6=",ip6=${IPV6STATIC}"
 | 
			
		||||
      echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}${IPV6STATIC}${CL}"
 | 
			
		||||
    else
 | 
			
		||||
      msg_error "IPV6_METHOD is set to static but IPV6STATIC is empty"
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
  elif [[ "$IPV6_METHOD" == "auto" ]]; then
 | 
			
		||||
    IP6=",ip6=auto"
 | 
			
		||||
    echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}auto${CL}"
 | 
			
		||||
  else
 | 
			
		||||
    IP6=""
 | 
			
		||||
    echo -e "${NETWORK}${BOLD}${DGN}IPv6 Address: ${BGN}none${CL}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ -n "${SD-}" ]]; then
 | 
			
		||||
    if [[ "$SD" == "none" ]]; then
 | 
			
		||||
      SD=""
 | 
			
		||||
@@ -622,6 +638,24 @@ config_file() {
 | 
			
		||||
    echo -e "${FUSE}${BOLD}${DGN}Enable FUSE: ${BGN}$ENABLE_FUSE${CL}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ -n "$ENABLE_TUN" ]]; then
 | 
			
		||||
    if [[ "$ENABLE_TUN" == "yes" ]]; then
 | 
			
		||||
      echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}Yes${CL}"
 | 
			
		||||
    elif [[ "$ENABLE_TUN" == "no" ]]; then
 | 
			
		||||
      echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}No${CL}"
 | 
			
		||||
    else
 | 
			
		||||
      msg_error "Enable TUN needs to be 'yes' or 'no', was ${ENABLE_TUN}"
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "TUN" --yesno "Enable TUN?" 10 58); then
 | 
			
		||||
      ENABLE_TUN="yes"
 | 
			
		||||
    else
 | 
			
		||||
      ENABLE_TUN="no"
 | 
			
		||||
    fi
 | 
			
		||||
    echo -e "${FUSE}${BOLD}${DGN}Enable TUN: ${BGN}$ENABLE_TUN${CL}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ -n "${VERBOSE-}" ]]; then
 | 
			
		||||
    if [[ "$VERBOSE" == "yes" ]]; then
 | 
			
		||||
      echo -e "${SEARCH}${BOLD}${DGN}Verbose Mode: ${BGN}$VERBOSE${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -1772,6 +1772,7 @@ function setup_ffmpeg() {
 | 
			
		||||
      libx264-dev libx265-dev libvpx-dev libmp3lame-dev
 | 
			
		||||
      libfreetype6-dev libass-dev libopus-dev libvorbis-dev
 | 
			
		||||
      libdav1d-dev libsvtav1-dev zlib1g-dev libnuma-dev
 | 
			
		||||
      libva-dev libdrm-dev
 | 
			
		||||
    )
 | 
			
		||||
    ;;
 | 
			
		||||
  *)
 | 
			
		||||
@@ -1808,6 +1809,7 @@ function setup_ffmpeg() {
 | 
			
		||||
 | 
			
		||||
  if [[ "$TYPE" == "full" ]]; then
 | 
			
		||||
    args+=(--enable-libx265 --enable-libdav1d --enable-zlib)
 | 
			
		||||
    args+=(--enable-vaapi --enable-libdrm)
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ ${#args[@]} -eq 0 ]]; then
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user