mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			88 Commits
		
	
	
		
			2025-09-20
			...
			2025-09-24
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					7fd08cbe69 | ||
| 
						 | 
					285447b67f | ||
| 
						 | 
					b394cdf6e0 | ||
| 
						 | 
					ab2a6ed38e | ||
| 
						 | 
					f8e109c529 | ||
| 
						 | 
					46e4bc3a04 | ||
| 
						 | 
					d0a1f305c7 | ||
| 
						 | 
					6948e1f695 | ||
| 
						 | 
					8c860da4ed | ||
| 
						 | 
					d32e9fad59 | ||
| 
						 | 
					9096a388c7 | ||
| 
						 | 
					9f0efc27df | ||
| 
						 | 
					06ca6e2087 | ||
| 
						 | 
					8c48ea6718 | ||
| 
						 | 
					b626e705eb | ||
| 
						 | 
					f103d09c09 | ||
| 
						 | 
					82a7d252ab | ||
| 
						 | 
					48af77e928 | ||
| 
						 | 
					d24308a409 | ||
| 
						 | 
					584365fff1 | ||
| 
						 | 
					95c54dccd7 | ||
| 
						 | 
					eb28463d86 | ||
| 
						 | 
					bddde99252 | ||
| 
						 | 
					f1f8c1b279 | ||
| 
						 | 
					37a0a4add9 | ||
| 
						 | 
					02cede3f5d | ||
| 
						 | 
					42a7d57a42 | ||
| 
						 | 
					53b5f0d1fe | ||
| 
						 | 
					4a56d8d9aa | ||
| 
						 | 
					f819188a5e | ||
| 
						 | 
					4d6e3e5977 | ||
| 
						 | 
					d6fc527200 | ||
| 
						 | 
					c103c3b03d | ||
| 
						 | 
					2d290cb27f | ||
| 
						 | 
					883efd1cd2 | ||
| 
						 | 
					1f40670ea0 | ||
| 
						 | 
					cec4e2d5c1 | ||
| 
						 | 
					1fafb3f661 | ||
| 
						 | 
					b56b053e8b | ||
| 
						 | 
					21f98835dc | ||
| 
						 | 
					ab455d7748 | ||
| 
						 | 
					5382fa1dbd | ||
| 
						 | 
					6fa1938360 | ||
| 
						 | 
					2a2df5b5cc | ||
| 
						 | 
					f99d582eb5 | ||
| 
						 | 
					d3f24ae5b2 | ||
| 
						 | 
					25e89f7bac | ||
| 
						 | 
					2686753448 | ||
| 
						 | 
					19678e2534 | ||
| 
						 | 
					1ac8f90281 | ||
| 
						 | 
					7cd3e40f9c | ||
| 
						 | 
					42191bdb5a | ||
| 
						 | 
					aab1a9bce5 | ||
| 
						 | 
					208226065b | ||
| 
						 | 
					54e62749be | ||
| 
						 | 
					2a8e2e62cd | ||
| 
						 | 
					b15d7be4c3 | ||
| 
						 | 
					e208bc110b | ||
| 
						 | 
					b26ad61a33 | ||
| 
						 | 
					5beaec9514 | ||
| 
						 | 
					3a668870b7 | ||
| 
						 | 
					3266962630 | ||
| 
						 | 
					2a3f5d7b47 | ||
| 
						 | 
					fb4c3cf9e9 | ||
| 
						 | 
					e96ea4eb40 | ||
| 
						 | 
					dfbe5f03ce | ||
| 
						 | 
					9c53c70f6b | ||
| 
						 | 
					a3c7f468ef | ||
| 
						 | 
					605f7a0330 | ||
| 
						 | 
					306627378e | ||
| 
						 | 
					0e464cb192 | ||
| 
						 | 
					277f6ce7d1 | ||
| 
						 | 
					a6d6f79943 | ||
| 
						 | 
					a7ced850ab | ||
| 
						 | 
					eadca5f81f | ||
| 
						 | 
					5ab375fd89 | ||
| 
						 | 
					2dc95b6b22 | ||
| 
						 | 
					57dd3d5a44 | ||
| 
						 | 
					25ddf48190 | ||
| 
						 | 
					01b6bec1fe | ||
| 
						 | 
					d1ff8201b1 | ||
| 
						 | 
					c5c5ba1ede | ||
| 
						 | 
					e3aabd81a3 | ||
| 
						 | 
					4713941415 | ||
| 
						 | 
					adda76f587 | ||
| 
						 | 
					cf597b6a26 | ||
| 
						 | 
					20e8730a34 | ||
