mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			27 Commits
		
	
	
		
			2025-08-31
			...
			2025-09-02
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					f7f53943c2 | ||
| 
						 | 
					31f4d9b16c | ||
| 
						 | 
					cd4cd5eec1 | ||
| 
						 | 
					8a7eeee727 | ||
| 
						 | 
					be5d65f421 | ||
| 
						 | 
					591af3f109 | ||
| 
						 | 
					a3e0df9de1 | ||
| 
						 | 
					596699d07e | ||
| 
						 | 
					b2275b44c2 | ||
| 
						 | 
					737842fb1e | ||
| 
						 | 
					646cb2bc30 | ||
| 
						 | 
					4599bfe052 | ||
| 
						 | 
					bb85b1d4ac | ||
| 
						 | 
					57ae4a48a7 | ||
| 
						 | 
					06e8460851 | ||
| 
						 | 
					9713c95bf4 | ||
| 
						 | 
					705748bba5 | ||
| 
						 | 
					022f079821 | ||
| 
						 | 
					80d75731a8 | ||
| 
						 | 
					227721a72f | ||
| 
						 | 
					5572a7a0ab | ||
| 
						 | 
					6a69185a2d | ||
| 
						 | 
					77441b6189 | ||
| 
						 | 
					4aa337c2f2 | ||
| 
						 | 
					4bd2f6866a | ||
| 
						 | 
					377de80103 | ||
| 
						 | 
					1c62d4614e | 
							
								
								
									
										43
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,51 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-09-03
 | 
			
		||||
 | 
			
		||||
