Compare commits

...

19 Commits

Author SHA1 Message Date
community-scripts-pr-app[bot]
57ae4a48a7 Update CHANGELOG.md (#7342)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-02 00:12:51 +00:00
community-scripts-pr-app[bot]
06e8460851 Update versions.json (#7341)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-02 02:12:31 +02:00
community-scripts-pr-app[bot]
9713c95bf4 Update CHANGELOG.md (#7340)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-01 17:58:39 +00:00
dependabot[bot]
705748bba5 Bump next from 15.2.4 to 15.5.2 in /frontend (#7309)
Bumps [next](https://github.com/vercel/next.js) from 15.2.4 to 15.5.2.
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v15.2.4...v15.5.2)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 15.5.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-01 19:58:17 +02:00
community-scripts-pr-app[bot]
022f079821 Update CHANGELOG.md (#7338)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-01 13:02:32 +00:00
CanbiZ
80d75731a8 Refactor + Feature Bump: HomeAssistant OS (#7336) 2025-09-01 15:02:10 +02:00
community-scripts-pr-app[bot]
227721a72f Update CHANGELOG.md (#7337)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-01 13:00:47 +00:00
CanbiZ
5572a7a0ab UmbrelOS: Refactor / use q35 / better import (#7329)
* UmbrelOS: Improve VM Import Process

* q35 Feature-Bump

* Update umbrel-os-vm.sh

* Update umbrel-os-vm.sh

* Update umbrel-os-vm.sh

* temp folder for big file

* Update umbrel-os-vm.sh

* update MACH (adv. Settings)

* Update umbrel-os-vm.sh

* Formatting

* Update umbrel-os-vm.sh

* Refactor

* Update umbrel-os-vm.sh

* Update umbrel-os-vm.sh
2025-09-01 15:00:23 +02:00
community-scripts-pr-app[bot]
6a69185a2d Update versions.json (#7334)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-01 14:06:31 +02:00
community-scripts-pr-app[bot]
77441b6189 Update CHANGELOG.md (#7333)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-01 10:42:23 +00:00
CanbiZ
4aa337c2f2 booklore: add note for start-up in frontend (#7331) 2025-09-01 12:42:06 +02:00
finkerle
4bd2f6866a Update configarr.sh (#7323) 2025-09-01 12:41:45 +02:00
community-scripts-pr-app[bot]
377de80103 Update CHANGELOG.md (#7330)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-01 07:38:44 +00:00
CanbiZ
1c62d4614e Harmonize GitHub Release Check (#7328) 2025-09-01 09:38:20 +02:00
community-scripts-pr-app[bot]
a91f7410a4 Update CHANGELOG.md (#7327)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-01 00:14:57 +00:00
community-scripts-pr-app[bot]
528c0a8de5 Update versions.json (#7326)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-09-01 02:14:38 +02:00
community-scripts-pr-app[bot]
988bd3ef19 Update CHANGELOG.md (#7322)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-31 14:52:16 +00:00
Slaviša Arežina
99d9664ae4 Increase disk size (#7320) 2025-08-31 16:51:56 +02:00
community-scripts-pr-app[bot]
09649eb5b1 Update versions.json (#7317)
Co-authored-by: GitHub Actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-08-31 14:04:56 +02:00
11 changed files with 966 additions and 487 deletions

View File

@@ -10,8 +10,38 @@
> [!CAUTION]
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
## 2025-09-02
## 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
- #### 🐞 Bug Fixes
- n8n: Increase disk size [@tremor021](https://github.com/tremor021) ([#7320](https://github.com/community-scripts/ProxmoxVE/pull/7320))
## 2025-08-30
### 🚀 Updated Scripts

View File

@@ -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

View File

@@ -9,7 +9,7 @@ APP="n8n"
var_tags="${var_tags:-automation}"
var_cpu="${var_cpu:-2}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-6}"
var_disk="${var_disk:-10}"
var_os="${var_os:-debian}"
var_version="${var_version:-12}"
var_unprivileged="${var_unprivileged:-1}"

View File

@@ -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
View File

@@ -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",

View File

@@ -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"
}
]
}

View File

@@ -21,7 +21,7 @@
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 6,
"hdd": 10,
"os": "debian",
"version": "12"
}

View File

@@ -1,19 +1,199 @@
[
{
"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": "syncthing/syncthing",
"version": "v2.0.3",
"date": "2025-08-22T08:12:47Z"
},
{
"name": "runtipi/runtipi",
"version": "nightly",
"date": "2025-09-01T19:23:40Z"
},
{
"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": "firefly-iii/firefly-iii",
"version": "v6.3.2",
"date": "2025-08-19T04:08:36Z"
},
{
"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": "n8n-io/n8n",
"version": "n8n@1.108.2",
"date": "2025-08-27T13:05:35Z"
},
{
"name": "grafana/grafana",
"version": "rrc_steady_12.2.0-17245430286.patch1",
"date": "2025-09-01T14:19:14Z"
},
{
"name": "apache/tomcat",
"version": "9.0.109",
"date": "2025-09-01T12:36:02Z"
},
{
"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": "home-assistant/core",
"version": "2025.8.3",
"date": "2025-08-21T18:23:10Z"
},
{
"name": "crowdsecurity/crowdsec",
"version": "v1.6.11",
"date": "2025-07-22T12:11:38Z"
},
{
"name": "Checkmk/checkmk",
"version": "v2.4.0p11-rc1",
"date": "2025-09-01T07:55:46Z"
},
{
"name": "readeck/readeck",
"version": "0.20.1",
"date": "2025-09-01T07:35:48Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2390",
"date": "2025-09-01T05:57:06Z"
},
{
"name": "moghtech/komodo",
"version": "v1.19.2",
"date": "2025-09-01T02:33:52Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "jeedom/core",
"version": "4.4.19",
"date": "2025-09-01T00:27:07Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.5.2",
"date": "2025-08-31T22:21:50Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.17.1",
"date": "2025-08-31T21:38:21Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.12.1",
"date": "2025-08-31T21:33:41Z"
},
{
"name": "wizarrrr/wizarr",
"version": "2025.8.5",
"date": "2025-08-31T17:56:37Z"
},
{
"name": "karakeep-app/karakeep",
"version": "ios/v1.8.0-1",
"date": "2025-08-31T16:06:00Z"
},
{
"name": "LibreTranslate/LibreTranslate",
"version": "v1.7.3",
"date": "2025-08-31T15:59:43Z"
},
{
"name": "Part-DB/Part-DB-server",
"version": "v2.0.1",
"date": "2025-08-30T23:49:53Z"
"version": "v2.0.2",
"date": "2025-08-31T13:52:49Z"
},
{
"name": "forgejo/forgejo",
"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": "keycloak/keycloak",
"version": "26.0.15",
"date": "2025-08-27T12:12:03Z"
},
{
"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": "jhuckaby/Cronicle",
"version": "v0.9.91",
"date": "2025-08-30T21:49:57Z"
},
{
"name": "YunoHost/yunohost",
"version": "debian/12.1.16",
"date": "2025-08-30T20:09:13Z"
},
{
"name": "immich-app/immich",
"version": "v1.140.1",
@@ -24,46 +204,11 @@
"version": "v5.14.0",
"date": "2025-08-30T18:41:03Z"
},
{
"name": "fuma-nama/fumadocs",
"version": "fumadocs-mdx@11.8.2",
"date": "2025-08-30T13:36:36Z"
},
{
"name": "rcourtman/Pulse",
"version": "v4.10.2",
"date": "2025-08-30T12:44:11Z"
},
{
"name": "bunkerity/bunkerweb",
"version": "v1.6.4",
"date": "2025-08-18T20:22:07Z"
},
{
"name": "readeck/readeck",
"version": "0.20.0",
"date": "2025-08-30T08:26:43Z"
},
{
"name": "Jackett/Jackett",
"version": "v0.22.2374",
"date": "2025-08-30T05:55:07Z"
},
{
"name": "jeedom/core",
"version": "4.4.19",
"date": "2025-08-30T00:27:11Z"
},
{
"name": "steveiliop56/tinyauth",
"version": "v3.6.2",
"date": "2025-07-17T12:08:03Z"
},
{
"name": "booklore-app/booklore",
"version": "v1.0.0",
"date": "2025-08-29T21:59:46Z"
},
{
"name": "henrygd/beszel",
"version": "v0.12.6",
@@ -85,25 +230,15 @@
"date": "2025-08-29T19:14:25Z"
},
{
"name": "home-assistant/core",
"version": "2025.8.3",
"date": "2025-08-21T18:23:10Z"
"name": "emqx/emqx",
"version": "e6.0.0-alpha.1",
"date": "2025-08-29T13:59:45Z"
},
{
"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",
@@ -124,11 +259,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",
@@ -164,11 +294,6 @@
"version": "0.50.11",
"date": "2025-08-28T20:12:30Z"
},
{
"name": "Lidarr/Lidarr",
"version": "v2.13.3.4711",
"date": "2025-08-28T20:06:24Z"
},
{
"name": "ollama/ollama",
"version": "v0.11.8",
@@ -184,11 +309,6 @@
"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",
@@ -204,21 +324,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",
@@ -234,11 +344,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",
@@ -314,11 +419,6 @@
"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",
@@ -354,21 +454,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",
@@ -379,11 +469,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",
@@ -394,26 +479,11 @@
"version": "8.2.10",
"date": "2025-08-25T01:26:55Z"
},
{
"name": "crafty-controller/crafty-4",
"version": "v4.5.1",
"date": "2025-08-24T23:58:52Z"
},
{
"name": "Ombi-app/Ombi",
"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": "nightly",
"date": "2025-08-24T18:27:58Z"
},
{
"name": "wavelog/wavelog",
"version": "2.1",
@@ -479,11 +549,6 @@
"version": "version/2025.8.1",
"date": "2025-08-22T14:55:30Z"
},
{
"name": "syncthing/syncthing",
"version": "v2.0.3",
"date": "2025-08-22T08:12:47Z"
},
{
"name": "mattermost/mattermost",
"version": "v10.11.2",
@@ -569,11 +634,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",
@@ -599,11 +659,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",
@@ -614,11 +669,6 @@
"version": "v0.6.2",
"date": "2025-08-17T22:07:10Z"
},
{
"name": "wizarrrr/wizarr",
"version": "2025.8.3",
"date": "2025-08-14T22:05:27Z"
},
{
"name": "deluge-torrent/deluge",
"version": "deluge-2.2.1.dev0",
@@ -659,11 +709,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",
@@ -724,21 +769,11 @@
"version": "v4.2.3",
"date": "2025-08-10T05:53:43Z"
},
{
"name": "outline/outline",
"version": "v0.86.1",
"date": "2025-08-09T22:05:10Z"
},
{
"name": "Stirling-Tools/Stirling-PDF",
"version": "v1.2.0",
"date": "2025-08-09T14:30:52Z"
},
{
"name": "authelia/authelia",
"version": "v4.39.6",
"date": "2025-08-09T08:11:44Z"
},
{
"name": "kimai/kimai",
"version": "2.38.0",
@@ -804,26 +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": "karakeep-app/karakeep",
"version": "mcp/v0.26.0",
"date": "2025-08-03T16:21:47Z"
},
{
"name": "linuxserver/Heimdall",
"version": "v2.7.4",
@@ -849,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",
@@ -919,11 +934,6 @@
"version": "2.9.0",
"date": "2025-07-25T14:20:25Z"
},
{
"name": "forgejo/forgejo",
"version": "v12.0.1",
"date": "2025-07-25T11:54:30Z"
},
{
"name": "minio/minio",
"version": "RELEASE.2025-07-23T15-54-02Z",
@@ -984,11 +994,6 @@
"version": "v2.0.22",
"date": "2025-07-11T21:34:20Z"
},
{
"name": "LibreTranslate/LibreTranslate",
"version": "v1.7.2",
"date": "2025-07-10T19:29:26Z"
},
{
"name": "NginxProxyManager/nginx-proxy-manager",
"version": "v2.12.6",
@@ -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",

View File

@@ -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
}

View File

@@ -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

View File

@@ -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