| 
						 | 
					9ce9de8e84 | 
							
								
								
									
										38
									
								
								.github/label-priority.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										38
									
								
								.github/label-priority.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,38 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "priorities": {
 | 
			
		||||
    "refactor": 3,
 | 
			
		||||
    "feature": 2,
 | 
			
		||||
    "bugfix": 1,
 | 
			
		||||
    "new script": 3,
 | 
			
		||||
    "update script": 2,
 | 
			
		||||
    "delete script": 2,
 | 
			
		||||
    "json": 3,
 | 
			
		||||
    "website": 2,
 | 
			
		||||
    "maintenance": 1,
 | 
			
		||||
    "documentation": 1,
 | 
			
		||||
    "core": 2,
 | 
			
		||||
    "api": 2,
 | 
			
		||||
    "addon": 2,
 | 
			
		||||
    "pve-tool": 2,
 | 
			
		||||
    "vm": 2,
 | 
			
		||||
    "github": 1
 | 
			
		||||
  },
 | 
			
		||||
  "conflicts": {
 | 
			
		||||
    "bugfix": ["refactor"],
 | 
			
		||||
    "website": ["json"],
 | 
			
		||||
    "update script": ["new script", "delete script"],
 | 
			
		||||
    "new script": ["update script", "delete script"],
 | 
			
		||||
    "delete script": ["new script", "update script"]
 | 
			
		||||
  },
 | 
			
		||||
  "rules": {
 | 
			
		||||
    "always_combine": [
 | 
			
		||||
      "maintenance",
 | 
			
		||||
      "core",
 | 
			
		||||
      "api",
 | 
			
		||||
      "addon",
 | 
			
		||||
      "pve-tool",
 | 
			
		||||
      "vm",
 | 
			
		||||
      "github"
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										116
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										116
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -112,119 +112,3 @@ jobs:
 | 
			
		||||
                labels: Array.from(labelsToAdd),
 | 
			
		||||
              });
 | 
			
		||||
            }
 | 
			
		||||
  ai-check:
 | 
			
		||||
    needs: autolabeler
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
      - name: Load priority config
 | 
			
		||||
        run: |
 | 
			
		||||
          echo "PRIORITY_JSON=$(jq -c . .github/label-priority.json)" >> $GITHUB_ENV
 | 
			
		||||
 | 
			
		||||
      - name: Fetch PR metadata
 | 
			
		||||
        id: pr
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
            const pr = context.payload.pull_request;
 | 
			
		||||
            const files = await github.rest.pulls.listFiles({
 | 
			
		||||
              owner: context.repo.owner,
 | 
			
		||||
              repo: context.repo.repo,
 | 
			
		||||
              pull_number: pr.number
 | 
			
		||||
            });
 | 
			
		||||
            const prData = {
 | 
			
		||||
              title: pr.title || "",
 | 
			
		||||
              body: pr.body || "",
 | 
			
		||||
              files: files.data.map(f => f.filename)
 | 
			
		||||
            };
 | 
			
		||||
            require('fs').writeFileSync(process.env.GITHUB_ENV, `PR_DATA=${JSON.stringify(prData)}\n`, {flag: 'a'});
 | 
			
		||||
 | 
			
		||||
      - name: AI Label Review
 | 
			
		||||
        id: ai
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        env:
 | 
			
		||||
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
            const prData = JSON.parse(process.env.PR_DATA);
 | 
			
		||||
 | 
			
		||||
            const prompt = `
 | 
			
		||||
            You are a GitHub labeling bot.
 | 
			
		||||
            Task:
 | 
			
		||||
            - Analyze PR title, body, and file list.
 | 
			
		||||
            - For each possible label, return a confidence score (0–1).
 | 
			
		||||
            - If both bugfix and refactor apply, prefer refactor.
 | 
			
		||||
            - Output JSON: {"labels":[{"name":"bugfix","score":0.9},{"name":"refactor","score":0.6}]}
 | 
			
		||||
 | 
			
		||||
            Valid labels: [new script, update script, delete script, bugfix, feature, maintenance, refactor, website, json, api, core, github, addon, pve-tool, vm].
 | 
			
		||||
 | 
			
		||||
            PR data: ${JSON.stringify(prData)}
 | 
			
		||||
            `;
 | 
			
		||||
 | 
			
		||||
            const response = await fetch("https://api.openai.com/v1/chat/completions", {
 | 
			
		||||
              method: "POST",
 | 
			
		||||
              headers: {
 | 
			
		||||
                "Content-Type": "application/json",
 | 
			
		||||
                "Authorization": "Bearer " + process.env.OPENAI_API_KEY,
 | 
			
		||||
              },
 | 
			
		||||
              body: JSON.stringify({
 | 
			
		||||
                model: "gpt-4.1-mini",
 | 
			
		||||
                messages: [{ role: "user", content: prompt }],
 | 
			
		||||
                temperature: 0
 | 
			
		||||
              })
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            const data = await response.json();
 | 
			
		||||
            const labels = JSON.parse(data.choices[0].message.content).labels;
 | 
			
		||||
            core.setOutput("labels", JSON.stringify(labels));
 | 
			
		||||
 | 
			
		||||
      - name: Apply AI Labels
 | 
			
		||||
        uses: actions/github-script@v7
 | 
			
		||||
        with:
 | 
			
		||||
          script: |
 | 
			
		||||
            const raw = JSON.parse('${{ steps.ai.outputs.labels }}');
 | 
			
		||||
            const prNumber = context.payload.pull_request.number;
 | 
			
		||||
            const config = JSON.parse(process.env.PRIORITY_JSON);
 | 
			
		||||
 | 
			
		||||
            let toApply = [];
 | 
			
		||||
            let toSuggest = [];
 | 
			
		||||
 | 
			
		||||
            raw.forEach(l => {
 | 
			
		||||
              if (l.score >= 0.8) {
 | 
			
		||||
                const conflicts = config.conflicts[l.name] || [];
 | 
			
		||||
                const hasStrongerConflict = conflicts.some(c =>
 | 
			
		||||
                  raw.some(x =>
 | 
			
		||||
                    x.name === c &&
 | 
			
		||||
                    x.score >= 0.6 &&
 | 
			
		||||
                    (config.priorities[c] || 0) >= (config.priorities[l.name] || 0)
 | 
			
		||||
                  )
 | 
			
		||||
                );
 | 
			
		||||
                if (!hasStrongerConflict) {
 | 
			
		||||
                  toApply.push(l.name);
 | 
			
		||||
                }
 | 
			
		||||
              } else if (l.score >= 0.5) {
 | 
			
		||||
                toSuggest.push(`${l.name} (${Math.round(l.score*100)}%)`);
 | 
			
		||||
              }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            if (toApply.length > 0) {
 | 
			
		||||
              await github.rest.issues.addLabels({
 | 
			
		||||
                owner: context.repo.owner,
 | 
			
		||||
                repo: context.repo.repo,
 | 
			
		||||
                issue_number: prNumber,
 | 
			
		||||
                labels: toApply
 | 
			
		||||
              });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (toSuggest.length > 0) {
 | 
			
		||||
              await github.rest.issues.createComment({
 | 
			
		||||
                owner: context.repo.owner,
 | 
			
		||||
                repo: context.repo.repo,
 | 
			
		||||
                issue_number: prNumber,
 | 
			
		||||
                body: `🤖 AI suggests these possible labels (uncertain): ${toSuggest.join(", ")}`
 | 
			
		||||
              });
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										94
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										94
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,102 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-09-25
 | 
			
		||||
 | 
			
		||||
## 2025-09-24
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Add Script: Joplin Server ([#7879](https://github.com/community-scripts/ProxmoxVE/pull/7879))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Monica: Fix dependencies [@tremor021](https://github.com/tremor021) ([#7877](https://github.com/community-scripts/ProxmoxVE/pull/7877))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Update name in lxc-delete.json to 'PVE LXC Deletion' [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#7872](https://github.com/community-scripts/ProxmoxVE/pull/7872))
 | 
			
		||||
 | 
			
		||||
## 2025-09-23
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - UpSnap ([#7825](https://github.com/community-scripts/ProxmoxVE/pull/7825))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - tools.func: Check for /usr/local/bin in PATH during yq setup [@vhsdream](https://github.com/vhsdream) ([#7856](https://github.com/community-scripts/ProxmoxVE/pull/7856))
 | 
			
		||||
    - BookLore: increase RAM [@vhsdream](https://github.com/vhsdream) ([#7855](https://github.com/community-scripts/ProxmoxVE/pull/7855))
 | 
			
		||||
    - Bump Immich to v1.143.1 [@vhsdream](https://github.com/vhsdream) ([#7864](https://github.com/community-scripts/ProxmoxVE/pull/7864))
 | 
			
		||||
    - zabbix: Remove not exist admin credentials from output [@MickLesk](https://github.com/MickLesk) ([#7849](https://github.com/community-scripts/ProxmoxVE/pull/7849))
 | 
			
		||||
    - Suppress wrong errors from uv shell integration in setup_uv [@MickLesk](https://github.com/MickLesk) ([#7822](https://github.com/community-scripts/ProxmoxVE/pull/7822))
 | 
			
		||||
    - Refactor Caddyfile configuration for headscale-admin [@MickLesk](https://github.com/MickLesk) ([#7821](https://github.com/community-scripts/ProxmoxVE/pull/7821))
 | 
			
		||||
    - Improve subscription element removal (mobile) in post-pve script [@MickLesk](https://github.com/MickLesk) ([#7814](https://github.com/community-scripts/ProxmoxVE/pull/7814))
 | 
			
		||||
    - Blocky: Fix release fetching [@tremor021](https://github.com/tremor021) ([#7807](https://github.com/community-scripts/ProxmoxVE/pull/7807))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Improve globaleaks install ensuring install can proceed without user … [@evilaliv3](https://github.com/evilaliv3) ([#7860](https://github.com/community-scripts/ProxmoxVE/pull/7860))
 | 
			
		||||
    - Manage My Damn Life: use NodeJS 22 [@vhsdream](https://github.com/vhsdream) ([#7861](https://github.com/community-scripts/ProxmoxVE/pull/7861))
 | 
			
		||||
    - VM: Increase pv & xz functions (HA OS / Umbrel OS) [@MickLesk](https://github.com/MickLesk) ([#7838](https://github.com/community-scripts/ProxmoxVE/pull/7838))
 | 
			
		||||
    - Tandoor: update for newer dependencies (psql) + bump nodejs to 22 [@MickLesk](https://github.com/MickLesk) ([#7826](https://github.com/community-scripts/ProxmoxVE/pull/7826))
 | 
			
		||||
    - Update Monica and Outline to use Node.js 22 [@MickLesk](https://github.com/MickLesk) ([#7833](https://github.com/community-scripts/ProxmoxVE/pull/7833))
 | 
			
		||||
    - Update Zabbix install for Debian 13 and agent selection [@MickLesk](https://github.com/MickLesk) ([#7819](https://github.com/community-scripts/ProxmoxVE/pull/7819))
 | 
			
		||||
    - tracktor: bump to debian 13 | feature bump [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7818](https://github.com/community-scripts/ProxmoxVE/pull/7818))
 | 
			
		||||
    - LiteLLM: Bump to Debian 13 & add deps [@MickLesk](https://github.com/MickLesk) ([#7815](https://github.com/community-scripts/ProxmoxVE/pull/7815))
 | 
			
		||||
    - Immich: bump to v1.143.0 [@vhsdream](https://github.com/vhsdream) ([#7801](https://github.com/community-scripts/ProxmoxVE/pull/7801))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
  - #### 📂 Github
 | 
			
		||||
 | 
			
		||||
    - gh: remove ai autolabel test [@MickLesk](https://github.com/MickLesk) ([#7817](https://github.com/community-scripts/ProxmoxVE/pull/7817))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - OpenWebUI: Add information about Ollama [@tremor021](https://github.com/tremor021) ([#7843](https://github.com/community-scripts/ProxmoxVE/pull/7843))
 | 
			
		||||
    - cosmos: add info note for configuration file [@MickLesk](https://github.com/MickLesk) ([#7824](https://github.com/community-scripts/ProxmoxVE/pull/7824))
 | 
			
		||||
    - ElementSynapse: add note for Bridge Install Methods [@MickLesk](https://github.com/MickLesk) ([#7820](https://github.com/community-scripts/ProxmoxVE/pull/7820))
 | 
			
		||||
 | 
			
		||||
## 2025-09-22
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - [core]: Update detection of current running subshell [@tremor021](https://github.com/tremor021) ([#7796](https://github.com/community-scripts/ProxmoxVE/pull/7796))
 | 
			
		||||
    - Paymenter: Installation and update fixes [@tremor021](https://github.com/tremor021) ([#7792](https://github.com/community-scripts/ProxmoxVE/pull/7792))
 | 
			
		||||
 | 
			
		||||
## 2025-09-21
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - fix openwebui update and installer [@HeedfulCrayon](https://github.com/HeedfulCrayon) ([#7788](https://github.com/community-scripts/ProxmoxVE/pull/7788))
 | 
			
		||||
    - tracktor: add: cleanup before upgrade [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7782](https://github.com/community-scripts/ProxmoxVE/pull/7782))
 | 
			
		||||
    - Fix regex to extract MySQL version correctly [@MickLesk](https://github.com/MickLesk) ([#7774](https://github.com/community-scripts/ProxmoxVE/pull/7774))
 | 
			
		||||
    - Update Ollama Installer in OpenWebUI to resume downloads if interrupted [@HeedfulCrayon](https://github.com/HeedfulCrayon) ([#7779](https://github.com/community-scripts/ProxmoxVE/pull/7779))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Implement clean install option in tools.func (fetch_and_deploy_gh_release) [@MickLesk](https://github.com/MickLesk) ([#7785](https://github.com/community-scripts/ProxmoxVE/pull/7785))
 | 
			
		||||
    - caddy: modify disk size and implement xCaddy update [@MickLesk](https://github.com/MickLesk) ([#7775](https://github.com/community-scripts/ProxmoxVE/pull/7775))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Harmonize  and shorten JSON Names for PVE/PBS/PMG [@MickLesk](https://github.com/MickLesk) ([#7773](https://github.com/community-scripts/ProxmoxVE/pull/7773))
 | 
			
		||||
 | 
			
		||||
## 2025-09-20
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ function update_script() {
 | 
			
		||||
    rm -rf /opt/blocky
 | 
			
		||||
    msg_ok "Removed Old Version"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_linux_x86_64.tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_Linux_x86_64.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restore Config"
 | 
			
		||||
    mv /opt/config.yml /opt/blocky/config.yml
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
APP="BookLore"
 | 
			
		||||
var_tags="${var_tags:-books;library}"
 | 
			
		||||
var_cpu="${var_cpu:-3}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_ram="${var_ram:-3072}"
 | 
			
		||||
var_disk="${var_disk:-7}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								ct/caddy.sh
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								ct/caddy.sh
									
									
									
									
									
								
							@@ -9,7 +9,7 @@ APP="Caddy"
 | 
			
		||||
var_tags="${var_tags:-webserver}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_disk="${var_disk:-6}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
@@ -31,6 +31,19 @@ function update_script() {
 | 
			
		||||
   $STD apt-get update
 | 
			
		||||
   $STD apt-get -y upgrade
 | 
			
		||||
   msg_ok "Updated $APP LXC"
 | 
			
		||||
 | 
			
		||||
    if command -v xcaddy >/dev/null 2>&1; then
 | 
			
		||||
      install_go
 | 
			
		||||
      msg_info "Updating xCaddy"
 | 
			
		||||
      cd /opt
 | 
			
		||||
      RELEASE=$(curl -fsSL https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
 | 
			
		||||
      VERSION="${RELEASE#v}"
 | 
			
		||||
      curl -fsSL "https://github.com/caddyserver/xcaddy/releases/download/${RELEASE}/xcaddy_${VERSION}_linux_amd64.deb" -o "xcaddy_${VERSION}_linux_amd64.deb"
 | 
			
		||||
      $STD dpkg -i "xcaddy_${VERSION}_linux_amd64.deb"
 | 
			
		||||
      rm -f "xcaddy_${VERSION}_linux_amd64.deb"
 | 
			
		||||
      $STD xcaddy build
 | 
			
		||||
      msg_ok "Updated xCaddy"
 | 
			
		||||
   fi
 | 
			
		||||
   exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/joplin-server
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/joplin-server
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
       __            ___            _____                          
 | 
			
		||||
      / /___  ____  / (_)___       / ___/___  ______   _____  _____
 | 
			
		||||
 __  / / __ \/ __ \/ / / __ \______\__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
			
		||||
/ /_/ / /_/ / /_/ / / / / / /_____/__/ /  __/ /   | |/ /  __/ /    
 | 
			
		||||
\____/\____/ .___/_/_/_/ /_/     /____/\___/_/    |___/\___/_/     
 | 
			
		||||
          /_/                                                      
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/upsnap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/upsnap
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   __  __     _____                 
 | 
			
		||||
  / / / /___ / ___/____  ____ _____ 
 | 
			
		||||
 / / / / __ \\__ \/ __ \/ __ `/ __ \
 | 
			
		||||
/ /_/ / /_/ /__/ / / / / /_/ / /_/ /
 | 
			
		||||
\____/ .___/____/_/ /_/\__,_/ .___/ 
 | 
			
		||||
    /_/                    /_/      
 | 
			
		||||
@@ -53,3 +53,5 @@ 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}Headscale API: ${IP}/api (no Frontend) | headscale-admin: http://${IP}/admin/${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,7 @@ function update_script() {
 | 
			
		||||
    done
 | 
			
		||||
    msg_ok "Image-processing libraries up to date"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE="1.142.1"
 | 
			
		||||
  RELEASE="1.143.1"
 | 
			
		||||
  if check_for_gh_release "immich" "immich-app/immich" "${RELEASE}"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop immich-web
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										62
									
								
								ct/joplin-server.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								ct/joplin-server.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://joplinapp.org/
 | 
			
		||||
 | 
			
		||||
APP="Joplin-Server"
 | 
			
		||||
var_tags="${var_tags:-notes}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-20}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/joplin-server ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "joplin-server" "laurent22/joplin"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop joplin-server
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" "latest"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    cd /opt/joplin-server
 | 
			
		||||
    sed -i "/onenote-converter/d" packages/lib/package.json
 | 
			
		||||
    $STD yarn config set --home enableTelemetry 0
 | 
			
		||||
    export BUILD_SEQUENCIAL=1
 | 
			
		||||
    $STD yarn install --inline-builds
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start joplin-server
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:22300${CL}"
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -29,23 +29,24 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Stopping ${APP}"
 | 
			
		||||
  msg_info "Stopping Service"
 | 
			
		||||
  systemctl stop litellm
 | 
			
		||||
  msg_ok "Stopped ${APP}"
 | 
			
		||||
  msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
  VENV_PATH="/opt/litellm/.venv"
 | 
			
		||||
  PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating $APP"
 | 
			
		||||
  msg_info "Updating LiteLLM"
 | 
			
		||||
  $STD "$VENV_PATH/bin/python" -m pip install --upgrade litellm[proxy] prisma
 | 
			
		||||
  msg_ok "LiteLLM updated"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating DB Schema"
 | 
			
		||||
  $STD uv --directory=/opt/litellm run litellm --config /opt/litellm/litellm.yaml --use_prisma_db_push --skip_server_startup
 | 
			
		||||
  msg_ok "DB Schema Updated"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting ${APP}"
 | 
			
		||||
  msg_info "Starting Service"
 | 
			
		||||
  systemctl start litellm
 | 
			
		||||
  msg_ok "Started ${APP}"
 | 
			
		||||
  msg_ok "Started Service"
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -35,12 +35,15 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    cp /opt/mmdl/.env /opt/mmdl.env
 | 
			
		||||
    rm -rf /opt/mmdl
 | 
			
		||||
    msg_ok "Backup Created"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "mmdl" "intri-in/manage-my-damn-life-nextjs" "tarball"
 | 
			
		||||
    NODE_VERSION="22" setup_nodejs
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring ${APP}"
 | 
			
		||||
    cd /opt/mmdl
 | 
			
		||||
    export NEXT_TELEMETRY_DISABLED=1
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    $STD npm run migrate
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,9 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "monica" "monicahq/monica"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
@@ -43,6 +46,7 @@ function update_script() {
 | 
			
		||||
    cp -r /opt/monica-backup/.env /opt/monica
 | 
			
		||||
    cp -r /opt/monica-backup/storage/* /opt/monica/storage/
 | 
			
		||||
    $STD composer install --no-interaction --no-dev
 | 
			
		||||
    $STD yarn config set ignore-engines true
 | 
			
		||||
    $STD yarn install
 | 
			
		||||
    $STD yarn run production
 | 
			
		||||
    $STD php artisan monica:update --force
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ function update_script() {
 | 
			
		||||
      msg_info "Stopping Service"
 | 
			
		||||
      systemctl stop ollama
 | 
			
		||||
      msg_ok "Stopped Service"
 | 
			
		||||
      curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
 | 
			
		||||
      curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
 | 
			
		||||
      rm -rf /usr/lib/ollama
 | 
			
		||||
      rm -rf /usr/bin/ollama
 | 
			
		||||
      tar -C /usr -xzf ollama-linux-amd64.tgz
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,8 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "outline" "outline/outline"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop outline
 | 
			
		||||
@@ -37,7 +39,7 @@ function update_script() {
 | 
			
		||||
    cp /opt/outline/.env /opt
 | 
			
		||||
    msg_ok "Backup created"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
 | 
			
		||||
    CLEAN_INSTALL=1 fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    cd /opt/outline
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ function update_script() {
 | 
			
		||||
  if check_for_gh_release "paymenter" "paymenter/paymenter"; then
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    cd /opt/paymenter
 | 
			
		||||
    $STD php artisan p:upgrade --no-interaction
 | 
			
		||||
    $STD php artisan app:upgrade --no-interaction
 | 
			
		||||
    echo "${CHECK_UPDATE_RELEASE}" >~/.paymenter
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ function update_script() {
 | 
			
		||||
    mv /opt/tandoor /opt/tandoor.bak
 | 
			
		||||
    msg_ok "Backup Created"
 | 
			
		||||
 | 
			
		||||
    NODE_VERSION="20" NODE_MODULE="yarn" setup_nodejs
 | 
			
		||||
    NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
 | 
			
		||||
    PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
    fetch_and_deploy_gh_release "tandoor" "TandoorRecipes/recipes" "tarball" "latest" "/opt/tandoor"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-6}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -33,22 +33,23 @@ function update_script() {
 | 
			
		||||
    systemctl stop tracktor
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    cp /opt/tracktor/app/backend/.env /opt/tracktor.env
 | 
			
		||||
    msg_ok "Created Backup"
 | 
			
		||||
    msg_info "Correcting Services"
 | 
			
		||||
    if [ -f /opt/tracktor/app/backend/.env ]; then
 | 
			
		||||
        mv /opt/tracktor/app/backend/.env /opt/tracktor.env
 | 
			
		||||
        echo 'AUTH_PIN=123456' >> /opt/tracktor.env
 | 
			
		||||
        sed -i 's|^EnvironmentFile=.*|EnvironmentFile=/opt/tracktor.env|' /etc/systemd/system/tracktor.service
 | 
			
		||||
        systemctl daemon-reload
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Corrected Services"
 | 
			
		||||
 | 
			
		||||
    setup_nodejs
 | 
			
		||||
    fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
 | 
			
		||||
    CLEAN_INSTALL=1 fetch_and_deploy_gh_release "tracktor" "javedh-dev/tracktor" "tarball" "latest" "/opt/tracktor"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    msg_info "Updating tracktor"
 | 
			
		||||
    cd /opt/tracktor
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring Backup"
 | 
			
		||||
    cp /opt/tracktor.env /opt/tracktor/app/backend/.env
 | 
			
		||||
    msg_ok "Restored Backup"
 | 
			
		||||
    msg_ok "Updated tracktor"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start tracktor
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										53
									
								
								ct/upsnap.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								ct/upsnap.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/seriousm4x/UpSnap
 | 
			
		||||
 | 
			
		||||
APP="UpSnap"
 | 
			
		||||
var_tags="${var_tags:-network}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /opt/upsnap ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if check_for_gh_release "upsnap" "seriousm4x/UpSnap"; then
 | 
			
		||||
        msg_info "Stopping Services"
 | 
			
		||||
        systemctl stop upsnap
 | 
			
		||||
        msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
        fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_amd64.zip"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting Services"
 | 
			
		||||
        systemctl start upsnap
 | 
			
		||||
        msg_ok "Started Services"
 | 
			
		||||
        msg_ok "Updated Successfully"
 | 
			
		||||
    fi
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
 | 
			
		||||
							
								
								
									
										65
									
								
								ct/zabbix.sh
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								ct/zabbix.sh
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-6}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -23,37 +23,72 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Stopping ${APP} Services"
 | 
			
		||||
  systemctl stop zabbix-server zabbix-agent2
 | 
			
		||||
  msg_ok "Stopped ${APP} Services"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating $APP LXC"
 | 
			
		||||
  . /etc/os-release
 | 
			
		||||
  if [ "$VERSION_CODENAME" != "trixie" ]; then
 | 
			
		||||
    msg_error "Unsupported Debian version: $VERSION_CODENAME – please upgrade to Debian 13 (Trixie) before updating Zabbix."
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if systemctl list-unit-files | grep -q zabbix-agent2.service; then
 | 
			
		||||
    AGENT_SERVICE="zabbix-agent2"
 | 
			
		||||
  else
 | 
			
		||||
    AGENT_SERVICE="zabbix-agent"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Stopping Services"
 | 
			
		||||
  systemctl stop zabbix-server $AGENT_SERVICE
 | 
			
		||||
  msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating Zabbix"
 | 
			
		||||
  mkdir -p /opt/zabbix-backup/
 | 
			
		||||
  cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
 | 
			
		||||
  cp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix-backup/
 | 
			
		||||
  cp -R /usr/share/zabbix/ /opt/zabbix-backup/
 | 
			
		||||
  #cp -R /usr/share/zabbix-* /opt/zabbix-backup/ Remove temporary
 | 
			
		||||
 | 
			
		||||
  rm -Rf /etc/apt/sources.list.d/zabbix.list
 | 
			
		||||
  cd /tmp
 | 
			
		||||
  curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ |
 | 
			
		||||
    grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 |
 | 
			
		||||
    xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \
 | 
			
		||||
    -o /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
  $STD dpkg -i zabbix-release_latest+debian12_all.deb
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-*
 | 
			
		||||
    xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian13_all.deb")" \
 | 
			
		||||
    -o /tmp/zabbix-release_latest+debian13_all.deb
 | 
			
		||||
  $STD dpkg -i zabbix-release_latest+debian13_all.deb
 | 
			
		||||
  $STD apt update
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting ${APP} Services"
 | 
			
		||||
  systemctl start zabbix-server zabbix-agent2
 | 
			
		||||
  $STD apt install --only-upgrade zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql
 | 
			
		||||
 | 
			
		||||
  if [ "$AGENT_SERVICE" = "zabbix-agent2" ]; then
 | 
			
		||||
    $STD apt install --only-upgrade zabbix-agent2 zabbix-agent2-plugin-postgresql
 | 
			
		||||
    if [ -f /etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf ]; then
 | 
			
		||||
      sed -i 's|^Plugins.NVIDIA.System.Path=.*|# Plugins.NVIDIA.System.Path=/usr/libexec/zabbix/zabbix-agent2-plugin-nvidia-gpu|' \
 | 
			
		||||
        /etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    $STD apt install --only-upgrade zabbix-agent
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if command -v fping >/dev/null 2>&1; then
 | 
			
		||||
    FPING_PATH=$(command -v fping)
 | 
			
		||||
    sed -i "s|^#\?FpingLocation=.*|FpingLocation=$FPING_PATH|" /etc/zabbix/zabbix_server.conf
 | 
			
		||||
  fi
 | 
			
		||||
  if command -v fping6 >/dev/null 2>&1; then
 | 
			
		||||
    FPING6_PATH=$(command -v fping6)
 | 
			
		||||
    sed -i "s|^#\?Fping6Location=.*|Fping6Location=$FPING6_PATH|" /etc/zabbix/zabbix_server.conf
 | 
			
		||||
  fi
 | 
			
		||||
  msg_ok "Updated Zabbix"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting Services"
 | 
			
		||||
  systemctl start zabbix-server $AGENT_SERVICE
 | 
			
		||||
  systemctl restart apache2
 | 
			
		||||
  msg_ok "Started ${APP} Services"
 | 
			
		||||
  msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
  msg_info "Cleaning Up"
 | 
			
		||||
  rm -rf /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
  rm -rf /tmp/zabbix-release_latest+debian13_all.deb
 | 
			
		||||
  msg_ok "Cleaned"
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE LXC Tag",
 | 
			
		||||
  "name": "PVE LXC Tag",
 | 
			
		||||
  "slug": "add-iptag",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@
 | 
			
		||||
      "script": "ct/booklore.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 3,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "ram": 3072,
 | 
			
		||||
        "hdd": 7,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "hdd": 6,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE LXC Cleaner",
 | 
			
		||||
  "name": "PVE LXC Cleaner",
 | 
			
		||||
  "slug": "clean-lxcs",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox Clean Orphaned LVM",
 | 
			
		||||
  "name": "PVE Clean Orphaned LVM",
 | 
			
		||||
  "slug": "clean-orphaned-lvm",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -32,5 +32,10 @@
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "info",
 | 
			
		||||
      "text": "The file `/etc/sysconfig/CosmosCloud` is optional. If you need custom settings, you can create it yourself."
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE Cron LXC Updater",
 | 
			
		||||
  "name": "PVE Cron LXC Updater",
 | 
			
		||||
  "slug": "cron-update-lxcs",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,10 @@
 | 
			
		||||
    {
 | 
			
		||||
      "type": "info",
 | 
			
		||||
      "text": "Synapse-Admin is running on port 5173"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "info",
 | 
			
		||||
      "text": "For bridges Installation methods (WhatsApp, Signal, Discord, etc.), see: ´https://docs.mau.fi/bridges/go/setup.html´"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE LXC Filesystem Trim",
 | 
			
		||||
  "name": "PVE LXC Filesystem Trim",
 | 
			
		||||
  "slug": "fstrim",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE Host Backup",
 | 
			
		||||
  "name": "PVE Host Backup",
 | 
			
		||||
  "slug": "host-backup",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								frontend/public/json/joplin-server.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/public/json/joplin-server.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Joplin Server",
 | 
			
		||||
  "slug": "joplin-server",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    12
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-09-24",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 22300,
 | 
			
		||||
  "documentation": "https://joplinapp.org/help/",
 | 
			
		||||
  "config_path": "/opt/joplin-server/.env",
 | 
			
		||||
  "website": "https://joplinapp.org/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/joplin.webp",
 | 
			
		||||
  "description": "Joplin - the privacy-focused note taking app with sync capabilities for Windows, macOS, Linux, Android and iOS.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/joplin-server.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 20,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": "admin@localhost",
 | 
			
		||||
    "password": "admin"
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Application can take some time to build, depending on your host speed. Please be patient.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE Kernel Clean",
 | 
			
		||||
  "name": "PVE Kernel Clean",
 | 
			
		||||
  "slug": "kernel-clean",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE Kernel Pin",
 | 
			
		||||
  "name": "PVE Kernel Pin",
 | 
			
		||||
  "slug": "kernel-pin",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Container LXC Deletion",
 | 
			
		||||
  "name": "PVE LXC Deletion",
 | 
			
		||||
  "slug": "lxc-delete",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE Processor Microcode",
 | 
			
		||||
  "name": "PVE Processor Microcode",
 | 
			
		||||
  "slug": "microcode",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE Monitor-All",
 | 
			
		||||
  "name": "PVE Monitor-All",
 | 
			
		||||
  "slug": "monitor-all",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE Netdata",
 | 
			
		||||
  "name": "PVE Netdata",
 | 
			
		||||
  "slug": "netdata",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -31,5 +31,10 @@
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Script contains optional installation of Ollama.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox Backup Server Processor Microcode",
 | 
			
		||||
  "name": "PBS Processor Microcode",
 | 
			
		||||
  "slug": "pbs-microcode",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox Backup Server Post Install",
 | 
			
		||||
  "name": "PBS Post Install",
 | 
			
		||||
  "slug": "post-pbs-install",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
@@ -13,7 +13,7 @@
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PBS Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Backup Server and Reboot PBS.",
 | 
			
		||||
  "description": "The script is designed for Proxmox Backup Server (PBS) and will give options to Disable the Enterprise Repo, Add/Correct PBS Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Backup Server and Reboot PBS.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox Mail Gateway Post Install",
 | 
			
		||||
  "name": "PMG Post Install",
 | 
			
		||||
  "slug": "post-pmg-install",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
@@ -13,7 +13,7 @@
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "The script will give options to Disable the Enterprise Repo, Add/Correct PMG Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Mail Gateway and Reboot PMG.",
 | 
			
		||||
  "description": "The script is designed for Proxmox Mail Gateway and will give options to Disable the Enterprise Repo, Add/Correct PMG Sources, Enable the No-Subscription Repo, Add Test Repo, Disable Subscription Nag, Update Proxmox Mail Gateway and Reboot PMG.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE Post Install",
 | 
			
		||||
  "name": "PVE Post Install",
 | 
			
		||||
  "slug": "post-pve-install",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox Backup Server",
 | 
			
		||||
    "name": "Proxmox Backup Server (PBS)",
 | 
			
		||||
    "slug": "proxmox-backup-server",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox Datacenter Manager",
 | 
			
		||||
  "name": "Proxmox Datacenter Manager (PDM)",
 | 
			
		||||
  "slug": "proxmox-datacenter-manager",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Proxmox Mail Gateway",
 | 
			
		||||
    "name": "Proxmox Mail Gateway (PMG)",
 | 
			
		||||
    "slug": "proxmox-mail-gateway",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE CPU Scaling Governor",
 | 
			
		||||
  "name": "PVE CPU Scaling Governor",
 | 
			
		||||
  "slug": "scaling-governor",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://tracktor.bytedge.in/introduction.html",
 | 
			
		||||
  "config_path": "/opt/tracktor/app/server/.env",
 | 
			
		||||
  "config_path": "/opt/tracktor.env",
 | 
			
		||||
  "website": "https://tracktor.bytedge.in/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/tracktor.webp",
 | 
			
		||||
  "description": "Tracktor is an open-source web application for comprehensive vehicle management.\nEasily track fuel consumption, maintenance, insurance, and regulatory documents for all your vehicles in one place.",
 | 
			
		||||
@@ -23,17 +23,17 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 6,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
    "password": "123456"
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Please check and update the '/opt/tracktor/app/backend/.env' file if using behind reverse proxy.",
 | 
			
		||||
      "text": "Please check and update the '/opt/tracktor.env' file if using behind reverse proxy.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE LXC Updater",
 | 
			
		||||
  "name": "PVE LXC Updater",
 | 
			
		||||
  "slug": "update-lxcs",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox Update Repositories",
 | 
			
		||||
  "name": "PVE Update Repositories",
 | 
			
		||||
  "slug": "update-repo",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								frontend/public/json/upsnap.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/public/json/upsnap.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "UpSnap",
 | 
			
		||||
  "slug": "upsnap",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    4
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-09-23",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8090,
 | 
			
		||||
  "documentation": "https://github.com/seriousm4x/UpSnap/wiki",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "website": "https://github.com/seriousm4x/UpSnap",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/upsnap.webp",
 | 
			
		||||
  "description": "UpSnap is a self-hosted web app that lets you wake up, manage and monitor devices on your network with ease. Built with SvelteKit, Go and PocketBase, it offers a clean dashboard, scheduled wake-ups, device discovery and secure user management.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/upsnap.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "The first user you register will be the admin user.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,4 +1,304 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.12.11",
 | 
			
		||||
    "date": "2025-09-24T22:19:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.12.1-rc2",
 | 
			
		||||
    "date": "2025-09-23T06:20:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
    "version": "2025.9.4",
 | 
			
		||||
    "date": "2025-09-19T21:09:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r8.2.1-rc1",
 | 
			
		||||
    "date": "2025-09-24T19:54:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.26.3",
 | 
			
		||||
    "date": "2025-09-24T17:37:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "2.2.4",
 | 
			
		||||
    "date": "2025-09-24T17:11:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "go-gitea/gitea",
 | 
			
		||||
    "version": "v1.26.0-dev",
 | 
			
		||||
    "date": "2025-09-24T16:45:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rclone/rclone",
 | 
			
		||||
    "version": "v1.71.1",
 | 
			
		||||
    "date": "2025-09-24T16:32:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.112.5",
 | 
			
		||||
    "date": "2025-09-24T14:44:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "alexta69/metube",
 | 
			
		||||
    "version": "2025.09.24",
 | 
			
		||||
    "date": "2025-09-24T13:51:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AlexxIT/go2rtc",
 | 
			
		||||
    "version": "v1.9.10",
 | 
			
		||||
    "date": "2025-09-24T13:49:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "influxdata/influxdb",
 | 
			
		||||
    "version": "v1.11.9",
 | 
			
		||||
    "date": "2025-09-24T13:15:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumadocs-typescript@4.0.9",
 | 
			
		||||
    "date": "2025-09-24T12:52:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.138.2",
 | 
			
		||||
    "date": "2025-09-24T12:45:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v11.3.1",
 | 
			
		||||
    "date": "2025-09-24T11:58:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jupyter/notebook",
 | 
			
		||||
    "version": "@jupyter-notebook/ui-components@7.5.0-alpha.3",
 | 
			
		||||
    "date": "2025-09-24T09:14:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "latest",
 | 
			
		||||
    "date": "2025-09-24T08:45:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "coverity-w39-4.14.0",
 | 
			
		||||
    "date": "2025-09-24T08:44:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v2.0.10",
 | 
			
		||||
    "date": "2025-09-24T08:33:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.23.59",
 | 
			
		||||
    "date": "2025-09-24T06:04:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.20",
 | 
			
		||||
    "date": "2025-09-24T00:27:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.2",
 | 
			
		||||
    "date": "2025-07-17T12:08:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grafana/grafana",
 | 
			
		||||
    "version": "v12.2.0",
 | 
			
		||||
    "date": "2025-09-23T23:47:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "9001/copyparty",
 | 
			
		||||
    "version": "v1.19.14",
 | 
			
		||||
    "date": "2025-09-23T22:57:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "HabitRPG/habitica",
 | 
			
		||||
    "version": "v5.41.3",
 | 
			
		||||
    "date": "2025-09-23T22:21:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Part-DB/Part-DB-server",
 | 
			
		||||
    "version": "v2.2.0",
 | 
			
		||||
    "date": "2025-09-23T21:46:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "immich-app/immich",
 | 
			
		||||
    "version": "v1.143.1",
 | 
			
		||||
    "date": "2025-09-23T19:00:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.4.0",
 | 
			
		||||
    "date": "2025-09-13T16:38:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Threadfin/Threadfin",
 | 
			
		||||
    "version": "1.2.38",
 | 
			
		||||
    "date": "2025-09-23T17:49:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "getumbrel/umbrel",
 | 
			
		||||
    "version": "1.4.2",
 | 
			
		||||
    "date": "2025-05-09T08:54:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bunkerity/bunkerweb",
 | 
			
		||||
    "version": "v1.6.4",
 | 
			
		||||
    "date": "2025-08-18T20:22:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.529",
 | 
			
		||||
    "date": "2025-09-23T14:40:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zabbix/zabbix",
 | 
			
		||||
    "version": "7.4.3rc1",
 | 
			
		||||
    "date": "2025-09-23T13:54:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "duplicati/duplicati",
 | 
			
		||||
    "version": "v2.1.1.102-2.1.1.102_canary_2025-09-23",
 | 
			
		||||
    "date": "2025-09-23T13:32:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.12.5",
 | 
			
		||||
    "date": "2025-09-23T11:00:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.2.9",
 | 
			
		||||
    "date": "2025-09-17T15:11:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "chrisvel/tududi",
 | 
			
		||||
    "version": "v0.82-rc5",
 | 
			
		||||
    "date": "2025-09-23T07:31:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.3",
 | 
			
		||||
    "date": "2025-09-20T12:12:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "booklore-app/booklore",
 | 
			
		||||
    "version": "v1.3.3",
 | 
			
		||||
    "date": "2025-09-23T00:41:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "postgres/postgres",
 | 
			
		||||
    "version": "REL_18_0",
 | 
			
		||||
    "date": "2025-09-22T20:11:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gtsteffaniak/filebrowser",
 | 
			
		||||
    "version": "v0.8.7-beta",
 | 
			
		||||
    "date": "2025-09-22T18:24:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gethomepage/homepage",
 | 
			
		||||
    "version": "v1.5.0",
 | 
			
		||||
    "date": "2025-09-22T15:28:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cloudflare/cloudflared",
 | 
			
		||||
    "version": "2025.9.1",
 | 
			
		||||
    "date": "2025-09-22T13:32:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sabnzbd/sabnzbd",
 | 
			
		||||
    "version": "4.5.3",
 | 
			
		||||
    "date": "2025-08-25T13:59:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v25.3",
 | 
			
		||||
    "date": "2025-09-01T09:47:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "7.0.0-beta.1",
 | 
			
		||||
    "date": "2025-09-22T11:53:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "itsmng/itsm-ng",
 | 
			
		||||
    "version": "v2.1.0",
 | 
			
		||||
    "date": "2025-09-22T09:23:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "prometheus/prometheus",
 | 
			
		||||
    "version": "v3.6.0",
 | 
			
		||||
    "date": "2025-09-22T08:24:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
    "date": "2025-06-26T22:08:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Athou/commafeed",
 | 
			
		||||
    "version": "5.11.1",
 | 
			
		||||
    "date": "2025-09-22T02:21:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TwiN/gatus",
 | 
			
		||||
    "version": "v5.24.3",
 | 
			
		||||
    "date": "2025-09-22T00:04:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Radarr/Radarr",
 | 
			
		||||
    "version": "v5.27.5.10198",
 | 
			
		||||
    "date": "2025-09-03T12:08:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Prowlarr/Prowlarr",
 | 
			
		||||
    "version": "v2.0.5.5160",
 | 
			
		||||
    "date": "2025-08-23T21:23:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Lidarr/Lidarr",
 | 
			
		||||
    "version": "v2.13.3.4711",
 | 
			
		||||
    "date": "2025-08-28T20:06:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "nightly",
 | 
			
		||||
    "date": "2025-09-21T18:15:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Ombi-app/Ombi",
 | 
			
		||||
    "version": "v4.47.1",
 | 
			
		||||
    "date": "2025-01-05T21:14:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wizarrrr/wizarr",
 | 
			
		||||
    "version": "v2025.9.5",
 | 
			
		||||
    "date": "2025-09-21T13:26:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openhab/openhab-core",
 | 
			
		||||
    "version": "5.1.0.M1",
 | 
			
		||||
    "date": "2025-09-21T13:17:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gotify/server",
 | 
			
		||||
    "version": "v2.7.3",
 | 
			
		||||
    "date": "2025-09-21T12:07:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "thomiceli/opengist",
 | 
			
		||||
    "version": "v1.11.0",
 | 
			
		||||
    "date": "2025-09-21T02:53:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.2.8",
 | 
			
		||||
@@ -9,11 +309,6 @@
 | 
			
		||||
    "version": "preview-fix-watchlist-error",
 | 
			
		||||
    "date": "2025-09-20T21:07:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bunkerity/bunkerweb",
 | 
			
		||||
    "version": "v1.6.4",
 | 
			
		||||
    "date": "2025-08-18T20:22:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.11.2",
 | 
			
		||||
@@ -29,46 +324,11 @@
 | 
			
		||||
    "version": "v6.10.0",
 | 
			
		||||
    "date": "2025-09-20T15:40:36Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "e2e",
 | 
			
		||||
    "date": "2025-09-20T15:06:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.3",
 | 
			
		||||
    "date": "2025-09-20T12:12:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "9001/copyparty",
 | 
			
		||||
    "version": "v1.19.11",
 | 
			
		||||
    "date": "2025-09-20T10:25:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumadocs-openapi@9.3.11",
 | 
			
		||||
    "date": "2025-09-20T09:52:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "forgejo/forgejo",
 | 
			
		||||
    "version": "v12.0.4",
 | 
			
		||||
    "date": "2025-09-20T07:16:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.23.45",
 | 
			
		||||
    "date": "2025-09-20T06:02:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.20",
 | 
			
		||||
    "date": "2025-09-20T00:27:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.2",
 | 
			
		||||
    "date": "2025-07-17T12:08:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "theonedev/onedev",
 | 
			
		||||
    "version": "v13.0.1",
 | 
			
		||||
@@ -79,31 +339,11 @@
 | 
			
		||||
    "version": "1.0.1",
 | 
			
		||||
    "date": "2025-09-19T22:28:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "HabitRPG/habitica",
 | 
			
		||||
    "version": "v5.41.2",
 | 
			
		||||
    "date": "2025-09-19T21:47:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TwiN/gatus",
 | 
			
		||||
    "version": "v5.24.1",
 | 
			
		||||
    "date": "2025-09-19T21:25:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ipfs/kubo",
 | 
			
		||||
    "version": "v0.37.0",
 | 
			
		||||
    "date": "2025-08-27T20:03:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "home-assistant/core",
 | 
			
		||||
    "version": "2025.9.4",
 | 
			
		||||
    "date": "2025-09-19T21:09:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Ombi-app/Ombi",
 | 
			
		||||
    "version": "v4.47.1",
 | 
			
		||||
    "date": "2025-01-05T21:14:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.104.1",
 | 
			
		||||
@@ -114,36 +354,11 @@
 | 
			
		||||
    "version": "v1.38.0",
 | 
			
		||||
    "date": "2025-09-19T19:14:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.2",
 | 
			
		||||
    "date": "2025-06-26T22:08:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.2.9",
 | 
			
		||||
    "date": "2025-09-17T15:11:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wazuh/wazuh",
 | 
			
		||||
    "version": "v4.13.0",
 | 
			
		||||
    "date": "2025-09-19T07:02:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "2.2.3",
 | 
			
		||||
    "date": "2025-09-19T15:02:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "hargata/lubelog",
 | 
			
		||||
    "version": "v1.5.2",
 | 
			
		||||
    "date": "2025-09-19T14:18:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.111.1",
 | 
			
		||||
    "date": "2025-09-19T09:26:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "mattermost-redux@10.12.0",
 | 
			
		||||
@@ -159,11 +374,6 @@
 | 
			
		||||
    "version": "2025.9.1",
 | 
			
		||||
    "date": "2025-09-19T08:47:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.12.0-rc1",
 | 
			
		||||
    "date": "2025-09-18T23:11:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "saltstack/salt",
 | 
			
		||||
    "version": "v3007.8",
 | 
			
		||||
@@ -199,16 +409,6 @@
 | 
			
		||||
    "version": "v4.2.2",
 | 
			
		||||
    "date": "2025-09-18T10:45:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cloudflare/cloudflared",
 | 
			
		||||
    "version": "2025.9.0",
 | 
			
		||||
    "date": "2025-09-18T10:23:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "chrisvel/tududi",
 | 
			
		||||
    "version": "v0.82-rc5",
 | 
			
		||||
    "date": "2025-09-18T09:57:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "NLnetLabs/unbound",
 | 
			
		||||
    "version": "release-1.24.0",
 | 
			
		||||
@@ -219,21 +419,11 @@
 | 
			
		||||
    "version": "v0.87.4",
 | 
			
		||||
    "date": "2025-09-18T00:47:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "henrygd/beszel",
 | 
			
		||||
    "version": "v0.12.9",
 | 
			
		||||
    "date": "2025-09-17T20:13:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TasmoAdmin/TasmoAdmin",
 | 
			
		||||
    "version": "v4.3.1",
 | 
			
		||||
    "date": "2025-07-22T20:10:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.25.14",
 | 
			
		||||
    "date": "2025-09-17T19:00:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "eclipse-mosquitto/mosquitto",
 | 
			
		||||
    "version": "2.1.0-test1",
 | 
			
		||||
@@ -264,11 +454,6 @@
 | 
			
		||||
    "version": "2.0.0",
 | 
			
		||||
    "date": "2025-08-29T13:38:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.528",
 | 
			
		||||
    "date": "2025-09-17T13:09:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cockpit-project/cockpit",
 | 
			
		||||
    "version": "347",
 | 
			
		||||
@@ -289,21 +474,11 @@
 | 
			
		||||
    "version": "v2.16.31",
 | 
			
		||||
    "date": "2025-09-17T09:57:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nzbgetcom/nzbget",
 | 
			
		||||
    "version": "v25.3",
 | 
			
		||||
    "date": "2025-09-01T09:47:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "WGDashboard/WGDashboard",
 | 
			
		||||
    "version": "v4.3.0.1",
 | 
			
		||||
    "date": "2025-09-17T08:50:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gtsteffaniak/filebrowser",
 | 
			
		||||
    "version": "v0.8.6-beta",
 | 
			
		||||
    "date": "2025-09-17T00:57:54Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Cleanuparr/Cleanuparr",
 | 
			
		||||
    "version": "v2.3.1",
 | 
			
		||||
@@ -314,21 +489,11 @@
 | 
			
		||||
    "version": "2.510",
 | 
			
		||||
    "date": "2025-09-16T20:28:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.4.0",
 | 
			
		||||
    "date": "2025-09-13T16:38:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AdguardTeam/AdGuardHome",
 | 
			
		||||
    "version": "v0.107.66",
 | 
			
		||||
    "date": "2025-09-15T13:39:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "booklore-app/booklore",
 | 
			
		||||
    "version": "v1.3.2",
 | 
			
		||||
    "date": "2025-09-16T16:04:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "netbox-community/netbox",
 | 
			
		||||
    "version": "v4.4.1",
 | 
			
		||||
@@ -339,21 +504,6 @@
 | 
			
		||||
    "version": "version/2025.8.3",
 | 
			
		||||
    "date": "2025-09-16T15:19:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "immich-app/immich",
 | 
			
		||||
    "version": "v1.142.1",
 | 
			
		||||
    "date": "2025-09-16T14:51:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wizarrrr/wizarr",
 | 
			
		||||
    "version": "v2025.9.4",
 | 
			
		||||
    "date": "2025-09-16T14:12:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v11.3.0",
 | 
			
		||||
    "date": "2025-09-16T13:53:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "tobychui/zoraxy",
 | 
			
		||||
    "version": "v3.2.5r2",
 | 
			
		||||
@@ -429,11 +579,6 @@
 | 
			
		||||
    "version": "v2.7.6",
 | 
			
		||||
    "date": "2025-09-15T15:50:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mongodb/mongo",
 | 
			
		||||
    "version": "r8.0.14",
 | 
			
		||||
    "date": "2025-09-15T15:39:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "usememos/memos",
 | 
			
		||||
    "version": "v0.25.1",
 | 
			
		||||
@@ -444,11 +589,6 @@
 | 
			
		||||
    "version": "pmm-6401-v1.126.0",
 | 
			
		||||
    "date": "2025-09-15T11:32:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "latest",
 | 
			
		||||
    "date": "2025-09-15T11:12:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "authelia/authelia",
 | 
			
		||||
    "version": "v4.39.10",
 | 
			
		||||
@@ -459,11 +599,6 @@
 | 
			
		||||
    "version": "v3.2.1",
 | 
			
		||||
    "date": "2025-09-15T03:45:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Prowlarr/Prowlarr",
 | 
			
		||||
    "version": "v2.0.5.5160",
 | 
			
		||||
    "date": "2025-08-23T21:23:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crafty-controller/crafty-4",
 | 
			
		||||
    "version": "v4.5.4",
 | 
			
		||||
@@ -479,11 +614,6 @@
 | 
			
		||||
    "version": "v25.6.0",
 | 
			
		||||
    "date": "2025-09-14T17:55:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Lidarr/Lidarr",
 | 
			
		||||
    "version": "v2.13.3.4711",
 | 
			
		||||
    "date": "2025-08-28T20:06:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "karakeep-app/karakeep",
 | 
			
		||||
    "version": "cli/v0.27.1",
 | 
			
		||||
@@ -494,21 +624,6 @@
 | 
			
		||||
    "version": "v0.8.1",
 | 
			
		||||
    "date": "2025-09-14T06:45:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gotify/server",
 | 
			
		||||
    "version": "v2.7.2",
 | 
			
		||||
    "date": "2025-09-13T12:11:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v2.0.9",
 | 
			
		||||
    "date": "2025-09-13T09:37:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.12.4",
 | 
			
		||||
    "date": "2025-09-13T08:08:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "cloudreve/cloudreve",
 | 
			
		||||
    "version": "4.8.0",
 | 
			
		||||
@@ -519,36 +634,16 @@
 | 
			
		||||
    "version": "v1.0.0-rc0",
 | 
			
		||||
    "date": "2025-08-17T18:47:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "influxdata/influxdb",
 | 
			
		||||
    "version": "v3.4.2",
 | 
			
		||||
    "date": "2025-09-11T20:43:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zerotier/ZeroTierOne",
 | 
			
		||||
    "version": "1.16.0",
 | 
			
		||||
    "date": "2025-09-11T18:01:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Threadfin/Threadfin",
 | 
			
		||||
    "version": "1.2.37",
 | 
			
		||||
    "date": "2025-09-11T16:13:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "prometheus/prometheus",
 | 
			
		||||
    "version": "v0.306.0-rc.1",
 | 
			
		||||
    "date": "2025-09-11T13:37:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rcourtman/Pulse",
 | 
			
		||||
    "version": "v4.14.0",
 | 
			
		||||
    "date": "2025-09-05T18:28:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "go-gitea/gitea",
 | 
			
		||||
    "version": "v1.24.6",
 | 
			
		||||
    "date": "2025-09-11T04:20:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "aceberg/WatchYourLAN",
 | 
			
		||||
    "version": "2.1.4",
 | 
			
		||||
@@ -559,16 +654,6 @@
 | 
			
		||||
    "version": "v3.2.1-beta",
 | 
			
		||||
    "date": "2025-09-09T19:47:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Part-DB/Part-DB-server",
 | 
			
		||||
    "version": "v2.1.2",
 | 
			
		||||
    "date": "2025-09-09T19:34:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.138.0",
 | 
			
		||||
    "date": "2025-09-09T11:25:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "traefik/traefik",
 | 
			
		||||
    "version": "v3.5.2",
 | 
			
		||||
@@ -624,11 +709,6 @@
 | 
			
		||||
    "version": "RELEASE.2025-09-07T16-13-09Z",
 | 
			
		||||
    "date": "2025-09-07T18:53:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Radarr/Radarr",
 | 
			
		||||
    "version": "v5.27.5.10198",
 | 
			
		||||
    "date": "2025-09-03T12:08:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocketbase/pocketbase",
 | 
			
		||||
    "version": "v0.30.0",
 | 
			
		||||
@@ -694,11 +774,6 @@
 | 
			
		||||
    "version": "2.1.1",
 | 
			
		||||
    "date": "2025-06-14T17:45:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "6.1.15",
 | 
			
		||||
    "date": "2025-09-03T14:51:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "neo4j/neo4j",
 | 
			
		||||
    "version": "5.26.12",
 | 
			
		||||
@@ -709,11 +784,6 @@
 | 
			
		||||
    "version": "cassandra-4.1.10",
 | 
			
		||||
    "date": "2025-09-03T08:46:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "postgres/postgres",
 | 
			
		||||
    "version": "REL_18_RC1",
 | 
			
		||||
    "date": "2025-09-01T20:03:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "project-zot/zot",
 | 
			
		||||
    "version": "v2.1.8",
 | 
			
		||||
@@ -729,11 +799,6 @@
 | 
			
		||||
    "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": "crowdsecurity/crowdsec",
 | 
			
		||||
    "version": "v1.7.0",
 | 
			
		||||
@@ -779,16 +844,6 @@
 | 
			
		||||
    "version": "v2.29.0",
 | 
			
		||||
    "date": "2025-08-25T22:43:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sabnzbd/sabnzbd",
 | 
			
		||||
    "version": "4.5.3",
 | 
			
		||||
    "date": "2025-08-25T13:59:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zabbix/zabbix",
 | 
			
		||||
    "version": "7.4.2",
 | 
			
		||||
    "date": "2025-08-25T12:38:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "plexguide/Huntarr.io",
 | 
			
		||||
    "version": "8.2.10",
 | 
			
		||||
@@ -809,31 +864,11 @@
 | 
			
		||||
    "version": "v2.10.2",
 | 
			
		||||
    "date": "2025-08-23T03:10:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rclone/rclone",
 | 
			
		||||
    "version": "v1.71.0",
 | 
			
		||||
    "date": "2025-08-22T16:41:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "lazy-media/Reactive-Resume",
 | 
			
		||||
    "version": "v1.2.4",
 | 
			
		||||
    "date": "2025-08-22T07:40:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gethomepage/homepage",
 | 
			
		||||
    "version": "v1.4.6",
 | 
			
		||||
    "date": "2025-08-21T14:05:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "openhab/openhab-core",
 | 
			
		||||
    "version": "4.3.7",
 | 
			
		||||
    "date": "2025-08-20T10:26:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "duplicati/duplicati",
 | 
			
		||||
    "version": "v2.1.2.0-2.1.2.0_beta_2025-08-20",
 | 
			
		||||
    "date": "2025-08-20T08:15:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "karlomikus/bar-assistant",
 | 
			
		||||
    "version": "v5.8.0",
 | 
			
		||||
@@ -859,11 +894,6 @@
 | 
			
		||||
    "version": "8.2.1",
 | 
			
		||||
    "date": "2025-08-18T15:42:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jupyter/notebook",
 | 
			
		||||
    "version": "@jupyter-notebook/ui-components@7.5.0-alpha.2",
 | 
			
		||||
    "date": "2025-08-18T07:39:41Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "lldap/lldap",
 | 
			
		||||
    "version": "v0.6.2",
 | 
			
		||||
@@ -919,11 +949,6 @@
 | 
			
		||||
    "version": "mariadb-12.0.2",
 | 
			
		||||
    "date": "2025-08-07T21:23:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Athou/commafeed",
 | 
			
		||||
    "version": "5.11.0",
 | 
			
		||||
    "date": "2025-08-06T21:14:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bastienwirtz/homer",
 | 
			
		||||
    "version": "v25.08.1",
 | 
			
		||||
@@ -954,11 +979,6 @@
 | 
			
		||||
    "version": "v4.8.0",
 | 
			
		||||
    "date": "2025-08-02T09:12:10Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "alexta69/metube",
 | 
			
		||||
    "version": "2025.07.31",
 | 
			
		||||
    "date": "2025-08-01T14:44:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Suwayomi/Suwayomi-Server",
 | 
			
		||||
    "version": "v2.1.1867",
 | 
			
		||||
@@ -1089,11 +1109,6 @@
 | 
			
		||||
    "version": "v2.18.0",
 | 
			
		||||
    "date": "2025-06-24T08:29:55Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "itsmng/itsm-ng",
 | 
			
		||||
    "version": "v2.0.7",
 | 
			
		||||
    "date": "2025-06-23T14:35:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "clusterzx/paperless-ai",
 | 
			
		||||
    "version": "v3.0.7",
 | 
			
		||||
@@ -1194,11 +1209,6 @@
 | 
			
		||||
    "version": "v0.2.3",
 | 
			
		||||
    "date": "2025-05-10T21:14:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "getumbrel/umbrel",
 | 
			
		||||
    "version": "1.4.2",
 | 
			
		||||
    "date": "2025-05-09T08:54:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ZoeyVid/NPMplus",
 | 
			
		||||
    "version": "2025-05-07-r1",
 | 
			
		||||
@@ -1239,11 +1249,6 @@
 | 
			
		||||
    "version": "v0.2.11",
 | 
			
		||||
    "date": "2025-04-12T21:13:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "thomiceli/opengist",
 | 
			
		||||
    "version": "v1.10.0",
 | 
			
		||||
    "date": "2025-04-07T14:32:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "azukaar/Cosmos-Server",
 | 
			
		||||
    "version": "v0.18.4",
 | 
			
		||||
@@ -1294,11 +1299,6 @@
 | 
			
		||||
    "version": "v0.18.0",
 | 
			
		||||
    "date": "2025-03-11T12:47:22Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AlexxIT/go2rtc",
 | 
			
		||||
    "version": "v1.9.9",
 | 
			
		||||
    "date": "2025-03-10T03:22:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "awawa-dev/HyperHDR",
 | 
			
		||||
    "version": "v21.0.0.0",
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 6,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
@@ -33,11 +33,19 @@
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Database credentials: `cat zabbix.creds`",
 | 
			
		||||
      "text": "Database credentials: `cat ~/zabbix.creds`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Zabbix agent 2 is used by default",
 | 
			
		||||
      "text": "You can choose between Zabbix agent (classic) and agent2 (modern) during installation",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "For agent2 the PostgreSQL plugin is installed by default; all plugins are optional",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "If agent2 with NVIDIA plugin is installed in an environment without GPU, the installer disables it automatically",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_linux_x86_64.tar.gz"
 | 
			
		||||
fetch_and_deploy_gh_release "blocky" "0xERR0R/blocky" "prebuild" "latest" "/opt/blocky" "blocky_*_Linux_x86_64.tar.gz"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Blocky"
 | 
			
		||||
if systemctl is-active systemd-resolved >/dev/null 2>&1; then
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ curl -fsSL https://deb.globaleaks.org/globaleaks.asc | gpg --dearmor -o /etc/apt
 | 
			
		||||
echo "deb [signed-by=/etc/apt/trusted.gpg.d/globaleaks.gpg] http://deb.globaleaks.org $DISTRO_CODENAME/" >/etc/apt/sources.list.d/globaleaks.list
 | 
			
		||||
echo 'APPARMOR_SANDBOXING=0' >/etc/default/globaleaks
 | 
			
		||||
$STD apt update
 | 
			
		||||
$STD apt -y install globaleaks
 | 
			
		||||
$STD apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install globaleaks
 | 
			
		||||
msg_ok "Setup GlobaLeaks"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
 
 | 
			
		||||
@@ -24,26 +24,24 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  $STD caddy stop
 | 
			
		||||
  rm /etc/caddy/Caddyfile
 | 
			
		||||
  cat <<'EOF' >/etc/caddy/Caddyfile
 | 
			
		||||
:{$PORT:80}
 | 
			
		||||
:80
 | 
			
		||||
 | 
			
		||||
redir /admin /admin/
 | 
			
		||||
 | 
			
		||||
handle_path /admin* {
 | 
			
		||||
        root * /opt/headscale-admin
 | 
			
		||||
        encode gzip zstd
 | 
			
		||||
    root * /opt/headscale-admin
 | 
			
		||||
    encode gzip zstd
 | 
			
		||||
 | 
			
		||||
        # Correct MIME types for JS/WASM
 | 
			
		||||
        header {
 | 
			
		||||
                @js_files path *.js
 | 
			
		||||
                @wasm_files path *.wasm
 | 
			
		||||
    header {
 | 
			
		||||
        X-Content-Type-Options nosniff
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
                Content-Type @js_files application/javascript
 | 
			
		||||
                Content-Type @wasm_files application/wasm
 | 
			
		||||
    try_files {path} {path}/ /opt/headscale-admin/index.html
 | 
			
		||||
    file_server
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
                X-Content-Type-Options nosniff
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        # Fallback for SPA routing
 | 
			
		||||
        try_files {path} {path}/ index.html
 | 
			
		||||
        file_server
 | 
			
		||||
handle /api/* {
 | 
			
		||||
    reverse_proxy localhost:8080
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
 
 | 
			
		||||
@@ -272,7 +272,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.142.1" "$SRC_DIR"
 | 
			
		||||
fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.143.1" "$SRC_DIR"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing ${APPLICATION} (patience)"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										98
									
								
								install/joplin-server-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								install/joplin-server-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://joplinapp.org/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  git \
 | 
			
		||||
  rsync
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PG_VERSION="17" setup_postgresql
 | 
			
		||||
NODE_VERSION=22 NODE_MODULE="yarn@latest,npm@latest,pm2@latest" setup_nodejs
 | 
			
		||||
mkdir -p /opt/pm2
 | 
			
		||||
export PM2_HOME=/opt/pm2
 | 
			
		||||
$STD pm2 install pm2-logrotate
 | 
			
		||||
$STD pm2 set pm2-logrotate:max_size 100MB
 | 
			
		||||
$STD pm2 set pm2-logrotate:retain 5
 | 
			
		||||
$STD pm2 set pm2-logrotate:compress tr
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL Database"
 | 
			
		||||
DB_NAME=joplin
 | 
			
		||||
DB_USER=joplin
 | 
			
		||||
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
 | 
			
		||||
{
 | 
			
		||||
  echo "Joplin-Credentials"
 | 
			
		||||
  echo "Joplin Database User: $DB_USER"
 | 
			
		||||
  echo "Joplin Database Password: $DB_PASS"
 | 
			
		||||
  echo "Joplin Database Name: $DB_NAME"
 | 
			
		||||
} >>~/joplin.creds
 | 
			
		||||
msg_ok "Set up PostgreSQL Database"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "joplin-server" "laurent22/joplin" "tarball" "latest"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Joplin Server (Patience)"
 | 
			
		||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
cd /opt/joplin-server
 | 
			
		||||
sed -i "/onenote-converter/d" packages/lib/package.json
 | 
			
		||||
$STD yarn config set --home enableTelemetry 0
 | 
			
		||||
export BUILD_SEQUENCIAL=1
 | 
			
		||||
$STD yarn install --inline-builds
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/opt/joplin-server/.env
 | 
			
		||||
PM2_HOME=/opt/pm2
 | 
			
		||||
NODE_ENV=production
 | 
			
		||||
APP_BASE_URL=http://$LOCAL_IP:22300
 | 
			
		||||
APP_PORT=22300
 | 
			
		||||
DB_CLIENT=pg
 | 
			
		||||
POSTGRES_PASSWORD=$DB_PASS
 | 
			
		||||
POSTGRES_DATABASE=$DB_NAME
 | 
			
		||||
POSTGRES_USER=$DB_USER
 | 
			
		||||
POSTGRES_PORT=5432
 | 
			
		||||
POSTGRES_HOST=localhost
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Setup Joplin Server"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/joplin-server.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Joplin Server Service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/joplin-server/packages/server
 | 
			
		||||
EnvironmentFile=/opt/joplin-server/.env
 | 
			
		||||
ExecStart=/usr/bin/yarn start-prod
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=5
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now joplin-server
 | 
			
		||||
msg_ok "Service Setup"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -13,6 +13,12 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt install -y \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  python3-dev
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PG_VERSION="17" setup_postgresql
 | 
			
		||||
PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
 | 
			
		||||
@@ -75,6 +81,7 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ msg_info "Installing dependencies"
 | 
			
		||||
$STD apt-get install --no-install-recommends -y build-essential
 | 
			
		||||
msg_ok "Installed dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="20" setup_nodejs
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
MYSQL_VERSION="8.0" setup_mysql
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Database"
 | 
			
		||||
@@ -48,7 +48,7 @@ sed -i -e 's|db|localhost|' \
 | 
			
		||||
  -e "s|=PASSWORD|=$(openssl rand -base64 40 | tr -dc 'a-zA-Z0-9' | head -c40)|" \
 | 
			
		||||
  /opt/mmdl/.env
 | 
			
		||||
cd /opt/mmdl
 | 
			
		||||
export NEXT_TELEMETRY_DISABLE=1
 | 
			
		||||
export NEXT_TELEMETRY_DISABLED=1
 | 
			
		||||
export CI="true"
 | 
			
		||||
$STD npm install
 | 
			
		||||
$STD npm run migrate
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ update_os
 | 
			
		||||
PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="dom,gmp,iconv,mysqli,pdo-mysql,redis,tokenizer" setup_php
 | 
			
		||||
setup_composer
 | 
			
		||||
setup_mariadb
 | 
			
		||||
NODE_VERSION="20" NODE_MODULE="yarn@latest" setup_nodejs
 | 
			
		||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up MariaDB"
 | 
			
		||||
DB_NAME=monica
 | 
			
		||||
@@ -44,6 +44,7 @@ sed -i -e "s|^DB_USERNAME=.*|DB_USERNAME=${DB_USER}|" \
 | 
			
		||||
  -e "s|^HASH_SALT=.*|HASH_SALT=${HASH_SALT}|" \
 | 
			
		||||
  /opt/monica/.env
 | 
			
		||||
$STD composer install --no-dev -o --no-interaction
 | 
			
		||||
$STD yarn config set ignore-engines true
 | 
			
		||||
$STD yarn install
 | 
			
		||||
$STD yarn run production
 | 
			
		||||
$STD php artisan key:generate
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ msg_ok "Installed Open WebUI"
 | 
			
		||||
read -r -p "${TAB3}Would you like to add Ollama? <y/N> " prompt
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Installing Ollama"
 | 
			
		||||
  curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
 | 
			
		||||
  curl -fsSLO -C - https://ollama.com/download/ollama-linux-amd64.tgz
 | 
			
		||||
  tar -C /usr -xzf ollama-linux-amd64.tgz
 | 
			
		||||
  rm -rf ollama-linux-amd64.tgz
 | 
			
		||||
  cat <<EOF >/etc/systemd/system/ollama.service
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ $STD apt-get install -y \
 | 
			
		||||
  redis
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="20" NODE_MODULE="yarn@latest" setup_nodejs
 | 
			
		||||
NODE_VERSION="22" NODE_MODULE="yarn@latest" setup_nodejs
 | 
			
		||||
PG_VERSION="16" setup_postgresql
 | 
			
		||||
 | 
			
		||||
msg_info "Set up PostgreSQL Database"
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ $STD apt-get install -y \
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
setup_mariadb
 | 
			
		||||
PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="common,mysql,fpm,redis" setup_php
 | 
			
		||||
PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="common,mysql,redis" setup_php
 | 
			
		||||
setup_composer
 | 
			
		||||
fetch_and_deploy_gh_release "paymenter" "paymenter/paymenter" "prebuild" "latest" "/opt/paymenter" "paymenter.tar.gz"
 | 
			
		||||
chmod -R 755 /opt/paymenter/storage/* /opt/paymenter/bootstrap/cache/
 | 
			
		||||
@@ -30,7 +30,7 @@ msg_info "Setting up database"
 | 
			
		||||
DB_NAME=paymenter
 | 
			
		||||
DB_USER=paymenter
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql
 | 
			
		||||
mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb mysql
 | 
			
		||||
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
 | 
			
		||||
$STD mariadb -u root -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost' WITH GRANT OPTION;"
 | 
			
		||||
@@ -108,8 +108,8 @@ RestartSec=5s
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable --now paymenter
 | 
			
		||||
systemctl enable --now redis-server
 | 
			
		||||
systemctl enable -q --now paymenter
 | 
			
		||||
systemctl enable -q --now redis-server
 | 
			
		||||
msg_ok "Setup Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
 
 | 
			
		||||
@@ -30,9 +30,9 @@ $STD apt-get install -y --no-install-recommends \
 | 
			
		||||
  libxmlsec1-openssl
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="20" NODE_MODULE="yarn" setup_nodejs
 | 
			
		||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "tandoor" "TandoorRecipes/recipes" "tarball" "latest" "/opt/tandoor"
 | 
			
		||||
PG_VERSION="16" setup_postgresql
 | 
			
		||||
PG_VERSION="17" PG_MODULES="contrib" setup_postgresql
 | 
			
		||||
PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
 | 
			
		||||
msg_info "Set up PostgreSQL Database"
 | 
			
		||||
@@ -45,6 +45,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
 | 
			
		||||
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS unaccent;"
 | 
			
		||||
$STD sudo -u postgres psql -d "$DB_NAME" -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
 | 
			
		||||
{
 | 
			
		||||
  echo "Tandoor-Credentials"
 | 
			
		||||
  echo "Tandoor Database Name: $DB_NAME"
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ $STD npm install
 | 
			
		||||
$STD npm run build
 | 
			
		||||
mkdir /opt/tracktor-data
 | 
			
		||||
HOST_IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
cat <<EOF >/opt/tracktor/app/backend/.env
 | 
			
		||||
cat <<EOF >/opt/tracktor.env
 | 
			
		||||
NODE_ENV=production
 | 
			
		||||
PUBLIC_DEMO_MODE=false
 | 
			
		||||
DB_PATH=/opt/tracktor-data/tracktor.db
 | 
			
		||||
@@ -31,6 +31,7 @@ PUBLIC_API_BASE_URL=http://$HOST_IP:3000
 | 
			
		||||
# Here add the reverse proxy url as well to avoid cross errors from the app. 
 | 
			
		||||
CORS_ORIGINS=http://$HOST_IP:3000 
 | 
			
		||||
PORT=3000
 | 
			
		||||
AUTH_PIN=123456
 | 
			
		||||
EOF
 | 
			
		||||
msg_ok "Configured Tracktor"
 | 
			
		||||
 | 
			
		||||
@@ -43,7 +44,7 @@ After=network.target
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/tracktor
 | 
			
		||||
EnvironmentFile=/opt/tracktor/app/backend/.env
 | 
			
		||||
EnvironmentFile=/opt/tracktor.env
 | 
			
		||||
ExecStart=/usr/bin/npm start
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
@@ -56,6 +57,7 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								install/upsnap-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								install/upsnap-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/seriousm4x/UpSnap
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt install -y \
 | 
			
		||||
  nmap \
 | 
			
		||||
  samba \
 | 
			
		||||
  samba-common-bin \
 | 
			
		||||
  openssh-client \
 | 
			
		||||
  openssh-server \
 | 
			
		||||
  sshpass
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "upsnap" "seriousm4x/UpSnap" "prebuild" "latest" "/opt/upsnap" "UpSnap_*_linux_amd64.zip"
 | 
			
		||||
setcap 'cap_net_raw=+ep' /opt/upsnap/upsnap
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/upsnap.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=UpSnap Service
 | 
			
		||||
Documentation=https://github.com/seriousm4x/UpSnap/wiki
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
User=root
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
WorkingDirectory=/opt/upsnap
 | 
			
		||||
ExecStart=/opt/upsnap/upsnap serve --http=0.0.0.0:8090
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now upsnap
 | 
			
		||||
msg_ok "Service Created"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -13,20 +13,61 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
PG_VERSION="17" setup_postgresql
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Zabbix"
 | 
			
		||||
cd /tmp
 | 
			
		||||
curl -fsSL "$(curl -fsSL https://repo.zabbix.com/zabbix/ |
 | 
			
		||||
  grep -oP '(?<=href=")[0-9]+\.[0-9]+(?=/")' | sort -V | tail -n1 |
 | 
			
		||||
  xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb")" \
 | 
			
		||||
  -o /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
$STD dpkg -i /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts
 | 
			
		||||
$STD apt-get install -y zabbix-agent2 zabbix-agent2-plugin-*
 | 
			
		||||
  xargs -I{} echo "https://repo.zabbix.com/zabbix/{}/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian13_all.deb")" \
 | 
			
		||||
  -o /tmp/zabbix-release_latest+debian13_all.deb
 | 
			
		||||
$STD dpkg -i /tmp/zabbix-release_latest+debian13_all.deb
 | 
			
		||||
$STD apt update
 | 
			
		||||
$STD apt install -y zabbix-server-pgsql zabbix-frontend-php php8.4-pgsql zabbix-apache-conf zabbix-sql-scripts
 | 
			
		||||
msg_ok "Installed Zabbix"
 | 
			
		||||
 | 
			
		||||
while true; do
 | 
			
		||||
  read -rp "Which agent do you want to install? [1=agent (classic), 2=agent2 (modern), default=1]: " AGENT_CHOICE
 | 
			
		||||
  case "$AGENT_CHOICE" in
 | 
			
		||||
  2)
 | 
			
		||||
    AGENT_PKG="zabbix-agent2"
 | 
			
		||||
    break
 | 
			
		||||
    ;;
 | 
			
		||||
  "" | 1)
 | 
			
		||||
    AGENT_PKG="zabbix-agent"
 | 
			
		||||
    break
 | 
			
		||||
    ;;
 | 
			
		||||
  *)
 | 
			
		||||
    echo "Invalid choice. Please enter 1 or 2."
 | 
			
		||||
    ;;
 | 
			
		||||
  esac
 | 
			
		||||
done
 | 
			
		||||
msg_ok "Selected $AGENT_PKG"
 | 
			
		||||
 | 
			
		||||
if [ "$AGENT_PKG" = "zabbix-agent2" ]; then
 | 
			
		||||
  echo "Choose plugins for Zabbix Agent2:"
 | 
			
		||||
  echo "1) PostgreSQL only (default, recommended)"
 | 
			
		||||
  echo "2) All plugins (may cause issues)"
 | 
			
		||||
  read -rp "Choose option [1-2]: " PLUGIN_CHOICE
 | 
			
		||||
 | 
			
		||||
  case "$PLUGIN_CHOICE" in
 | 
			
		||||
  2)
 | 
			
		||||
    $STD apt install -y zabbix-agent2 zabbix-agent2-plugin-*
 | 
			
		||||
    ;;
 | 
			
		||||
  *)
 | 
			
		||||
    $STD apt install -y zabbix-agent2 zabbix-agent2-plugin-postgresql
 | 
			
		||||
    ;;
 | 
			
		||||
  esac
 | 
			
		||||
 | 
			
		||||
  if [ -f /etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf ]; then
 | 
			
		||||
    sed -i 's|^Plugins.NVIDIA.System.Path=.*|# Plugins.NVIDIA.System.Path=/usr/libexec/zabbix/zabbix-agent2-plugin-nvidia-gpu|' \
 | 
			
		||||
      /etc/zabbix/zabbix_agent2.d/plugins.d/nvidia.conf
 | 
			
		||||
  fi
 | 
			
		||||
else
 | 
			
		||||
  $STD apt install -y zabbix-agent
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL"
 | 
			
		||||
$STD apt-get install -y postgresql
 | 
			
		||||
DB_NAME=zabbixdb
 | 
			
		||||
DB_USER=zabbix
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
 | 
			
		||||
@@ -35,18 +76,31 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCO
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
 | 
			
		||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
 | 
			
		||||
{
 | 
			
		||||
  echo "Zabbix-Credentials"
 | 
			
		||||
  echo "Zabbix Database User: $DB_USER"
 | 
			
		||||
  echo "Zabbix Database Password: $DB_PASS"
 | 
			
		||||
  echo "Zabbix Database Name: $DB_NAME"
 | 
			
		||||
} >>~/zabbix.creds
 | 
			
		||||
 | 
			
		||||
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u $DB_USER psql $DB_NAME &>/dev/null
 | 
			
		||||
sed -i "s/^DBName=.*/DBName=$DB_NAME/" /etc/zabbix/zabbix_server.conf
 | 
			
		||||
sed -i "s/^DBUser=.*/DBUser=$DB_USER/" /etc/zabbix/zabbix_server.conf
 | 
			
		||||
sed -i "s/^# DBPassword=.*/DBPassword=$DB_PASS/" /etc/zabbix/zabbix_server.conf
 | 
			
		||||
echo "" >~/zabbix.creds
 | 
			
		||||
echo "zabbix Database Credentials" >>~/zabbix.creds
 | 
			
		||||
echo "" >>~/zabbix.creds
 | 
			
		||||
echo -e "zabbix Database User: \e[32m$DB_USER\e[0m" >>~/zabbix.creds
 | 
			
		||||
echo -e "zabbix Database Password: \e[32m$DB_PASS\e[0m" >>~/zabbix.creds
 | 
			
		||||
echo -e "zabbix Database Name: \e[32m$DB_NAME\e[0m" >>~/zabbix.creds
 | 
			
		||||
msg_ok "Set up PostgreSQL"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Fping"
 | 
			
		||||
if command -v fping >/dev/null 2>&1; then
 | 
			
		||||
  FPING_PATH=$(command -v fping)
 | 
			
		||||
  sed -i "s|^#\?FpingLocation=.*|FpingLocation=$FPING_PATH|" /etc/zabbix/zabbix_server.conf
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if command -v fping6 >/dev/null 2>&1; then
 | 
			
		||||
  FPING6_PATH=$(command -v fping6)
 | 
			
		||||
  sed -i "s|^#\?Fping6Location=.*|Fping6Location=$FPING6_PATH|" /etc/zabbix/zabbix_server.conf
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Configured Fping"
 | 
			
		||||
 | 
			
		||||
msg_info "Starting Services"
 | 
			
		||||
systemctl restart zabbix-server zabbix-agent2 apache2
 | 
			
		||||
systemctl enable -q --now zabbix-server zabbix-agent2 apache2
 | 
			
		||||
@@ -56,7 +110,8 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
rm -rf /tmp/zabbix-release_latest+debian13_all.deb
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -42,11 +42,11 @@ error_handler() {
 | 
			
		||||
  echo -e "\n$error_message\n"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Check if the shell is using bash
 | 
			
		||||
# Check if the current shell is using bash
 | 
			
		||||
shell_check() {
 | 
			
		||||
  if [[ "$(basename "$SHELL")" != "bash" ]]; then
 | 
			
		||||
  if [[ "$(ps -p $$ -o comm=)" != "bash" ]]; then
 | 
			
		||||
    clear
 | 
			
		||||
    msg_error "Your default shell is currently not set to Bash. To use these scripts, please switch to the Bash shell."
 | 
			
		||||
    msg_error "Your default shell is not bash. Please report this to our github issues or discord."
 | 
			
		||||
    echo -e "\nExiting..."
 | 
			
		||||
    sleep 2
 | 
			
		||||
    exit
 | 
			
		||||
 
 | 
			
		||||
@@ -306,6 +306,9 @@ function fetch_and_deploy_gh_release() {
 | 
			
		||||
 | 
			
		||||
  msg_info "Fetching GitHub release: $app ($version)"
 | 
			
		||||
 | 
			
		||||
  local clean_install=false
 | 
			
		||||
  [[ -n "${CLEAN_INSTALL:-}" && "$CLEAN_INSTALL" == "1" ]] && clean_install=true
 | 
			
		||||
 | 
			
		||||
  ### Tarball Mode ###
 | 
			
		||||
  if [[ "$mode" == "tarball" || "$mode" == "source" ]]; then
 | 
			
		||||
    url=$(echo "$json" | jq -r '.tarball_url // empty')
 | 
			
		||||
@@ -319,6 +322,10 @@ function fetch_and_deploy_gh_release() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mkdir -p "$target"
 | 
			
		||||
    if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then
 | 
			
		||||
      rm -rf "${target:?}/"*
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    tar -xzf "$tmpdir/$filename" -C "$tmpdir"
 | 
			
		||||
    local unpack_dir
 | 
			
		||||
    unpack_dir=$(find "$tmpdir" -mindepth 1 -maxdepth 1 -type d | head -n1)
 | 
			
		||||
@@ -388,7 +395,7 @@ function fetch_and_deploy_gh_release() {
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  ### Prebuild Mode ###
 | 
			
		||||
    ### Prebuild Mode ###
 | 
			
		||||
  elif [[ "$mode" == "prebuild" ]]; then
 | 
			
		||||
    local pattern="${6%\"}"
 | 
			
		||||
    pattern="${pattern#\"}"
 | 
			
		||||
@@ -425,6 +432,9 @@ function fetch_and_deploy_gh_release() {
 | 
			
		||||
    local unpack_tmp
 | 
			
		||||
    unpack_tmp=$(mktemp -d)
 | 
			
		||||
    mkdir -p "$target"
 | 
			
		||||
    if [[ "${CLEAN_INSTALL:-0}" == "1" ]]; then
 | 
			
		||||
      rm -rf "${target:?}/"*
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [[ "$filename" == *.zip ]]; then
 | 
			
		||||
      if ! command -v unzip &>/dev/null; then
 | 
			
		||||
@@ -1322,7 +1332,7 @@ function setup_mysql() {
 | 
			
		||||
  CURRENT_OS="$(awk -F= '/^ID=/{print $2}' /etc/os-release)"
 | 
			
		||||
 | 
			
		||||
  if command -v mysql >/dev/null; then
 | 
			
		||||
    CURRENT_VERSION="$(mysql --version | grep -oP 'Distrib\s+\K[0-9]+\.[0-9]+')"
 | 
			
		||||
    CURRENT_VERSION="$(mysql --version | grep -oP '[0-9]+\.[0-9]+' | head -n1)"
 | 
			
		||||
    if [[ "$CURRENT_VERSION" != "$MYSQL_VERSION" ]]; then
 | 
			
		||||
      $STD msg_info "MySQL $CURRENT_VERSION will be upgraded to $MYSQL_VERSION"
 | 
			
		||||
      NEED_INSTALL=true
 | 
			
		||||
@@ -1960,9 +1970,8 @@ function setup_uv() {
 | 
			
		||||
    export PATH="/usr/local/bin:$PATH"
 | 
			
		||||
  fi
 | 
			
		||||
  ensure_usr_local_bin_persist
 | 
			
		||||
  if ! $STD uv python update-shell; then
 | 
			
		||||
    msg_error "uv shell integration failed – continuing anyway"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  $STD uv python update-shell >/dev/null 2>&1 || true
 | 
			
		||||
  msg_ok "Setup uv $LATEST_VERSION"
 | 
			
		||||
 | 
			
		||||
  # Optional: install specific Python version
 | 
			
		||||
@@ -2012,6 +2021,8 @@ function setup_yq() {
 | 
			
		||||
    }
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  [[ ":$PATH:" != *":/usr/local/bin:"* ]] && echo 'export PATH="/usr/local/bin:$PATH"' >>~/.bashrc && source ~/.bashrc
 | 
			
		||||
 | 
			
		||||
  if command -v yq &>/dev/null; then
 | 
			
		||||
    if ! yq --version 2>&1 | grep -q 'mikefarah'; then
 | 
			
		||||
      rm -f "$(command -v yq)"
 | 
			
		||||
 
 | 
			
		||||
@@ -532,20 +532,28 @@ if [ -f "$MOBILE_TPL" ] && ! grep -q "$MARKER" "$MOBILE_TPL"; then
 | 
			
		||||
      "$MARKER" \
 | 
			
		||||
      "<script>" \
 | 
			
		||||
      "  function removeSubscriptionElements() {" \
 | 
			
		||||
      "    // --- Remove subscription dialogs ---" \
 | 
			
		||||
      "    const dialogs = document.querySelectorAll('dialog.pwt-outer-dialog');" \
 | 
			
		||||
      "    dialogs.forEach(dialog => {" \
 | 
			
		||||
      "      const closeButton = dialog.querySelector('.fa-close');" \
 | 
			
		||||
      "      const exclamationIcon = dialog.querySelector('.fa-exclamation-triangle');" \
 | 
			
		||||
      "      const continueButton = dialog.querySelector('button');" \
 | 
			
		||||
      "      if (closeButton && exclamationIcon && continueButton) { dialog.remove(); console.log('Removed subscription dialog'); }" \
 | 
			
		||||
      "      const text = (dialog.textContent || '').toLowerCase();" \
 | 
			
		||||
      "      if (text.includes('subscription')) {" \
 | 
			
		||||
      "        dialog.remove();" \
 | 
			
		||||
      "        console.log('Removed subscription dialog');" \
 | 
			
		||||
      "      }" \
 | 
			
		||||
      "    });" \
 | 
			
		||||
      "" \
 | 
			
		||||
      "    // --- Remove subscription cards, but keep Reboot/Shutdown/Console ---" \
 | 
			
		||||
      "    const cards = document.querySelectorAll('.pwt-card.pwt-p-2.pwt-d-flex.pwt-interactive.pwt-justify-content-center');" \
 | 
			
		||||
      "    cards.forEach(card => {" \
 | 
			
		||||
      "      const hasInteractiveElements = card.querySelector('button, input, a');" \
 | 
			
		||||
      "      const hasComplexStructure = card.querySelector('.pwt-grid, .pwt-flex, .pwt-button');" \
 | 
			
		||||
      "      if (!hasInteractiveElements && !hasComplexStructure) { card.remove(); console.log('Removed subscription card'); }" \
 | 
			
		||||
      "      const text = (card.textContent || '').toLowerCase();" \
 | 
			
		||||
      "      const hasButton = card.querySelector('button');" \
 | 
			
		||||
      "      if (!hasButton && text.includes('subscription')) {" \
 | 
			
		||||
      "        card.remove();" \
 | 
			
		||||
      "        console.log('Removed subscription card');" \
 | 
			
		||||
      "      }" \
 | 
			
		||||
      "    });" \
 | 
			
		||||
      "  }" \
 | 
			
		||||
      "" \
 | 
			
		||||
      "  const observer = new MutationObserver(removeSubscriptionElements);" \
 | 
			
		||||
      "  observer.observe(document.body, { childList: true, subtree: true });" \
 | 
			
		||||
      "  removeSubscriptionElements();" \
 | 
			
		||||
@@ -555,7 +563,6 @@ if [ -f "$MOBILE_TPL" ] && ! grep -q "$MARKER" "$MOBILE_TPL"; then
 | 
			
		||||
      "" >> "$MOBILE_TPL"
 | 
			
		||||
fi
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
    chmod 755 /usr/local/bin/pve-remove-nag.sh
 | 
			
		||||
 | 
			
		||||
    cat >/etc/apt/apt.conf.d/no-nag-script <<'EOF'
 | 
			
		||||
 
 | 
			
		||||
@@ -205,15 +205,69 @@ function exit-script() {
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Ensure pv is installed or abort with instructions
 | 
			
		||||
function ensure_pv() {
 | 
			
		||||
  if ! command -v pv &>/dev/null; then
 | 
			
		||||
    msg_info "Installing required package: pv"
 | 
			
		||||
    apt-get update -qq &>/dev/null
 | 
			
		||||
    apt-get install -y pv &>/dev/null
 | 
			
		||||
    if ! apt-get update -qq &>/dev/null || ! apt-get install -y pv &>/dev/null; then
 | 
			
		||||
      msg_error "Failed to install pv automatically."
 | 
			
		||||
      echo -e "\nPlease run manually on the Proxmox host:\n  apt install pv\n"
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Installed pv"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Download an .xz file and validate it
 | 
			
		||||
# Args: $1=url $2=cache_file
 | 
			
		||||
function download_and_validate_xz() {
 | 
			
		||||
  local url="$1"
 | 
			
		||||
  local file="$2"
 | 
			
		||||
 | 
			
		||||
  # If file exists, check validity
 | 
			
		||||
  if [[ -s "$file" ]]; then
 | 
			
		||||
    if xz -t "$file" &>/dev/null; then
 | 
			
		||||
      msg_ok "Using cached image $(basename "$file")"
 | 
			
		||||
      return 0
 | 
			
		||||
    else
 | 
			
		||||
      msg_error "Cached file $(basename "$file") is corrupted. Deleting and retrying download..."
 | 
			
		||||
      rm -f "$file"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Download fresh file
 | 
			
		||||
  msg_info "Downloading image: $(basename "$file")"
 | 
			
		||||
  if ! curl -fSL -o "$file" "$url"; then
 | 
			
		||||
    msg_error "Download failed: $url"
 | 
			
		||||
    rm -f "$file"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Validate again
 | 
			
		||||
  if ! xz -t "$file" &>/dev/null; then
 | 
			
		||||
    msg_error "Downloaded file $(basename "$file") is corrupted. Please try again later."
 | 
			
		||||
    rm -f "$file"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  msg_ok "Downloaded and validated $(basename "$file")"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Extract .xz with pv
 | 
			
		||||
# Args: $1=cache_file $2=target_img
 | 
			
		||||
function extract_xz_with_pv() {
 | 
			
		||||
  set -o pipefail
 | 
			
		||||
  local file="$1"
 | 
			
		||||
  local target="$2"
 | 
			
		||||
 | 
			
		||||
  msg_info "Decompressing $(basename "$file") to $target"
 | 
			
		||||
  if ! xz -dc "$file" | pv -N "Extracting" >"$target"; then
 | 
			
		||||
    msg_error "Failed to extract $file"
 | 
			
		||||
    rm -f "$target"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  msg_ok "Decompressed to $target"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  BRANCH="$stable"
 | 
			
		||||
  VMID=$(get_valid_nextid)
 | 
			
		||||
@@ -507,23 +561,15 @@ FILE_IMG="/var/lib/vz/template/tmp/${CACHE_FILE##*/%.xz}" # .qcow2
 | 
			
		||||
mkdir -p "$CACHE_DIR" "$(dirname "$FILE_IMG")"
 | 
			
		||||
msg_ok "${CL}${BL}${URL}${CL}"
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
download_and_validate_xz "$URL" "$CACHE_FILE"
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
extract_xz_with_pv "$CACHE_FILE" "$FILE_IMG"
 | 
			
		||||
 | 
			
		||||
msg_info "Importing disk into storage ($STORAGE)"
 | 
			
		||||
if qm disk import --help >/dev/null 2>&1; then
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,6 @@ GN=$(echo "\033[1;92m")
 | 
			
		||||
DGN=$(echo "\033[32m")
 | 
			
		||||
CL=$(echo "\033[m")
 | 
			
		||||
 | 
			
		||||
CL=$(echo "\033[m")
 | 
			
		||||
BOLD=$(echo "\033[1m")
 | 
			
		||||
BFR="\\r\\033[K"
 | 
			
		||||
HOLD=" "
 | 
			
		||||
@@ -201,15 +200,69 @@ function exit-script() {
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Ensure pv is installed or abort with instructions
 | 
			
		||||
function ensure_pv() {
 | 
			
		||||
  if ! command -v pv &>/dev/null; then
 | 
			
		||||
    msg_info "Installing required package: pv"
 | 
			
		||||
    apt-get update -qq &>/dev/null
 | 
			
		||||
    apt-get install -y pv &>/dev/null
 | 
			
		||||
    if ! apt-get update -qq &>/dev/null || ! apt-get install -y pv &>/dev/null; then
 | 
			
		||||
      msg_error "Failed to install pv automatically."
 | 
			
		||||
      echo -e "\nPlease run manually on the Proxmox host:\n  apt install pv\n"
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Installed pv"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Download an .xz file and validate it
 | 
			
		||||
# Args: $1=url $2=cache_file
 | 
			
		||||
function download_and_validate_xz() {
 | 
			
		||||
  local url="$1"
 | 
			
		||||
  local file="$2"
 | 
			
		||||
 | 
			
		||||
  # If file exists, check validity
 | 
			
		||||
  if [[ -s "$file" ]]; then
 | 
			
		||||
    if xz -t "$file" &>/dev/null; then
 | 
			
		||||
      msg_ok "Using cached image $(basename "$file")"
 | 
			
		||||
      return 0
 | 
			
		||||
    else
 | 
			
		||||
      msg_error "Cached file $(basename "$file") is corrupted. Deleting and retrying download..."
 | 
			
		||||
      rm -f "$file"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Download fresh file
 | 
			
		||||
  msg_info "Downloading image: $(basename "$file")"
 | 
			
		||||
  if ! curl -fSL -o "$file" "$url"; then
 | 
			
		||||
    msg_error "Download failed: $url"
 | 
			
		||||
    rm -f "$file"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Validate again
 | 
			
		||||
  if ! xz -t "$file" &>/dev/null; then
 | 
			
		||||
    msg_error "Downloaded file $(basename "$file") is corrupted. Please try again later."
 | 
			
		||||
    rm -f "$file"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  msg_ok "Downloaded and validated $(basename "$file")"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Extract .xz with pv
 | 
			
		||||
# Args: $1=cache_file $2=target_img
 | 
			
		||||
function extract_xz_with_pv() {
 | 
			
		||||
  set -o pipefail
 | 
			
		||||
  local file="$1"
 | 
			
		||||
  local target="$2"
 | 
			
		||||
 | 
			
		||||
  msg_info "Decompressing $(basename "$file") to $target"
 | 
			
		||||
  if ! xz -dc "$file" | pv -N "Extracting" >"$target"; then
 | 
			
		||||
    msg_error "Failed to extract $file"
 | 
			
		||||
    rm -f "$target"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  msg_ok "Decompressed to $target"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  VMID=$(get_valid_nextid)
 | 
			
		||||
  MACHINE="q35"
 | 
			
		||||
@@ -475,19 +528,13 @@ 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
 | 
			
		||||
download_and_validate_xz "$URL" "$CACHE_FILE"
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
xz -dc "$CACHE_FILE" | pv -N "Extracting" >"$FILE_IMG"
 | 
			
		||||
extract_xz_with_pv "$CACHE_FILE" "$FILE_IMG"
 | 
			
		||||
 | 
			
		||||
if qm disk import --help >/dev/null 2>&1; then
 | 
			
		||||
  IMPORT_CMD=(qm disk import)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user