## 2025-09-02
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Increase default disk size for Apt-Cacher-NG [@MickLesk](https://github.com/MickLesk) ([#7352](https://github.com/community-scripts/ProxmoxVE/pull/7352))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Snipe-IT: Fix Nginx configuration [@tremor021](https://github.com/tremor021) ([#7358](https://github.com/community-scripts/ProxmoxVE/pull/7358))
 | 
			
		||||
    - booklore: remove folder before update [@MickLesk](https://github.com/MickLesk) ([#7351](https://github.com/community-scripts/ProxmoxVE/pull/7351))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Immich: bump version to 1.140.1 [@vhsdream](https://github.com/vhsdream) ([#7349](https://github.com/community-scripts/ProxmoxVE/pull/7349))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - pbs: increase note on website for ipv6 [@MickLesk](https://github.com/MickLesk) ([#7339](https://github.com/community-scripts/ProxmoxVE/pull/7339))
 | 
			
		||||
 | 
			
		||||
## 2025-09-01
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Update configarr.sh to mv backep up .env correctly [@finkerle](https://github.com/finkerle) ([#7323](https://github.com/community-scripts/ProxmoxVE/pull/7323))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Refactor + Feature Bump: HomeAssistant OS [@MickLesk](https://github.com/MickLesk) ([#7336](https://github.com/community-scripts/ProxmoxVE/pull/7336))
 | 
			
		||||
    - UmbrelOS: Refactor / use q35 / better import [@MickLesk](https://github.com/MickLesk) ([#7329](https://github.com/community-scripts/ProxmoxVE/pull/7329))
 | 
			
		||||
    - Harmonize GH Release Check (excl. Pre-Releases & Migrate old "_version.txt" [@MickLesk](https://github.com/MickLesk) ([#7328](https://github.com/community-scripts/ProxmoxVE/pull/7328))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - Bump next from 15.2.4 to 15.5.2 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#7309](https://github.com/community-scripts/ProxmoxVE/pull/7309))
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - booklore: add note for start-up in frontend [@MickLesk](https://github.com/MickLesk) ([#7331](https://github.com/community-scripts/ProxmoxVE/pull/7331))
 | 
			
		||||
 | 
			
		||||
## 2025-08-31
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ APP="Apt-Cacher-NG"
 | 
			
		||||
var_tags="${var_tags:-caching}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
@@ -20,18 +20,18 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /var ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating $APP LXC"
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get -y upgrade
 | 
			
		||||
  msg_ok "Updated $APP LXC"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -41,4 +41,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3142/acng-report.html${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3142/acng-report.html${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,10 @@ function update_script() {
 | 
			
		||||
    systemctl stop booklore
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "backup old install"
 | 
			
		||||
    mv /opt/booklore /opt/booklore_bak
 | 
			
		||||
    msg_ok "backup done"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "booklore" "booklore-app/BookLore"
 | 
			
		||||
 | 
			
		||||
    msg_info "Building Frontend"
 | 
			
		||||
@@ -58,6 +62,7 @@ function update_script() {
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start booklore
 | 
			
		||||
    systemctl reload nginx
 | 
			
		||||
    rm -rf /opt/booklore_bak
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ function update_script() {
 | 
			
		||||
    mv /opt/configarr/{config.yml,secrets.yml,.env} "/opt/backup/"
 | 
			
		||||
    rm -rf /opt/configarr
 | 
			
		||||
    fetch_and_deploy_gh_release "configarr" "raydak-labs/configarr"
 | 
			
		||||
    mv /opt/backup/* /opt/configarr/
 | 
			
		||||
    mv /opt/backup/{config.yml,secrets.yml,.env} "/opt/configarr/"
 | 
			
		||||
    cd /opt/configarr
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    $STD pnpm run build
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,7 @@ function update_script() {
 | 
			
		||||
    done
 | 
			
		||||
    msg_ok "Image-processing libraries up to date"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE="1.140.0"
 | 
			
		||||
  RELEASE="1.140.1"
 | 
			
		||||
  if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop immich-web
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,9 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! grep -q "client_max_body_size[[:space:]]\+100M;" /etc/nginx/conf.d/snipeit.conf; then
 | 
			
		||||
    sed -i '/index index.php;/i \        client_max_body_size 100M;' /etc/nginx/conf.d/snipeit.conf
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "snipe-it" "snipe/snipe-it"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										578
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										578
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -33,7 +33,7 @@
 | 
			
		||||
        "fuse.js": "^7.1.0",
 | 
			
		||||
        "lucide-react": "^0.453.0",
 | 
			
		||||
        "mini-svg-data-uri": "^1.4.4",
 | 
			
		||||
        "next": "15.2.4",
 | 
			
		||||
        "next": "15.5.2",
 | 
			
		||||
        "next-themes": "^0.4.4",
 | 
			
		||||
        "nuqs": "^2.4.1",
 | 
			
		||||
        "pocketbase": "^0.21.5",
 | 
			
		||||
@@ -742,9 +742,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@emnapi/runtime": {
 | 
			
		||||
      "version": "1.4.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
 | 
			
		||||
      "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
 | 
			
		||||
      "version": "1.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz",
 | 
			
		||||
      "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
@@ -1900,6 +1900,22 @@
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@img/sharp-libvips-linux-ppc64": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "ppc64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@img/sharp-libvips-linux-s390x": {
 | 
			
		||||
      "version": "1.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
 | 
			
		||||
@@ -2008,6 +2024,28 @@
 | 
			
		||||
        "@img/sharp-libvips-linux-arm64": "1.0.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@img/sharp-linux-ppc64": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "ppc64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@img/sharp-libvips-linux-ppc64": "1.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@img/sharp-linux-s390x": {
 | 
			
		||||
      "version": "0.33.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
 | 
			
		||||
@@ -2115,6 +2153,25 @@
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@img/sharp-win32-arm64": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0 AND LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "win32"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@img/sharp-win32-ia32": {
 | 
			
		||||
      "version": "0.33.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
 | 
			
		||||
@@ -2244,9 +2301,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@next/env": {
 | 
			
		||||
      "version": "15.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==",
 | 
			
		||||
      "version": "15.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-Qe06ew4zt12LeO6N7j8/nULSOe3fMXE4dM6xgpBQNvdzyK1sv5y4oAP3bq4LamrvGCZtmRYnW8URFCeX5nFgGg==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@next/eslint-plugin-next": {
 | 
			
		||||
@@ -2260,9 +2317,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@next/swc-darwin-arm64": {
 | 
			
		||||
      "version": "15.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==",
 | 
			
		||||
      "version": "15.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-8bGt577BXGSd4iqFygmzIfTYizHb0LGWqH+qgIF/2EDxS5JsSdERJKA8WgwDyNBZgTIIA4D8qUtoQHmxIIquoQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -2276,9 +2333,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@next/swc-darwin-x64": {
 | 
			
		||||
      "version": "15.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==",
 | 
			
		||||
      "version": "15.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-2DjnmR6JHK4X+dgTXt5/sOCu/7yPtqpYt8s8hLkHFK3MGkka2snTv3yRMdHvuRtJVkPwCGsvBSwmoQCHatauFQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -2292,9 +2349,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@next/swc-linux-arm64-gnu": {
 | 
			
		||||
      "version": "15.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==",
 | 
			
		||||
      "version": "15.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-3j7SWDBS2Wov/L9q0mFJtEvQ5miIqfO4l7d2m9Mo06ddsgUK8gWfHGgbjdFlCp2Ek7MmMQZSxpGFqcC8zGh2AA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -2308,9 +2365,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@next/swc-linux-arm64-musl": {
 | 
			
		||||
      "version": "15.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==",
 | 
			
		||||
      "version": "15.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-s6N8k8dF9YGc5T01UPQ08yxsK6fUow5gG1/axWc1HVVBYQBgOjca4oUZF7s4p+kwhkB1bDSGR8QznWrFZ/Rt5g==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -2324,9 +2381,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@next/swc-linux-x64-gnu": {
 | 
			
		||||
      "version": "15.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==",
 | 
			
		||||
      "version": "15.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-o1RV/KOODQh6dM6ZRJGZbc+MOAHww33Vbs5JC9Mp1gDk8cpEO+cYC/l7rweiEalkSm5/1WGa4zY7xrNwObN4+Q==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -2340,9 +2397,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@next/swc-linux-x64-musl": {
 | 
			
		||||
      "version": "15.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==",
 | 
			
		||||
      "version": "15.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-/VUnh7w8RElYZ0IV83nUcP/J4KJ6LLYliiBIri3p3aW2giF+PAVgZb6mk8jbQSB3WlTai8gEmCAr7kptFa1H6g==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -2356,9 +2413,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@next/swc-win32-arm64-msvc": {
 | 
			
		||||
      "version": "15.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==",
 | 
			
		||||
      "version": "15.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-sMPyTvRcNKXseNQ/7qRfVRLa0VhR0esmQ29DD6pqvG71+JdVnESJaHPA8t7bc67KD5spP3+DOCNLhqlEI2ZgQg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -2372,9 +2429,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@next/swc-win32-x64-msvc": {
 | 
			
		||||
      "version": "15.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==",
 | 
			
		||||
      "version": "15.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-W5VvyZHnxG/2ukhZF/9Ikdra5fdNftxI6ybeVKYvBPDtyx7x4jPPSNduUkfH5fo3zG0JQ0bPxgy41af2JX5D4Q==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
@@ -3739,12 +3796,6 @@
 | 
			
		||||
        "eslint": ">=9.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@swc/counter": {
 | 
			
		||||
      "version": "0.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
 | 
			
		||||
      "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
 | 
			
		||||
      "license": "Apache-2.0"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@swc/helpers": {
 | 
			
		||||
      "version": "0.5.15",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
 | 
			
		||||
@@ -5091,17 +5142,6 @@
 | 
			
		||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/busboy": {
 | 
			
		||||
      "version": "1.6.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
 | 
			
		||||
      "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "streamsearch": "^1.1.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10.16.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/cac": {
 | 
			
		||||
      "version": "6.7.14",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
 | 
			
		||||
@@ -10385,15 +10425,13 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next": {
 | 
			
		||||
      "version": "15.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz",
 | 
			
		||||
      "integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==",
 | 
			
		||||
      "version": "15.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/next/-/next-15.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-H8Otr7abj1glFhbGnvUt3gz++0AF1+QoCXEBmd/6aKbfdFwrn0LpA836Ed5+00va/7HQSDD+mOoVhn3tNy3e/Q==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@next/env": "15.2.4",
 | 
			
		||||
        "@swc/counter": "0.1.3",
 | 
			
		||||
        "@next/env": "15.5.2",
 | 
			
		||||
        "@swc/helpers": "0.5.15",
 | 
			
		||||
        "busboy": "1.6.0",
 | 
			
		||||
        "caniuse-lite": "^1.0.30001579",
 | 
			
		||||
        "postcss": "8.4.31",
 | 
			
		||||
        "styled-jsx": "5.1.6"
 | 
			
		||||
@@ -10405,19 +10443,19 @@
 | 
			
		||||
        "node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@next/swc-darwin-arm64": "15.2.4",
 | 
			
		||||
        "@next/swc-darwin-x64": "15.2.4",
 | 
			
		||||
        "@next/swc-linux-arm64-gnu": "15.2.4",
 | 
			
		||||
        "@next/swc-linux-arm64-musl": "15.2.4",
 | 
			
		||||
        "@next/swc-linux-x64-gnu": "15.2.4",
 | 
			
		||||
        "@next/swc-linux-x64-musl": "15.2.4",
 | 
			
		||||
        "@next/swc-win32-arm64-msvc": "15.2.4",
 | 
			
		||||
        "@next/swc-win32-x64-msvc": "15.2.4",
 | 
			
		||||
        "sharp": "^0.33.5"
 | 
			
		||||
        "@next/swc-darwin-arm64": "15.5.2",
 | 
			
		||||
        "@next/swc-darwin-x64": "15.5.2",
 | 
			
		||||
        "@next/swc-linux-arm64-gnu": "15.5.2",
 | 
			
		||||
        "@next/swc-linux-arm64-musl": "15.5.2",
 | 
			
		||||
        "@next/swc-linux-x64-gnu": "15.5.2",
 | 
			
		||||
        "@next/swc-linux-x64-musl": "15.5.2",
 | 
			
		||||
        "@next/swc-win32-arm64-msvc": "15.5.2",
 | 
			
		||||
        "@next/swc-win32-x64-msvc": "15.5.2",
 | 
			
		||||
        "sharp": "^0.34.3"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "@opentelemetry/api": "^1.1.0",
 | 
			
		||||
        "@playwright/test": "^1.41.2",
 | 
			
		||||
        "@playwright/test": "^1.51.1",
 | 
			
		||||
        "babel-plugin-react-compiler": "*",
 | 
			
		||||
        "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
 | 
			
		||||
        "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
 | 
			
		||||
@@ -10448,6 +10486,367 @@
 | 
			
		||||
        "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-darwin-arm64": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "darwin"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@img/sharp-libvips-darwin-arm64": "1.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-darwin-x64": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "darwin"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@img/sharp-libvips-darwin-x64": "1.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-libvips-darwin-arm64": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "darwin"
 | 
			
		||||
      ],
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-libvips-darwin-x64": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "darwin"
 | 
			
		||||
      ],
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-libvips-linux-arm": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-libvips-linux-arm64": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-libvips-linux-s390x": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "s390x"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-libvips-linux-x64": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-libvips-linuxmusl-arm64": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-libvips-linuxmusl-x64": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-linux-arm": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@img/sharp-libvips-linux-arm": "1.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-linux-arm64": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@img/sharp-libvips-linux-arm64": "1.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-linux-s390x": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "s390x"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@img/sharp-libvips-linux-s390x": "1.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-linux-x64": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@img/sharp-libvips-linux-x64": "1.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-linuxmusl-arm64": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@img/sharp-libvips-linuxmusl-arm64": "1.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-linuxmusl-x64": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@img/sharp-libvips-linuxmusl-x64": "1.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-wasm32": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "wasm32"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@emnapi/runtime": "^1.4.4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-win32-ia32": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "ia32"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0 AND LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "win32"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/@img/sharp-win32-x64": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "Apache-2.0 AND LGPL-3.0-or-later",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "win32"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/postcss": {
 | 
			
		||||
      "version": "8.4.31",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
 | 
			
		||||
@@ -10476,6 +10875,49 @@
 | 
			
		||||
        "node": "^10 || ^12 || >=14"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/next/node_modules/sharp": {
 | 
			
		||||
      "version": "0.34.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz",
 | 
			
		||||
      "integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==",
 | 
			
		||||
      "hasInstallScript": true,
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "color": "^4.2.3",
 | 
			
		||||
        "detect-libc": "^2.0.4",
 | 
			
		||||
        "semver": "^7.7.2"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://opencollective.com/libvips"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@img/sharp-darwin-arm64": "0.34.3",
 | 
			
		||||
        "@img/sharp-darwin-x64": "0.34.3",
 | 
			
		||||
        "@img/sharp-libvips-darwin-arm64": "1.2.0",
 | 
			
		||||
        "@img/sharp-libvips-darwin-x64": "1.2.0",
 | 
			
		||||
        "@img/sharp-libvips-linux-arm": "1.2.0",
 | 
			
		||||
        "@img/sharp-libvips-linux-arm64": "1.2.0",
 | 
			
		||||
        "@img/sharp-libvips-linux-ppc64": "1.2.0",
 | 
			
		||||
        "@img/sharp-libvips-linux-s390x": "1.2.0",
 | 
			
		||||
        "@img/sharp-libvips-linux-x64": "1.2.0",
 | 
			
		||||
        "@img/sharp-libvips-linuxmusl-arm64": "1.2.0",
 | 
			
		||||
        "@img/sharp-libvips-linuxmusl-x64": "1.2.0",
 | 
			
		||||
        "@img/sharp-linux-arm": "0.34.3",
 | 
			
		||||
        "@img/sharp-linux-arm64": "0.34.3",
 | 
			
		||||
        "@img/sharp-linux-ppc64": "0.34.3",
 | 
			
		||||
        "@img/sharp-linux-s390x": "0.34.3",
 | 
			
		||||
        "@img/sharp-linux-x64": "0.34.3",
 | 
			
		||||
        "@img/sharp-linuxmusl-arm64": "0.34.3",
 | 
			
		||||
        "@img/sharp-linuxmusl-x64": "0.34.3",
 | 
			
		||||
        "@img/sharp-wasm32": "0.34.3",
 | 
			
		||||
        "@img/sharp-win32-arm64": "0.34.3",
 | 
			
		||||
        "@img/sharp-win32-ia32": "0.34.3",
 | 
			
		||||
        "@img/sharp-win32-x64": "0.34.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/node-releases": {
 | 
			
		||||
      "version": "2.0.19",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
 | 
			
		||||
@@ -12257,14 +12699,6 @@
 | 
			
		||||
        "node": ">= 0.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/streamsearch": {
 | 
			
		||||
      "version": "1.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/string-ts": {
 | 
			
		||||
      "version": "2.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/string-ts/-/string-ts-2.2.1.tgz",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								frontend/package.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/package.json
									
									
									
										generated
									
									
									
								
							@@ -40,7 +40,7 @@
 | 
			
		||||
    "fuse.js": "^7.1.0",
 | 
			
		||||
    "lucide-react": "^0.453.0",
 | 
			
		||||
    "mini-svg-data-uri": "^1.4.4",
 | 
			
		||||
    "next": "15.2.4",
 | 
			
		||||
    "next": "15.5.2",
 | 
			
		||||
    "next-themes": "^0.4.4",
 | 
			
		||||
    "nuqs": "^2.4.1",
 | 
			
		||||
    "pocketbase": "^0.21.5",
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "hdd": 10,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -31,5 +31,10 @@
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Starting Booklore (Web UI) may take up to 2 minutes after a restart or fresh installation.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,10 @@
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Please be aware that Immich releases are pinned to specific versions until compatibility has been confirmed by the Community Scripts maintainers; as a result, the version installed by the helper script may not be the most current version of Immich",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "During installation, you will be prompted with the option to install Intel OpenVINO for hardware-accelerated machine-learning. If you opt in, increase your LXC RAM after installation, as OpenVINO is memory-intensive",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Advanced Install is only possible without root password and root SSH access, you can configure this after installation.",
 | 
			
		||||
            "text": "Advanced Install is only possible with disabled IPV6! Otherwise the installation sometimes stuck.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,234 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r8.0.14-rc0",
 | 
			
		||||
    "date": "2025-09-02T22:46:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "server/public/v0.1.17",
 | 
			
		||||
    "date": "2025-09-02T21:38:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Cleanuparr/Cleanuparr",
 | 
			
		||||
    "version": "v2.2.0",
 | 
			
		||||
    "date": "2025-09-02T20:30:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.11.8",
 | 
			
		||||
    "date": "2025-08-28T19:27:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "v4.4.0",
 | 
			
		||||
    "date": "2025-09-02T17:52:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v2.0.5",
 | 
			
		||||
    "date": "2025-09-02T19:18:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.526",
 | 
			
		||||
    "date": "2025-09-02T18:44:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.2.5",
 | 
			
		||||
    "date": "2025-09-02T17:25:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "netbox-community/netbox",
 | 
			
		||||
    "version": "v4.4.0",
 | 
			
		||||
    "date": "2025-09-02T17:04:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.137.0",
 | 
			
		||||
    "date": "2025-08-26T09:51:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.1.4",
 | 
			
		||||
    "date": "2025-09-02T14:26:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "HabitRPG/habitica",
 | 
			
		||||
    "version": "v5.40.0",
 | 
			
		||||
    "date": "2025-09-02T14:09:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/tomcat",
 | 
			
		||||
    "version": "10.1.45",
 | 
			
		||||
    "date": "2025-09-02T12:46:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "v5.8.8-rc.1",
 | 
			
		||||
    "date": "2025-09-02T12:00:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumadocs-ui@15.7.8",
 | 
			
		||||
    "date": "2025-09-02T11:29:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Dolibarr/dolibarr",
 | 
			
		||||
    "version": "22.0.1",
 | 
			
		||||
    "date": "2025-09-02T10:29:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
    "version": "2025.8.3",
 | 
			
		||||
    "date": "2025-08-21T18:23:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.108.2",
 | 
			
		||||
    "date": "2025-08-27T13:05:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Checkmk/checkmk",
 | 
			
		||||
    "version": "v2.4.0p11-rc3",
 | 
			
		||||
    "date": "2025-09-02T06:53:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2404",
 | 
			
		||||
    "date": "2025-09-02T06:08:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.3-beta.10",
 | 
			
		||||
    "date": "2025-07-15T06:07:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cloudreve/cloudreve",
 | 
			
		||||
    "version": "4.7.0",
 | 
			
		||||
    "date": "2025-09-02T06:02:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.3.2",
 | 
			
		||||
    "date": "2025-08-19T04:08:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "paperless-ngx/paperless-ngx",
 | 
			
		||||
    "version": "v2.18.3",
 | 
			
		||||
    "date": "2025-09-02T01:16:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ErsatzTV/ErsatzTV",
 | 
			
		||||
    "version": "v25.5.0",
 | 
			
		||||
    "date": "2025-09-02T01:00:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "authelia/authelia",
 | 
			
		||||
    "version": "v4.39.8",
 | 
			
		||||
    "date": "2025-09-02T00:44:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.19",
 | 
			
		||||
    "date": "2025-09-02T00:27:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.2",
 | 
			
		||||
    "date": "2025-07-17T12:08:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
    "date": "2025-06-26T22:08:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "booklore-app/booklore",
 | 
			
		||||
    "version": "v1.1.1",
 | 
			
		||||
    "date": "2025-09-01T22:05:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "postgres/postgres",
 | 
			
		||||
    "version": "REL_18_RC1",
 | 
			
		||||
    "date": "2025-09-01T20:03:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "project-zot/zot",
 | 
			
		||||
    "version": "v2.1.8",
 | 
			
		||||
    "date": "2025-09-01T19:20:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Koenkk/zigbee2mqtt",
 | 
			
		||||
    "version": "2.6.1",
 | 
			
		||||
    "date": "2025-09-01T19:05:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.0.15",
 | 
			
		||||
    "date": "2025-08-27T12:12:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v0.87.3",
 | 
			
		||||
    "date": "2025-09-01T16:25:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/operating-system",
 | 
			
		||||
    "version": "16.1",
 | 
			
		||||
    "date": "2025-08-13T07:58:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "seanmorley15/AdventureLog",
 | 
			
		||||
    "version": "v0.11.0",
 | 
			
		||||
    "date": "2025-09-01T16:19:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grafana/grafana",
 | 
			
		||||
    "version": "rrc_steady_12.2.0-17245430286.patch1",
 | 
			
		||||
    "date": "2025-09-01T14:19:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fallenbagel/jellyseerr",
 | 
			
		||||
    "version": "preview-issue-description",
 | 
			
		||||
    "date": "2025-09-01T12:21:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v25.3",
 | 
			
		||||
    "date": "2025-09-01T09:47:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v4.1.0",
 | 
			
		||||
    "date": "2025-09-01T12:03:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.125.0",
 | 
			
		||||
    "date": "2025-09-01T11:01:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grokability/snipe-it",
 | 
			
		||||
    "version": "v8.3.1",
 | 
			
		||||
    "date": "2025-09-01T11:00:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.7.0",
 | 
			
		||||
    "date": "2025-09-01T10:10:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "readeck/readeck",
 | 
			
		||||
    "version": "0.20.1",
 | 
			
		||||
    "date": "2025-09-01T07:35:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "moghtech/komodo",
 | 
			
		||||
    "version": "v1.19.2",
 | 
			
		||||
    "date": "2025-09-01T02:33:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crafty-controller/crafty-4",
 | 
			
		||||
    "version": "v4.5.2",
 | 
			
		||||
@@ -19,11 +249,6 @@
 | 
			
		||||
    "version": "2025.8.5",
 | 
			
		||||
    "date": "2025-08-31T17:56:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v0.87.1",
 | 
			
		||||
    "date": "2025-08-31T16:45:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "karakeep-app/karakeep",
 | 
			
		||||
    "version": "ios/v1.8.0-1",
 | 
			
		||||
@@ -34,11 +259,6 @@
 | 
			
		||||
    "version": "v1.7.3",
 | 
			
		||||
    "date": "2025-08-31T15:59:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "booklore-app/booklore",
 | 
			
		||||
    "version": "v1.1.0",
 | 
			
		||||
    "date": "2025-08-31T15:18:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Part-DB/Part-DB-server",
 | 
			
		||||
    "version": "v2.0.2",
 | 
			
		||||
@@ -49,41 +269,11 @@
 | 
			
		||||
    "version": "v12.0.2",
 | 
			
		||||
    "date": "2025-08-31T13:15:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumadocs-openapi@9.3.4",
 | 
			
		||||
    "date": "2025-08-31T11:48:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v2.0.3",
 | 
			
		||||
    "date": "2025-08-22T08:12:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Lidarr/Lidarr",
 | 
			
		||||
    "version": "v2.13.3.4711",
 | 
			
		||||
    "date": "2025-08-28T20:06:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "authelia/authelia",
 | 
			
		||||
    "version": "v4.39.7",
 | 
			
		||||
    "date": "2025-08-31T06:43:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.22.2384",
 | 
			
		||||
    "date": "2025-08-31T05:57:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.19",
 | 
			
		||||
    "date": "2025-08-31T00:27:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.2",
 | 
			
		||||
    "date": "2025-07-17T12:08:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jhuckaby/Cronicle",
 | 
			
		||||
    "version": "v0.9.91",
 | 
			
		||||
@@ -104,21 +294,11 @@
 | 
			
		||||
    "version": "v1.6.4",
 | 
			
		||||
    "date": "2025-08-18T20:22:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "readeck/readeck",
 | 
			
		||||
    "version": "0.20.0",
 | 
			
		||||
    "date": "2025-08-30T08:26:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.12.6",
 | 
			
		||||
    "date": "2025-08-29T21:40:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "HabitRPG/habitica",
 | 
			
		||||
    "version": "v5.39.1",
 | 
			
		||||
    "date": "2025-08-29T21:02:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.24.26",
 | 
			
		||||
@@ -129,35 +309,15 @@
 | 
			
		||||
    "version": "v1.35.0",
 | 
			
		||||
    "date": "2025-08-29T19:14:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
    "version": "2025.8.3",
 | 
			
		||||
    "date": "2025-08-21T18:23:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "silverbulletmd/silverbullet",
 | 
			
		||||
    "version": "2.0.0",
 | 
			
		||||
    "date": "2025-08-29T13:38:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v25.2",
 | 
			
		||||
    "date": "2025-07-04T08:21:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.0.15",
 | 
			
		||||
    "date": "2025-08-27T12:12:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Forceu/Gokapi",
 | 
			
		||||
    "version": "v2.1.0",
 | 
			
		||||
    "date": "2025-08-29T12:45:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.2.4",
 | 
			
		||||
    "date": "2025-08-29T12:19:53Z"
 | 
			
		||||
    "date": "2025-08-29T12:56:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
@@ -169,11 +329,6 @@
 | 
			
		||||
    "version": "v2.16.19",
 | 
			
		||||
    "date": "2025-08-29T05:53:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.3.2",
 | 
			
		||||
    "date": "2025-08-19T04:08:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openobserve/openobserve",
 | 
			
		||||
    "version": "v0.15.0",
 | 
			
		||||
@@ -189,11 +344,6 @@
 | 
			
		||||
    "version": "2025.8.2",
 | 
			
		||||
    "date": "2025-08-29T00:38:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Dolibarr/dolibarr",
 | 
			
		||||
    "version": "21.0.3",
 | 
			
		||||
    "date": "2025-08-28T21:05:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "9001/copyparty",
 | 
			
		||||
    "version": "v1.19.7",
 | 
			
		||||
@@ -209,26 +359,11 @@
 | 
			
		||||
    "version": "0.50.11",
 | 
			
		||||
    "date": "2025-08-28T20:12:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.11.8",
 | 
			
		||||
    "date": "2025-08-28T19:27:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r7.0.24-rc0",
 | 
			
		||||
    "date": "2025-08-28T19:08:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "benjaminjonard/koillection",
 | 
			
		||||
    "version": "1.7.0",
 | 
			
		||||
    "date": "2025-08-28T18:10:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grokability/snipe-it",
 | 
			
		||||
    "version": "v8.3.0",
 | 
			
		||||
    "date": "2025-08-28T17:49:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gristlabs/grist-core",
 | 
			
		||||
    "version": "v1.7.3",
 | 
			
		||||
@@ -244,21 +379,11 @@
 | 
			
		||||
    "version": "1.2.37",
 | 
			
		||||
    "date": "2025-08-28T16:25:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/operating-system",
 | 
			
		||||
    "version": "16.1",
 | 
			
		||||
    "date": "2025-08-13T07:58:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "influxdata/influxdb",
 | 
			
		||||
    "version": "v3.4.1",
 | 
			
		||||
    "date": "2025-08-28T13:56:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v4.0.3",
 | 
			
		||||
    "date": "2025-08-22T07:43:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "open-webui/open-webui",
 | 
			
		||||
    "version": "v0.6.26",
 | 
			
		||||
@@ -274,11 +399,6 @@
 | 
			
		||||
    "version": "4.1.10-tentative",
 | 
			
		||||
    "date": "2025-08-28T10:02:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.108.2",
 | 
			
		||||
    "date": "2025-08-27T13:05:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "garethgeorge/backrest",
 | 
			
		||||
    "version": "v1.9.2",
 | 
			
		||||
@@ -289,11 +409,6 @@
 | 
			
		||||
    "version": "1.23.3",
 | 
			
		||||
    "date": "2025-08-28T02:50:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.1.3",
 | 
			
		||||
    "date": "2025-08-04T12:13:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.10.0",
 | 
			
		||||
@@ -334,41 +449,16 @@
 | 
			
		||||
    "version": "v12.0.8",
 | 
			
		||||
    "date": "2025-08-27T06:22:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "netbox-community/netbox",
 | 
			
		||||
    "version": "v4.3.7",
 | 
			
		||||
    "date": "2025-08-26T17:54:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.525",
 | 
			
		||||
    "date": "2025-08-26T14:28:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "latest",
 | 
			
		||||
    "date": "2025-08-26T14:14:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.137.0",
 | 
			
		||||
    "date": "2025-08-26T09:51:47Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
    "date": "2025-06-26T22:08:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "evcc-io/evcc",
 | 
			
		||||
    "version": "0.207.5",
 | 
			
		||||
    "date": "2025-08-26T06:57:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.3-beta.10",
 | 
			
		||||
    "date": "2025-07-15T06:07:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.12.2-rc.6",
 | 
			
		||||
@@ -394,21 +484,11 @@
 | 
			
		||||
    "version": "v3.1.2",
 | 
			
		||||
    "date": "2025-08-25T18:00:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Checkmk/checkmk",
 | 
			
		||||
    "version": "v2.3.0p36",
 | 
			
		||||
    "date": "2025-08-25T15:32:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "coverity-w35-4.13.0",
 | 
			
		||||
    "date": "2025-08-25T15:17:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.6.11",
 | 
			
		||||
    "date": "2025-07-22T12:11:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sabnzbd/sabnzbd",
 | 
			
		||||
    "version": "4.5.3",
 | 
			
		||||
@@ -419,11 +499,6 @@
 | 
			
		||||
    "version": "7.4.2",
 | 
			
		||||
    "date": "2025-08-25T12:38:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "e5.10.1-beta.2",
 | 
			
		||||
    "date": "2025-08-25T08:51:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "FlareSolverr/FlareSolverr",
 | 
			
		||||
    "version": "v3.4.0",
 | 
			
		||||
@@ -439,16 +514,6 @@
 | 
			
		||||
    "version": "v4.47.1",
 | 
			
		||||
    "date": "2025-01-05T21:14:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "moghtech/komodo",
 | 
			
		||||
    "version": "v1.19.1",
 | 
			
		||||
    "date": "2025-08-24T20:16:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "v4.3.0",
 | 
			
		||||
    "date": "2025-07-05T12:14:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wavelog/wavelog",
 | 
			
		||||
    "version": "2.1",
 | 
			
		||||
@@ -494,11 +559,6 @@
 | 
			
		||||
    "version": "v2.10.2",
 | 
			
		||||
    "date": "2025-08-23T03:10:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "paperless-ngx/paperless-ngx",
 | 
			
		||||
    "version": "v2.18.2",
 | 
			
		||||
    "date": "2025-08-22T23:56:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tailscale/tailscale",
 | 
			
		||||
    "version": "v1.86.5",
 | 
			
		||||
@@ -514,11 +574,6 @@
 | 
			
		||||
    "version": "version/2025.8.1",
 | 
			
		||||
    "date": "2025-08-22T14:55:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "v10.11.2",
 | 
			
		||||
    "date": "2025-08-22T06:50:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "lazy-media/Reactive-Resume",
 | 
			
		||||
    "version": "v1.2.4",
 | 
			
		||||
@@ -534,11 +589,6 @@
 | 
			
		||||
    "version": "v6.9.1",
 | 
			
		||||
    "date": "2025-08-22T04:04:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cloudreve/cloudreve",
 | 
			
		||||
    "version": "4.6.0",
 | 
			
		||||
    "date": "2025-08-22T02:21:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hargata/lubelog",
 | 
			
		||||
    "version": "v1.5.0",
 | 
			
		||||
@@ -599,11 +649,6 @@
 | 
			
		||||
    "version": "v5.8.0",
 | 
			
		||||
    "date": "2025-08-19T16:46:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fallenbagel/jellyseerr",
 | 
			
		||||
    "version": "preview-dns-cache-manager",
 | 
			
		||||
    "date": "2025-08-19T11:57:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "chrisvel/tududi",
 | 
			
		||||
    "version": "v0.80",
 | 
			
		||||
@@ -629,11 +674,6 @@
 | 
			
		||||
    "version": "8.2.1",
 | 
			
		||||
    "date": "2025-08-18T15:42:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.124.0",
 | 
			
		||||
    "date": "2025-08-18T12:14:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jupyter/notebook",
 | 
			
		||||
    "version": "@jupyter-notebook/ui-components@7.5.0-alpha.2",
 | 
			
		||||
@@ -684,11 +724,6 @@
 | 
			
		||||
    "version": "v2.2.1",
 | 
			
		||||
    "date": "2025-08-13T19:49:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grafana/grafana",
 | 
			
		||||
    "version": "v12.1.1",
 | 
			
		||||
    "date": "2025-08-13T17:54:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "go-gitea/gitea",
 | 
			
		||||
    "version": "v1.24.5",
 | 
			
		||||
@@ -719,21 +754,11 @@
 | 
			
		||||
    "version": "v1.0.0-beta16",
 | 
			
		||||
    "date": "2025-08-11T21:19:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "postgres/postgres",
 | 
			
		||||
    "version": "REL_13_22",
 | 
			
		||||
    "date": "2025-08-11T21:10:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "FlowiseAI/Flowise",
 | 
			
		||||
    "version": "flowise@3.0.5",
 | 
			
		||||
    "date": "2025-08-11T13:01:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Cleanuparr/Cleanuparr",
 | 
			
		||||
    "version": "v2.1.6",
 | 
			
		||||
    "date": "2025-08-11T08:04:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "slskd/slskd",
 | 
			
		||||
    "version": "0.23.2",
 | 
			
		||||
@@ -804,11 +829,6 @@
 | 
			
		||||
    "version": "4.7.30",
 | 
			
		||||
    "date": "2025-08-05T17:23:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ErsatzTV/ErsatzTV",
 | 
			
		||||
    "version": "v25.4.0",
 | 
			
		||||
    "date": "2025-08-05T17:10:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "binwiederhier/ntfy",
 | 
			
		||||
    "version": "v2.14.0",
 | 
			
		||||
@@ -819,21 +839,11 @@
 | 
			
		||||
    "version": "v2.0.116",
 | 
			
		||||
    "date": "2025-08-05T04:45:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "apache/tomcat",
 | 
			
		||||
    "version": "10.1.44",
 | 
			
		||||
    "date": "2025-08-04T13:17:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Tautulli/Tautulli",
 | 
			
		||||
    "version": "v2.15.3",
 | 
			
		||||
    "date": "2025-08-03T17:27:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "project-zot/zot",
 | 
			
		||||
    "version": "v2.1.7",
 | 
			
		||||
    "date": "2025-08-03T16:35:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "linuxserver/Heimdall",
 | 
			
		||||
    "version": "v2.7.4",
 | 
			
		||||
@@ -859,11 +869,6 @@
 | 
			
		||||
    "version": "v0.22.2",
 | 
			
		||||
    "date": "2025-08-01T23:27:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Koenkk/zigbee2mqtt",
 | 
			
		||||
    "version": "2.6.0",
 | 
			
		||||
    "date": "2025-08-01T15:42:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "alexta69/metube",
 | 
			
		||||
    "version": "2025.07.31",
 | 
			
		||||
@@ -1109,11 +1114,6 @@
 | 
			
		||||
    "version": "v0.8.4",
 | 
			
		||||
    "date": "2025-06-10T07:57:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "seanmorley15/AdventureLog",
 | 
			
		||||
    "version": "v0.10.0",
 | 
			
		||||
    "date": "2025-06-09T13:37:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jordan-dalby/ByteStash",
 | 
			
		||||
    "version": "v1.5.8",
 | 
			
		||||
 
 | 
			
		||||
@@ -280,7 +280,7 @@ GEO_DIR="${INSTALL_DIR}/geodata"
 | 
			
		||||
mkdir -p "$INSTALL_DIR"
 | 
			
		||||
mkdir -p {"${APP_DIR}","${UPLOAD_DIR}","${GEO_DIR}","${INSTALL_DIR}"/cache}
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.140.0" "$SRC_DIR"
 | 
			
		||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.140.1" "$SRC_DIR"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing ${APPLICATION} (more patience please)"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -62,6 +62,7 @@ server {
 | 
			
		||||
        listen 80;
 | 
			
		||||
        root /opt/snipe-it/public;
 | 
			
		||||
        server_name $IPADDRESS;
 | 
			
		||||
        client_max_body_size 100M;
 | 
			
		||||
        index index.php;
 | 
			
		||||
 | 
			
		||||
        location / {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										140
									
								
								misc/tools.func
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								misc/tools.func
									
									
									
									
									
								
							@@ -1944,8 +1944,9 @@ function setup_ffmpeg() {
 | 
			
		||||
check_for_gh_release() {
 | 
			
		||||
  local app="$1"
 | 
			
		||||
  local source="$2"
 | 
			
		||||
  local pinned_version="${3:-}" # optional
 | 
			
		||||
  local current_file="$HOME/.${app,,}"
 | 
			
		||||
  local pinned_version_in="${3:-}" # optional
 | 
			
		||||
  local app_lc="${app,,}"
 | 
			
		||||
  local current_file="$HOME/.${app_lc}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Checking for update: ${app}"
 | 
			
		||||
 | 
			
		||||
@@ -1964,82 +1965,83 @@ check_for_gh_release() {
 | 
			
		||||
    }
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Fetch releases (newest → oldest)
 | 
			
		||||
  local releases
 | 
			
		||||
  releases=$(
 | 
			
		||||
    curl -fsSL --max-time 15 \
 | 
			
		||||
      -H 'Accept: application/vnd.github+json' \
 | 
			
		||||
      -H 'X-GitHub-Api-Version: 2022-11-28' \
 | 
			
		||||
      "https://api.github.com/repos/${source}/releases" |
 | 
			
		||||
      jq -r '.[].tag_name' | sed 's/^v//'
 | 
			
		||||
  ) || true
 | 
			
		||||
 | 
			
		||||
  if [[ -z "$releases" ]]; then
 | 
			
		||||
  # Fetch releases and exclude drafts/prereleases
 | 
			
		||||
  local releases_json
 | 
			
		||||
  releases_json=$(curl -fsSL --max-time 20 \
 | 
			
		||||
    -H 'Accept: application/vnd.github+json' \
 | 
			
		||||
    -H 'X-GitHub-Api-Version: 2022-11-28' \
 | 
			
		||||
    "https://api.github.com/repos/${source}/releases") || {
 | 
			
		||||
    msg_error "Unable to fetch releases for ${app}"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Define current and latest versions
 | 
			
		||||
  local latest current
 | 
			
		||||
  latest=$(echo "$releases" | head -n1)
 | 
			
		||||
  current=""
 | 
			
		||||
  [[ -f "$current_file" ]] && current="$(<"$current_file")"
 | 
			
		||||
 | 
			
		||||
  # Helper: get index of a version (lower = newer)
 | 
			
		||||
  get_index() {
 | 
			
		||||
    local ver="${1:-}"
 | 
			
		||||
    [[ -z "$ver" ]] && return 1
 | 
			
		||||
    nl -ba <<<"$releases" | awk -v v="$ver" '$2==v{print $1; exit}'
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  # Pinning enabled
 | 
			
		||||
  if [[ -n "$pinned_version" ]]; then
 | 
			
		||||
    if ! grep -qxF "$pinned_version" <<<"$releases"; then
 | 
			
		||||
      msg_error "Pinned version v${pinned_version} not found upstream"
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ -z "$current" ]]; then
 | 
			
		||||
      msg_info "${app} pinned to v${pinned_version}, no local version → install required"
 | 
			
		||||
      CHECK_UPDATE_RELEASE="$pinned_version"
 | 
			
		||||
      return 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ "$current" == "$pinned_version" ]]; then
 | 
			
		||||
      if [[ "$pinned_version" == "$latest" ]]; then
 | 
			
		||||
        msg_ok "${app} pinned to v${pinned_version} (up to date)"
 | 
			
		||||
      else
 | 
			
		||||
        msg_ok "${app} pinned to v${pinned_version} (already installed, upstream v${latest})"
 | 
			
		||||
      fi
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    local pinned_index current_index
 | 
			
		||||
    pinned_index="$(get_index "$pinned_version" || true)"
 | 
			
		||||
    current_index="$(get_index "$current" || true)"
 | 
			
		||||
 | 
			
		||||
    if [[ -z "$current_index" ]] || [[ "$current_index" -gt "$pinned_index" ]]; then
 | 
			
		||||
      msg_info "${app} pinned to v${pinned_version} (installed v${current:-none}) → update required"
 | 
			
		||||
      CHECK_UPDATE_RELEASE="$pinned_version"
 | 
			
		||||
      return 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ "$current_index" -lt "$pinned_index" ]]; then
 | 
			
		||||
      msg_info "${app} pinned to v${pinned_version} (installed newer v${current}) → downgrade required"
 | 
			
		||||
      CHECK_UPDATE_RELEASE="$pinned_version"
 | 
			
		||||
      return 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
  mapfile -t raw_tags < <(jq -r '.[] | select(.draft==false and .prerelease==false) | .tag_name' <<<"$releases_json")
 | 
			
		||||
  if ((${#raw_tags[@]} == 0)); then
 | 
			
		||||
    msg_error "No stable releases found for ${app}"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # No pinning → compare against latest
 | 
			
		||||
  if [[ -z "$current" || "$current" != "$latest" ]]; then
 | 
			
		||||
    CHECK_UPDATE_RELEASE="$latest"
 | 
			
		||||
    msg_info "New release available: v${latest} (current: v${current:-none})"
 | 
			
		||||
  local clean_tags=()
 | 
			
		||||
  for t in "${raw_tags[@]}"; do
 | 
			
		||||
    clean_tags+=("${t#v}")
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  local latest_raw="${raw_tags[0]}"
 | 
			
		||||
  local latest_clean="${clean_tags[0]}"
 | 
			
		||||
 | 
			
		||||
  # current installed (stored without v)
 | 
			
		||||
  local current=""
 | 
			
		||||
  if [[ -f "$current_file" ]]; then
 | 
			
		||||
    current="$(<"$current_file")"
 | 
			
		||||
  else
 | 
			
		||||
    # Migration: search for any /opt/*_version.txt
 | 
			
		||||
    local legacy_files
 | 
			
		||||
    mapfile -t legacy_files < <(find /opt -maxdepth 1 -type f -name "*_version.txt" 2>/dev/null)
 | 
			
		||||
    if ((${#legacy_files[@]} == 1)); then
 | 
			
		||||
      current="$(<"${legacy_files[0]}")"
 | 
			
		||||
      echo "${current#v}" >"$current_file"
 | 
			
		||||
      rm -f "${legacy_files[0]}"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  current="${current#v}"
 | 
			
		||||
 | 
			
		||||
  # Pinned version handling
 | 
			
		||||
  if [[ -n "$pinned_version_in" ]]; then
 | 
			
		||||
    local pin_clean="${pinned_version_in#v}"
 | 
			
		||||
    local match_raw=""
 | 
			
		||||
    for i in "${!clean_tags[@]}"; do
 | 
			
		||||
      if [[ "${clean_tags[$i]}" == "$pin_clean" ]]; then
 | 
			
		||||
        match_raw="${raw_tags[$i]}"
 | 
			
		||||
        break
 | 
			
		||||
      fi
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    if [[ -z "$match_raw" ]]; then
 | 
			
		||||
      msg_error "Pinned version ${pinned_version_in} not found upstream"
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ "$current" != "$pin_clean" ]]; then
 | 
			
		||||
      msg_info "${app} pinned to ${pinned_version_in} (installed ${current:-none}) → update required"
 | 
			
		||||
      CHECK_UPDATE_RELEASE="$match_raw"
 | 
			
		||||
      return 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ "$pin_clean" == "$latest_clean" ]]; then
 | 
			
		||||
      msg_ok "${app} pinned to ${pinned_version_in} (up to date)"
 | 
			
		||||
    else
 | 
			
		||||
      msg_ok "${app} pinned to ${pinned_version_in} (already installed, upstream ${latest_raw})"
 | 
			
		||||
    fi
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # No pinning → use latest
 | 
			
		||||
  if [[ -z "$current" || "$current" != "$latest_clean" ]]; then
 | 
			
		||||
    CHECK_UPDATE_RELEASE="$latest_raw"
 | 
			
		||||
    msg_info "New release available: ${latest_raw} (current: v${current:-none})"
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_ok "${app} is up to date (v${latest})"
 | 
			
		||||
  msg_ok "${app} is up to date (${latest_raw})"
 | 
			
		||||
  return 1
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										153
									
								
								vm/haos-vm.sh
									
									
									
									
									
								
							
							
						
						
									
										153
									
								
								vm/haos-vm.sh
									
									
									
									
									
								
							@@ -208,11 +208,11 @@ function exit-script() {
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  BRANCH="$stable"
 | 
			
		||||
  VMID=$(get_valid_nextid)
 | 
			
		||||
  FORMAT=",efitype=4m"
 | 
			
		||||
  MACHINE=""
 | 
			
		||||
  DISK_CACHE="cache=writethrough,"
 | 
			
		||||
  HN="haos$stable"
 | 
			
		||||
  CPU_TYPE=" -cpu host"
 | 
			
		||||
  MACHINE="q35"
 | 
			
		||||
  FORMAT=""
 | 
			
		||||
  DISK_SIZE="32G"
 | 
			
		||||
  HN="haos-${BRANCH}"
 | 
			
		||||
  CPU_TYPE=""
 | 
			
		||||
  CORE_COUNT="2"
 | 
			
		||||
  RAM_SIZE="4096"
 | 
			
		||||
  BRG="vmbr0"
 | 
			
		||||
@@ -222,9 +222,8 @@ function default_settings() {
 | 
			
		||||
  START_VM="yes"
 | 
			
		||||
  METHOD="default"
 | 
			
		||||
  echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
 | 
			
		||||
  echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
 | 
			
		||||
  echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}q35${CL}"
 | 
			
		||||
  echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
 | 
			
		||||
  echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
 | 
			
		||||
  echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
 | 
			
		||||
  echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
 | 
			
		||||
  echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
 | 
			
		||||
@@ -268,16 +267,16 @@ function advanced_settings() {
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
 | 
			
		||||
    "i440fx" "Machine i440fx" ON \
 | 
			
		||||
    "q35" "Machine q35" OFF \
 | 
			
		||||
  if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Machine Type" 10 58 2 \
 | 
			
		||||
    "q35" "Modern (PCIe, UEFI, default)" ON \
 | 
			
		||||
    "i440fx" "Legacy (older compatibility)" OFF \
 | 
			
		||||
    3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ $MACH = q35 ]; then
 | 
			
		||||
      echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
 | 
			
		||||
    if [ "$MACH" = "q35" ]; then
 | 
			
		||||
      echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}q35${CL}"
 | 
			
		||||
      FORMAT=""
 | 
			
		||||
      MACHINE=" -machine q35"
 | 
			
		||||
    else
 | 
			
		||||
      echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
 | 
			
		||||
      echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
 | 
			
		||||
      FORMAT=",efitype=4m"
 | 
			
		||||
      MACHINE=""
 | 
			
		||||
    fi
 | 
			
		||||
@@ -327,17 +326,20 @@ function advanced_settings() {
 | 
			
		||||
    exit-script
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
 | 
			
		||||
    "0" "KVM64" OFF \
 | 
			
		||||
    "1" "Host (Default)" ON \
 | 
			
		||||
  if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose CPU Model" --cancel-button Exit-Script 10 58 2 \
 | 
			
		||||
    "KVM64" "Default – safe for migration/compatibility" ON \
 | 
			
		||||
    "Host" "Use host CPU features (faster, no migration)" OFF \
 | 
			
		||||
    3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ $CPU_TYPE1 = "1" ]; then
 | 
			
		||||
    case "$CPU_TYPE1" in
 | 
			
		||||
    Host)
 | 
			
		||||
      echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
 | 
			
		||||
      CPU_TYPE=" -cpu host"
 | 
			
		||||
    else
 | 
			
		||||
      ;;
 | 
			
		||||
    *)
 | 
			
		||||
      echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
 | 
			
		||||
      CPU_TYPE=""
 | 
			
		||||
    fi
 | 
			
		||||
      ;;
 | 
			
		||||
    esac
 | 
			
		||||
  else
 | 
			
		||||
    exit-script
 | 
			
		||||
  fi
 | 
			
		||||
@@ -484,51 +486,70 @@ msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
 | 
			
		||||
var_version="${BRANCH}"
 | 
			
		||||
msg_info "Retrieving the URL for Home Assistant ${BRANCH} Disk Image"
 | 
			
		||||
if [ "$BRANCH" == "$dev" ]; then
 | 
			
		||||
  URL=https://os-artifacts.home-assistant.io/${BRANCH}/haos_ova-${BRANCH}.qcow2.xz
 | 
			
		||||
  URL="https://os-artifacts.home-assistant.io/${BRANCH}/haos_ova-${BRANCH}.qcow2.xz"
 | 
			
		||||
else
 | 
			
		||||
  URL=https://github.com/home-assistant/operating-system/releases/download/${BRANCH}/haos_ova-${BRANCH}.qcow2.xz
 | 
			
		||||
  URL="https://github.com/home-assistant/operating-system/releases/download/${BRANCH}/haos_ova-${BRANCH}.qcow2.xz"
 | 
			
		||||
fi
 | 
			
		||||
sleep 2
 | 
			
		||||
 | 
			
		||||
CACHE_DIR="/var/lib/vz/template/cache"
 | 
			
		||||
CACHE_FILE="$CACHE_DIR/$(basename "$URL")"
 | 
			
		||||
FILE_IMG="/var/lib/vz/template/tmp/${CACHE_FILE##*/%.xz}" # .qcow2
 | 
			
		||||
 | 
			
		||||
mkdir -p "$CACHE_DIR" "$(dirname "$FILE_IMG")"
 | 
			
		||||
msg_ok "${CL}${BL}${URL}${CL}"
 | 
			
		||||
curl -f#SL -o "$(basename "$URL")" "$URL"
 | 
			
		||||
echo -en "\e[1A\e[0K"
 | 
			
		||||
FILE=$(basename $URL)
 | 
			
		||||
msg_ok "Downloaded ${CL}${BL}haos_ova-${BRANCH}.qcow2.xz${CL}"
 | 
			
		||||
 | 
			
		||||
msg_info "Extracting KVM Disk Image"
 | 
			
		||||
unxz $FILE
 | 
			
		||||
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
 | 
			
		||||
case $STORAGE_TYPE in
 | 
			
		||||
nfs | dir)
 | 
			
		||||
  DISK_EXT=".raw"
 | 
			
		||||
  DISK_REF="$VMID/"
 | 
			
		||||
  DISK_IMPORT="-format raw"
 | 
			
		||||
  THIN=""
 | 
			
		||||
  ;;
 | 
			
		||||
btrfs | local-zfs)
 | 
			
		||||
  DISK_EXT=".raw"
 | 
			
		||||
  DISK_REF="$VMID/"
 | 
			
		||||
  DISK_IMPORT="-format raw"
 | 
			
		||||
  FORMAT=",efitype=4m"
 | 
			
		||||
  THIN=""
 | 
			
		||||
  ;;
 | 
			
		||||
esac
 | 
			
		||||
for i in {0,1}; do
 | 
			
		||||
  disk="DISK$i"
 | 
			
		||||
  eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
 | 
			
		||||
  eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
 | 
			
		||||
done
 | 
			
		||||
msg_ok "Extracted KVM Disk Image"
 | 
			
		||||
if [[ ! -s "$CACHE_FILE" ]]; then
 | 
			
		||||
  curl -f#SL -o "$CACHE_FILE" "$URL"
 | 
			
		||||
  msg_ok "Downloaded ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
 | 
			
		||||
else
 | 
			
		||||
  msg_ok "Using cached image ${CL}${BL}$(basename "$CACHE_FILE")${CL}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Homeassistant OS VM"
 | 
			
		||||
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
 | 
			
		||||
  -name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
 | 
			
		||||
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
 | 
			
		||||
qm importdisk $VMID ${FILE%.*} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
 | 
			
		||||
qm set $VMID \
 | 
			
		||||
  -efidisk0 ${DISK0_REF}${FORMAT} \
 | 
			
		||||
  -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=32G \
 | 
			
		||||
  -boot order=scsi0 >/dev/null
 | 
			
		||||
if ! command -v pv &>/dev/null; then
 | 
			
		||||
  apt-get update -qq &>/dev/null && apt-get install -y pv &>/dev/null
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
set -o pipefail
 | 
			
		||||
msg_info "Creating Home Assistant OS VM shell"
 | 
			
		||||
qm create "$VMID" -machine q35 -bios ovmf -agent 1 -tablet 0 -localtime 1 ${CPU_TYPE} \
 | 
			
		||||
  -cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" -tags community-script \
 | 
			
		||||
  -net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null
 | 
			
		||||
msg_ok "Created VM shell"
 | 
			
		||||
 | 
			
		||||
msg_info "Decompressing $(basename "$CACHE_FILE") to $FILE_IMG"
 | 
			
		||||
xz -dc "$CACHE_FILE" | pv -N "Extracting" >"$FILE_IMG"
 | 
			
		||||
msg_ok "Decompressed to $FILE_IMG"
 | 
			
		||||
 | 
			
		||||
msg_info "Importing disk into storage ($STORAGE)"
 | 
			
		||||
if qm disk import --help >/dev/null 2>&1; then
 | 
			
		||||
  IMPORT_CMD=(qm disk import)
 | 
			
		||||
else
 | 
			
		||||
  IMPORT_CMD=(qm importdisk)
 | 
			
		||||
fi
 | 
			
		||||
IMPORT_OUT="$("${IMPORT_CMD[@]}" "$VMID" "$FILE_IMG" "$STORAGE" --format raw 2>&1 || true)"
 | 
			
		||||
DISK_REF="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*successfully imported disk '\([^']\+\)'.*/\1/p" | tr -d "\r\"'")"
 | 
			
		||||
[[ -z "$DISK_REF" ]] && DISK_REF="$(pvesm list "$STORAGE" | awk -v id="$VMID" '$5 ~ ("vm-"id"-disk-") {print $1":"$5}' | sort | tail -n1)"
 | 
			
		||||
[[ -z "$DISK_REF" ]] && {
 | 
			
		||||
  msg_error "Unable to determine imported disk reference."
 | 
			
		||||
  echo "$IMPORT_OUT"
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
msg_ok "Imported disk (${CL}${BL}${DISK_REF}${CL})"
 | 
			
		||||
 | 
			
		||||
rm -f "$FILE_IMG"
 | 
			
		||||
 | 
			
		||||
msg_info "Attaching EFI and root disk"
 | 
			
		||||
qm set "$VMID" \
 | 
			
		||||
  --efidisk0 "${STORAGE}:0,efitype=4m" \
 | 
			
		||||
  --scsi0 "${DISK_REF},ssd=1,discard=on" \
 | 
			
		||||
  --boot order=scsi0 \
 | 
			
		||||
  --serial0 socket >/dev/null
 | 
			
		||||
qm set "$VMID" --agent enabled=1 >/dev/null
 | 
			
		||||
msg_ok "Attached EFI and root disk"
 | 
			
		||||
 | 
			
		||||
msg_info "Resizing disk to $DISK_SIZE"
 | 
			
		||||
qm resize "$VMID" scsi0 "${DISK_SIZE}" >/dev/null
 | 
			
		||||
msg_ok "Resized disk"
 | 
			
		||||
 | 
			
		||||
DESCRIPTION=$(
 | 
			
		||||
  cat <<EOF
 | 
			
		||||
@@ -560,17 +581,17 @@ DESCRIPTION=$(
 | 
			
		||||
</div>
 | 
			
		||||
EOF
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
qm set "$VMID" -description "$DESCRIPTION" >/dev/null
 | 
			
		||||
if [ -n "$DISK_SIZE" ]; then
 | 
			
		||||
  msg_info "Resizing disk to $DISK_SIZE GB"
 | 
			
		||||
  qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null
 | 
			
		||||
msg_ok "Created Homeassistant OS VM ${CL}${BL}(${HN})"
 | 
			
		||||
 | 
			
		||||
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Image Cache" \
 | 
			
		||||
  --yesno "Keep downloaded Home Assistant OS image for future VMs?\n\nFile: $CACHE_FILE" 10 70; then
 | 
			
		||||
  msg_ok "Keeping cached image"
 | 
			
		||||
else
 | 
			
		||||
  msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB"
 | 
			
		||||
  qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null
 | 
			
		||||
  rm -f "$CACHE_FILE"
 | 
			
		||||
  msg_ok "Deleted cached image"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_ok "Created Homeassistant OS VM ${CL}${BL}(${HN})"
 | 
			
		||||
if [ "$START_VM" == "yes" ]; then
 | 
			
		||||
  msg_info "Starting Home Assistant OS VM"
 | 
			
		||||
  qm start $VMID
 | 
			
		||||
 
 | 
			
		||||
@@ -203,10 +203,9 @@ function exit-script() {
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  VMID=$(get_valid_nextid)
 | 
			
		||||
  FORMAT=",efitype=4m"
 | 
			
		||||
  MACHINE=""
 | 
			
		||||
  MACHINE="q35"
 | 
			
		||||
  FORMAT=""
 | 
			
		||||
  DISK_SIZE="32G"
 | 
			
		||||
  DISK_CACHE=""
 | 
			
		||||
  HN="umbrelos"
 | 
			
		||||
  CPU_TYPE=""
 | 
			
		||||
  CORE_COUNT="2"
 | 
			
		||||
@@ -218,9 +217,8 @@ function default_settings() {
 | 
			
		||||
  START_VM="yes"
 | 
			
		||||
  METHOD="default"
 | 
			
		||||
  echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
 | 
			
		||||
  echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
 | 
			
		||||
  echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}q35${CL}"
 | 
			
		||||
  echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
 | 
			
		||||
  echo -e "${DISKSIZE}${BOLD}${DGN}Disk Cache: ${BGN}None${CL}"
 | 
			
		||||
  echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
 | 
			
		||||
  echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
 | 
			
		||||
  echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
 | 
			
		||||
@@ -253,16 +251,16 @@ function advanced_settings() {
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Type" 10 58 2 \
 | 
			
		||||
    "i440fx" "Machine i440fx" ON \
 | 
			
		||||
    "q35" "Machine q35" OFF \
 | 
			
		||||
  if MACH=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "MACHINE TYPE" --radiolist --cancel-button Exit-Script "Choose Machine Type" 10 58 2 \
 | 
			
		||||
    "q35" "Modern (PCIe, UEFI, default)" ON \
 | 
			
		||||
    "i440fx" "Legacy (older compatibility)" OFF \
 | 
			
		||||
    3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ $MACH = q35 ]; then
 | 
			
		||||
      echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
 | 
			
		||||
    if [ "$MACH" = "q35" ]; then
 | 
			
		||||
      echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}q35${CL}"
 | 
			
		||||
      FORMAT=""
 | 
			
		||||
      MACHINE=" -machine q35"
 | 
			
		||||
    else
 | 
			
		||||
      echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}$MACH${CL}"
 | 
			
		||||
      echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
 | 
			
		||||
      FORMAT=",efitype=4m"
 | 
			
		||||
      MACHINE=""
 | 
			
		||||
    fi
 | 
			
		||||
@@ -312,17 +310,20 @@ function advanced_settings() {
 | 
			
		||||
    exit-script
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose" --cancel-button Exit-Script 10 58 2 \
 | 
			
		||||
    "0" "KVM64 (Default)" ON \
 | 
			
		||||
    "1" "Host" OFF \
 | 
			
		||||
  if CPU_TYPE1=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CPU MODEL" --radiolist "Choose CPU Model" --cancel-button Exit-Script 10 58 2 \
 | 
			
		||||
    "KVM64" "Default – safe for migration/compatibility" ON \
 | 
			
		||||
    "Host" "Use host CPU features (faster, no migration)" OFF \
 | 
			
		||||
    3>&1 1>&2 2>&3); then
 | 
			
		||||
    if [ $CPU_TYPE1 = "1" ]; then
 | 
			
		||||
    case "$CPU_TYPE1" in
 | 
			
		||||
    "Host")
 | 
			
		||||
      echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}Host${CL}"
 | 
			
		||||
      CPU_TYPE=" -cpu host"
 | 
			
		||||
    else
 | 
			
		||||
      ;;
 | 
			
		||||
    *)
 | 
			
		||||
      echo -e "${OS}${BOLD}${DGN}CPU Model: ${BGN}KVM64${CL}"
 | 
			
		||||
      CPU_TYPE=""
 | 
			
		||||
    fi
 | 
			
		||||
      ;;
 | 
			
		||||
    esac
 | 
			
		||||
  else
 | 
			
		||||
    exit-script
 | 
			
		||||
  fi
 | 
			
		||||
@@ -433,86 +434,71 @@ pve_check
 | 
			
		||||
ssh_check
 | 
			
		||||
start_script
 | 
			
		||||
 | 
			
		||||
post_to_api_vm
 | 
			
		||||
msg_info "Validating Storage"
 | 
			
		||||
while read -r line; do
 | 
			
		||||
  TAG=$(echo $line | awk '{print $1}')
 | 
			
		||||
  TYPE=$(echo $line | awk '{printf "%-10s", $2}')
 | 
			
		||||
  FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
 | 
			
		||||
  ITEM="  Type: $TYPE Free: $FREE "
 | 
			
		||||
  OFFSET=2
 | 
			
		||||
  if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
 | 
			
		||||
    MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
 | 
			
		||||
  fi
 | 
			
		||||
  STORAGE_MENU+=("$TAG" "$ITEM" "OFF")
 | 
			
		||||
done < <(pvesm status -content images | awk 'NR>1')
 | 
			
		||||
VALID=$(pvesm status -content images | awk 'NR>1')
 | 
			
		||||
if [ -z "$VALID" ]; then
 | 
			
		||||
STORAGE_MENU=()
 | 
			
		||||
while read -r tag type free; do
 | 
			
		||||
  ITEM="Type: $type Free: $free"
 | 
			
		||||
  STORAGE_MENU+=("$tag" "$ITEM" "OFF")
 | 
			
		||||
done < <(pvesm status -content images | awk 'NR>1 {printf "%s %s %s\n", $1, $2, $6}')
 | 
			
		||||
 | 
			
		||||
if [ ${#STORAGE_MENU[@]} -eq 0 ]; then
 | 
			
		||||
  msg_error "Unable to detect a valid storage location."
 | 
			
		||||
  exit
 | 
			
		||||
  exit 1
 | 
			
		||||
elif [ $((${#STORAGE_MENU[@]} / 3)) -eq 1 ]; then
 | 
			
		||||
  STORAGE=${STORAGE_MENU[0]}
 | 
			
		||||
else
 | 
			
		||||
  while [ -z "${STORAGE:+x}" ]; do
 | 
			
		||||
    STORAGE=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Storage Pools" --radiolist \
 | 
			
		||||
      "Which storage pool would you like to use for ${HN}?\nTo make a selection, use the Spacebar.\n" \
 | 
			
		||||
      16 $(($MSG_MAX_LENGTH + 23)) 6 \
 | 
			
		||||
      16 70 6 \
 | 
			
		||||
      "${STORAGE_MENU[@]}" 3>&1 1>&2 2>&3)
 | 
			
		||||
  done
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
 | 
			
		||||
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
 | 
			
		||||
msg_info "Retrieving the URL for $APP"
 | 
			
		||||
URL="https://download.umbrel.com/release/latest/umbrelos-amd64.img.xz"
 | 
			
		||||
FILE="$(basename "$URL")"
 | 
			
		||||
sleep 2
 | 
			
		||||
msg_ok "${CL}${BL}${URL}${CL}"
 | 
			
		||||
curl -f#SL -o "$FILE" "$URL"
 | 
			
		||||
msg_ok "Downloaded ${CL}${BL}${FILE}${CL}"
 | 
			
		||||
 | 
			
		||||
if ! command -v pv &>/dev/null; then
 | 
			
		||||
  apt-get update &>/dev/null && apt-get install -y pv &>/dev/null
 | 
			
		||||
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
 | 
			
		||||
 | 
			
		||||
URL="https://download.umbrel.com/release/latest/umbrelos-amd64.img.xz"
 | 
			
		||||
CACHE_DIR="/var/lib/vz/template/cache"
 | 
			
		||||
CACHE_FILE="$CACHE_DIR/$(basename "$URL")"
 | 
			
		||||
FILE_IMG="/var/lib/vz/template/tmp/${CACHE_FILE##*/%.xz}"
 | 
			
		||||
 | 
			
		||||
mkdir -p "$CACHE_DIR" "$(dirname "$FILE_IMG")"
 | 
			
		||||
 | 
			
		||||
if [[ ! -s "$CACHE_FILE" ]]; then
 | 
			
		||||
  msg_ok "Downloading Umbrel OS image"
 | 
			
		||||
  curl -f#SL -o "$CACHE_FILE" "$URL"
 | 
			
		||||
else
 | 
			
		||||
  msg_ok "Using cached Umbrel OS image"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Decompressing $FILE with progress${CL}\n"
 | 
			
		||||
FILE_IMG="${FILE%.xz}"
 | 
			
		||||
SIZE=$(xz --robot -l "$FILE" | awk -F '\t' '/^totals/ { print $5 }') &>/dev/null
 | 
			
		||||
xz -dc "$FILE" | pv -s "$SIZE" -N "Extracting" >"$FILE_IMG"
 | 
			
		||||
msg_ok "Decompressed to ${CL}${BL}${FILE%.xz}${CL}"
 | 
			
		||||
if ! command -v pv &>/dev/null; then
 | 
			
		||||
  apt-get update -qq &>/dev/null && apt-get install -y pv &>/dev/null
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
 | 
			
		||||
case $STORAGE_TYPE in
 | 
			
		||||
nfs | dir)
 | 
			
		||||
  DISK_EXT=".raw"
 | 
			
		||||
  DISK_REF="$VMID/"
 | 
			
		||||
  DISK_IMPORT="-format raw"
 | 
			
		||||
  THIN=""
 | 
			
		||||
  ;;
 | 
			
		||||
btrfs)
 | 
			
		||||
  DISK_EXT=".raw"
 | 
			
		||||
  DISK_REF="$VMID/"
 | 
			
		||||
  DISK_IMPORT="-format raw"
 | 
			
		||||
  FORMAT=",efitype=4m"
 | 
			
		||||
  THIN=""
 | 
			
		||||
  ;;
 | 
			
		||||
esac
 | 
			
		||||
for i in {0,1,2}; do
 | 
			
		||||
  disk="DISK$i"
 | 
			
		||||
  eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
 | 
			
		||||
  eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
 | 
			
		||||
done
 | 
			
		||||
set -o pipefail
 | 
			
		||||
qm create "$VMID" -machine q35 -bios ovmf -agent 1 -tablet 0 -localtime 1 ${CPU_TYPE} \
 | 
			
		||||
  -cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" -tags community-script \
 | 
			
		||||
  -net0 "virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU" -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null
 | 
			
		||||
 | 
			
		||||
msg_info "Creating a Umbrel OS VM"
 | 
			
		||||
qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE} -cores $CORE_COUNT -memory $RAM_SIZE \
 | 
			
		||||
  -name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci >/dev/null
 | 
			
		||||
pvesm alloc $STORAGE $VMID $DISK0 4M >/dev/null
 | 
			
		||||
qm importdisk $VMID ${FILE_IMG} $STORAGE ${DISK_IMPORT:-} >/dev/null
 | 
			
		||||
qm set $VMID \
 | 
			
		||||
  -efidisk0 ${DISK0_REF}${FORMAT} \
 | 
			
		||||
  -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=${DISK_SIZE} \
 | 
			
		||||
  -boot order=scsi0 \
 | 
			
		||||
  -serial0 socket >/dev/null
 | 
			
		||||
qm set $VMID --agent enabled=1 >/dev/null
 | 
			
		||||
xz -dc "$CACHE_FILE" | pv -N "Extracting" >"$FILE_IMG"
 | 
			
		||||
 | 
			
		||||
if qm disk import --help >/dev/null 2>&1; then
 | 
			
		||||
  IMPORT_CMD=(qm disk import)
 | 
			
		||||
else
 | 
			
		||||
  IMPORT_CMD=(qm importdisk)
 | 
			
		||||
fi
 | 
			
		||||
IMPORT_OUT="$("${IMPORT_CMD[@]}" "$VMID" "$FILE_IMG" "$STORAGE" --format raw 2>&1 || true)"
 | 
			
		||||
DISK_REF="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*imported disk '\([^']\+\)'.*/\1/p" | tr -d "\r\"'")"
 | 
			
		||||
[[ -z "$DISK_REF" ]] && DISK_REF="$(pvesm list "$STORAGE" | awk -v id="$VMID" '$5 ~ ("vm-"id"-disk-") {print $1":"$5}' | sort | tail -n1)"
 | 
			
		||||
 | 
			
		||||
qm set "$VMID" \
 | 
			
		||||
  --efidisk0 "${STORAGE}:0,efitype=4m" \
 | 
			
		||||
  --scsi0 "${DISK_REF},ssd=1,discard=on" \
 | 
			
		||||
  --boot order=scsi0 \
 | 
			
		||||
  --serial0 socket >/dev/null
 | 
			
		||||
qm set "$VMID" --agent enabled=1 >/dev/null
 | 
			
		||||
qm resize "$VMID" scsi0 "${DISK_SIZE}" >/dev/null
 | 
			
		||||
 | 
			
		||||
DESCRIPTION=$(
 | 
			
		||||
  cat <<EOF
 | 
			
		||||
@@ -546,13 +532,14 @@ EOF
 | 
			
		||||
)
 | 
			
		||||
qm set "$VMID" -description "$DESCRIPTION" >/dev/null
 | 
			
		||||
 | 
			
		||||
if [ -n "$DISK_SIZE" ]; then
 | 
			
		||||
  msg_info "Resizing disk to $DISK_SIZE GB"
 | 
			
		||||
  qm resize $VMID scsi0 ${DISK_SIZE} >/dev/null
 | 
			
		||||
if whiptail --backtitle "Proxmox VE Helper Scripts" --title "Image Cache" \
 | 
			
		||||
  --yesno "Keep downloaded Umbrel OS image for future VMs?\n\nFile: $CACHE_FILE" 10 70; then
 | 
			
		||||
  msg_ok "Keeping cached image"
 | 
			
		||||
else
 | 
			
		||||
  msg_info "Using default disk size of $DEFAULT_DISK_SIZE GB"
 | 
			
		||||
  qm resize $VMID scsi0 ${DEFAULT_DISK_SIZE} >/dev/null
 | 
			
		||||
  rm -f "$CACHE_FILE"
 | 
			
		||||
  msg_ok "Deleted cached image"
 | 
			
		||||
fi
 | 
			
		||||
rm -f "$FILE_IMG"
 | 
			
		||||
 | 
			
		||||
msg_ok "Created a Umbrel OS VM ${CL}${BL}(${HN})"
 | 
			
		||||
if [ "$START_VM" == "yes" ]; then
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user