mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			205 Commits
		
	
	
		
			2025-06-28
			...
			2025-07-08
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					3b7036ae58 | ||
| 
						 | 
					4412b39d21 | ||
| 
						 | 
					0faf06f4e2 | ||
| 
						 | 
					0b300fb9ab | ||
| 
						 | 
					08b89eb285 | ||
| 
						 | 
					9cbcf4435a | ||
| 
						 | 
					e4252a58ee | ||
| 
						 | 
					08eb914e3c | ||
| 
						 | 
					000b7d4a85 | ||
| 
						 | 
					bb33002c2a | ||
| 
						 | 
					7bafa864d0 | ||
| 
						 | 
					396e0c6523 | ||
| 
						 | 
					1530e52108 | ||
| 
						 | 
					451f6aff8e | ||
| 
						 | 
					046acc75db | ||
| 
						 | 
					f40218aa07 | ||
| 
						 | 
					c5e831dadc | ||
| 
						 | 
					16786a8304 | ||
| 
						 | 
					fc728bcca7 | ||
| 
						 | 
					5516aa493d | ||
| 
						 | 
					54f2f98193 | ||
| 
						 | 
					137a41f67c | ||
| 
						 | 
					26365561dc | ||
| 
						 | 
					9dc0fc80b9 | ||
| 
						 | 
					722f7e14d7 | ||
| 
						 | 
					b2a8a9bd00 | ||
| 
						 | 
					12bd6754ab | ||
| 
						 | 
					74166f97f9 | ||
| 
						 | 
					b2bccd9501 | ||
| 
						 | 
					c567b75aa7 | ||
| 
						 | 
					2d77790b64 | ||
| 
						 | 
					37d466103d | ||
| 
						 | 
					d59aa0527a | ||
| 
						 | 
					9ddf10f82e | ||
| 
						 | 
					69d2835c73 | ||
| 
						 | 
					59f99a27d2 | ||
| 
						 | 
					372b52f64d | ||
| 
						 | 
					2586c9f385 | ||
| 
						 | 
					5c5d5d52ce | ||
| 
						 | 
					c2a7e990bd | ||
| 
						 | 
					3847442ca5 | ||
| 
						 | 
					6996111473 | ||
| 
						 | 
					3336f6a6f5 | ||
| 
						 | 
					be6a63cd03 | ||
| 
						 | 
					160846e98b | ||
| 
						 | 
					e63128625e | ||
| 
						 | 
					e58ad9237a | ||
| 
						 | 
					2ce64b5004 | ||
| 
						 | 
					9893379eef | ||
| 
						 | 
					9ae95d1eb5 | ||
| 
						 | 
					8a178b6f45 | ||
| 
						 | 
					f0b645c894 | ||
| 
						 | 
					2be5d83a6d | ||
| 
						 | 
					fafb7501c5 | ||
| 
						 | 
					4bac3063da | ||
| 
						 | 
					29d3015314 | ||
| 
						 | 
					4d2fcb2c66 | ||
| 
						 | 
					ca6b1a95dd | ||
| 
						 | 
					14cb9f097d | ||
| 
						 | 
					4d4726ccbe | ||
| 
						 | 
					3ce5893fe3 | ||
| 
						 | 
					993b01fa83 | ||
| 
						 | 
					5c4abb6d1d | ||
| 
						 | 
					06ec9593da | ||
| 
						 | 
					ace106051b | ||
| 
						 | 
					e2396f6667 | ||
| 
						 | 
					067b3c2f02 | ||
| 
						 | 
					73f1c261ab | ||
| 
						 | 
					2cbf0f744f | ||
| 
						 | 
					a6517f4d7e | ||
| 
						 | 
					e492a9b5d9 | ||
| 
						 | 
					5e7eb4ae3a | ||
| 
						 | 
					1a8a34b533 | ||
| 
						 | 
					c38b4c2ef3 | ||
| 
						 | 
					679699e6af | ||
| 
						 | 
					32a724ac8a | ||
| 
						 | 
					798a7b323e | ||
| 
						 | 
					f1eda9a270 | ||
| 
						 | 
					5eaee5054f | ||
| 
						 | 
					e140631760 | ||
| 
						 | 
					ae24b56c61 | ||
| 
						 | 
					cb7d58b9b0 | ||
| 
						 | 
					115b21f729 | ||
| 
						 | 
					9072459066 | ||
| 
						 | 
					c2f9737435 | ||
| 
						 | 
					e5bea1f49a | ||
| 
						 | 
					f7e9fbc473 | ||
| 
						 | 
					66a5730288 | ||
| 
						 | 
					1cefb1b842 | ||
| 
						 | 
					16ac51b551 | ||
| 
						 | 
					28ed2da95f | ||
| 
						 | 
					0c98308b60 | ||
| 
						 | 
					9128b9dd12 | ||
| 
						 | 
					301a23e5f4 | ||
| 
						 | 
					2b848ff1d8 | ||
| 
						 | 
					3d69931675 | ||
| 
						 | 
					3e504cf48f | ||
| 
						 | 
					d2cbfcd69a | ||
| 
						 | 
					ebfb6a4e34 | ||
| 
						 | 
					7403470bd7 | ||
| 
						 | 
					af9475d280 | ||
| 
						 | 
					8882a17b6f | ||
| 
						 | 
					32d6194ade | ||
| 
						 | 
					569089cb73 | ||
| 
						 | 
					f494e68016 | ||
| 
						 | 
					7561e26c0a | ||
| 
						 | 
					a95be13c95 | ||
| 
						 | 
					9ab50d4248 | ||
| 
						 | 
					f5be1d270a | ||
| 
						 | 
					524a2a422d | ||
| 
						 | 
					45fbc30cc5 | ||
| 
						 | 
					f8c1d7bde8 | ||
| 
						 | 
					9b8657fbb3 | ||
| 
						 | 
					f68f19aa3d | ||
| 
						 | 
					85758f8b91 | ||
| 
						 | 
					e981c42517 | ||
| 
						 | 
					7d6ac73153 | ||
| 
						 | 
					aad2dd6232 | ||
| 
						 | 
					cb24880115 | ||
| 
						 | 
					0e87c4fe34 | ||
| 
						 | 
					438eddbde1 | ||
| 
						 | 
					729895e2ed | ||
| 
						 | 
					3371529cce | ||
| 
						 | 
					1ac1aadbe3 | ||
| 
						 | 
					10127650fa | ||
| 
						 | 
					3533c896a3 | ||
| 
						 | 
					ee6f07b31a | ||
| 
						 | 
					5ac4818030 | ||
| 
						 | 
					c293b058c0 | ||
| 
						 | 
					cadeee4deb | ||
| 
						 | 
					f401c7cc4c | ||
| 
						 | 
					a3ea46701c | ||
| 
						 | 
					009178a3dc | ||
| 
						 | 
					38e8b70873 | ||
| 
						 | 
					31cda26096 | ||
| 
						 | 
					e16aac7a83 | ||
| 
						 | 
					2a52baf57e | ||
| 
						 | 
					28d3297d66 | ||
| 
						 | 
					4784d76d49 | ||
| 
						 | 
					8ef7efaf79 | ||
| 
						 | 
					736802af76 | ||
| 
						 | 
					8fee28b690 | ||
| 
						 | 
					c8682d5f81 | ||
| 
						 | 
					ef571559d6 | ||
| 
						 | 
					16c48fa41a | ||
| 
						 | 
					710c1fd58c | ||
| 
						 | 
					21f7276c4f | ||
| 
						 | 
					bf05f4be95 | ||
| 
						 | 
					be01124d1a | ||
| 
						 | 
					8a91b87f4c | ||
| 
						 | 
					020a4b3597 | ||
| 
						 | 
					f93c568758 | ||
| 
						 | 
					d9d4444f08 | ||
| 
						 | 
					400a82e2cc | ||
| 
						 | 
					35a0d14110 | ||
| 
						 | 
					a78dd20a2e | ||
| 
						 | 
					4af08a5c45 | ||
| 
						 | 
					2959d37b65 | ||
| 
						 | 
					3275136db7 | ||
| 
						 | 
					c4c974a01d | ||
| 
						 | 
					4fe05d09a2 | ||
| 
						 | 
					7b5dd6cd69 | ||
| 
						 | 
					28c779ef86 | ||
| 
						 | 
					8c1dac0583 | ||
| 
						 | 
					2db514f666 | ||
| 
						 | 
					0232dbd89d | ||
| 
						 | 
					70f43cb904 | ||
| 
						 | 
					05e06d0782 | ||
| 
						 | 
					89c39783b4 | ||
| 
						 | 
					3f3278b022 | ||
| 
						 | 
					bda9f482c1 | ||
| 
						 | 
					7292dbb8c6 | ||
| 
						 | 
					2bdf85db39 | ||
| 
						 | 
					546bff56fa | ||
| 
						 | 
					1896f2db0f | ||
| 
						 | 
					e47828f0a4 | ||
| 
						 | 
					c511f7d9e5 | ||
| 
						 | 
					a106e7e358 | ||
| 
						 | 
					254f2b894d | ||
| 
						 | 
					733251a0a2 | ||
| 
						 | 
					bcfa05db47 | ||
| 
						 | 
					5313f00edb | ||
| 
						 | 
					f83bfd1598 | ||
| 
						 | 
					fd27524479 | ||
| 
						 | 
					8155fea034 | ||
| 
						 | 
					c853054067 | ||
| 
						 | 
					a80ec39740 | ||
| 
						 | 
					bb33d00829 | ||
| 
						 | 
					be64a6700d | ||
| 
						 | 
					247bc549e8 | ||
| 
						 | 
					b26c5c9354 | ||
| 
						 | 
					5e5c79ef29 | ||
| 
						 | 
					4db81b8c41 | ||
| 
						 | 
					0b97f26b13 | ||
| 
						 | 
					f2a21617f7 | ||
| 
						 | 
					ed618b7144 | ||
| 
						 | 
					1ec71332bf | ||
| 
						 | 
					5696dffd02 | ||
| 
						 | 
					1e93f131d2 | ||
| 
						 | 
					022f88c30a | ||
| 
						 | 
					b661f3cbcc | ||
| 
						 | 
					9b97e4974a | ||
| 
						 | 
					e2b36b540f | ||
| 
						 | 
					983a09c5db | ||
| 
						 | 
					f605085021 | 
							
								
								
									
										27
									
								
								.github/autolabeler-config.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.github/autolabeler-config.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -121,5 +121,32 @@
 | 
				
			|||||||
      ],
 | 
					      ],
 | 
				
			||||||
      "excludeGlobs": []
 | 
					      "excludeGlobs": []
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "addon": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "fileStatus": null,
 | 
				
			||||||
 | 
					      "includeGlobs": [
 | 
				
			||||||
 | 
					        "tools/addon/**"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "excludeGlobs": []
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "pve-tool": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "fileStatus": null,
 | 
				
			||||||
 | 
					      "includeGlobs": [
 | 
				
			||||||
 | 
					        "tools/pve/**"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "excludeGlobs": []
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "vm": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "fileStatus": null,
 | 
				
			||||||
 | 
					      "includeGlobs": [
 | 
				
			||||||
 | 
					        "vm/**"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "excludeGlobs": []
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										36
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										36
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -19,7 +19,7 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      - name: Install dependencies
 | 
					      - name: Install dependencies
 | 
				
			||||||
        run: npm install minimatch
 | 
					        run: npm install minimatch
 | 
				
			||||||
      
 | 
					
 | 
				
			||||||
      - name: Label PR based on file changes and PR template
 | 
					      - name: Label PR based on file changes and PR template
 | 
				
			||||||
        uses: actions/github-script@v7
 | 
					        uses: actions/github-script@v7
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
@@ -43,51 +43,51 @@ jobs:
 | 
				
			|||||||
              pull_number: prNumber,
 | 
					              pull_number: prNumber,
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
            const prFiles = prListFilesResponse.data;
 | 
					            const prFiles = prListFilesResponse.data;
 | 
				
			||||||
           
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
          
 | 
					 | 
				
			||||||
            // Apply labels based on file changes
 | 
					 | 
				
			||||||
            for (const [label, rules] of Object.entries(autolabelerConfig)) {
 | 
					            for (const [label, rules] of Object.entries(autolabelerConfig)) {
 | 
				
			||||||
              const shouldAddLabel = prFiles.some((prFile) => {
 | 
					              const shouldAddLabel = prFiles.some((prFile) => {
 | 
				
			||||||
                return rules.some((rule) => {
 | 
					                return rules.some((rule) => {
 | 
				
			||||||
                  const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true;
 | 
					                  const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true;
 | 
				
			||||||
                  const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob));
 | 
					                  const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob));
 | 
				
			||||||
                  const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob));
 | 
					                  const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob));
 | 
				
			||||||
 | 
					 | 
				
			||||||
                  return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch;
 | 
					                  return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch;
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
              });
 | 
					              });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              if (shouldAddLabel) {
 | 
					              if (shouldAddLabel) {
 | 
				
			||||||
                labelsToAdd.add(label);
 | 
					                labelsToAdd.add(label);
 | 
				
			||||||
 | 
					                if (label === "update script") {
 | 
				
			||||||
 | 
					                  for (const prFile of prFiles) {
 | 
				
			||||||
 | 
					                    const filename = prFile.filename;
 | 
				
			||||||
 | 
					                    if (filename.startsWith("vm/")) labelsToAdd.add("vm");
 | 
				
			||||||
 | 
					                    if (filename.startsWith("tools/addon/")) labelsToAdd.add("addon");
 | 
				
			||||||
 | 
					                    if (filename.startsWith("tools/pve/")) labelsToAdd.add("pve-tool");
 | 
				
			||||||
 | 
					                  }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            //if two labels or more are added, return
 | 
					
 | 
				
			||||||
              if (labelsToAdd.size < 2) {
 | 
					            if (labelsToAdd.size < 2) {
 | 
				
			||||||
                const templateLabelMappings = {
 | 
					              const templateLabelMappings = {
 | 
				
			||||||
                "🐞 **Bug fix**": "bugfix",
 | 
					                "🐞 **Bug fix**": "bugfix",
 | 
				
			||||||
                "✨ **New feature**": "feature",
 | 
					                "✨ **New feature**": "feature",
 | 
				
			||||||
                "💥 **Breaking change**": "breaking change",
 | 
					                "💥 **Breaking change**": "breaking change",
 | 
				
			||||||
 | 
					                "🆕 **New script**": "new script",
 | 
				
			||||||
 | 
					                "🌍 **Website update**": "website",
 | 
				
			||||||
                "🔧 **Refactoring / Code Cleanup**": "refactor",
 | 
					                "🔧 **Refactoring / Code Cleanup**": "refactor",
 | 
				
			||||||
 | 
					                "📝 **Documentation update**": "documentation"
 | 
				
			||||||
              };
 | 
					              };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
 | 
					              for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
 | 
				
			||||||
                const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
 | 
					                const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
 | 
				
			||||||
                const regex = new RegExp(`- \\[(x|X)\\]\\s*.*${escapedCheckbox}`, "i");
 | 
					                const regex = new RegExp(`- \[(x|X)\]\s*.*${escapedCheckbox}`, "i");
 | 
				
			||||||
                const match = prBody.match(regex);              
 | 
					                if (regex.test(prBody)) {
 | 
				
			||||||
                if (match) {
 | 
					 | 
				
			||||||
                  console.log(`Match: ${match}`);
 | 
					 | 
				
			||||||
                  labelsToAdd.add(label);
 | 
					                  labelsToAdd.add(label);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (labelsToAdd.size > 0) {
 | 
					            if (labelsToAdd.size > 0) {
 | 
				
			||||||
              console.log(`Adding labels ${Array.from(labelsToAdd).join(", ")} to PR ${prNumber}`);
 | 
					 | 
				
			||||||
              await github.rest.issues.addLabels({
 | 
					              await github.rest.issues.addLabels({
 | 
				
			||||||
                owner: context.repo.owner,
 | 
					                owner: context.repo.owner,
 | 
				
			||||||
                repo: context.repo.repo,
 | 
					                repo: context.repo.repo,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										219
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										219
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,12 +10,227 @@
 | 
				
			|||||||
> [!CAUTION]
 | 
					> [!CAUTION]
 | 
				
			||||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
					Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> [!NOTE]
 | 
					## 2025-07-09
 | 
				
			||||||
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-07-08
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - Refactor: Emby [@tremor021](https://github.com/tremor021) ([#5839](https://github.com/community-scripts/ProxmoxVE/pull/5839))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Ollama: fix update script [@lucacome](https://github.com/lucacome) ([#5819](https://github.com/community-scripts/ProxmoxVE/pull/5819))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - tools.func: add ffmpeg + minor improvement [@MickLesk](https://github.com/MickLesk) ([#5834](https://github.com/community-scripts/ProxmoxVE/pull/5834))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: ErsatzTV [@MickLesk](https://github.com/MickLesk) ([#5835](https://github.com/community-scripts/ProxmoxVE/pull/5835))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-07-07
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Fix/stirling pdf script [@JcMinarro](https://github.com/JcMinarro) ([#5803](https://github.com/community-scripts/ProxmoxVE/pull/5803))
 | 
				
			||||||
 | 
					    - gitea-mirror: update repo-url [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5794](https://github.com/community-scripts/ProxmoxVE/pull/5794))
 | 
				
			||||||
 | 
					    - Fix unbound var in pulse.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5807](https://github.com/community-scripts/ProxmoxVE/pull/5807))
 | 
				
			||||||
 | 
					    - Bookstack: Fix PHP Issue & Bump to PHP 8.3 [@MickLesk](https://github.com/MickLesk) ([#5779](https://github.com/community-scripts/ProxmoxVE/pull/5779))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: Threadfin (+ updatable) [@MickLesk](https://github.com/MickLesk) ([#5783](https://github.com/community-scripts/ProxmoxVE/pull/5783))
 | 
				
			||||||
 | 
					    - tools.func: better handling when unpacking tarfiles in prebuild mode [@MickLesk](https://github.com/MickLesk) ([#5781](https://github.com/community-scripts/ProxmoxVE/pull/5781))
 | 
				
			||||||
 | 
					    - tools.func: add AVX check for MongoDB [@MickLesk](https://github.com/MickLesk) ([#5780](https://github.com/community-scripts/ProxmoxVE/pull/5780))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: Docmost [@tremor021](https://github.com/tremor021) ([#5806](https://github.com/community-scripts/ProxmoxVE/pull/5806))
 | 
				
			||||||
 | 
					    - Refactor: Baby Buddy [@tremor021](https://github.com/tremor021) ([#5769](https://github.com/community-scripts/ProxmoxVE/pull/5769))
 | 
				
			||||||
 | 
					    - Refactor: Changed the way we install BunkerWeb by leveraging the brand new install-bunkerweb.sh [@TheophileDiot](https://github.com/TheophileDiot) ([#5707](https://github.com/community-scripts/ProxmoxVE/pull/5707))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 📝 Script Information
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - PBS: add hint for advanced installs [@MickLesk](https://github.com/MickLesk) ([#5788](https://github.com/community-scripts/ProxmoxVE/pull/5788))
 | 
				
			||||||
 | 
					    - EMQX: Add warning to website [@tremor021](https://github.com/tremor021) ([#5770](https://github.com/community-scripts/ProxmoxVE/pull/5770))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-07-06
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - Refactor: Barcodebuddy [@tremor021](https://github.com/tremor021) ([#5735](https://github.com/community-scripts/ProxmoxVE/pull/5735))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Fix update script for Mafl: ensure directory is removed recursively [@jonalbr](https://github.com/jonalbr) ([#5759](https://github.com/community-scripts/ProxmoxVE/pull/5759))
 | 
				
			||||||
 | 
					    - BookStack: Typo fix [@tremor021](https://github.com/tremor021) ([#5746](https://github.com/community-scripts/ProxmoxVE/pull/5746))
 | 
				
			||||||
 | 
					    - Resolves incorrect URL at end of Pocket ID script [@johnsturgeon](https://github.com/johnsturgeon) ([#5743](https://github.com/community-scripts/ProxmoxVE/pull/5743))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - [Feature] Add option to expose Docker via TCP port (alpine docker) [@oformaniuk](https://github.com/oformaniuk) ([#5716](https://github.com/community-scripts/ProxmoxVE/pull/5716))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: Bitmagnet [@tremor021](https://github.com/tremor021) ([#5733](https://github.com/community-scripts/ProxmoxVE/pull/5733))
 | 
				
			||||||
 | 
					    - Refactor: Baikal [@tremor021](https://github.com/tremor021) ([#5736](https://github.com/community-scripts/ProxmoxVE/pull/5736))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-07-05
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: BookStack [@tremor021](https://github.com/tremor021) ([#5732](https://github.com/community-scripts/ProxmoxVE/pull/5732))
 | 
				
			||||||
 | 
					    - Refactor: Authelia [@tremor021](https://github.com/tremor021) ([#5722](https://github.com/community-scripts/ProxmoxVE/pull/5722))
 | 
				
			||||||
 | 
					    - Refactor: Dashy [@tremor021](https://github.com/tremor021) ([#5723](https://github.com/community-scripts/ProxmoxVE/pull/5723))
 | 
				
			||||||
 | 
					    - Refactor: CryptPad [@tremor021](https://github.com/tremor021) ([#5724](https://github.com/community-scripts/ProxmoxVE/pull/5724))
 | 
				
			||||||
 | 
					    - Refactor: ByteStash [@tremor021](https://github.com/tremor021) ([#5725](https://github.com/community-scripts/ProxmoxVE/pull/5725))
 | 
				
			||||||
 | 
					    - Refactor: AgentDVR [@tremor021](https://github.com/tremor021) ([#5726](https://github.com/community-scripts/ProxmoxVE/pull/5726))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-07-04
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: Mafl [@tremor021](https://github.com/tremor021) ([#5702](https://github.com/community-scripts/ProxmoxVE/pull/5702))
 | 
				
			||||||
 | 
					    - Outline: Fix sed command for v0.85.0 [@tremor021](https://github.com/tremor021) ([#5688](https://github.com/community-scripts/ProxmoxVE/pull/5688))
 | 
				
			||||||
 | 
					    - Komodo: Update Script to use FerretDB / remove psql & sqlite options [@MickLesk](https://github.com/MickLesk) ([#5690](https://github.com/community-scripts/ProxmoxVE/pull/5690))
 | 
				
			||||||
 | 
					    - ESPHome: Fix Linking issue to prevent version mismatch [@MickLesk](https://github.com/MickLesk) ([#5685](https://github.com/community-scripts/ProxmoxVE/pull/5685))
 | 
				
			||||||
 | 
					    - Cloudflare-DDNS: fix unvisible read command at install [@MickLesk](https://github.com/MickLesk) ([#5682](https://github.com/community-scripts/ProxmoxVE/pull/5682))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Core layer refactor: centralized error traps and msg_* consistency [@MickLesk](https://github.com/MickLesk) ([#5705](https://github.com/community-scripts/ProxmoxVE/pull/5705))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 💥 Breaking Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Update Iptag [@DesertGamer](https://github.com/DesertGamer) ([#5677](https://github.com/community-scripts/ProxmoxVE/pull/5677))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 📝 Script Information
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - MySQL phpMyAdmin Access Information [@austinpilz](https://github.com/austinpilz) ([#5679](https://github.com/community-scripts/ProxmoxVE/pull/5679))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-07-03
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Zipline: Fix typo in uploads directory path [@tremor021](https://github.com/tremor021) ([#5662](https://github.com/community-scripts/ProxmoxVE/pull/5662))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Improve asset matching in fetch_and_deploy_gh_release for prebuild and singlefile modes [@MickLesk](https://github.com/MickLesk) ([#5669](https://github.com/community-scripts/ProxmoxVE/pull/5669))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: Trilium [@MickLesk](https://github.com/MickLesk) ([#5665](https://github.com/community-scripts/ProxmoxVE/pull/5665))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 📝 Script Information
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Bump Icons to selfhst repo | switch svg to webp [@MickLesk](https://github.com/MickLesk) ([#5659](https://github.com/community-scripts/ProxmoxVE/pull/5659))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-07-02
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Changedetection: Base64 encode the launch options [@tremor021](https://github.com/tremor021) ([#5640](https://github.com/community-scripts/ProxmoxVE/pull/5640))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor & Bump to Node24: Zigbee2MQTT [@MickLesk](https://github.com/MickLesk) ([#5638](https://github.com/community-scripts/ProxmoxVE/pull/5638))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 💥 Breaking Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Remove: Pingvin-Share [@MickLesk](https://github.com/MickLesk) ([#5635](https://github.com/community-scripts/ProxmoxVE/pull/5635))
 | 
				
			||||||
 | 
					    - Remove: Readarr [@MickLesk](https://github.com/MickLesk) ([#5636](https://github.com/community-scripts/ProxmoxVE/pull/5636))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-07-01
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🆕 New Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - Librespeed Rust ([#5614](https://github.com/community-scripts/ProxmoxVE/pull/5614))
 | 
				
			||||||
 | 
					- ITSM-NG ([#5615](https://github.com/community-scripts/ProxmoxVE/pull/5615))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Open WebUI: Fix Ollama update procedure [@tremor021](https://github.com/tremor021) ([#5601](https://github.com/community-scripts/ProxmoxVE/pull/5601))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - [tools]: increase fetch_and_deploy with dns pre check [@MickLesk](https://github.com/MickLesk) ([#5608](https://github.com/community-scripts/ProxmoxVE/pull/5608))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 📝 Script Information
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Jellyfin GPU Passthrough NVIDIA Note [@austinpilz](https://github.com/austinpilz) ([#5625](https://github.com/community-scripts/ProxmoxVE/pull/5625))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-06-30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🆕 New Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - Alpine Syncthing [@MickLesk](https://github.com/MickLesk) ([#5586](https://github.com/community-scripts/ProxmoxVE/pull/5586))
 | 
				
			||||||
 | 
					- Kapowarr ([#5584](https://github.com/community-scripts/ProxmoxVE/pull/5584))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - Fixing Cloudflare DDNS - lack of resources [@meszolym](https://github.com/meszolym) ([#5600](https://github.com/community-scripts/ProxmoxVE/pull/5600))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Immich: make changes to automatically enable QuickSync [@vhsdream](https://github.com/vhsdream) ([#5560](https://github.com/community-scripts/ProxmoxVE/pull/5560))
 | 
				
			||||||
 | 
					    - Apache Guacamole: Install auth-jdbc component that matches release version [@tremor021](https://github.com/tremor021) ([#5563](https://github.com/community-scripts/ProxmoxVE/pull/5563))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - tools.func: optimize binary installs with fetch_and_deploy helper [@MickLesk](https://github.com/MickLesk) ([#5588](https://github.com/community-scripts/ProxmoxVE/pull/5588))
 | 
				
			||||||
 | 
					    - [core]: add ipv6 configuration support [@MickLesk](https://github.com/MickLesk) ([#5575](https://github.com/community-scripts/ProxmoxVE/pull/5575))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 2025-06-29
 | 
					## 2025-06-29
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Linkwarden: Add backing up of data folder to the update function [@tremor021](https://github.com/tremor021) ([#5548](https://github.com/community-scripts/ProxmoxVE/pull/5548))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Add cron-job api-key env variable to homarr script [@Meierschlumpf](https://github.com/Meierschlumpf) ([#5204](https://github.com/community-scripts/ProxmoxVE/pull/5204))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🧰 Maintenance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 📝 Documentation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - update readme with valid discord link. other one expired [@BramSuurdje](https://github.com/BramSuurdje) ([#5567](https://github.com/community-scripts/ProxmoxVE/pull/5567))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - Update script-item.tsx [@ape364](https://github.com/ape364) ([#5549](https://github.com/community-scripts/ProxmoxVE/pull/5549))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - fix bug in tooltip that would always render 'updateable' [@BramSuurdje](https://github.com/BramSuurdje) ([#5552](https://github.com/community-scripts/ProxmoxVE/pull/5552))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 2025-06-28
 | 
					## 2025-06-28
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### 🚀 Updated Scripts
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
<div align="center">
 | 
					<div align="center">
 | 
				
			||||||
  <p align="center">
 | 
					  <p align="center">
 | 
				
			||||||
    <a href="#">
 | 
					    <a href="#">
 | 
				
			||||||
      <img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo.png" height="100px" />
 | 
					      <img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="100px" />
 | 
				
			||||||
    </a>
 | 
					    </a>
 | 
				
			||||||
  </p>
 | 
					  </p>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
    <a href="https://helper-scripts.com">
 | 
					    <a href="https://helper-scripts.com">
 | 
				
			||||||
      <img src="https://img.shields.io/badge/Website-4c9b3f?style=for-the-badge&logo=github&logoColor=white" alt="Website" />
 | 
					      <img src="https://img.shields.io/badge/Website-4c9b3f?style=for-the-badge&logo=github&logoColor=white" alt="Website" />
 | 
				
			||||||
    </a>
 | 
					    </a>
 | 
				
			||||||
    <a href="https://discord.gg/jsYVk5JBxq">
 | 
					    <a href="https://discord.gg/3AnUqsXnmK">
 | 
				
			||||||
      <img src="https://img.shields.io/badge/Discord-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
 | 
					      <img src="https://img.shields.io/badge/Discord-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
 | 
				
			||||||
    </a> 
 | 
					    </a> 
 | 
				
			||||||
    <a href="https://ko-fi.com/community_scripts">
 | 
					    <a href="https://ko-fi.com/community_scripts">
 | 
				
			||||||
@@ -82,7 +82,7 @@ We appreciate any contributions to the project—whether it's bug reports, featu
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Join our community for support:
 | 
					Join our community for support:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- **Discord**: Join our [Proxmox Helper Scripts Discord server](https://discord.gg/jsYVk5JBxq) for real-time support.
 | 
					- **Discord**: Join our [Proxmox Helper Scripts Discord server](https://discord.gg/3AnUqsXnmK) for real-time support.
 | 
				
			||||||
- **GitHub Discussions**: [Ask questions or report issues](https://github.com/community-scripts/ProxmoxVE/discussions).
 | 
					- **GitHub Discussions**: [Ask questions or report issues](https://github.com/community-scripts/ProxmoxVE/discussions).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 🤝 Report a Bug or Feature Request
 | 
					## 🤝 Report a Bug or Feature Request
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,15 @@ function update_script() {
 | 
				
			|||||||
    exit 1
 | 
					    exit 1
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
 | 
					  COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [[ "$COMPOSE_BASENAME" == "sqlite.compose.yaml" || "$COMPOSE_BASENAME" == "postgres.compose.yaml" ]]; then
 | 
				
			||||||
 | 
					    msg_error "❌ Detected outdated Komodo setup using SQLite or PostgreSQL (FerretDB v1)."
 | 
				
			||||||
 | 
					    echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}"
 | 
				
			||||||
 | 
					    echo -e "${YW}Please follow the migration guide:${CL}"
 | 
				
			||||||
 | 
					    echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
 | 
					  BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
 | 
				
			||||||
  cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
 | 
					  cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
 | 
				
			||||||
    msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
 | 
					    msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								ct/alpine-syncthing.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								ct/alpine-syncthing.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: MickLesk (CanbiZ)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://syncthing.net/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="Alpine-Syncthing"
 | 
				
			||||||
 | 
					var_tags="${var_tags:-alpine;networking}"
 | 
				
			||||||
 | 
					var_cpu="${var_cpu:-1}"
 | 
				
			||||||
 | 
					var_ram="${var_ram:-256}"
 | 
				
			||||||
 | 
					var_disk="${var_disk:-1}"
 | 
				
			||||||
 | 
					var_os="${var_os:-alpine}"
 | 
				
			||||||
 | 
					var_version="${var_version:-3.22}"
 | 
				
			||||||
 | 
					var_unprivileged="${var_unprivileged:-1}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					  msg_info "Updating Alpine Packages"
 | 
				
			||||||
 | 
					  $STD apk -U upgrade
 | 
				
			||||||
 | 
					  msg_ok "Updated Alpine Packages"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  msg_info "Updating Syncthing"
 | 
				
			||||||
 | 
					  $STD apk upgrade syncthing
 | 
				
			||||||
 | 
					  msg_ok "Updated Syncthing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  msg_info "Restarting Syncthing"
 | 
				
			||||||
 | 
					  $STD rc-service syncthing restart
 | 
				
			||||||
 | 
					  msg_ok "Restarted Syncthing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  exit 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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}:8384${CL}"
 | 
				
			||||||
@@ -22,30 +22,30 @@ color
 | 
				
			|||||||
catch_errors
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function update_script() {
 | 
					function update_script() {
 | 
				
			||||||
    header_info
 | 
					  header_info
 | 
				
			||||||
    check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
    check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
    if [[ ! -d "/etc/authelia/" ]]; then
 | 
					  if [[ ! -d "/etc/authelia/" ]]; then
 | 
				
			||||||
        msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					 | 
				
			||||||
    if [[ "${RELEASE}" != "$(/usr/bin/authelia -v | awk '{print substr($3, 2, length($2)) }')" ]]; then
 | 
					 | 
				
			||||||
        msg_info "Updating $APP to ${RELEASE}"
 | 
					 | 
				
			||||||
        $STD apt-get update
 | 
					 | 
				
			||||||
        $STD apt-get -y upgrade
 | 
					 | 
				
			||||||
        curl -fsSL "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb" -o $(basename "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb")
 | 
					 | 
				
			||||||
        $STD dpkg -i "authelia_${RELEASE}_amd64.deb"
 | 
					 | 
				
			||||||
        msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
        rm -f "authelia_${RELEASE}_amd64.deb"
 | 
					 | 
				
			||||||
        $STD apt-get -y autoremove
 | 
					 | 
				
			||||||
        $STD apt-get -y autoclean
 | 
					 | 
				
			||||||
        msg_ok "Cleanup Completed"
 | 
					 | 
				
			||||||
        msg_ok "Updated $APP to ${RELEASE}"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(/usr/bin/authelia -v | awk '{print substr($3, 2, length($2)) }')" ]]; then
 | 
				
			||||||
 | 
					    $STD apt-get update
 | 
				
			||||||
 | 
					    $STD apt-get -y upgrade
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "authelia" "authelia/authelia" "binary"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Cleaning Up"
 | 
				
			||||||
 | 
					    $STD apt-get -y autoremove
 | 
				
			||||||
 | 
					    $STD apt-get -y autoclean
 | 
				
			||||||
 | 
					    msg_ok "Cleanup Completed"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Updated $APP to ${RELEASE}"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ function update_script() {
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/babybuddy_version.txt)" ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.babybuddy 2>/dev/null)" ]] || [[ ! -f ~/.babybuddy ]]; then
 | 
				
			||||||
    setup_uv
 | 
					    setup_uv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Stopping Services"
 | 
					    msg_info "Stopping Services"
 | 
				
			||||||
@@ -42,17 +42,14 @@ function update_script() {
 | 
				
			|||||||
    find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
 | 
					    find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
 | 
				
			||||||
    msg_ok "Cleaned old files"
 | 
					    msg_ok "Cleaned old files"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
    temp_file=$(mktemp)
 | 
					 | 
				
			||||||
    curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
					 | 
				
			||||||
    cd /opt/babybuddy
 | 
					    cd /opt/babybuddy
 | 
				
			||||||
    tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy
 | 
					 | 
				
			||||||
    mv /tmp/production.py.bak babybuddy/settings/production.py
 | 
					    mv /tmp/production.py.bak babybuddy/settings/production.py
 | 
				
			||||||
    cd /opt/babybuddy
 | 
					 | 
				
			||||||
    source .venv/bin/activate
 | 
					    source .venv/bin/activate
 | 
				
			||||||
    $STD uv pip install -r requirements.txt
 | 
					    $STD uv pip install -r requirements.txt
 | 
				
			||||||
    $STD python manage.py migrate
 | 
					    $STD python manage.py migrate
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
					    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Fixing permissions"
 | 
					    msg_info "Fixing permissions"
 | 
				
			||||||
@@ -66,9 +63,6 @@ function update_script() {
 | 
				
			|||||||
    systemctl start nginx
 | 
					    systemctl start nginx
 | 
				
			||||||
    msg_ok "Services Started"
 | 
					    msg_ok "Services Started"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					 | 
				
			||||||
    rm -f "$temp_file"
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										17
									
								
								ct/baikal.sh
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								ct/baikal.sh
									
									
									
									
									
								
							@@ -23,34 +23,35 @@ function update_script() {
 | 
				
			|||||||
  header_info
 | 
					  header_info
 | 
				
			||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if [[ ! -d /opt/baikal ]]; then
 | 
					  if [[ ! -d /opt/baikal ]]; then
 | 
				
			||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.baikal 2>/dev/null)" ]] || [[ ! -f ~/.baikal ]]; then
 | 
				
			||||||
    msg_info "Stopping Service"
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
    systemctl stop apache2
 | 
					    systemctl stop apache2
 | 
				
			||||||
    msg_ok "Stopped Service"
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Backing up data"
 | 
				
			||||||
    cd /opt
 | 
					 | 
				
			||||||
    curl -fsSL "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip" -o $(basename "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip")
 | 
					 | 
				
			||||||
    mv /opt/baikal /opt/baikal-backup
 | 
					    mv /opt/baikal /opt/baikal-backup
 | 
				
			||||||
    $STD unzip -o "baikal-${RELEASE}.zip"
 | 
					    msg_ok "Backed up data"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Configuring Baikal"
 | 
				
			||||||
    cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
 | 
					    cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
 | 
				
			||||||
    cp -r /opt/baikal-backup/Specific/ /opt/baikal/
 | 
					    cp -r /opt/baikal-backup/Specific/ /opt/baikal/
 | 
				
			||||||
    chown -R www-data:www-data /opt/baikal/
 | 
					    chown -R www-data:www-data /opt/baikal/
 | 
				
			||||||
    chmod -R 755 /opt/baikal/
 | 
					    chmod -R 755 /opt/baikal/
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					    msg_ok "Configured Baikal"
 | 
				
			||||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Service"
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
    systemctl start apache2
 | 
					    systemctl start apache2
 | 
				
			||||||
    msg_ok "Started Service"
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					    msg_info "Cleaning up"
 | 
				
			||||||
    rm -rf "/opt/baikal-${RELEASE}.zip"
 | 
					 | 
				
			||||||
    rm -rf /opt/baikal-backup
 | 
					    rm -rf /opt/baikal-backup
 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					    msg_ok "Cleaned"
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,27 +23,28 @@ function update_script() {
 | 
				
			|||||||
  header_info
 | 
					  header_info
 | 
				
			||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if [[ ! -d /opt/barcodebuddy ]]; then
 | 
					  if [[ ! -d /opt/barcodebuddy ]]; then
 | 
				
			||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.barcodebuddy 2>/dev/null)" ]] || [[ ! -f ~/.barcodebuddy ]]; then
 | 
				
			||||||
    msg_info "Stopping Service"
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
    systemctl stop apache2
 | 
					    systemctl stop apache2
 | 
				
			||||||
    systemctl stop barcodebuddy
 | 
					    systemctl stop barcodebuddy
 | 
				
			||||||
    msg_ok "Stopped Service"
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Backing up data"
 | 
				
			||||||
    cd /opt
 | 
					 | 
				
			||||||
    mv /opt/barcodebuddy/ /opt/barcodebuddy-backup
 | 
					    mv /opt/barcodebuddy/ /opt/barcodebuddy-backup
 | 
				
			||||||
    curl -fsSL "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip")
 | 
					    msg_ok "Backed up data"
 | 
				
			||||||
    $STD unzip "v${RELEASE}.zip"
 | 
					
 | 
				
			||||||
    mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy
 | 
					    fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Configuring ${APP}"
 | 
				
			||||||
    cp -r /opt/barcodebuddy-backup/data/. /opt/barcodebuddy/data
 | 
					    cp -r /opt/barcodebuddy-backup/data/. /opt/barcodebuddy/data
 | 
				
			||||||
    chown -R www-data:www-data /opt/barcodebuddy/data
 | 
					    chown -R www-data:www-data /opt/barcodebuddy/data
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					    msg_ok "Configured ${APP}"
 | 
				
			||||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Service"
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
    systemctl start apache2
 | 
					    systemctl start apache2
 | 
				
			||||||
@@ -51,7 +52,6 @@ function update_script() {
 | 
				
			|||||||
    msg_ok "Started Service"
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					    msg_info "Cleaning up"
 | 
				
			||||||
    rm -r "/opt/v${RELEASE}.zip"
 | 
					 | 
				
			||||||
    rm -r /opt/barcodebuddy-backup
 | 
					    rm -r /opt/barcodebuddy-backup
 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					    msg_ok "Cleaned"
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,12 +28,12 @@ function update_script() {
 | 
				
			|||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.bitmagnet 2>/dev/null)" ]] || [[ ! -f ~/.bitmagnet ]]; then
 | 
				
			||||||
    msg_info "Stopping Service"
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
    systemctl stop bitmagnet-web
 | 
					    systemctl stop bitmagnet-web
 | 
				
			||||||
    msg_ok "Stopped Service"
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Backing up database"
 | 
					    msg_info "Backing up data"
 | 
				
			||||||
    rm -f /tmp/backup.sql
 | 
					    rm -f /tmp/backup.sql
 | 
				
			||||||
    $STD sudo -u postgres pg_dump \
 | 
					    $STD sudo -u postgres pg_dump \
 | 
				
			||||||
      --column-inserts \
 | 
					      --column-inserts \
 | 
				
			||||||
@@ -56,31 +56,26 @@ function update_script() {
 | 
				
			|||||||
      bitmagnet \
 | 
					      bitmagnet \
 | 
				
			||||||
      >/tmp/backup.sql
 | 
					      >/tmp/backup.sql
 | 
				
			||||||
    mv /tmp/backup.sql /opt/
 | 
					    mv /tmp/backup.sql /opt/
 | 
				
			||||||
    msg_ok "Database backed up"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					 | 
				
			||||||
    [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
 | 
					    [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
 | 
				
			||||||
    [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
 | 
					    [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
 | 
				
			||||||
    rm -rf /opt/bitmagnet/*
 | 
					    msg_ok "Data backed up"
 | 
				
			||||||
    temp_file=$(mktemp)
 | 
					
 | 
				
			||||||
    curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
					    rm -rf /opt/bitmagnet
 | 
				
			||||||
    tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
 | 
					    fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
    cd /opt/bitmagnet
 | 
					    cd /opt/bitmagnet
 | 
				
			||||||
    VREL=v$RELEASE
 | 
					    VREL=v$RELEASE
 | 
				
			||||||
    $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
 | 
					    $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
 | 
				
			||||||
    chmod +x bitmagnet
 | 
					    chmod +x bitmagnet
 | 
				
			||||||
    [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
 | 
					    [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
 | 
				
			||||||
    [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
 | 
					    [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
					    msg_ok "Updated $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Service"
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
    systemctl start bitmagnet-web
 | 
					    systemctl start bitmagnet-web
 | 
				
			||||||
    msg_ok "Started Service"
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					 | 
				
			||||||
    rm -f "$temp_file"
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,25 +23,32 @@ function update_script() {
 | 
				
			|||||||
  header_info
 | 
					  header_info
 | 
				
			||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if [[ ! -d /opt/bookstack ]]; then
 | 
					  if [[ ! -d /opt/bookstack ]]; then
 | 
				
			||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/BookStackApp/BookStack/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/BookStackApp/BookStack/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.bookstack 2>/dev/null)" ]] || [[ ! -f ~/.bookstack ]]; then
 | 
				
			||||||
    msg_info "Stopping Apache2"
 | 
					    msg_info "Stopping Apache2"
 | 
				
			||||||
    systemctl stop apache2
 | 
					    systemctl stop apache2
 | 
				
			||||||
    msg_ok "Services Stopped"
 | 
					    msg_ok "Services Stopped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Backing up data"
 | 
				
			||||||
    mv /opt/bookstack /opt/bookstack-backup
 | 
					    mv /opt/bookstack /opt/bookstack-backup
 | 
				
			||||||
    curl -fsSL "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip" -o "/opt/BookStack-${RELEASE}.zip"
 | 
					    msg_ok "Backup finished"
 | 
				
			||||||
    $STD unzip "/opt/BookStack-${RELEASE}.zip" -d /opt
 | 
					
 | 
				
			||||||
    mv "/opt/BookStack-${RELEASE}" /opt/bookstack
 | 
					    fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
 | 
				
			||||||
 | 
					    PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Restoring backup"
 | 
				
			||||||
    cp /opt/bookstack-backup/.env /opt/bookstack/.env
 | 
					    cp /opt/bookstack-backup/.env /opt/bookstack/.env
 | 
				
			||||||
    [[ -d /opt/bookstack-backup/public/uploads ]] && cp -a /opt/bookstack-backup/public/uploads/. /opt/bookstack/public/uploads/
 | 
					    [[ -d /opt/bookstack-backup/public/uploads ]] && cp -a /opt/bookstack-backup/public/uploads/. /opt/bookstack/public/uploads/
 | 
				
			||||||
    [[ -d /opt/bookstack-backup/storage/uploads ]] && cp -a /opt/bookstack-backup/storage/uploads/. /opt/bookstack/storage/uploads/
 | 
					    [[ -d /opt/bookstack-backup/storage/uploads ]] && cp -a /opt/bookstack-backup/storage/uploads/. /opt/bookstack/storage/uploads/
 | 
				
			||||||
    [[ -d /opt/bookstack-backup/themes ]] && cp -a /opt/bookstack-backup/themes/. /opt/bookstack/themes/
 | 
					    [[ -d /opt/bookstack-backup/themes ]] && cp -a /opt/bookstack-backup/themes/. /opt/bookstack/themes/
 | 
				
			||||||
 | 
					    msg_ok "Backup restored"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Configuring BookStack"
 | 
				
			||||||
    cd /opt/bookstack
 | 
					    cd /opt/bookstack
 | 
				
			||||||
    export COMPOSER_ALLOW_SUPERUSER=1
 | 
					    export COMPOSER_ALLOW_SUPERUSER=1
 | 
				
			||||||
    $STD composer install --no-dev
 | 
					    $STD composer install --no-dev
 | 
				
			||||||
@@ -51,7 +58,7 @@ function update_script() {
 | 
				
			|||||||
    chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
 | 
					    chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
 | 
				
			||||||
    chmod -R 640 /opt/bookstack/.env
 | 
					    chmod -R 640 /opt/bookstack/.env
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
				
			||||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
					    msg_ok "Configured BookStack"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Apache2"
 | 
					    msg_info "Starting Apache2"
 | 
				
			||||||
    systemctl start apache2
 | 
					    systemctl start apache2
 | 
				
			||||||
@@ -59,7 +66,6 @@ function update_script() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning Up"
 | 
					    msg_info "Cleaning Up"
 | 
				
			||||||
    rm -rf /opt/bookstack-backup
 | 
					    rm -rf /opt/bookstack-backup
 | 
				
			||||||
    rm -rf "/opt/BookStack-${RELEASE}.zip"
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					    msg_ok "Cleaned"
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,8 +37,8 @@ Pin: version ${RELEASE}
 | 
				
			|||||||
Pin-Priority: 1001
 | 
					Pin-Priority: 1001
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
    apt-get update
 | 
					    apt-get update
 | 
				
			||||||
    apt-get install -y nginx=1.26.3*
 | 
					    apt-mark unhold bunkerweb nginx
 | 
				
			||||||
    apt-get install -y bunkerweb=${RELEASE}
 | 
					    apt-get install -y --allow-downgrades bunkerweb=${RELEASE}
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
				
			||||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
					    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,47 +20,47 @@ color
 | 
				
			|||||||
catch_errors
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function update_script() {
 | 
					function update_script() {
 | 
				
			||||||
    header_info
 | 
					  header_info
 | 
				
			||||||
    check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
    check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
    if [[ ! -d /opt/bytestash ]]; then
 | 
					 | 
				
			||||||
        msg_error "No ${APP} Installation Found!"
 | 
					 | 
				
			||||||
        exit
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					 | 
				
			||||||
    if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					 | 
				
			||||||
        msg_info "Stopping Services"
 | 
					 | 
				
			||||||
        systemctl stop bytestash-backend
 | 
					 | 
				
			||||||
        systemctl stop bytestash-frontend
 | 
					 | 
				
			||||||
        msg_ok "Services Stopped"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        msg_info "Updating ${APP} to ${RELEASE}"
 | 
					  if [[ ! -d /opt/bytestash ]]; then
 | 
				
			||||||
        temp_file=$(mktemp)
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
curl -fsSL "https://github.com/jordan-dalby/ByteStash/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
					 | 
				
			||||||
        tar zxf $temp_file
 | 
					 | 
				
			||||||
        rm -rf /opt/bytestash/server/node_modules
 | 
					 | 
				
			||||||
        rm -rf /opt/bytestash/client/node_modules
 | 
					 | 
				
			||||||
        cp -rf ByteStash-${RELEASE}/* /opt/bytestash
 | 
					 | 
				
			||||||
        cd /opt/bytestash/server
 | 
					 | 
				
			||||||
        $STD npm install
 | 
					 | 
				
			||||||
        cd /opt/bytestash/client
 | 
					 | 
				
			||||||
        $STD npm install
 | 
					 | 
				
			||||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
        msg_ok "Updated ${APP}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        msg_info "Starting Services"
 | 
					 | 
				
			||||||
        systemctl start bytestash-backend
 | 
					 | 
				
			||||||
        systemctl start bytestash-frontend
 | 
					 | 
				
			||||||
        msg_ok "Started Services"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
        rm -f $temp_file
 | 
					 | 
				
			||||||
        msg_ok "Cleaned"
 | 
					 | 
				
			||||||
        msg_ok "Updated Successfully"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.bytestash 2>/dev/null)" ]] || [[ ! -f ~/.bytestash ]]; then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    read -rp "${TAB3}Did you make a backup via application WebUI? (y/n): " backuped
 | 
				
			||||||
 | 
					    if [[ "$backuped" =~ ^[Yy]$ ]]; then
 | 
				
			||||||
 | 
					      msg_info "Stopping Services"
 | 
				
			||||||
 | 
					      systemctl stop bytestash-backend
 | 
				
			||||||
 | 
					      systemctl stop bytestash-frontend
 | 
				
			||||||
 | 
					      msg_ok "Services Stopped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      rm -rf /opt/bytestash
 | 
				
			||||||
 | 
					      fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      msg_info "Configuring ByteStash"
 | 
				
			||||||
 | 
					      cd /opt/bytestash/server
 | 
				
			||||||
 | 
					      $STD npm install
 | 
				
			||||||
 | 
					      cd /opt/bytestash/client
 | 
				
			||||||
 | 
					      $STD npm install
 | 
				
			||||||
 | 
					      msg_ok "Updated ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      msg_info "Starting Services"
 | 
				
			||||||
 | 
					      systemctl start bytestash-backend
 | 
				
			||||||
 | 
					      systemctl start bytestash-frontend
 | 
				
			||||||
 | 
					      msg_ok "Started Services"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      msg_error "PLEASE MAKE A BACKUP FIRST!"
 | 
				
			||||||
 | 
					      exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
@@ -70,4 +70,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,8 +7,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
APP="Cloudflare-DDNS"
 | 
					APP="Cloudflare-DDNS"
 | 
				
			||||||
var_tags="${var_tags:-network}"
 | 
					var_tags="${var_tags:-network}"
 | 
				
			||||||
var_cpu="${var_cpu:-1}"
 | 
					var_cpu="${var_cpu:-2}"
 | 
				
			||||||
var_ram="${var_ram:-512}"
 | 
					var_ram="${var_ram:-1024}"
 | 
				
			||||||
var_disk="${var_disk:-3}"
 | 
					var_disk="${var_disk:-3}"
 | 
				
			||||||
var_os="${var_os:-debian}"
 | 
					var_os="${var_os:-debian}"
 | 
				
			||||||
var_version="${var_version:-12}"
 | 
					var_version="${var_version:-12}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,48 +20,46 @@ color
 | 
				
			|||||||
catch_errors
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function update_script() {
 | 
					function update_script() {
 | 
				
			||||||
    header_info
 | 
					  header_info
 | 
				
			||||||
    check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
    check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if [[ ! -d "/opt/cryptpad" ]]; then
 | 
					  if [[ ! -d "/opt/cryptpad" ]]; then
 | 
				
			||||||
        msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					 | 
				
			||||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
					 | 
				
			||||||
        msg_info "Stopping $APP"
 | 
					 | 
				
			||||||
        systemctl stop cryptpad
 | 
					 | 
				
			||||||
        msg_ok "Stopped $APP"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        msg_info "Updating $APP to ${RELEASE}"
 | 
					 | 
				
			||||||
        temp_dir=$(mktemp -d)
 | 
					 | 
				
			||||||
        cp -f /opt/cryptpad/config/config.js /opt/config.js
 | 
					 | 
				
			||||||
        curl -fsSL "https://github.com/cryptpad/cryptpad/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_dir/cryptpad-${RELEASE}.tar.gz"
 | 
					 | 
				
			||||||
        cd "$temp_dir"
 | 
					 | 
				
			||||||
        tar zxf "cryptpad-${RELEASE}.tar.gz"
 | 
					 | 
				
			||||||
        cp -rf "cryptpad-${RELEASE}"/* /opt/cryptpad
 | 
					 | 
				
			||||||
        cd /opt/cryptpad
 | 
					 | 
				
			||||||
        $STD npm ci
 | 
					 | 
				
			||||||
        $STD npm run install:components
 | 
					 | 
				
			||||||
        $STD npm run build
 | 
					 | 
				
			||||||
        cp -f /opt/config.js /opt/cryptpad/config/config.js
 | 
					 | 
				
			||||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
        msg_ok "Updated $APP to ${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
        rm -rf $temp_dir
 | 
					 | 
				
			||||||
        msg_ok "Cleanup Completed"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        msg_info "Starting $APP"
 | 
					 | 
				
			||||||
        systemctl start cryptpad
 | 
					 | 
				
			||||||
        msg_ok "Started $APP"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        msg_ok "Update Successful"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.cryptpad 2>/dev/null)" ]] || [[ ! -f ~/.cryptpad ]]; then
 | 
				
			||||||
 | 
					    msg_info "Stopping $APP"
 | 
				
			||||||
 | 
					    systemctl stop cryptpad
 | 
				
			||||||
 | 
					    msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Backing up configuration"
 | 
				
			||||||
 | 
					    [ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/
 | 
				
			||||||
 | 
					    msg_ok "Backed up configuration"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating $APP to ${RELEASE}"
 | 
				
			||||||
 | 
					    cd /opt/cryptpad
 | 
				
			||||||
 | 
					    $STD npm ci
 | 
				
			||||||
 | 
					    $STD npm run install:components
 | 
				
			||||||
 | 
					    $STD npm run build
 | 
				
			||||||
 | 
					    msg_ok "Updated $APP to ${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Restoring configuration"
 | 
				
			||||||
 | 
					    mv /opt/config.js /opt/cryptpad/config/
 | 
				
			||||||
 | 
					    msg_ok "Configuration restored"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting $APP"
 | 
				
			||||||
 | 
					    systemctl start cryptpad
 | 
				
			||||||
 | 
					    msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Update Successful"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								ct/dashy.sh
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								ct/dashy.sh
									
									
									
									
									
								
							@@ -29,7 +29,7 @@ function update_script() {
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
				
			||||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.dashy 2>/dev/null)" ]] || [[ ! -f ~/.dashy ]]; then
 | 
				
			||||||
    msg_info "Stopping ${APP}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
    systemctl stop dashy
 | 
					    systemctl stop dashy
 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
@@ -43,14 +43,13 @@ function update_script() {
 | 
				
			|||||||
    fi
 | 
					    fi
 | 
				
			||||||
    msg_ok "Backed up conf.yml"
 | 
					    msg_ok "Backed up conf.yml"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
					 | 
				
			||||||
    rm -rf /opt/dashy
 | 
					    rm -rf /opt/dashy
 | 
				
			||||||
    mkdir -p /opt/dashy
 | 
					    fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
 | 
				
			||||||
    curl -fsSL "https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz -C /opt/dashy --strip-components=1
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating ${APP} to ${RELEASE}"
 | 
				
			||||||
    cd /opt/dashy
 | 
					    cd /opt/dashy
 | 
				
			||||||
    npm install
 | 
					    npm install
 | 
				
			||||||
    npm run build
 | 
					    npm run build
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
					    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Restoring conf.yml"
 | 
					    msg_info "Restoring conf.yml"
 | 
				
			||||||
@@ -65,6 +64,7 @@ function update_script() {
 | 
				
			|||||||
    msg_info "Starting Dashy"
 | 
					    msg_info "Starting Dashy"
 | 
				
			||||||
    systemctl start dashy
 | 
					    systemctl start dashy
 | 
				
			||||||
    msg_ok "Started Dashy"
 | 
					    msg_ok "Started Dashy"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,48 +27,35 @@ function update_script() {
 | 
				
			|||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  if ! command -v node >/dev/null || [[ "$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+')" != "22" ]]; then
 | 
					  if ! command -v node >/dev/null || [[ "$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+')" != "22" ]]; then
 | 
				
			||||||
    msg_info "Installing Node.js 22"
 | 
					    NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
 | 
				
			||||||
    $STD apt-get purge -y nodejs
 | 
					 | 
				
			||||||
    rm -f /etc/apt/sources.list.d/nodesource.list
 | 
					 | 
				
			||||||
    rm -f /etc/apt/keyrings/nodesource.gpg
 | 
					 | 
				
			||||||
    mkdir -p /etc/apt/keyrings
 | 
					 | 
				
			||||||
    curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
					 | 
				
			||||||
    echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
					 | 
				
			||||||
    $STD apt-get update
 | 
					 | 
				
			||||||
    $STD apt-get install -y nodejs
 | 
					 | 
				
			||||||
    $STD npm install -g pnpm@10.4.0
 | 
					 | 
				
			||||||
    msg_ok "Node.js 22 installed"
 | 
					 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  export NODE_OPTIONS="--max_old_space_size=4096"
 | 
					  export NODE_OPTIONS="--max_old_space_size=4096"
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/docmost/docmost/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/docmost/docmost/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.docmost 2>/dev/null)" ]] || [[ ! -f ~/.docmost ]]; then
 | 
				
			||||||
    msg_info "Stopping ${APP}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
    systemctl stop docmost
 | 
					    systemctl stop docmost
 | 
				
			||||||
    msg_ok "${APP} Stopped"
 | 
					    msg_ok "${APP} Stopped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Backing up data"
 | 
				
			||||||
    cp /opt/docmost/.env /opt/
 | 
					    cp /opt/docmost/.env /opt/
 | 
				
			||||||
    cp -r /opt/docmost/data /opt/
 | 
					    cp -r /opt/docmost/data /opt/
 | 
				
			||||||
    rm -rf /opt/docmost
 | 
					    rm -rf /opt/docmost
 | 
				
			||||||
    temp_file=$(mktemp)
 | 
					    msg_ok "Data backed up"
 | 
				
			||||||
    curl -fsSL "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
					
 | 
				
			||||||
    tar -xzf "$temp_file"
 | 
					    fetch_and_deploy_gh_release "docmost" "docmost/docmost"
 | 
				
			||||||
    mv docmost-${RELEASE} /opt/docmost
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
    cd /opt/docmost
 | 
					    cd /opt/docmost
 | 
				
			||||||
    mv /opt/.env /opt/docmost/.env
 | 
					    mv /opt/.env /opt/docmost/.env
 | 
				
			||||||
    mv /opt/data /opt/docmost/data
 | 
					    mv /opt/data /opt/docmost/data
 | 
				
			||||||
    $STD pnpm install --force
 | 
					    $STD pnpm install --force
 | 
				
			||||||
    $STD pnpm build
 | 
					    $STD pnpm build
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated ${APP}"
 | 
					    msg_ok "Updated ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
    systemctl start docmost
 | 
					    systemctl start docmost
 | 
				
			||||||
    msg_ok "Started ${APP}"
 | 
					    msg_ok "Started ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
    rm -f ${temp_file}
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								ct/emby.sh
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								ct/emby.sh
									
									
									
									
									
								
							@@ -23,26 +23,26 @@ function update_script() {
 | 
				
			|||||||
  header_info
 | 
					  header_info
 | 
				
			||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if [[ ! -d /opt/emby-server ]]; then
 | 
					  if [[ ! -d /opt/emby-server ]]; then
 | 
				
			||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  LATEST=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
				
			||||||
  msg_info "Stopping ${APP}"
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.emby 2>/dev/null)" ]] || [[ ! -f ~/.emby ]]; then
 | 
				
			||||||
  systemctl stop emby-server
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
  msg_ok "Stopped ${APP}"
 | 
					    systemctl stop emby-server
 | 
				
			||||||
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Updating ${APP}"
 | 
					    fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary"
 | 
				
			||||||
  $STD curl -fsSL "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb" -o "emby-server-deb_${LATEST}_amd64.deb"
 | 
					 | 
				
			||||||
  $STD dpkg -i "emby-server-deb_${LATEST}_amd64.deb"
 | 
					 | 
				
			||||||
  rm "emby-server-deb_${LATEST}_amd64.deb"
 | 
					 | 
				
			||||||
  msg_ok "Updated ${APP}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
  systemctl start emby-server
 | 
					    systemctl start emby-server
 | 
				
			||||||
  msg_ok "Started ${APP}"
 | 
					    msg_ok "Started ${APP}"
 | 
				
			||||||
  msg_ok "Updated Successfully"
 | 
					
 | 
				
			||||||
  exit
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
APP="ErsatzTV"
 | 
					APP="ErsatzTV"
 | 
				
			||||||
var_tags="${var_tags:-iptv}"
 | 
					var_tags="${var_tags:-iptv}"
 | 
				
			||||||
var_cpu="${var_cpu:-1}"
 | 
					var_cpu="${var_cpu:-2}"
 | 
				
			||||||
var_ram="${var_ram:-1024}"
 | 
					var_ram="${var_ram:-1024}"
 | 
				
			||||||
var_disk="${var_disk:-5}"
 | 
					var_disk="${var_disk:-5}"
 | 
				
			||||||
var_os="${var_os:-debian}"
 | 
					var_os="${var_os:-debian}"
 | 
				
			||||||
@@ -27,31 +27,18 @@ function update_script() {
 | 
				
			|||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt && $(echo "x.x.x" >/opt/${APP}_version.txt) || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.ersatztv 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv ]]; then
 | 
				
			||||||
    msg_info "Stopping ErsatzTV"
 | 
					    msg_info "Stopping ErsatzTV"
 | 
				
			||||||
    systemctl stop ersatzTV
 | 
					    systemctl stop ersatzTV
 | 
				
			||||||
    msg_ok "Stopped ErsatzTV"
 | 
					    msg_ok "Stopped ErsatzTV"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ErsatzTV"
 | 
					    FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
 | 
				
			||||||
    cp -R /opt/ErsatzTV/ ErsatzTV-backup
 | 
					    fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
 | 
				
			||||||
    rm ErsatzTV-backup/ErsatzTV
 | 
					 | 
				
			||||||
    rm -rf /opt/ErsatzTV
 | 
					 | 
				
			||||||
    temp_file=$(mktemp)
 | 
					 | 
				
			||||||
    curl -fsSL "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-x64.tar.gz" -o "$temp_file"
 | 
					 | 
				
			||||||
    tar -xzf "$temp_file"
 | 
					 | 
				
			||||||
    mv ErsatzTV-${RELEASE}-linux-x64 /opt/ErsatzTV
 | 
					 | 
				
			||||||
    cp -R ErsatzTV-backup/* /opt/ErsatzTV/
 | 
					 | 
				
			||||||
    rm -rf ErsatzTV-backup
 | 
					 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated ErsatzTV"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ErsatzTV"
 | 
					    msg_info "Starting ErsatzTV"
 | 
				
			||||||
    systemctl start ersatzTV
 | 
					    systemctl start ersatzTV
 | 
				
			||||||
    msg_ok "Started ErsatzTV"
 | 
					    msg_ok "Started ErsatzTV"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
    rm -f ${temp_file}
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,6 +73,11 @@ EOF
 | 
				
			|||||||
    msg_ok "Updated systemd service"
 | 
					    msg_ok "Updated systemd service"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  msg_info "Linking esphome to /usr/local/bin"
 | 
				
			||||||
 | 
					  rm -f /usr/local/bin/esphome
 | 
				
			||||||
 | 
					  ln -s /opt/esphome/.venv/bin/esphome /usr/local/bin/esphome
 | 
				
			||||||
 | 
					  msg_ok "Linked esphome binary"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Starting ${APP}"
 | 
					  msg_info "Starting ${APP}"
 | 
				
			||||||
  systemctl start esphomeDashboard
 | 
					  systemctl start esphomeDashboard
 | 
				
			||||||
  msg_ok "Started ${APP}"
 | 
					  msg_ok "Started ${APP}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
				
			|||||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
# Author: CrazyWolf13
 | 
					# Author: CrazyWolf13
 | 
				
			||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
# Source: https://github.com/arunavo4/gitea-mirror
 | 
					# Source: https://github.com/RayLabsHQ/gitea-mirror
 | 
				
			||||||
 | 
					
 | 
				
			||||||
APP="gitea-mirror"
 | 
					APP="gitea-mirror"
 | 
				
			||||||
var_tags="${var_tags:-mirror;gitea}"
 | 
					var_tags="${var_tags:-mirror;gitea}"
 | 
				
			||||||
@@ -28,7 +28,7 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/arunavo4/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Stopping Services"
 | 
					    msg_info "Stopping Services"
 | 
				
			||||||
@@ -48,7 +48,7 @@ function update_script() {
 | 
				
			|||||||
    msg_ok "Installed Bun"
 | 
					    msg_ok "Installed Bun"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rm -rf /opt/gitea-mirror
 | 
					    rm -rf /opt/gitea-mirror
 | 
				
			||||||
    fetch_and_deploy_gh_release "gitea-mirror" "arunavo4/gitea-mirror"
 | 
					    fetch_and_deploy_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating and rebuilding ${APP} to v${RELEASE}"
 | 
					    msg_info "Updating and rebuilding ${APP} to v${RELEASE}"
 | 
				
			||||||
    cd /opt/gitea-mirror
 | 
					    cd /opt/gitea-mirror
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								ct/headers/alpine-syncthing
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/alpine-syncthing
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					    ___    __      _                 _____                  __  __    _            
 | 
				
			||||||
 | 
					   /   |  / /___  (_)___  ___       / ___/__  ______  _____/ /_/ /_  (_)___  ____ _
 | 
				
			||||||
 | 
					  / /| | / / __ \/ / __ \/ _ \______\__ \/ / / / __ \/ ___/ __/ __ \/ / __ \/ __ `/
 | 
				
			||||||
 | 
					 / ___ |/ / /_/ / / / / /  __/_____/__/ / /_/ / / / / /__/ /_/ / / / / / / / /_/ / 
 | 
				
			||||||
 | 
					/_/  |_/_/ .___/_/_/ /_/\___/     /____/\__, /_/ /_/\___/\__/_/ /_/_/_/ /_/\__, /  
 | 
				
			||||||
 | 
					        /_/                            /____/                             /____/   
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/itsm-ng
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/itsm-ng
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					    _______________ __  ___      _   ________
 | 
				
			||||||
 | 
					   /  _/_  __/ ___//  |/  /     / | / / ____/
 | 
				
			||||||
 | 
					   / /  / /  \__ \/ /|_/ /_____/  |/ / / __  
 | 
				
			||||||
 | 
					 _/ /  / /  ___/ / /  / /_____/ /|  / /_/ /  
 | 
				
			||||||
 | 
					/___/ /_/  /____/_/  /_/     /_/ |_/\____/   
 | 
				
			||||||
 | 
					                                             
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/kapowarr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/kapowarr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					    __ __                                         
 | 
				
			||||||
 | 
					   / //_/___ _____  ____ _      ______ ___________
 | 
				
			||||||
 | 
					  / ,< / __ `/ __ \/ __ \ | /| / / __ `/ ___/ ___/
 | 
				
			||||||
 | 
					 / /| / /_/ / /_/ / /_/ / |/ |/ / /_/ / /  / /    
 | 
				
			||||||
 | 
					/_/ |_\__,_/ .___/\____/|__/|__/\__,_/_/  /_/     
 | 
				
			||||||
 | 
					          /_/                                     
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/librespeed-rust
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/librespeed-rust
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					    __    _ __                                       __      ____             __ 
 | 
				
			||||||
 | 
					   / /   (_) /_  ________  _________  ___  ___  ____/ /     / __ \__  _______/ /_
 | 
				
			||||||
 | 
					  / /   / / __ \/ ___/ _ \/ ___/ __ \/ _ \/ _ \/ __  /_____/ /_/ / / / / ___/ __/
 | 
				
			||||||
 | 
					 / /___/ / /_/ / /  /  __(__  ) /_/ /  __/  __/ /_/ /_____/ _, _/ /_/ (__  ) /_  
 | 
				
			||||||
 | 
					/_____/_/_.___/_/   \___/____/ .___/\___/\___/\__,_/     /_/ |_|\__,_/____/\__/  
 | 
				
			||||||
 | 
					                            /_/                                                  
 | 
				
			||||||
@@ -48,6 +48,7 @@ source /opt/homarr/.env
 | 
				
			|||||||
set +a
 | 
					set +a
 | 
				
			||||||
export DB_DIALECT='sqlite'
 | 
					export DB_DIALECT='sqlite'
 | 
				
			||||||
export AUTH_SECRET=$(openssl rand -base64 32)
 | 
					export AUTH_SECRET=$(openssl rand -base64 32)
 | 
				
			||||||
 | 
					export CRON_JOB_API_KEY=$(openssl rand -base64 32)
 | 
				
			||||||
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
 | 
					node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
 | 
				
			||||||
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
 | 
					for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
 | 
				
			||||||
  dirname=$(basename "$dir")
 | 
					  dirname=$(basename "$dir")
 | 
				
			||||||
@@ -114,6 +115,7 @@ source /opt/homarr/.env
 | 
				
			|||||||
set +a
 | 
					set +a
 | 
				
			||||||
export DB_DIALECT='sqlite'
 | 
					export DB_DIALECT='sqlite'
 | 
				
			||||||
export AUTH_SECRET=$(openssl rand -base64 32)
 | 
					export AUTH_SECRET=$(openssl rand -base64 32)
 | 
				
			||||||
 | 
					export CRON_JOB_API_KEY=$(openssl rand -base64 32)
 | 
				
			||||||
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
 | 
					node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
 | 
				
			||||||
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
 | 
					for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
 | 
				
			||||||
  dirname=$(basename "$dir")
 | 
					  dirname=$(basename "$dir")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										47
									
								
								ct/itsm-ng.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								ct/itsm-ng.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					#!/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: Florianb63
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://itsm-ng.com/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="ITSM-NG"
 | 
				
			||||||
 | 
					var_tags="${var_tags:-asset-management;foss}"
 | 
				
			||||||
 | 
					var_cpu="${var_cpu:-2}"
 | 
				
			||||||
 | 
					var_ram="${var_ram:-2048}"
 | 
				
			||||||
 | 
					var_disk="${var_disk:-10}"
 | 
				
			||||||
 | 
					var_os="${var_os:-debian}"
 | 
				
			||||||
 | 
					var_version="${var_version:-12}"
 | 
				
			||||||
 | 
					var_unprivileged="${var_unprivileged:-1}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					  header_info
 | 
				
			||||||
 | 
					  check_container_storage
 | 
				
			||||||
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [[ ! -f /etc/itsm-ng/config_db.php ]]; then
 | 
				
			||||||
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  msg_info "Updating ${APP} LXC"
 | 
				
			||||||
 | 
					  $STD apt-get update
 | 
				
			||||||
 | 
					  $STD apt-get -y upgrade
 | 
				
			||||||
 | 
					  msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start
 | 
				
			||||||
 | 
					build_container
 | 
				
			||||||
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
				
			||||||
							
								
								
									
										66
									
								
								ct/kapowarr.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								ct/kapowarr.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
				
			|||||||
 | 
					#!/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/Casvt/Kapowarr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="Kapowarr"
 | 
				
			||||||
 | 
					var_tags="${var_tags:-Arr}"
 | 
				
			||||||
 | 
					var_cpu="${var_cpu:-1}"
 | 
				
			||||||
 | 
					var_ram="${var_ram:-256}"
 | 
				
			||||||
 | 
					var_disk="${var_disk:-2}"
 | 
				
			||||||
 | 
					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 [[ ! -f /etc/systemd/system/kapowarr.service ]]; then
 | 
				
			||||||
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  RELEASE=$(curl -s https://api.github.com/repos/Casvt/Kapowarr/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat $HOME/.kapowarr)" ]] || [[ ! -f $HOME/.kapowarr ]]; then
 | 
				
			||||||
 | 
					    setup_uv 
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    msg_info "Stopping $APP"
 | 
				
			||||||
 | 
					    systemctl stop kapowarr
 | 
				
			||||||
 | 
					    msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Creating Backup"
 | 
				
			||||||
 | 
					    mv /opt/kapowarr/db /opt/
 | 
				
			||||||
 | 
					    msg_ok "Backup Created"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "kapowarr" "Casvt/Kapowarr"
 | 
				
			||||||
 | 
					    msg_info "Updating $APP to ${RELEASE}"
 | 
				
			||||||
 | 
					    mv /opt/db /opt/kapowarr
 | 
				
			||||||
 | 
					    msg_ok "Updated $APP to ${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting $APP"
 | 
				
			||||||
 | 
					    systemctl start kapowarr
 | 
				
			||||||
 | 
					    msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Update Successful"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start
 | 
				
			||||||
 | 
					build_container
 | 
				
			||||||
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5656${CL}"
 | 
				
			||||||
@@ -36,6 +36,15 @@ function update_script() {
 | 
				
			|||||||
    exit 1
 | 
					    exit 1
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
 | 
					  COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [[ "$COMPOSE_BASENAME" == "sqlite.compose.yaml" || "$COMPOSE_BASENAME" == "postgres.compose.yaml" ]]; then
 | 
				
			||||||
 | 
					    msg_error "❌ Detected outdated Komodo setup using SQLite or PostgreSQL (FerretDB v1)."
 | 
				
			||||||
 | 
					    echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}"
 | 
				
			||||||
 | 
					    echo -e "${YW}Please follow the migration guide:${CL}"
 | 
				
			||||||
 | 
					    echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
 | 
					  BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
 | 
				
			||||||
  cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
 | 
					  cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
 | 
				
			||||||
    msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
 | 
					    msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										54
									
								
								ct/librespeed-rust.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								ct/librespeed-rust.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					#!/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: Joseph Stubberfield (stubbers)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://github.com/librespeed/speedtest-rust
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="Librespeed-Rust"
 | 
				
			||||||
 | 
					var_tags="${var_tags:-network}"
 | 
				
			||||||
 | 
					var_cpu="${var_cpu:-1}"
 | 
				
			||||||
 | 
					var_ram="${var_ram:-512}"
 | 
				
			||||||
 | 
					var_disk="${var_disk:-4}"
 | 
				
			||||||
 | 
					var_os="${var_os:-debian}"
 | 
				
			||||||
 | 
					var_version="${var_version:-12}"
 | 
				
			||||||
 | 
					var_unprivileged="${var_unprivileged:-1}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					  header_info
 | 
				
			||||||
 | 
					  check_container_storage
 | 
				
			||||||
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					  if [[ ! -d /var/lib/librespeed-rs ]]; then
 | 
				
			||||||
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/librespeed/speedtest-rust/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "v([^"]+).*/\1/')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.librespeed 2>/dev/null)" ]] || [[ ! -f ~/.librespeed ]]; then
 | 
				
			||||||
 | 
					    msg_info "Stopping Services"
 | 
				
			||||||
 | 
					    systemctl stop librespeed-rs
 | 
				
			||||||
 | 
					    msg_ok "Services Stopped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-x86_64-unknown-linux-gnu.deb"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
 | 
					    systemctl start librespeed-rs
 | 
				
			||||||
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start
 | 
				
			||||||
 | 
					build_container
 | 
				
			||||||
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
				
			||||||
@@ -37,6 +37,7 @@ function update_script() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
					    msg_info "Updating ${APP} to ${RELEASE}"
 | 
				
			||||||
    mv /opt/linkwarden/.env /opt/.env
 | 
					    mv /opt/linkwarden/.env /opt/.env
 | 
				
			||||||
 | 
					    [ -d /opt/linkwarden/data ] && mv /opt/linkwarden/data /opt/data.bak
 | 
				
			||||||
    rm -rf /opt/linkwarden
 | 
					    rm -rf /opt/linkwarden
 | 
				
			||||||
    fetch_and_deploy_gh_release "linkwarden" "linkwarden/linkwarden"
 | 
					    fetch_and_deploy_gh_release "linkwarden" "linkwarden/linkwarden"
 | 
				
			||||||
    cd /opt/linkwarden
 | 
					    cd /opt/linkwarden
 | 
				
			||||||
@@ -47,6 +48,7 @@ function update_script() {
 | 
				
			|||||||
    $STD yarn prisma:generate
 | 
					    $STD yarn prisma:generate
 | 
				
			||||||
    $STD yarn web:build
 | 
					    $STD yarn web:build
 | 
				
			||||||
    $STD yarn prisma:deploy
 | 
					    $STD yarn prisma:deploy
 | 
				
			||||||
 | 
					    [ -d /opt/data.bak ] && mv /opt/data.bak /opt/linkwarden/data
 | 
				
			||||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
					    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										35
									
								
								ct/mafl.sh
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								ct/mafl.sh
									
									
									
									
									
								
							@@ -27,18 +27,31 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  msg_info "Updating Mafl to v${RELEASE} (Patience)"
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.mafl 2>/dev/null)" ]] || [[ ! -f ~/.mafl ]]; then
 | 
				
			||||||
  systemctl stop mafl
 | 
					    msg_info "Stopping Mafl service"
 | 
				
			||||||
  curl -fsSL "https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz")
 | 
					    systemctl stop mafl
 | 
				
			||||||
  tar -xzf v${RELEASE}.tar.gz
 | 
					    msg_ok "Service stopped"
 | 
				
			||||||
  cp -r mafl-${RELEASE}/* /opt/mafl/
 | 
					
 | 
				
			||||||
  rm -rf mafl-${RELEASE}
 | 
					    msg_info "Performing backup"
 | 
				
			||||||
  cd /opt/mafl
 | 
					    mkdir -p /opt/mafl-backup/data
 | 
				
			||||||
  yarn install
 | 
					    mv /opt/mafl/data /opt/mafl-backup/data
 | 
				
			||||||
  yarn build
 | 
					    rm -rf /opt/mafl
 | 
				
			||||||
  systemctl start mafl
 | 
					    msg_ok "Backup complete"
 | 
				
			||||||
  msg_ok "Updated Mafl to v${RELEASE}"
 | 
					    
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "mafl" "hywax/mafl"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating Mafl to v${RELEASE}"
 | 
				
			||||||
 | 
					    cd /opt/mafl
 | 
				
			||||||
 | 
					    yarn install
 | 
				
			||||||
 | 
					    yarn build
 | 
				
			||||||
 | 
					    mv /opt/mafl-backup/data /opt/mafl/data
 | 
				
			||||||
 | 
					    systemctl start mafl
 | 
				
			||||||
 | 
					    msg_ok "Updated Mafl to v${RELEASE}"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  exit
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,6 +40,7 @@ function update_script() {
 | 
				
			|||||||
    msg_info "Updating Ollama to ${RELEASE}"
 | 
					    msg_info "Updating Ollama to ${RELEASE}"
 | 
				
			||||||
    rm -rf /usr/local/lib/ollama
 | 
					    rm -rf /usr/local/lib/ollama
 | 
				
			||||||
    rm -rf /usr/local/bin/ollama
 | 
					    rm -rf /usr/local/bin/ollama
 | 
				
			||||||
 | 
					    mkdir -p /usr/local/lib/ollama
 | 
				
			||||||
    tar -xzf "${TMP_TAR}" -C /usr/local/lib/ollama
 | 
					    tar -xzf "${TMP_TAR}" -C /usr/local/lib/ollama
 | 
				
			||||||
    ln -sf /usr/local/lib/ollama/bin/ollama /usr/local/bin/ollama
 | 
					    ln -sf /usr/local/lib/ollama/bin/ollama /usr/local/bin/ollama
 | 
				
			||||||
    echo "${RELEASE}" >/opt/Ollama_version.txt
 | 
					    echo "${RELEASE}" >/opt/Ollama_version.txt
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,11 +30,11 @@ function update_script() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  if [ -x "/usr/bin/ollama" ]; then
 | 
					  if [ -x "/usr/bin/ollama" ]; then
 | 
				
			||||||
    msg_info "Updating Ollama"
 | 
					    msg_info "Updating Ollama"
 | 
				
			||||||
    rm -rf /usr/lib/ollama
 | 
					 | 
				
			||||||
    rm -rf /usr/bin/ollama
 | 
					 | 
				
			||||||
    OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
 | 
					    OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
 | 
				
			||||||
    RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
					    RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
				
			||||||
    if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
 | 
					    if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
 | 
				
			||||||
 | 
					      rm -rf /usr/lib/ollama
 | 
				
			||||||
 | 
					      rm -rf /usr/bin/ollama
 | 
				
			||||||
      curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
 | 
					      curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
 | 
				
			||||||
      tar -C /usr -xzf ollama-linux-amd64.tgz
 | 
					      tar -C /usr -xzf ollama-linux-amd64.tgz
 | 
				
			||||||
      rm -rf ollama-linux-amd64.tgz
 | 
					      rm -rf ollama-linux-amd64.tgz
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -86,4 +86,4 @@ msg_ok "Completed Successfully!\n"
 | 
				
			|||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Configure your reverse proxy to point to:${BGN} ${IP}:1411${CL}"
 | 
					echo -e "${INFO}${YW} Configure your reverse proxy to point to:${BGN} ${IP}:1411${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}https://{PUBLIC_URL}/login/setup${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}https://{PUBLIC_URL}/setup${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,6 +58,7 @@ function update_script() {
 | 
				
			|||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}."
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}."
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					  exit  
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,7 @@ function update_script() {
 | 
				
			|||||||
    touch /opt/${APP}_version.txt
 | 
					    touch /opt/${APP}_version.txt
 | 
				
			||||||
    mkdir -p $HOME/.config/qBittorrent/
 | 
					    mkdir -p $HOME/.config/qBittorrent/
 | 
				
			||||||
    mkdir -p /opt/qbittorrent/
 | 
					    mkdir -p /opt/qbittorrent/
 | 
				
			||||||
    mv /.config/qBittorrent $HOME/.config/
 | 
					    [ -d "/.config/qBittorrent" ] && mv /.config/qBittorrent "$HOME/.config/"
 | 
				
			||||||
    $STD apt-get remove --purge -y qbittorrent-nox
 | 
					    $STD apt-get remove --purge -y qbittorrent-nox
 | 
				
			||||||
    sed -i 's@ExecStart=/usr/bin/qbittorrent-nox@ExecStart=/opt/qbittorrent/qbittorrent-nox@g' /etc/systemd/system/qbittorrent-nox.service
 | 
					    sed -i 's@ExecStart=/usr/bin/qbittorrent-nox@ExecStart=/opt/qbittorrent/qbittorrent-nox@g' /etc/systemd/system/qbittorrent-nox.service
 | 
				
			||||||
    systemctl daemon-reload
 | 
					    systemctl daemon-reload
 | 
				
			||||||
@@ -67,4 +67,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,10 +38,12 @@ function update_script() {
 | 
				
			|||||||
  tar -xzf v$RELEASE.tar.gz
 | 
					  tar -xzf v$RELEASE.tar.gz
 | 
				
			||||||
  cd Stirling-PDF-$RELEASE
 | 
					  cd Stirling-PDF-$RELEASE
 | 
				
			||||||
  chmod +x ./gradlew
 | 
					  chmod +x ./gradlew
 | 
				
			||||||
  $STD ./gradlew build
 | 
					  $STD ./gradlew build -x spotlessApply -x spotlessCheck -x test -x sonarqube
 | 
				
			||||||
  rm -rf /opt/Stirling-PDF/Stirling-PDF-*.jar
 | 
					  rm -rf /opt/Stirling-PDF/Stirling-PDF-*.jar
 | 
				
			||||||
  cp -r ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/
 | 
					  cp -r ./stirling-pdf/build/libs/*.jar /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar
 | 
				
			||||||
  cp -r scripts /opt/Stirling-PDF/
 | 
					  cp -r scripts /opt/Stirling-PDF/
 | 
				
			||||||
 | 
					  cp -r pipeline /opt/Stirling-PDF/
 | 
				
			||||||
 | 
					  cp -r stirling-pdf/src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
 | 
				
			||||||
  cd ~
 | 
					  cd ~
 | 
				
			||||||
  rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz
 | 
					  rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz
 | 
				
			||||||
  ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
 | 
					  ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,12 +27,24 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  msg_info "Updating $APP"
 | 
					
 | 
				
			||||||
  systemctl stop threadfin.service
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
  curl -fsSL "https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_amd64" -o "/opt/threadfin/threadfin"
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.threadfin 2>/dev/null)" ]] || [[ ! -f ~/.threadfin ]]; then
 | 
				
			||||||
  chmod +x /opt/threadfin/threadfin
 | 
					
 | 
				
			||||||
  systemctl start threadfin.service
 | 
					    msg_info "Stopping $APP"
 | 
				
			||||||
  msg_ok "Updated $APP"
 | 
					    systemctl stop threadfin
 | 
				
			||||||
 | 
					    msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting $APP"
 | 
				
			||||||
 | 
					    systemctl start threadfin
 | 
				
			||||||
 | 
					    msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  exit
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
				
			|||||||
# Copyright (c) 2021-2025 tteck
 | 
					# Copyright (c) 2021-2025 tteck
 | 
				
			||||||
# Author: tteck (tteckster)
 | 
					# Author: tteck (tteckster)
 | 
				
			||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
# Source: https://triliumnext.github.io/Docs/
 | 
					# Source: https://github.com/TriliumNext/Trilium
 | 
				
			||||||
 | 
					
 | 
				
			||||||
APP="Trilium"
 | 
					APP="Trilium"
 | 
				
			||||||
var_tags="${var_tags:-notes}"
 | 
					var_tags="${var_tags:-notes}"
 | 
				
			||||||
@@ -27,57 +27,52 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/Trilium/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.Trilium 2>/dev/null)" ]] || [[ ! -f ~/.Trilium ]]; then
 | 
				
			||||||
 if [[ "v${RELEASE}" != "$(cat /opt/${APP}_version.txt 2>/dev/null)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
					
 | 
				
			||||||
 
 | 
					    if [[ -d /opt/trilium/db ]]; then
 | 
				
			||||||
  if [[ -d /opt/trilium/db ]]; then
 | 
					      DB_PATH="/opt/trilium/db"
 | 
				
			||||||
    DB_PATH="/opt/trilium/db"
 | 
					      DB_RESTORE_PATH="/opt/trilium/db"
 | 
				
			||||||
    DB_RESTORE_PATH="/opt/trilium/db"
 | 
					    elif [[ -d /opt/trilium/assets/db ]]; then
 | 
				
			||||||
  elif [[ -d /opt/trilium/assets/db ]]; then
 | 
					      DB_PATH="/opt/trilium/assets/db"
 | 
				
			||||||
    DB_PATH="/opt/trilium/assets/db"
 | 
					      DB_RESTORE_PATH="/opt/trilium/assets/db"
 | 
				
			||||||
    DB_RESTORE_PATH="/opt/trilium/assets/db"
 | 
					    else
 | 
				
			||||||
 | 
					      msg_error "Database not found in either /opt/trilium/db or /opt/trilium/assets/db"
 | 
				
			||||||
 | 
					      exit 1
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
 | 
					    systemctl stop trilium
 | 
				
			||||||
 | 
					    sleep 1
 | 
				
			||||||
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Backing up Database"
 | 
				
			||||||
 | 
					    mkdir -p /opt/trilium_backup
 | 
				
			||||||
 | 
					    cp -r "${DB_PATH}" /opt/trilium_backup/
 | 
				
			||||||
 | 
					    rm -rf /opt/trilium
 | 
				
			||||||
 | 
					    msg_ok "Backed up Database"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "Trilium" "TriliumNext/Trilium" "prebuild" "latest" "/opt/trilium" "TriliumNotes-Server-*linux-x64.tar.xz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Restoring Database"
 | 
				
			||||||
 | 
					    mkdir -p "$(dirname "${DB_RESTORE_PATH}")"
 | 
				
			||||||
 | 
					    cp -r /opt/trilium_backup/$(basename "${DB_PATH}") "${DB_RESTORE_PATH}"
 | 
				
			||||||
 | 
					    msg_ok "Restored Database"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Cleaning up"
 | 
				
			||||||
 | 
					    rm -rf /opt/trilium_backup
 | 
				
			||||||
 | 
					    msg_ok "Cleaned"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
 | 
					    systemctl start trilium
 | 
				
			||||||
 | 
					    sleep 1
 | 
				
			||||||
 | 
					    msg_ok "Started ${APP}"
 | 
				
			||||||
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
   msg_error "Database not found in either /opt/trilium/db or /opt/trilium/assets/db"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
    exit 1
 | 
					 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Stopping ${APP}"
 | 
					  exit
 | 
				
			||||||
  systemctl stop trilium
 | 
					 | 
				
			||||||
  sleep 1
 | 
					 | 
				
			||||||
  msg_ok "Stopped ${APP}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  msg_info "Updating to ${RELEASE}"
 | 
					 | 
				
			||||||
  mkdir -p /opt/trilium_backup
 | 
					 | 
				
			||||||
  cp -r "${DB_PATH}" /opt/trilium_backup/
 | 
					 | 
				
			||||||
  rm -rf /opt/trilium
 | 
					 | 
				
			||||||
  cd /tmp
 | 
					 | 
				
			||||||
  curl -fsSL "https://github.com/TriliumNext/trilium/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz"
 | 
					 | 
				
			||||||
  tar -xf "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz"
 | 
					 | 
				
			||||||
  mv "TriliumNextNotes-Server-${RELEASE}-linux-x64" /opt/trilium
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  # Restore database
 | 
					 | 
				
			||||||
  mkdir -p "$(dirname "${DB_RESTORE_PATH}")"
 | 
					 | 
				
			||||||
  cp -r /opt/trilium_backup/$(basename "${DB_PATH}") "${DB_RESTORE_PATH}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  echo "v${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
  msg_ok "Updated to ${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  msg_info "Cleaning up"
 | 
					 | 
				
			||||||
  rm -rf "/tmp/TriliumNextNotes-Server-${RELEASE}-linux-x64.tar.xz"
 | 
					 | 
				
			||||||
  rm -rf /opt/trilium_backup
 | 
					 | 
				
			||||||
  msg_ok "Cleaned"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  msg_info "Starting ${APP}"
 | 
					 | 
				
			||||||
  systemctl start trilium
 | 
					 | 
				
			||||||
  sleep 1
 | 
					 | 
				
			||||||
  msg_ok "Started ${APP}"
 | 
					 | 
				
			||||||
  msg_ok "Updated Successfully"
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
  msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exit
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ APP="Zigbee2MQTT"
 | 
				
			|||||||
var_tags="${var_tags:-smarthome;zigbee;mqtt}"
 | 
					var_tags="${var_tags:-smarthome;zigbee;mqtt}"
 | 
				
			||||||
var_cpu="${var_cpu:-2}"
 | 
					var_cpu="${var_cpu:-2}"
 | 
				
			||||||
var_ram="${var_ram:-1024}"
 | 
					var_ram="${var_ram:-1024}"
 | 
				
			||||||
var_disk="${var_disk:-4}"
 | 
					var_disk="${var_disk:-5}"
 | 
				
			||||||
var_os="${var_os:-debian}"
 | 
					var_os="${var_os:-debian}"
 | 
				
			||||||
var_version="${var_version:-12}"
 | 
					var_version="${var_version:-12}"
 | 
				
			||||||
var_unprivileged="${var_unprivileged:-0}"
 | 
					var_unprivileged="${var_unprivileged:-0}"
 | 
				
			||||||
@@ -27,16 +27,28 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [[ -f ~/.zigbee2mqtt ]]; then
 | 
				
			||||||
 | 
					    CURRENT="$(cat ~/.zigbee2mqtt)"
 | 
				
			||||||
 | 
					  elif [[ -f /opt/${APP}_version.txt ]]; then
 | 
				
			||||||
 | 
					    CURRENT="$(cat /opt/${APP}_version.txt)"
 | 
				
			||||||
 | 
					    rm -f /opt/${APP}_version.txt
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    CURRENT=""
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/Koenkk/zigbee2mqtt/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ "$RELEASE" != "$CURRENT" ]]; then
 | 
				
			||||||
 | 
					    if ! command -v jq &>/dev/null; then
 | 
				
			||||||
 | 
					      $STD apt-get update
 | 
				
			||||||
 | 
					      $STD apt-get install -y jq
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    NODE_VERSION=24 NODE_MODULE="pnpm@$(curl -fsSL https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Stopping Service"
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
    systemctl stop zigbee2mqtt
 | 
					    systemctl stop zigbee2mqtt
 | 
				
			||||||
    msg_ok "Stopped Service"
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating pnpm"
 | 
					 | 
				
			||||||
    $STD npm install -g pnpm@10.4.1
 | 
					 | 
				
			||||||
    msg_ok "Updated pnpm"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Creating Backup"
 | 
					    msg_info "Creating Backup"
 | 
				
			||||||
    rm -rf /opt/${APP}_backup*.tar.gz
 | 
					    rm -rf /opt/${APP}_backup*.tar.gz
 | 
				
			||||||
    mkdir -p /opt/z2m_backup
 | 
					    mkdir -p /opt/z2m_backup
 | 
				
			||||||
@@ -44,12 +56,9 @@ function update_script() {
 | 
				
			|||||||
    mv /opt/zigbee2mqtt/data /opt/z2m_backup
 | 
					    mv /opt/zigbee2mqtt/data /opt/z2m_backup
 | 
				
			||||||
    msg_ok "Backup Created"
 | 
					    msg_ok "Backup Created"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
    cd /opt
 | 
					 | 
				
			||||||
    curl -fsSL "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip")
 | 
					 | 
				
			||||||
    $STD unzip ${RELEASE}.zip
 | 
					 | 
				
			||||||
    rm -rf /opt/zigbee2mqtt
 | 
					 | 
				
			||||||
    mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt
 | 
					 | 
				
			||||||
    rm -rf /opt/zigbee2mqtt/data
 | 
					    rm -rf /opt/zigbee2mqtt/data
 | 
				
			||||||
    mv /opt/z2m_backup/data /opt/zigbee2mqtt
 | 
					    mv /opt/z2m_backup/data /opt/zigbee2mqtt
 | 
				
			||||||
    cd /opt/zigbee2mqtt
 | 
					    cd /opt/zigbee2mqtt
 | 
				
			||||||
@@ -63,9 +72,7 @@ function update_script() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					    msg_info "Cleaning up"
 | 
				
			||||||
    rm -rf /opt/z2m_backup
 | 
					    rm -rf /opt/z2m_backup
 | 
				
			||||||
    rm -rf /opt/${RELEASE}.zip
 | 
					 | 
				
			||||||
    msg_ok "Cleaned up"
 | 
					    msg_ok "Cleaned up"
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,9 +40,9 @@ function update_script() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
					    msg_info "Updating ${APP} to ${RELEASE}"
 | 
				
			||||||
    cp /opt/zipline/.env /opt/
 | 
					    cp /opt/zipline/.env /opt/
 | 
				
			||||||
    mkdir -p /opt/zipline-upload
 | 
					    mkdir -p /opt/zipline-uploads
 | 
				
			||||||
    if [ -d /opt/zipline/upload ] && [ "$(ls -A /opt/zipline/upload)" ]; then
 | 
					    if [ -d /opt/zipline/uploads ] && [ "$(ls -A /opt/zipline/uploads)" ]; then
 | 
				
			||||||
      cp -R /opt/zipline/upload/* /opt/zipline-upload/
 | 
					      cp -R /opt/zipline/uploads/* /opt/zipline-uploads/
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    curl -fsSL "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip")
 | 
					    curl -fsSL "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip")
 | 
				
			||||||
    $STD unzip v"${RELEASE}".zip
 | 
					    $STD unzip v"${RELEASE}".zip
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								frontend/public/json/add-iptag.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8
									
								
								frontend/public/json/add-iptag.json
									
									
									
										generated
									
									
									
								
							@@ -11,7 +11,7 @@
 | 
				
			|||||||
  "interface_port": null,
 | 
					  "interface_port": null,
 | 
				
			||||||
  "documentation": null,
 | 
					  "documentation": null,
 | 
				
			||||||
  "website": null,
 | 
					  "website": null,
 | 
				
			||||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/proxmox.svg",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
 | 
				
			||||||
  "config_path": "/opt/iptag/iptag.conf",
 | 
					  "config_path": "/opt/iptag/iptag.conf",
 | 
				
			||||||
  "description": "This script automatically adds IP address as tags to LXC containers or VM's using a systemd service. The service also updates the tags if a LXC/VM IP address is changed.",
 | 
					  "description": "This script automatically adds IP address as tags to LXC containers or VM's using a systemd service. The service also updates the tags if a LXC/VM IP address is changed.",
 | 
				
			||||||
  "install_methods": [
 | 
					  "install_methods": [
 | 
				
			||||||
@@ -37,12 +37,16 @@
 | 
				
			|||||||
      "type": "info"
 | 
					      "type": "info"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      "text": "Configuration: `nano /opt/iptag/iptag.conf`. iptag.service must be restarted after change.",
 | 
					      "text": "Configuration: `nano /opt/iptag/iptag.conf`. iptag Service must be restarted after change. See here for full documentation: `https://github.com/community-scripts/ProxmoxVE/discussions/5790`",
 | 
				
			||||||
      "type": "info"
 | 
					      "type": "info"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      "text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
 | 
					      "text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
 | 
				
			||||||
      "type": "warning"
 | 
					      "type": "warning"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "text": "You can execute the ip tool manually with `iptag-run`",
 | 
				
			||||||
 | 
					      "type": "info"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								frontend/public/json/babybuddy.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/babybuddy.json
									
									
									
										generated
									
									
									
								
							@@ -11,7 +11,7 @@
 | 
				
			|||||||
  "interface_port": 80,
 | 
					  "interface_port": 80,
 | 
				
			||||||
  "documentation": "https://docs.baby-buddy.net/",
 | 
					  "documentation": "https://docs.baby-buddy.net/",
 | 
				
			||||||
  "website": "https://github.com/babybuddy/babybuddy",
 | 
					  "website": "https://github.com/babybuddy/babybuddy",
 | 
				
			||||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/baby-buddy.svg",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/baby-buddy.webp",
 | 
				
			||||||
  "config_path": "/opt/babybuddy/babybuddy/settings/production.py",
 | 
					  "config_path": "/opt/babybuddy/babybuddy/settings/production.py",
 | 
				
			||||||
  "description": "Baby Buddy is an open-source web application designed to assist caregivers in tracking various aspects of a baby's daily routine, including sleep, feedings, diaper changes, tummy time, and more. By recording this data, caregivers can better understand and anticipate their baby's needs, reducing guesswork in daily care. The application offers a user-friendly dashboard for data entry and visualization, supports multiple users, and provides features like timers and reminders. Additionally, Baby Buddy can be integrated with platforms like Home Assistant and Grafana for enhanced functionality.",
 | 
					  "description": "Baby Buddy is an open-source web application designed to assist caregivers in tracking various aspects of a baby's daily routine, including sleep, feedings, diaper changes, tummy time, and more. By recording this data, caregivers can better understand and anticipate their baby's needs, reducing guesswork in daily care. The application offers a user-friendly dashboard for data entry and visualization, supports multiple users, and provides features like timers and reminders. Additionally, Baby Buddy can be integrated with platforms like Home Assistant and Grafana for enhanced functionality.",
 | 
				
			||||||
  "install_methods": [
 | 
					  "install_methods": [
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								frontend/public/json/bunkerweb.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								frontend/public/json/bunkerweb.json
									
									
									
										generated
									
									
									
								
							@@ -31,5 +31,10 @@
 | 
				
			|||||||
    "username": null,
 | 
					    "username": null,
 | 
				
			||||||
    "password": null
 | 
					    "password": null
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "notes": []
 | 
					  "notes": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
 | 
				
			||||||
 | 
					      "type": "warning"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								frontend/public/json/cloudflare-ddns.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								frontend/public/json/cloudflare-ddns.json
									
									
									
										generated
									
									
									
								
							@@ -19,8 +19,8 @@
 | 
				
			|||||||
      "type": "default",
 | 
					      "type": "default",
 | 
				
			||||||
      "script": "ct/cloudflare-ddns.sh",
 | 
					      "script": "ct/cloudflare-ddns.sh",
 | 
				
			||||||
      "resources": {
 | 
					      "resources": {
 | 
				
			||||||
        "cpu": 1,
 | 
					        "cpu": 2,
 | 
				
			||||||
        "ram": 512,
 | 
					        "ram": 1024,
 | 
				
			||||||
        "hdd": 2,
 | 
					        "hdd": 2,
 | 
				
			||||||
        "os": "Debian",
 | 
					        "os": "Debian",
 | 
				
			||||||
        "version": "12"
 | 
					        "version": "12"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								frontend/public/json/convertx.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/convertx.json
									
									
									
										generated
									
									
									
								
							@@ -12,7 +12,7 @@
 | 
				
			|||||||
  "interface_port": 3000,
 | 
					  "interface_port": 3000,
 | 
				
			||||||
  "documentation": "https://github.com/C4illin/ConvertX",
 | 
					  "documentation": "https://github.com/C4illin/ConvertX",
 | 
				
			||||||
  "website": "https://github.com/C4illin/ConvertX",
 | 
					  "website": "https://github.com/C4illin/ConvertX",
 | 
				
			||||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/convertx.svg",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/convertx.webp",
 | 
				
			||||||
  "description": "ConvertX is a self-hosted online file converter supporting over 1000 formats, including images, audio, video, documents, and more, powered by FFmpeg, GraphicsMagick, and other libraries.",
 | 
					  "description": "ConvertX is a self-hosted online file converter supporting over 1000 formats, including images, audio, video, documents, and more, powered by FFmpeg, GraphicsMagick, and other libraries.",
 | 
				
			||||||
  "install_methods": [
 | 
					  "install_methods": [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								frontend/public/json/dockge.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/dockge.json
									
									
									
										generated
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
				
			|||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "date_created": "2024-05-02",
 | 
					  "date_created": "2024-05-02",
 | 
				
			||||||
  "type": "ct",
 | 
					  "type": "ct",
 | 
				
			||||||
  "updateable": false,
 | 
					  "updateable": true,
 | 
				
			||||||
  "privileged": false,
 | 
					  "privileged": false,
 | 
				
			||||||
  "interface_port": 5001,
 | 
					  "interface_port": 5001,
 | 
				
			||||||
  "documentation": null,
 | 
					  "documentation": null,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								frontend/public/json/docmost.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								frontend/public/json/docmost.json
									
									
									
										generated
									
									
									
								
							@@ -31,5 +31,10 @@
 | 
				
			|||||||
    "username": null,
 | 
					    "username": null,
 | 
				
			||||||
    "password": null
 | 
					    "password": null
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "notes": []
 | 
					  "notes": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "text": "Use `cat ~/docmost.creds` to see database credentials.",
 | 
				
			||||||
 | 
					      "type": "info"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								frontend/public/json/emqx.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								frontend/public/json/emqx.json
									
									
									
										generated
									
									
									
								
							@@ -35,6 +35,10 @@
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      "text": "Setup-Steps: Access Control ➡ Authentication ➡ Create ➡ Next ➡ Next ➡ Create ➡ Users ➡ Add ➡ Username / Password (to authenicate with MQTT) ➡ Save. You're now ready to enjoy a high-performance MQTT Broker.",
 | 
					      "text": "Setup-Steps: Access Control ➡ Authentication ➡ Create ➡ Next ➡ Next ➡ Create ➡ Users ➡ Add ➡ Username / Password (to authenicate with MQTT) ➡ Save. You're now ready to enjoy a high-performance MQTT Broker.",
 | 
				
			||||||
      "type": "info"
 | 
					      "type": "info"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
 | 
				
			||||||
 | 
					      "type": "warning"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								frontend/public/json/ersatztv.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/ersatztv.json
									
									
									
										generated
									
									
									
								
							@@ -19,7 +19,7 @@
 | 
				
			|||||||
      "type": "default",
 | 
					      "type": "default",
 | 
				
			||||||
      "script": "ct/ersatztv.sh",
 | 
					      "script": "ct/ersatztv.sh",
 | 
				
			||||||
      "resources": {
 | 
					      "resources": {
 | 
				
			||||||
        "cpu": 1,
 | 
					        "cpu": 2,
 | 
				
			||||||
        "ram": 1024,
 | 
					        "ram": 1024,
 | 
				
			||||||
        "hdd": 5,
 | 
					        "hdd": 5,
 | 
				
			||||||
        "os": "debian",
 | 
					        "os": "debian",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								frontend/public/json/evcc.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/evcc.json
									
									
									
										generated
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
				
			|||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "date_created": "2024-10-15",
 | 
					    "date_created": "2024-10-15",
 | 
				
			||||||
    "type": "ct",
 | 
					    "type": "ct",
 | 
				
			||||||
    "updateable": false,
 | 
					    "updateable": true,
 | 
				
			||||||
    "privileged": false,
 | 
					    "privileged": false,
 | 
				
			||||||
    "interface_port": 7070,
 | 
					    "interface_port": 7070,
 | 
				
			||||||
    "documentation": "https://evcc.io/#devices",
 | 
					    "documentation": "https://evcc.io/#devices",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								frontend/public/json/gitea-mirror.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								frontend/public/json/gitea-mirror.json
									
									
									
										generated
									
									
									
								
							@@ -9,9 +9,9 @@
 | 
				
			|||||||
  "updateable": true,
 | 
					  "updateable": true,
 | 
				
			||||||
  "privileged": false,
 | 
					  "privileged": false,
 | 
				
			||||||
  "interface_port": 4321,
 | 
					  "interface_port": 4321,
 | 
				
			||||||
  "documentation": "https://github.com/arunavo4/gitea-mirror/",
 | 
					  "documentation": "https://github.com/RayLabsHQ/gitea-mirror/",
 | 
				
			||||||
  "config_path": "/etc/systemd/system/gitea-mirror.service",
 | 
					  "config_path": "/etc/systemd/system/gitea-mirror.service",
 | 
				
			||||||
  "website": "https://github.com/arunavo4/gitea-mirror/",
 | 
					  "website": "https://github.com/RayLabsHQ/gitea-mirror/",
 | 
				
			||||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/gitea-mirror.webp",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/gitea-mirror.webp",
 | 
				
			||||||
  "description": "Gitea Mirror auto-syncs GitHub repos to your self-hosted Gitea, with a sleek Web UI and easy Docker deployment. ",
 | 
					  "description": "Gitea Mirror auto-syncs GitHub repos to your self-hosted Gitea, with a sleek Web UI and easy Docker deployment. ",
 | 
				
			||||||
  "install_methods": [
 | 
					  "install_methods": [
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								frontend/public/json/huntarr.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/huntarr.json
									
									
									
										generated
									
									
									
								
							@@ -12,7 +12,7 @@
 | 
				
			|||||||
  "documentation": "https://github.com/plexguide/Huntarr.io/wiki",
 | 
					  "documentation": "https://github.com/plexguide/Huntarr.io/wiki",
 | 
				
			||||||
  "config_path": "/opt/huntarr",
 | 
					  "config_path": "/opt/huntarr",
 | 
				
			||||||
  "website": "https://github.com/plexguide/Huntarr.io",
 | 
					  "website": "https://github.com/plexguide/Huntarr.io",
 | 
				
			||||||
  "logo": "https://raw.githubusercontent.com/plexguide/Huntarr.io/refs/heads/main/frontend/static/logo/Huntarr.svg",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/huntarr.webp",
 | 
				
			||||||
  "description": "Huntarr is a tool that automates the search for missing or low-quality media content in your collection. It works seamlessly with applications like Sonarr, Radarr, Lidarr, Readarr, and Whisparr, enhancing their functionality with continuous background scans to identify and update missed or outdated content. Through a user-friendly web interface accessible on port 9705, Huntarr provides real-time statistics, log views, and extensive configuration options. The software is especially useful for users who want to keep their media library up to date by automatically searching for missing episodes or higher-quality versions. Huntarr is well-suited for self-hosted environments and can easily run in LXC containers or Docker setups.",
 | 
					  "description": "Huntarr is a tool that automates the search for missing or low-quality media content in your collection. It works seamlessly with applications like Sonarr, Radarr, Lidarr, Readarr, and Whisparr, enhancing their functionality with continuous background scans to identify and update missed or outdated content. Through a user-friendly web interface accessible on port 9705, Huntarr provides real-time statistics, log views, and extensive configuration options. The software is especially useful for users who want to keep their media library up to date by automatically searching for missing episodes or higher-quality versions. Huntarr is well-suited for self-hosted environments and can easily run in LXC containers or Docker setups.",
 | 
				
			||||||
  "install_methods": [
 | 
					  "install_methods": [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										35
									
								
								frontend/public/json/itsm-ng.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/itsm-ng.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "ITSM-NG",
 | 
				
			||||||
 | 
					  "slug": "itsm-ng",
 | 
				
			||||||
 | 
					  "categories": [
 | 
				
			||||||
 | 
					    25
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "date_created": "2025-07-01",
 | 
				
			||||||
 | 
					  "type": "ct",
 | 
				
			||||||
 | 
					  "updateable": true,
 | 
				
			||||||
 | 
					  "privileged": false,
 | 
				
			||||||
 | 
					  "interface_port": 80,
 | 
				
			||||||
 | 
					  "documentation": "https://wiki.itsm-ng.org/en/home",
 | 
				
			||||||
 | 
					  "website": "https://itsm-ng.com",
 | 
				
			||||||
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/itsm-ng.webp",
 | 
				
			||||||
 | 
					  "config_path": "/etc/itsm-ng",
 | 
				
			||||||
 | 
					  "description": "ITSM-NG is a powerful, open-source IT Service Management (ITSM) solution designed for managing IT assets, software, licenses, and support processes in accordance with ITIL best practices. It offers integrated features for asset inventory, incident tracking, problem management, change requests, and service desk workflows.",
 | 
				
			||||||
 | 
					  "install_methods": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "type": "default",
 | 
				
			||||||
 | 
					      "script": "ct/itsm-ng.sh",
 | 
				
			||||||
 | 
					      "resources": {
 | 
				
			||||||
 | 
					        "cpu": 2,
 | 
				
			||||||
 | 
					        "ram": 2048,
 | 
				
			||||||
 | 
					        "hdd": 10,
 | 
				
			||||||
 | 
					        "os": "debian",
 | 
				
			||||||
 | 
					        "version": "12"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "default_credentials": {
 | 
				
			||||||
 | 
					    "username": "itsm",
 | 
				
			||||||
 | 
					    "password": "itsm"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "notes": []
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								frontend/public/json/jellyfin.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								frontend/public/json/jellyfin.json
									
									
									
										generated
									
									
									
								
							@@ -39,6 +39,10 @@
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      "text": "FFmpeg path: /usr/lib/jellyfin-ffmpeg/ffmpeg",
 | 
					      "text": "FFmpeg path: /usr/lib/jellyfin-ffmpeg/ffmpeg",
 | 
				
			||||||
      "type": "info"
 | 
					      "type": "info"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					     {
 | 
				
			||||||
 | 
					      "text": "For NVIDIA graphics cards, you'll need to install the same drivers in the container that you did on the host. In the container, run the driver installation script and add the CLI arg --no-kernel-module",
 | 
				
			||||||
 | 
					      "type": "info"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										35
									
								
								frontend/public/json/kapowarr.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/kapowarr.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "Kapowarr",
 | 
				
			||||||
 | 
					  "slug": "kapowarr",
 | 
				
			||||||
 | 
					  "categories": [
 | 
				
			||||||
 | 
					    14
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "date_created": "2025-06-30",
 | 
				
			||||||
 | 
					  "type": "ct",
 | 
				
			||||||
 | 
					  "updateable": true,
 | 
				
			||||||
 | 
					  "privileged": false,
 | 
				
			||||||
 | 
					  "interface_port": 5656,
 | 
				
			||||||
 | 
					  "documentation": "https://casvt.github.io/Kapowarr/general_info/workings/",
 | 
				
			||||||
 | 
					  "website": "https://casvt.github.io/Kapowarr/",
 | 
				
			||||||
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/kapowarr.webp",
 | 
				
			||||||
 | 
					  "config_path": "",
 | 
				
			||||||
 | 
					  "description": "Kapowarr allows you to build a digital library of comics. You can add volumes, map them to a folder and start managing! Download, rename, move and convert issues of the volume (including TPB's, One Shots, Hard Covers, and more). The whole process is automated and can be customised in the settings.",
 | 
				
			||||||
 | 
					  "install_methods": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "type": "default",
 | 
				
			||||||
 | 
					      "script": "ct/kapowarr.sh",
 | 
				
			||||||
 | 
					      "resources": {
 | 
				
			||||||
 | 
					        "cpu": 1,
 | 
				
			||||||
 | 
					        "ram": 256,
 | 
				
			||||||
 | 
					        "hdd": 2,
 | 
				
			||||||
 | 
					        "os": "debian",
 | 
				
			||||||
 | 
					        "version": "12"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "default_credentials": {
 | 
				
			||||||
 | 
					    "username": null,
 | 
				
			||||||
 | 
					    "password": null
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "notes": []
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										35
									
								
								frontend/public/json/librespeed-rust.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/librespeed-rust.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "Librespeed Rust",
 | 
				
			||||||
 | 
					  "slug": "librespeed-rust",
 | 
				
			||||||
 | 
					  "categories": [
 | 
				
			||||||
 | 
					    4
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "date_created": "2025-07-01",
 | 
				
			||||||
 | 
					  "type": "ct",
 | 
				
			||||||
 | 
					  "updateable": true,
 | 
				
			||||||
 | 
					  "privileged": false,
 | 
				
			||||||
 | 
					  "config_path": "/var/lib/librespeed-rs/configs.toml",
 | 
				
			||||||
 | 
					  "interface_port": 8080,
 | 
				
			||||||
 | 
					  "documentation": "https://github.com/librespeed/speedtest-rust",
 | 
				
			||||||
 | 
					  "website": "https://github.com/librespeed/speedtest-rust",
 | 
				
			||||||
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/librespeed.webp",
 | 
				
			||||||
 | 
					  "description": "Librespeed is a no flash, no java, no websocket speedtest server. This community script deploys the rust version for simplicity and low resource usage.",
 | 
				
			||||||
 | 
					  "install_methods": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "type": "default",
 | 
				
			||||||
 | 
					      "script": "ct/librespeed-rust.sh",
 | 
				
			||||||
 | 
					      "resources": {
 | 
				
			||||||
 | 
					        "cpu": 1,
 | 
				
			||||||
 | 
					        "ram": 512,
 | 
				
			||||||
 | 
					        "hdd": 4,
 | 
				
			||||||
 | 
					        "os": "Debian",
 | 
				
			||||||
 | 
					        "version": "12"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "default_credentials": {
 | 
				
			||||||
 | 
					    "username": null,
 | 
				
			||||||
 | 
					    "password": null
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "notes": []
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										2
									
								
								frontend/public/json/lyrionmusicserver.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/lyrionmusicserver.json
									
									
									
										generated
									
									
									
								
							@@ -12,7 +12,7 @@
 | 
				
			|||||||
  "interface_port": 9000,
 | 
					  "interface_port": 9000,
 | 
				
			||||||
  "documentation": "https://lyrion.org/",
 | 
					  "documentation": "https://lyrion.org/",
 | 
				
			||||||
  "website": "https://lyrion.org/",
 | 
					  "website": "https://lyrion.org/",
 | 
				
			||||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/lyrion-media-server.webp",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/lyrion-music-server.webp",
 | 
				
			||||||
  "description": "Lyrion Music Server is an open-source server software to stream local music collections, internet radio, and music services to Squeezebox and compatible audio players.",
 | 
					  "description": "Lyrion Music Server is an open-source server software to stream local music collections, internet radio, and music services to Squeezebox and compatible audio players.",
 | 
				
			||||||
  "install_methods": [
 | 
					  "install_methods": [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								frontend/public/json/mysql.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								frontend/public/json/mysql.json
									
									
									
										generated
									
									
									
								
							@@ -39,6 +39,10 @@
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            "text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0",
 | 
					            "text": "With an option to install the MySQL 8.4 LTS release instead of MySQL 8.0",
 | 
				
			||||||
            "type": "info"
 | 
					            "type": "info"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "text": "If installed, access phpMyAdmin at `http://<LXC_IP>/phpMyAdmin`, case sensitive.",
 | 
				
			||||||
 | 
					            "type": "info"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								frontend/public/json/oauth2-proxy.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/oauth2-proxy.json
									
									
									
										generated
									
									
									
								
							@@ -12,7 +12,7 @@
 | 
				
			|||||||
  "interface_port": null,
 | 
					  "interface_port": null,
 | 
				
			||||||
  "documentation": "https://oauth2-proxy.github.io/oauth2-proxy/configuration/overview",
 | 
					  "documentation": "https://oauth2-proxy.github.io/oauth2-proxy/configuration/overview",
 | 
				
			||||||
  "website": "https://oauth2-proxy.github.io/oauth2-proxy/",
 | 
					  "website": "https://oauth2-proxy.github.io/oauth2-proxy/",
 | 
				
			||||||
  "logo": "https://raw.githubusercontent.com/oauth2-proxy/oauth2-proxy/f82e90426a1881d36bf995f25de9b7b1db4c2564/docs/static/img/logos/OAuth2_Proxy_icon.svg",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/oauth2-proxy.webp",
 | 
				
			||||||
  "config_path": "/opt/oauth2-proxy/config.toml",
 | 
					  "config_path": "/opt/oauth2-proxy/config.toml",
 | 
				
			||||||
  "description": "A reverse proxy that provides authentication with Google, Azure, OpenID Connect and many more identity providers.",
 | 
					  "description": "A reverse proxy that provides authentication with Google, Azure, OpenID Connect and many more identity providers.",
 | 
				
			||||||
  "install_methods": [
 | 
					  "install_methods": [
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										40
									
								
								frontend/public/json/pingvin.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										40
									
								
								frontend/public/json/pingvin.json
									
									
									
										generated
									
									
									
								
							@@ -1,40 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
  "name": "Pingvin Share",
 | 
					 | 
				
			||||||
  "slug": "pingvin",
 | 
					 | 
				
			||||||
  "categories": [
 | 
					 | 
				
			||||||
    11
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "date_created": "2024-05-02",
 | 
					 | 
				
			||||||
  "type": "ct",
 | 
					 | 
				
			||||||
  "updateable": true,
 | 
					 | 
				
			||||||
  "privileged": false,
 | 
					 | 
				
			||||||
  "interface_port": 3000,
 | 
					 | 
				
			||||||
  "documentation": "https://stonith404.github.io/pingvin-share/introduction",
 | 
					 | 
				
			||||||
  "website": "https://github.com/stonith404/pingvin-share",
 | 
					 | 
				
			||||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pingvin-share.webp",
 | 
					 | 
				
			||||||
  "config_path": "/opt/pingvin-share/config.yaml",
 | 
					 | 
				
			||||||
  "description": "Pingvin Share is self-hosted file sharing platform and an alternative for WeTransfer.",
 | 
					 | 
				
			||||||
  "install_methods": [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "type": "default",
 | 
					 | 
				
			||||||
      "script": "ct/pingvin.sh",
 | 
					 | 
				
			||||||
      "resources": {
 | 
					 | 
				
			||||||
        "cpu": 2,
 | 
					 | 
				
			||||||
        "ram": 2048,
 | 
					 | 
				
			||||||
        "hdd": 8,
 | 
					 | 
				
			||||||
        "os": "debian",
 | 
					 | 
				
			||||||
        "version": "12"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "default_credentials": {
 | 
					 | 
				
			||||||
    "username": null,
 | 
					 | 
				
			||||||
    "password": null
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "notes": [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "text": "Run `DATA_DIRECTORY=path-to-your-data-directory pm2 restart all --update-env` to update path to your data directory or to update environment variables.",
 | 
					 | 
				
			||||||
      "type": "info"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										4
									
								
								frontend/public/json/proxmox-backup-server.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								frontend/public/json/proxmox-backup-server.json
									
									
									
										generated
									
									
									
								
							@@ -35,6 +35,10 @@
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            "text": "Set a root password if using autologin. This will be the PBS password. `passwd root`",
 | 
					            "text": "Set a root password if using autologin. This will be the PBS password. `passwd root`",
 | 
				
			||||||
            "type": "warning"
 | 
					            "type": "warning"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "text": "Advanced Install is only possible without root password and root SSH access, you can configure this after installation.",
 | 
				
			||||||
 | 
					            "type": "warning"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								frontend/public/json/pulse.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/pulse.json
									
									
									
										generated
									
									
									
								
							@@ -11,7 +11,7 @@
 | 
				
			|||||||
  "interface_port": 7655,
 | 
					  "interface_port": 7655,
 | 
				
			||||||
  "documentation": null,
 | 
					  "documentation": null,
 | 
				
			||||||
  "website": "https://github.com/rcourtman/Pulse",
 | 
					  "website": "https://github.com/rcourtman/Pulse",
 | 
				
			||||||
  "logo": "https://raw.githubusercontent.com/rcourtman/Pulse/main/src/public/logos/pulse-logo-256x256.png",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pulse.webp",
 | 
				
			||||||
  "config_path": "/opt/pulse/.env",
 | 
					  "config_path": "/opt/pulse/.env",
 | 
				
			||||||
  "description": "A lightweight monitoring application for Proxmox VE that displays real-time status for VMs and containers via a simple web interface.",
 | 
					  "description": "A lightweight monitoring application for Proxmox VE that displays real-time status for VMs and containers via a simple web interface.",
 | 
				
			||||||
  "install_methods": [
 | 
					  "install_methods": [
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								frontend/public/json/rclone.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/rclone.json
									
									
									
										generated
									
									
									
								
							@@ -11,7 +11,7 @@
 | 
				
			|||||||
  "interface_port": 3000,
 | 
					  "interface_port": 3000,
 | 
				
			||||||
  "documentation": "https://rclone.org/docs/",
 | 
					  "documentation": "https://rclone.org/docs/",
 | 
				
			||||||
  "website": "https://rclone.org/",
 | 
					  "website": "https://rclone.org/",
 | 
				
			||||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/rclone.svg",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/rclone.webp",
 | 
				
			||||||
  "config_path": "~/.config/rclone/rclone.conf",
 | 
					  "config_path": "~/.config/rclone/rclone.conf",
 | 
				
			||||||
  "description": "Rclone is a command-line program to manage files on cloud storage. It is a feature-rich alternative to cloud vendors' web storage interfaces",
 | 
					  "description": "Rclone is a command-line program to manage files on cloud storage. It is a feature-rich alternative to cloud vendors' web storage interfaces",
 | 
				
			||||||
  "install_methods": [
 | 
					  "install_methods": [
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										35
									
								
								frontend/public/json/readarr.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/readarr.json
									
									
									
										generated
									
									
									
								
							@@ -1,35 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "name": "Readarr",
 | 
					 | 
				
			||||||
    "slug": "readarr",
 | 
					 | 
				
			||||||
    "categories": [
 | 
					 | 
				
			||||||
        14
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    "date_created": "2024-05-02",
 | 
					 | 
				
			||||||
    "type": "ct",
 | 
					 | 
				
			||||||
    "updateable": false,
 | 
					 | 
				
			||||||
    "privileged": false,
 | 
					 | 
				
			||||||
    "interface_port": 8787,
 | 
					 | 
				
			||||||
    "documentation": null,
 | 
					 | 
				
			||||||
    "website": "https://readarr.com/",
 | 
					 | 
				
			||||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/readarr.webp",
 | 
					 | 
				
			||||||
    "config_path": "",
 | 
					 | 
				
			||||||
    "description": "Readarr is an eBook and audiobook management tool designed for Usenet and BitTorrent users. It allows users to manage and organize their eBook and audiobook collection with ease. Readarr integrates with popular Usenet and BitTorrent clients, such as Sonarr and Lidarr, to automate the downloading and organizing of eBook and audiobook files. The software provides a web-based interface for managing and organizing eBooks and audiobooks, making it easy to search and find titles, authors, and genres. Readarr also supports metadata management, including cover art and information, making it easy for users to keep their eBook and audiobook collection organized and up-to-date. The software is designed to be easy to use and provides a simple and intuitive interface for managing and organizing eBook and audiobook collections, making it a valuable tool for book and audiobook enthusiasts who want to keep their collection organized and up-to-date. With Readarr, users can enjoy their eBook and audiobook collection from anywhere, making it a powerful tool for managing and sharing book and audiobook files.",
 | 
					 | 
				
			||||||
    "install_methods": [
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            "type": "default",
 | 
					 | 
				
			||||||
            "script": "ct/readarr.sh",
 | 
					 | 
				
			||||||
            "resources": {
 | 
					 | 
				
			||||||
                "cpu": 2,
 | 
					 | 
				
			||||||
                "ram": 1024,
 | 
					 | 
				
			||||||
                "hdd": 4,
 | 
					 | 
				
			||||||
                "os": "debian",
 | 
					 | 
				
			||||||
                "version": "12"
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    "default_credentials": {
 | 
					 | 
				
			||||||
        "username": null,
 | 
					 | 
				
			||||||
        "password": null
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "notes": []
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										2
									
								
								frontend/public/json/streamlink-webui.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/streamlink-webui.json
									
									
									
										generated
									
									
									
								
							@@ -12,7 +12,7 @@
 | 
				
			|||||||
  "documentation": "https://github.com/CrazyWolf13/streamlink-webui",
 | 
					  "documentation": "https://github.com/CrazyWolf13/streamlink-webui",
 | 
				
			||||||
  "config_path": "/opt/streamlink-webui.env",
 | 
					  "config_path": "/opt/streamlink-webui.env",
 | 
				
			||||||
  "website": "https://github.com/CrazyWolf13/streamlink-webui",
 | 
					  "website": "https://github.com/CrazyWolf13/streamlink-webui",
 | 
				
			||||||
  "logo": "https://streamlink.github.io/_static/icon.svg",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/streamlink.webp",
 | 
				
			||||||
  "description": "a simple web-ui to the well-known streamlink cli application, which allows you to save twitch streams to your local disk.",
 | 
					  "description": "a simple web-ui to the well-known streamlink cli application, which allows you to save twitch streams to your local disk.",
 | 
				
			||||||
  "install_methods": [
 | 
					  "install_methods": [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										17
									
								
								frontend/public/json/syncthing.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										17
									
								
								frontend/public/json/syncthing.json
									
									
									
										generated
									
									
									
								
							@@ -12,7 +12,7 @@
 | 
				
			|||||||
    "documentation": null,
 | 
					    "documentation": null,
 | 
				
			||||||
    "website": "https://syncthing.net/",
 | 
					    "website": "https://syncthing.net/",
 | 
				
			||||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/syncthing.webp",
 | 
					    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/syncthing.webp",
 | 
				
			||||||
    "config_path": "/root/.local/state/syncthing/config.xml",
 | 
					    "config_path": "/root/.local/state/syncthing/config.xml - Alpine: /var/lib/syncthing/.local/state/syncthing/config.xml",
 | 
				
			||||||
    "description": "Syncthing is an open-source file syncing tool that allows users to keep their files in sync across multiple devices by using peer-to-peer synchronization. It doesn't rely on any central server, so all data transfers are directly between devices.",
 | 
					    "description": "Syncthing is an open-source file syncing tool that allows users to keep their files in sync across multiple devices by using peer-to-peer synchronization. It doesn't rely on any central server, so all data transfers are directly between devices.",
 | 
				
			||||||
    "install_methods": [
 | 
					    "install_methods": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -25,8 +25,19 @@
 | 
				
			|||||||
                "os": "debian",
 | 
					                "os": "debian",
 | 
				
			||||||
                "version": "12"
 | 
					                "version": "12"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        },
 | 
				
			||||||
    ],
 | 
					    {
 | 
				
			||||||
 | 
					      "type": "alpine",
 | 
				
			||||||
 | 
					      "script": "ct/alpine-syncthing.sh",
 | 
				
			||||||
 | 
					      "resources": {
 | 
				
			||||||
 | 
					        "cpu": 1,
 | 
				
			||||||
 | 
					        "ram": 256,
 | 
				
			||||||
 | 
					        "hdd": 1,
 | 
				
			||||||
 | 
					        "os": "alpine",
 | 
				
			||||||
 | 
					        "version": "3.22"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
    "default_credentials": {
 | 
					    "default_credentials": {
 | 
				
			||||||
        "username": null,
 | 
					        "username": null,
 | 
				
			||||||
        "password": null
 | 
					        "password": null
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								frontend/public/json/threadfin.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/threadfin.json
									
									
									
										generated
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
				
			|||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "date_created": "2024-06-12",
 | 
					  "date_created": "2024-06-12",
 | 
				
			||||||
  "type": "ct",
 | 
					  "type": "ct",
 | 
				
			||||||
  "updateable": false,
 | 
					  "updateable": true,
 | 
				
			||||||
  "privileged": false,
 | 
					  "privileged": false,
 | 
				
			||||||
  "interface_port": 34400,
 | 
					  "interface_port": 34400,
 | 
				
			||||||
  "documentation": null,
 | 
					  "documentation": null,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								frontend/public/json/trilium.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8
									
								
								frontend/public/json/trilium.json
									
									
									
										generated
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "TriliumNext",
 | 
					  "name": "Trilium Notes",
 | 
				
			||||||
  "slug": "trilium",
 | 
					  "slug": "trilium",
 | 
				
			||||||
  "categories": [
 | 
					  "categories": [
 | 
				
			||||||
    12
 | 
					    12
 | 
				
			||||||
@@ -9,11 +9,11 @@
 | 
				
			|||||||
  "updateable": true,
 | 
					  "updateable": true,
 | 
				
			||||||
  "privileged": false,
 | 
					  "privileged": false,
 | 
				
			||||||
  "interface_port": 8080,
 | 
					  "interface_port": 8080,
 | 
				
			||||||
  "documentation": "https://triliumnext.github.io/Docs/",
 | 
					  "documentation": "https://github.com/TriliumNext/trilium/wiki",
 | 
				
			||||||
  "website": "https://github.com/TriliumNext/trilium",
 | 
					  "website": "https://github.com/TriliumNext/trilium",
 | 
				
			||||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/triliumnext.webp",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/trilium-notes.webp",
 | 
				
			||||||
  "config_path": "/root/trilium-data/config.ini",
 | 
					  "config_path": "/root/trilium-data/config.ini",
 | 
				
			||||||
  "description": "TriliumNext is an newer Fork of Trilium. TriliumNext is an open-source note-taking and personal knowledge management application. It allows users to organize and manage their notes, ideas, and information in a single place, using a hierarchical tree-like structure. Trilium offers a range of features, including rich text formatting, links, images, and attachments, making it easy to create and structure notes. The software is designed to be flexible and customizable, with a range of customization options and plugins available, including themes, export options, and more. Trilium is a self-hosted solution, and can be run on a local machine or a cloud-based server, providing users with full control over their notes and information.",
 | 
					  "description": "Trilium Notes is the latest and officially maintained version of the powerful, self-hosted note-taking and personal knowledge management application. It enables users to organize information in a hierarchical tree structure and supports rich text editing, internal linking, images, attachments, and powerful scripting capabilities. This version reflects the most current development efforts under the TriliumNext organization and replaces all prior forks or legacy variants. Trilium is ideal for building personal wikis, structured documentation, and long-term knowledge archives, giving users full local control and privacy.",
 | 
				
			||||||
  "install_methods": [
 | 
					  "install_methods": [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      "type": "default",
 | 
					      "type": "default",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										852
									
								
								frontend/public/json/versions.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										852
									
								
								frontend/public/json/versions.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2
									
								
								frontend/public/json/zigbee2mqtt.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								frontend/public/json/zigbee2mqtt.json
									
									
									
										generated
									
									
									
								
							@@ -21,7 +21,7 @@
 | 
				
			|||||||
      "resources": {
 | 
					      "resources": {
 | 
				
			||||||
        "cpu": 2,
 | 
					        "cpu": 2,
 | 
				
			||||||
        "ram": 1024,
 | 
					        "ram": 1024,
 | 
				
			||||||
        "hdd": 4,
 | 
					        "hdd": 5,
 | 
				
			||||||
        "os": "debian",
 | 
					        "os": "debian",
 | 
				
			||||||
        "version": "12"
 | 
					        "version": "12"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,148 +0,0 @@
 | 
				
			|||||||
import { Info } from "lucide-react";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import type { Script } from "@/lib/types";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
 | 
					 | 
				
			||||||
import { Alert, AlertDescription } from "@/components/ui/alert";
 | 
					 | 
				
			||||||
import CodeCopyButton from "@/components/ui/code-copy-button";
 | 
					 | 
				
			||||||
import { basePath } from "@/config/site-config";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { getDisplayValueFromType } from "../script-info-blocks";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function getInstallCommand(scriptPath = "", isAlpine = false, useGitea = false) {
 | 
					 | 
				
			||||||
  const githubUrl = `https://raw.githubusercontent.com/community-scripts/${basePath}/main/${scriptPath}`;
 | 
					 | 
				
			||||||
  const giteaUrl = `https://git.community-scripts.org/community-scripts/${basePath}/raw/branch/main/${scriptPath}`;
 | 
					 | 
				
			||||||
  const url = useGitea ? giteaUrl : githubUrl;
 | 
					 | 
				
			||||||
  return isAlpine ? `bash -c "$(curl -fsSL ${url})"` : `bash -c "$(curl -fsSL ${url})"`;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
export default function InstallCommand({ item }: { item: Script }) {
 | 
					 | 
				
			||||||
  const alpineScript = item.install_methods.find(method => method.type === "alpine");
 | 
					 | 
				
			||||||
  const defaultScript = item.install_methods.find(method => method.type === "default");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const renderInstructions = (isAlpine = false) => (
 | 
					 | 
				
			||||||
    <>
 | 
					 | 
				
			||||||
      <p className="text-sm mt-2">
 | 
					 | 
				
			||||||
        {isAlpine
 | 
					 | 
				
			||||||
          ? (
 | 
					 | 
				
			||||||
              <>
 | 
					 | 
				
			||||||
                As an alternative option, you can use Alpine Linux and the
 | 
					 | 
				
			||||||
                {" "}
 | 
					 | 
				
			||||||
                {item.name}
 | 
					 | 
				
			||||||
                {" "}
 | 
					 | 
				
			||||||
                package to create a
 | 
					 | 
				
			||||||
                {" "}
 | 
					 | 
				
			||||||
                {item.name}
 | 
					 | 
				
			||||||
                {" "}
 | 
					 | 
				
			||||||
                {getDisplayValueFromType(item.type)}
 | 
					 | 
				
			||||||
                {" "}
 | 
					 | 
				
			||||||
                container with faster creation time and minimal system resource usage.
 | 
					 | 
				
			||||||
                You are also obliged to adhere to updates provided by the package maintainer.
 | 
					 | 
				
			||||||
              </>
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
          : item.type === "pve"
 | 
					 | 
				
			||||||
            ? (
 | 
					 | 
				
			||||||
                <>
 | 
					 | 
				
			||||||
                  To use the
 | 
					 | 
				
			||||||
                  {" "}
 | 
					 | 
				
			||||||
                  {item.name}
 | 
					 | 
				
			||||||
                  {" "}
 | 
					 | 
				
			||||||
                  script, run the command below **only** in the Proxmox VE Shell. This script is
 | 
					 | 
				
			||||||
                  intended for managing or enhancing the host system directly.
 | 
					 | 
				
			||||||
                </>
 | 
					 | 
				
			||||||
              )
 | 
					 | 
				
			||||||
            : item.type === "addon"
 | 
					 | 
				
			||||||
              ? (
 | 
					 | 
				
			||||||
                  <>
 | 
					 | 
				
			||||||
                    This script enhances an existing setup. You can use it inside a running LXC container or directly on the
 | 
					 | 
				
			||||||
                    Proxmox VE host to extend functionality with
 | 
					 | 
				
			||||||
                    {" "}
 | 
					 | 
				
			||||||
                    {item.name}
 | 
					 | 
				
			||||||
                    .
 | 
					 | 
				
			||||||
                  </>
 | 
					 | 
				
			||||||
                )
 | 
					 | 
				
			||||||
              : (
 | 
					 | 
				
			||||||
                  <>
 | 
					 | 
				
			||||||
                    To create a new Proxmox VE
 | 
					 | 
				
			||||||
                    {" "}
 | 
					 | 
				
			||||||
                    {item.name}
 | 
					 | 
				
			||||||
                    {" "}
 | 
					 | 
				
			||||||
                    {getDisplayValueFromType(item.type)}
 | 
					 | 
				
			||||||
                    , run the command below in the
 | 
					 | 
				
			||||||
                    Proxmox VE Shell.
 | 
					 | 
				
			||||||
                  </>
 | 
					 | 
				
			||||||
                )}
 | 
					 | 
				
			||||||
      </p>
 | 
					 | 
				
			||||||
      {isAlpine && (
 | 
					 | 
				
			||||||
        <p className="mt-2 text-sm">
 | 
					 | 
				
			||||||
          To create a new Proxmox VE Alpine-
 | 
					 | 
				
			||||||
          {item.name}
 | 
					 | 
				
			||||||
          {" "}
 | 
					 | 
				
			||||||
          {getDisplayValueFromType(item.type)}
 | 
					 | 
				
			||||||
          , run the command below in
 | 
					 | 
				
			||||||
          the Proxmox VE Shell.
 | 
					 | 
				
			||||||
        </p>
 | 
					 | 
				
			||||||
      )}
 | 
					 | 
				
			||||||
    </>
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const renderGiteaInfo = () => (
 | 
					 | 
				
			||||||
    <Alert className="mt-3 mb-3">
 | 
					 | 
				
			||||||
      <Info className="h-4 w-4" />
 | 
					 | 
				
			||||||
      <AlertDescription className="text-sm">
 | 
					 | 
				
			||||||
        <strong>When to use Gitea:</strong>
 | 
					 | 
				
			||||||
        {" "}
 | 
					 | 
				
			||||||
        GitHub may have issues including slow connections, delayed updates after bug
 | 
					 | 
				
			||||||
        fixes, no IPv6 support, API rate limits (60/hour). Use our Gitea mirror as a reliable alternative when
 | 
					 | 
				
			||||||
        experiencing these issues.
 | 
					 | 
				
			||||||
      </AlertDescription>
 | 
					 | 
				
			||||||
    </Alert>
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const renderScriptTabs = (useGitea = false) => {
 | 
					 | 
				
			||||||
    if (alpineScript) {
 | 
					 | 
				
			||||||
      return (
 | 
					 | 
				
			||||||
        <Tabs defaultValue="default" className="mt-2 w-full max-w-4xl">
 | 
					 | 
				
			||||||
          <TabsList>
 | 
					 | 
				
			||||||
            <TabsTrigger value="default">Default</TabsTrigger>
 | 
					 | 
				
			||||||
            <TabsTrigger value="alpine">Alpine Linux</TabsTrigger>
 | 
					 | 
				
			||||||
          </TabsList>
 | 
					 | 
				
			||||||
          <TabsContent value="default">
 | 
					 | 
				
			||||||
            {renderInstructions()}
 | 
					 | 
				
			||||||
            <CodeCopyButton>{getInstallCommand(defaultScript?.script, false, useGitea)}</CodeCopyButton>
 | 
					 | 
				
			||||||
          </TabsContent>
 | 
					 | 
				
			||||||
          <TabsContent value="alpine">
 | 
					 | 
				
			||||||
            {renderInstructions(true)}
 | 
					 | 
				
			||||||
            <CodeCopyButton>{getInstallCommand(alpineScript.script, true, useGitea)}</CodeCopyButton>
 | 
					 | 
				
			||||||
          </TabsContent>
 | 
					 | 
				
			||||||
        </Tabs>
 | 
					 | 
				
			||||||
      );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    else if (defaultScript?.script) {
 | 
					 | 
				
			||||||
      return (
 | 
					 | 
				
			||||||
        <>
 | 
					 | 
				
			||||||
          {renderInstructions()}
 | 
					 | 
				
			||||||
          <CodeCopyButton>{getInstallCommand(defaultScript.script, false, useGitea)}</CodeCopyButton>
 | 
					 | 
				
			||||||
        </>
 | 
					 | 
				
			||||||
      );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return null;
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return (
 | 
					 | 
				
			||||||
    <div className="p-4">
 | 
					 | 
				
			||||||
      <Tabs defaultValue="github" className="w-full max-w-4xl">
 | 
					 | 
				
			||||||
        <TabsList>
 | 
					 | 
				
			||||||
          <TabsTrigger value="github">GitHub</TabsTrigger>
 | 
					 | 
				
			||||||
          <TabsTrigger value="gitea">Gitea</TabsTrigger>
 | 
					 | 
				
			||||||
        </TabsList>
 | 
					 | 
				
			||||||
        <TabsContent value="github">
 | 
					 | 
				
			||||||
          {renderScriptTabs(false)}
 | 
					 | 
				
			||||||
        </TabsContent>
 | 
					 | 
				
			||||||
        <TabsContent value="gitea">
 | 
					 | 
				
			||||||
          {renderGiteaInfo()}
 | 
					 | 
				
			||||||
          {renderScriptTabs(true)}
 | 
					 | 
				
			||||||
        </TabsContent>
 | 
					 | 
				
			||||||
      </Tabs>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -61,6 +61,7 @@ function ScriptHeader({ item }: { item: Script }) {
 | 
				
			|||||||
                <div className="mt-1 flex items-center gap-3 text-sm text-muted-foreground">
 | 
					                <div className="mt-1 flex items-center gap-3 text-sm text-muted-foreground">
 | 
				
			||||||
                  <span>
 | 
					                  <span>
 | 
				
			||||||
                    Added
 | 
					                    Added
 | 
				
			||||||
 | 
					                    {" "}
 | 
				
			||||||
                    {extractDate(item.date_created)}
 | 
					                    {extractDate(item.date_created)}
 | 
				
			||||||
                  </span>
 | 
					                  </span>
 | 
				
			||||||
                  <span>•</span>
 | 
					                  <span>•</span>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,7 +39,7 @@ export default function Tooltips({ item }: { item: Script }) {
 | 
				
			|||||||
      {item.privileged && (
 | 
					      {item.privileged && (
 | 
				
			||||||
        <TooltipBadge variant="warning" label="Privileged" content="This script will be run in a privileged LXC" />
 | 
					        <TooltipBadge variant="warning" label="Privileged" content="This script will be run in a privileged LXC" />
 | 
				
			||||||
      )}
 | 
					      )}
 | 
				
			||||||
      {(item.updateable || item.type !== "pve") && (
 | 
					      {item.updateable && item.type !== "pve" && (
 | 
				
			||||||
        <TooltipBadge
 | 
					        <TooltipBadge
 | 
				
			||||||
          variant="success"
 | 
					          variant="success"
 | 
				
			||||||
          label="Updateable"
 | 
					          label="Updateable"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,11 +14,12 @@ network_check
 | 
				
			|||||||
update_os
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing Dependencies"
 | 
					msg_info "Installing Dependencies"
 | 
				
			||||||
$STD apt-get install -y apt-transport-https
 | 
					$STD apt-get install -y \
 | 
				
			||||||
$STD apt-get install -y alsa-utils
 | 
					  apt-transport-https \
 | 
				
			||||||
$STD apt-get install -y libxext-dev
 | 
					  alsa-utils \
 | 
				
			||||||
$STD apt-get install -y fontconfig
 | 
					  libxext-dev \
 | 
				
			||||||
$STD apt-get install -y libva-drm2
 | 
					  fontconfig \
 | 
				
			||||||
 | 
					  libva-drm2
 | 
				
			||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing AgentDVR"
 | 
					msg_info "Installing AgentDVR"
 | 
				
			||||||
@@ -27,7 +28,6 @@ RELEASE=$(curl -fsSL "https://www.ispyconnect.com/api/Agent/DownloadLocation4?pl
 | 
				
			|||||||
cd /opt/agentdvr/agent
 | 
					cd /opt/agentdvr/agent
 | 
				
			||||||
curl -fsSL "$RELEASE" -o $(basename "$RELEASE")
 | 
					curl -fsSL "$RELEASE" -o $(basename "$RELEASE")
 | 
				
			||||||
$STD unzip Agent_Linux64*.zip
 | 
					$STD unzip Agent_Linux64*.zip
 | 
				
			||||||
rm -rf Agent_Linux64*.zip
 | 
					 | 
				
			||||||
chmod +x ./Agent
 | 
					chmod +x ./Agent
 | 
				
			||||||
msg_ok "Installed AgentDVR"
 | 
					msg_ok "Installed AgentDVR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -54,6 +54,7 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -rf Agent_Linux64*.zip
 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,5 +67,14 @@ if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
 | 
				
			|||||||
  msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
 | 
					  msg_ok "Installed Docker Compose $DOCKER_COMPOSE_LATEST_VERSION"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					read -r -p "${TAB3}Would you like to expose the Docker TCP socket? <y/N> " prompt
 | 
				
			||||||
 | 
					if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
 | 
				
			||||||
 | 
					  msg_info "Exposing Docker TCP socket"
 | 
				
			||||||
 | 
					  $STD mkdir -p /etc/docker
 | 
				
			||||||
 | 
					  $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json
 | 
				
			||||||
 | 
					  $STD rc-service docker restart
 | 
				
			||||||
 | 
					  msg_ok "Exposed Docker TCP socket at tcp://+:2375"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
motd_ssh
 | 
					motd_ssh
 | 
				
			||||||
customize
 | 
					customize
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,8 +28,7 @@ msg_ok "Enabled Docker Service"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
echo "${TAB3}Choose the database for Komodo installation:"
 | 
					echo "${TAB3}Choose the database for Komodo installation:"
 | 
				
			||||||
echo "${TAB3}1) MongoDB (recommended)"
 | 
					echo "${TAB3}1) MongoDB (recommended)"
 | 
				
			||||||
echo "${TAB3}2) SQLite"
 | 
					echo "${TAB3}2) FerretDB"
 | 
				
			||||||
echo "${TAB3}3) PostgreSQL"
 | 
					 | 
				
			||||||
read -rp "${TAB3}Enter your choice (default: 1): " DB_CHOICE
 | 
					read -rp "${TAB3}Enter your choice (default: 1): " DB_CHOICE
 | 
				
			||||||
DB_CHOICE=${DB_CHOICE:-1}
 | 
					DB_CHOICE=${DB_CHOICE:-1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -38,10 +37,7 @@ case $DB_CHOICE in
 | 
				
			|||||||
  DB_COMPOSE_FILE="mongo.compose.yaml"
 | 
					  DB_COMPOSE_FILE="mongo.compose.yaml"
 | 
				
			||||||
  ;;
 | 
					  ;;
 | 
				
			||||||
2)
 | 
					2)
 | 
				
			||||||
  DB_COMPOSE_FILE="sqlite.compose.yaml"
 | 
					  DB_COMPOSE_FILE="ferretdb.compose.yaml"
 | 
				
			||||||
  ;;
 | 
					 | 
				
			||||||
3)
 | 
					 | 
				
			||||||
  DB_COMPOSE_FILE="postgres.compose.yaml"
 | 
					 | 
				
			||||||
  ;;
 | 
					  ;;
 | 
				
			||||||
*)
 | 
					*)
 | 
				
			||||||
  echo "Invalid choice. Defaulting to MongoDB."
 | 
					  echo "Invalid choice. Defaulting to MongoDB."
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										30
									
								
								install/alpine-syncthing-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								install/alpine-syncthing-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: MickLesk (CanbiZ)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://syncthing.net/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					verb_ip6
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					setting_up_container
 | 
				
			||||||
 | 
					network_check
 | 
				
			||||||
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Syncthing"
 | 
				
			||||||
 | 
					$STD apk add --no-cache syncthing
 | 
				
			||||||
 | 
					sed -i "{s/127.0.0.1:8384/0.0.0.0:8384/g}" /var/lib/syncthing/.local/state/syncthing/config.xml
 | 
				
			||||||
 | 
					msg_ok "Setup Syncthing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Enabling Syncthing Service"
 | 
				
			||||||
 | 
					$STD rc-update add syncthing default
 | 
				
			||||||
 | 
					msg_ok "Enabled Syncthing Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Starting Syncthing"
 | 
				
			||||||
 | 
					$STD rc-service syncthing start
 | 
				
			||||||
 | 
					msg_ok "Started Syncthing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
@@ -24,13 +24,13 @@ RELEASE=$(curl -s https://api.github.com/repos/steveiliop56/tinyauth/releases/la
 | 
				
			|||||||
curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth
 | 
					curl -fsSL "https://github.com/steveiliop56/tinyauth/releases/download/v${RELEASE}/tinyauth-amd64" -o /opt/tinyauth/tinyauth
 | 
				
			||||||
chmod +x /opt/tinyauth/tinyauth
 | 
					chmod +x /opt/tinyauth/tinyauth
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PASSWORD=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8)
 | 
					PASS=$(openssl rand -base64 8 | tr -dc 'a-zA-Z0-9' | head -c 8)
 | 
				
			||||||
USER=$(htpasswd -Bbn "tinyauth" "${PASSWORD}")
 | 
					USER=$(htpasswd -Bbn "tinyauth" "${PASS}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cat <<EOF > /opt/tinyauth/credentials.txt
 | 
					cat <<EOF >/opt/tinyauth/credentials.txt
 | 
				
			||||||
Tinyauth Credentials
 | 
					Tinyauth Credentials
 | 
				
			||||||
Username: tinyauth
 | 
					Username: tinyauth
 | 
				
			||||||
Password: ${PASSWORD}
 | 
					Password: ${PASS}
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "${RELEASE}" >/opt/tinyauth_version.txt
 | 
					echo "${RELEASE}" >/opt/tinyauth_version.txt
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,12 +64,12 @@ $STD ldconfig
 | 
				
			|||||||
RELEASE_CLIENT=$(curl -fsSL https://api.github.com/repos/apache/guacamole-client/tags | jq -r '.[].name' | grep -v -- '-RC' | head -n 1)
 | 
					RELEASE_CLIENT=$(curl -fsSL https://api.github.com/repos/apache/guacamole-client/tags | jq -r '.[].name' | grep -v -- '-RC' | head -n 1)
 | 
				
			||||||
curl -fsSL "https://downloads.apache.org/guacamole/${RELEASE_CLIENT}/binary/guacamole-${RELEASE_CLIENT}.war" -o "/opt/apache-guacamole/tomcat9/webapps/guacamole.war"
 | 
					curl -fsSL "https://downloads.apache.org/guacamole/${RELEASE_CLIENT}/binary/guacamole-${RELEASE_CLIENT}.war" -o "/opt/apache-guacamole/tomcat9/webapps/guacamole.war"
 | 
				
			||||||
cd /root
 | 
					cd /root
 | 
				
			||||||
curl -fsSL "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.26.tar.gz" -o "/root/mysql-connector-java-8.0.26.tar.gz"
 | 
					curl -fsSL "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-9.3.0.tar.gz" -o "/root/mysql-connector-j-9.3.0.tar.gz"
 | 
				
			||||||
$STD tar -xf ~/mysql-connector-java-8.0.26.tar.gz
 | 
					$STD tar -xf ~/mysql-connector-j-9.3.0.tar.gz
 | 
				
			||||||
mv ~/mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar /etc/guacamole/lib/
 | 
					mv ~/mysql-connector-j-9.3.0/mysql-connector-j-9.3.0.jar /etc/guacamole/lib/
 | 
				
			||||||
curl -fsSL "https://downloads.apache.org/guacamole/1.5.5/binary/guacamole-auth-jdbc-1.5.5.tar.gz" -o "/root/guacamole-auth-jdbc-1.5.5.tar.gz"
 | 
					curl -fsSL "https://downloads.apache.org/guacamole/${RELEASE_SERVER}/binary/guacamole-auth-jdbc-${RELEASE_SERVER}.tar.gz" -o "/root/guacamole-auth-jdbc-${RELEASE_SERVER}.tar.gz"
 | 
				
			||||||
$STD tar -xf ~/guacamole-auth-jdbc-1.5.5.tar.gz
 | 
					$STD tar -xf ~/guacamole-auth-jdbc-$RELEASE_SERVER.tar.gz
 | 
				
			||||||
mv ~/guacamole-auth-jdbc-1.5.5/mysql/guacamole-auth-jdbc-mysql-1.5.5.jar /etc/guacamole/extensions/
 | 
					mv ~/guacamole-auth-jdbc-$RELEASE_SERVER/mysql/guacamole-auth-jdbc-mysql-$RELEASE_SERVER.jar /etc/guacamole/extensions/
 | 
				
			||||||
msg_ok "Setup Apache Guacamole"
 | 
					msg_ok "Setup Apache Guacamole"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setup Database"
 | 
					msg_info "Setup Database"
 | 
				
			||||||
@@ -85,7 +85,7 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
 | 
				
			|||||||
  echo "Database Password: $DB_PASS"
 | 
					  echo "Database Password: $DB_PASS"
 | 
				
			||||||
  echo "Database Name: $DB_NAME"
 | 
					  echo "Database Name: $DB_NAME"
 | 
				
			||||||
} >>~/guacamole.creds
 | 
					} >>~/guacamole.creds
 | 
				
			||||||
cd guacamole-auth-jdbc-1.5.5/mysql/schema
 | 
					cd guacamole-auth-jdbc-${RELEASE_SERVER}/mysql/schema
 | 
				
			||||||
cat *.sql | mariadb -u root ${DB_NAME}
 | 
					cat *.sql | mariadb -u root ${DB_NAME}
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  echo "mysql-hostname: 127.0.0.1"
 | 
					  echo "mysql-hostname: 127.0.0.1"
 | 
				
			||||||
@@ -147,8 +147,8 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
rm -rf ~/mysql-connector-java-8.0.26{,.tar.gz}
 | 
					rm -rf ~/mysql-connector-j-9.3.0{,.tar.gz}
 | 
				
			||||||
rm -rf ~/guacamole-auth-jdbc-1.5.5{,.tar.gz}
 | 
					rm -rf ~/guacamole-auth-jdbc-$RELEASE_SERVER{,.tar.gz}
 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,13 +13,9 @@ setting_up_container
 | 
				
			|||||||
network_check
 | 
					network_check
 | 
				
			||||||
update_os
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing Authelia"
 | 
					fetch_and_deploy_gh_release "authelia" "authelia/authelia" "binary"
 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					 | 
				
			||||||
curl -fsSL "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb" -o "authelia_${RELEASE}_amd64.deb"
 | 
					 | 
				
			||||||
$STD dpkg -i "authelia_${RELEASE}_amd64.deb"
 | 
					 | 
				
			||||||
msg_ok "Install Authelia completed"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
read -p "${TAB3}Enter your domain (ex. example.com): " DOMAIN
 | 
					read -rp "${TAB3}Enter your domain (ex. example.com): " DOMAIN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setting Authelia up"
 | 
					msg_info "Setting Authelia up"
 | 
				
			||||||
touch /etc/authelia/emails.txt
 | 
					touch /etc/authelia/emails.txt
 | 
				
			||||||
@@ -72,7 +68,6 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
rm -f "authelia_${RELEASE}_amd64.deb"
 | 
					 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,13 +24,10 @@ $STD apt-get install -y \
 | 
				
			|||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
setup_uv
 | 
					setup_uv
 | 
				
			||||||
 | 
					fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing Babybuddy"
 | 
					msg_info "Installing Babybuddy"
 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					mkdir -p /opt/data
 | 
				
			||||||
temp_file=$(mktemp)
 | 
					 | 
				
			||||||
mkdir -p /opt/{babybuddy,data}
 | 
					 | 
				
			||||||
curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
					 | 
				
			||||||
tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy
 | 
					 | 
				
			||||||
cd /opt/babybuddy
 | 
					cd /opt/babybuddy
 | 
				
			||||||
$STD uv venv .venv
 | 
					$STD uv venv .venv
 | 
				
			||||||
$STD source .venv/bin/activate
 | 
					$STD source .venv/bin/activate
 | 
				
			||||||
@@ -102,7 +99,6 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
rm -f "$temp_file"
 | 
					 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,13 +14,12 @@ network_check
 | 
				
			|||||||
update_os
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing Dependencies"
 | 
					msg_info "Installing Dependencies"
 | 
				
			||||||
$STD apt-get install -y \
 | 
					$STD apt-get install -y apache2
 | 
				
			||||||
  apache2 \
 | 
					 | 
				
			||||||
  libapache2-mod-php \
 | 
					 | 
				
			||||||
  php-{pgsql,dom}
 | 
					 | 
				
			||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PG_VERSION="16" setup_postgresql
 | 
					PG_VERSION="16" setup_postgresql
 | 
				
			||||||
 | 
					PHP_APACHE="YES" PHP_MODULE="pgsql, dom" PHP_VERSION="8.2" setup_php
 | 
				
			||||||
 | 
					fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setting up PostgreSQL Database"
 | 
					msg_info "Setting up PostgreSQL Database"
 | 
				
			||||||
DB_NAME=baikal
 | 
					DB_NAME=baikal
 | 
				
			||||||
@@ -36,11 +35,7 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
 | 
				
			|||||||
} >>~/baikal.creds
 | 
					} >>~/baikal.creds
 | 
				
			||||||
msg_ok "Set up PostgreSQL Database"
 | 
					msg_ok "Set up PostgreSQL Database"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing Baikal"
 | 
					msg_info "Configuring Baikal"
 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/sabre-io/Baikal/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					 | 
				
			||||||
cd /opt
 | 
					 | 
				
			||||||
curl -fsSL "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip" -o "baikal-${RELEASE}.zip"
 | 
					 | 
				
			||||||
$STD unzip "baikal-${RELEASE}.zip"
 | 
					 | 
				
			||||||
cat <<EOF >/opt/baikal/config/baikal.yaml
 | 
					cat <<EOF >/opt/baikal/config/baikal.yaml
 | 
				
			||||||
database:
 | 
					database:
 | 
				
			||||||
    backend: pgsql
 | 
					    backend: pgsql
 | 
				
			||||||
@@ -51,7 +46,6 @@ database:
 | 
				
			|||||||
EOF
 | 
					EOF
 | 
				
			||||||
chown -R www-data:www-data /opt/baikal/
 | 
					chown -R www-data:www-data /opt/baikal/
 | 
				
			||||||
chmod -R 755 /opt/baikal/
 | 
					chmod -R 755 /opt/baikal/
 | 
				
			||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
					 | 
				
			||||||
msg_ok "Installed Baikal"
 | 
					msg_ok "Installed Baikal"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Creating Service"
 | 
					msg_info "Creating Service"
 | 
				
			||||||
@@ -90,7 +84,6 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
rm -rf "/opt/baikal-${RELEASE}.zip"
 | 
					 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,20 +16,15 @@ update_os
 | 
				
			|||||||
msg_info "Installing Dependencies"
 | 
					msg_info "Installing Dependencies"
 | 
				
			||||||
$STD apt-get install -y \
 | 
					$STD apt-get install -y \
 | 
				
			||||||
  apache2 \
 | 
					  apache2 \
 | 
				
			||||||
  redis \
 | 
					  redis
 | 
				
			||||||
  php-{curl,date,json,mbstring,redis,sqlite3,sockets} \
 | 
					 | 
				
			||||||
  libapache2-mod-php
 | 
					 | 
				
			||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing barcodebuddy"
 | 
					PHP_VERSION="8.2" PHP_APACHE="YES" PHP_MODULE="date, json, redis, sqlite3, sockets" setup_php
 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy"
 | 
				
			||||||
cd /opt
 | 
					
 | 
				
			||||||
curl -fsSL "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
 | 
					msg_info "Configuring barcodebuddy"
 | 
				
			||||||
$STD unzip "v${RELEASE}.zip"
 | 
					 | 
				
			||||||
mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy
 | 
					 | 
				
			||||||
chown -R www-data:www-data /opt/barcodebuddy/data
 | 
					chown -R www-data:www-data /opt/barcodebuddy/data
 | 
				
			||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
					msg_ok "Configured barcodebuddy"
 | 
				
			||||||
msg_ok "Installed barcodebuddy"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Creating Services"
 | 
					msg_info "Creating Services"
 | 
				
			||||||
cat <<EOF >/etc/systemd/system/barcodebuddy.service
 | 
					cat <<EOF >/etc/systemd/system/barcodebuddy.service
 | 
				
			||||||
@@ -73,7 +68,6 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
rm -rf "/opt/v${RELEASE}.zip"
 | 
					 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,17 +22,10 @@ msg_ok "Installed Dependencies"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
PG_VERSION="16" setup_postgresql
 | 
					PG_VERSION="16" setup_postgresql
 | 
				
			||||||
setup_go
 | 
					setup_go
 | 
				
			||||||
 | 
					fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet"
 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing bitmagnet v${RELEASE}"
 | 
					msg_info "Setting up database"
 | 
				
			||||||
mkdir -p /opt/bitmagnet
 | 
					 | 
				
			||||||
temp_file=$(mktemp)
 | 
					 | 
				
			||||||
curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
					 | 
				
			||||||
tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
 | 
					 | 
				
			||||||
cd /opt/bitmagnet
 | 
					 | 
				
			||||||
VREL=v$RELEASE
 | 
					 | 
				
			||||||
$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
 | 
					 | 
				
			||||||
chmod +x bitmagnet
 | 
					 | 
				
			||||||
POSTGRES_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
					POSTGRES_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
				
			||||||
$STD sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '$POSTGRES_PASSWORD';"
 | 
					$STD sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '$POSTGRES_PASSWORD';"
 | 
				
			||||||
$STD sudo -u postgres psql -c "CREATE DATABASE bitmagnet;"
 | 
					$STD sudo -u postgres psql -c "CREATE DATABASE bitmagnet;"
 | 
				
			||||||
@@ -41,8 +34,14 @@ $STD sudo -u postgres psql -c "CREATE DATABASE bitmagnet;"
 | 
				
			|||||||
  echo ""
 | 
					  echo ""
 | 
				
			||||||
  echo "postgres user password: $POSTGRES_PASSWORD"
 | 
					  echo "postgres user password: $POSTGRES_PASSWORD"
 | 
				
			||||||
} >>~/postgres.creds
 | 
					} >>~/postgres.creds
 | 
				
			||||||
echo "${RELEASE}" >/opt/bitmagnet_version.txt
 | 
					msg_ok "Database set up"
 | 
				
			||||||
msg_ok "Installed bitmagnet v${RELEASE}"
 | 
					
 | 
				
			||||||
 | 
					msg_info "Configuring bitmagnet v${RELEASE}"
 | 
				
			||||||
 | 
					cd /opt/bitmagnet
 | 
				
			||||||
 | 
					VREL=v$RELEASE
 | 
				
			||||||
 | 
					$STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
 | 
				
			||||||
 | 
					chmod +x bitmagnet
 | 
				
			||||||
 | 
					msg_ok "Configured bitmagnet v${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
 | 
					read -r -p "${TAB3}Enter your TMDB API key if you have one: " tmdbapikey
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -72,7 +71,6 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
rm -f "$temp_file"
 | 
					 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,12 +16,12 @@ update_os
 | 
				
			|||||||
msg_info "Installing Dependencies (Patience)"
 | 
					msg_info "Installing Dependencies (Patience)"
 | 
				
			||||||
$STD apt-get install -y \
 | 
					$STD apt-get install -y \
 | 
				
			||||||
  apache2 \
 | 
					  apache2 \
 | 
				
			||||||
  php8.2-{mbstring,gd,fpm,curl,intl,ldap,tidy,bz2,mysql,zip,xml} \
 | 
					 | 
				
			||||||
  composer \
 | 
					 | 
				
			||||||
  libapache2-mod-php \
 | 
					 | 
				
			||||||
  make
 | 
					  make
 | 
				
			||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					setup_composer
 | 
				
			||||||
setup_mariadb
 | 
					setup_mariadb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setting up Database"
 | 
					msg_info "Setting up Database"
 | 
				
			||||||
@@ -39,13 +39,10 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
 | 
				
			|||||||
} >>~/bookstack.creds
 | 
					} >>~/bookstack.creds
 | 
				
			||||||
msg_ok "Set up database"
 | 
					msg_ok "Set up database"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setup Bookstack (Patience)"
 | 
					fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
 | 
				
			||||||
LOCAL_IP="$(hostname -I | awk '{print $1}')"
 | 
					LOCAL_IP="$(hostname -I | awk '{print $1}')"
 | 
				
			||||||
cd /opt
 | 
					
 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/BookStackApp/BookStack/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					msg_info "Configuring Bookstack (Patience)"
 | 
				
			||||||
curl -fsSL "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
 | 
					 | 
				
			||||||
$STD unzip v${RELEASE}.zip
 | 
					 | 
				
			||||||
mv BookStack-${RELEASE} /opt/bookstack
 | 
					 | 
				
			||||||
cd /opt/bookstack
 | 
					cd /opt/bookstack
 | 
				
			||||||
cp .env.example .env
 | 
					cp .env.example .env
 | 
				
			||||||
sudo sed -i "s|APP_URL=.*|APP_URL=http://$LOCAL_IP|g" /opt/bookstack/.env
 | 
					sudo sed -i "s|APP_URL=.*|APP_URL=http://$LOCAL_IP|g" /opt/bookstack/.env
 | 
				
			||||||
@@ -60,9 +57,8 @@ chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public
 | 
				
			|||||||
chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
 | 
					chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
 | 
				
			||||||
chmod -R 640 /opt/bookstack/.env
 | 
					chmod -R 640 /opt/bookstack/.env
 | 
				
			||||||
$STD a2enmod rewrite
 | 
					$STD a2enmod rewrite
 | 
				
			||||||
$STD a2enmod php8.2
 | 
					$STD a2enmod php8.3
 | 
				
			||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
					msg_ok "Configured Bookstack"
 | 
				
			||||||
msg_ok "Installed Bookstack"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Creating Service"
 | 
					msg_info "Creating Service"
 | 
				
			||||||
cat <<EOF >/etc/apache2/sites-available/bookstack.conf
 | 
					cat <<EOF >/etc/apache2/sites-available/bookstack.conf
 | 
				
			||||||
@@ -111,7 +107,6 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
rm -rf /opt/v${RELEASE}.zip
 | 
					 | 
				
			||||||
$STD apt-get autoremove
 | 
					$STD apt-get autoremove
 | 
				
			||||||
$STD apt-get autoclean
 | 
					$STD apt-get autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,19 +18,12 @@ $STD apt-get install -y apt-transport-https
 | 
				
			|||||||
$STD apt-get install -y lsb-release
 | 
					$STD apt-get install -y lsb-release
 | 
				
			||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing Nginx"
 | 
					 | 
				
			||||||
curl -fsSL "https://nginx.org/keys/nginx_signing.key" | gpg --dearmor >/usr/share/keyrings/nginx-archive-keyring.gpg
 | 
					 | 
				
			||||||
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian $(lsb_release -cs) nginx" >/etc/apt/sources.list.d/nginx.list
 | 
					 | 
				
			||||||
$STD apt-get update
 | 
					 | 
				
			||||||
$STD apt-get install -y nginx=1.26.3*
 | 
					 | 
				
			||||||
msg_ok "Installed Nginx"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/bunkerity/bunkerweb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					RELEASE=$(curl -fsSL https://api.github.com/repos/bunkerity/bunkerweb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
msg_info "Installing BunkerWeb v${RELEASE} (Patience)"
 | 
					msg_info "Installing BunkerWeb v${RELEASE} (Patience)"
 | 
				
			||||||
curl -fsSL "https://repo.bunkerweb.io/bunkerity/bunkerweb/gpgkey" | gpg --dearmor >/etc/apt/keyrings/bunkerity_bunkerweb-archive-keyring.gpg
 | 
					curl -fsSL -o install-bunkerweb.sh https://github.com/bunkerity/bunkerweb/raw/v${RELEASE}/misc/install-bunkerweb.sh
 | 
				
			||||||
echo "deb [signed-by=/etc/apt/keyrings/bunkerity_bunkerweb-archive-keyring.gpg] https://repo.bunkerweb.io/bunkerity/bunkerweb/debian/ bookworm main" >/etc/apt/sources.list.d/bunkerity_bunkerweb.list
 | 
					chmod +x install-bunkerweb.sh
 | 
				
			||||||
$STD apt-get update
 | 
					$STD ./install-bunkerweb.sh --yes
 | 
				
			||||||
$STD apt-get install -y bunkerweb=${RELEASE}
 | 
					$STD apt-mark unhold bunkerweb nginx
 | 
				
			||||||
cat <<EOF >/etc/apt/preferences.d/bunkerweb
 | 
					cat <<EOF >/etc/apt/preferences.d/bunkerweb
 | 
				
			||||||
Package: bunkerweb
 | 
					Package: bunkerweb
 | 
				
			||||||
Pin: version ${RELEASE}
 | 
					Pin: version ${RELEASE}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,22 +14,17 @@ network_check
 | 
				
			|||||||
update_os
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NODE_VERSION="22" setup_nodejs
 | 
					NODE_VERSION="22" setup_nodejs
 | 
				
			||||||
 | 
					fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing ByteStash"
 | 
					msg_info "Installing ByteStash"
 | 
				
			||||||
JWT_SECRET=$(openssl rand -base64 32 | tr -d '/+=')
 | 
					JWT_SECRET=$(openssl rand -base64 32 | tr -d '/+=')
 | 
				
			||||||
temp_file=$(mktemp)
 | 
					 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/jordan-dalby/ByteStash/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					 | 
				
			||||||
curl -fsSL "https://github.com/jordan-dalby/ByteStash/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
					 | 
				
			||||||
tar zxf $temp_file
 | 
					 | 
				
			||||||
mv ByteStash-${RELEASE} /opt/bytestash
 | 
					 | 
				
			||||||
cd /opt/bytestash/server
 | 
					cd /opt/bytestash/server
 | 
				
			||||||
$STD npm install
 | 
					$STD npm install
 | 
				
			||||||
cd /opt/bytestash/client
 | 
					cd /opt/bytestash/client
 | 
				
			||||||
$STD npm install
 | 
					$STD npm install
 | 
				
			||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
					 | 
				
			||||||
msg_ok "Installed ByteStash"
 | 
					msg_ok "Installed ByteStash"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
read -p "${TAB3}Do you want to allow registration of multiple accounts? [y/n]: " allowreg
 | 
					read -rp "${TAB3}Do you want to allow registration of multiple accounts? [y/n]: " allowreg
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Creating Service"
 | 
					msg_info "Creating Service"
 | 
				
			||||||
cat <<EOF >/etc/systemd/system/bytestash-backend.service
 | 
					cat <<EOF >/etc/systemd/system/bytestash-backend.service
 | 
				
			||||||
@@ -73,7 +68,6 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
rm -f $temp_file
 | 
					 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -116,7 +116,7 @@ Wants=browserless.service
 | 
				
			|||||||
Type=simple
 | 
					Type=simple
 | 
				
			||||||
WorkingDirectory=/opt/changedetection
 | 
					WorkingDirectory=/opt/changedetection
 | 
				
			||||||
Environment=WEBDRIVER_URL=http://127.0.0.1:4444/wd/hub
 | 
					Environment=WEBDRIVER_URL=http://127.0.0.1:4444/wd/hub
 | 
				
			||||||
Environment=PLAYWRIGHT_DRIVER_URL=ws://localhost:3000/chrome?launch={"defaultViewport":{"height":720,"width":1280},"headless":false,"stealth":true}&blockAds=true
 | 
					Environment=PLAYWRIGHT_DRIVER_URL=ws://localhost:3000/chrome?launch=eyJkZWZhdWx0Vmlld3BvcnQiOnsiaGVpZ2h0Ijo3MjAsIndpZHRoIjoxMjgwfSwiaGVhZGxlc3MiOmZhbHNlLCJzdGVhbHRoIjp0cnVlfQ==&blockAds=true
 | 
				
			||||||
ExecStart=changedetection.io -d /opt/changedetection -p 5000
 | 
					ExecStart=changedetection.io -d /opt/changedetection -p 5000
 | 
				
			||||||
[Install]
 | 
					[Install]
 | 
				
			||||||
WantedBy=multi-user.target
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,16 +15,15 @@ update_os
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
setup_go
 | 
					setup_go
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Configure Application"
 | 
					 | 
				
			||||||
var_cf_api_token="default"
 | 
					var_cf_api_token="default"
 | 
				
			||||||
read -rp "Enter the Cloudflare API token: " var_cf_api_token
 | 
					read -rp "${TAB3}Enter the Cloudflare API token: " var_cf_api_token
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var_cf_domains="default"
 | 
					var_cf_domains="default"
 | 
				
			||||||
read -rp "Enter the domains separated with a comma (*.example.org,www.example.org) " var_cf_domains
 | 
					read -rp "${TAB3}Enter the domains separated with a comma (*.example.org,www.example.org) " var_cf_domains
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var_cf_proxied="false"
 | 
					var_cf_proxied="false"
 | 
				
			||||||
while true; do
 | 
					while true; do
 | 
				
			||||||
  read -rp "Proxied? (y/n): " answer
 | 
					  read -rp "${TAB3}Proxied? (y/n): " answer
 | 
				
			||||||
  case "$answer" in
 | 
					  case "$answer" in
 | 
				
			||||||
  [Yy]*)
 | 
					  [Yy]*)
 | 
				
			||||||
    var_cf_proxied="true"
 | 
					    var_cf_proxied="true"
 | 
				
			||||||
@@ -39,7 +38,7 @@ while true; do
 | 
				
			|||||||
done
 | 
					done
 | 
				
			||||||
var_cf_ip6_provider="none"
 | 
					var_cf_ip6_provider="none"
 | 
				
			||||||
while true; do
 | 
					while true; do
 | 
				
			||||||
  read -rp "Enable IPv6 support? (y/n): " answer
 | 
					  read -rp "${TAB3}Enable IPv6 support? (y/n): " answer
 | 
				
			||||||
  case "$answer" in
 | 
					  case "$answer" in
 | 
				
			||||||
  [Yy]*)
 | 
					  [Yy]*)
 | 
				
			||||||
    var_cf_ip6_provider="auto"
 | 
					    var_cf_ip6_provider="auto"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,20 +14,15 @@ network_check
 | 
				
			|||||||
update_os
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing Dependencies"
 | 
					msg_info "Installing Dependencies"
 | 
				
			||||||
$STD apt-get install -y \
 | 
					$STD apt-get install -y git
 | 
				
			||||||
  git
 | 
					 | 
				
			||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NODE_VERSION="22" setup_nodejs
 | 
					NODE_VERSION="22" setup_nodejs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
read -p "${TAB3}Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice
 | 
					read -rp "${TAB3}Install OnlyOffice components instead of CKEditor? (Y/N): " onlyoffice
 | 
				
			||||||
 | 
					fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setup ${APPLICATION}"
 | 
					msg_info "Setup ${APPLICATION}"
 | 
				
			||||||
temp_file=$(mktemp)
 | 
					 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					 | 
				
			||||||
curl -fsSL "https://github.com/cryptpad/cryptpad/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_file"
 | 
					 | 
				
			||||||
tar zxf $temp_file
 | 
					 | 
				
			||||||
mv cryptpad-$RELEASE /opt/cryptpad
 | 
					 | 
				
			||||||
cd /opt/cryptpad
 | 
					cd /opt/cryptpad
 | 
				
			||||||
$STD npm ci
 | 
					$STD npm ci
 | 
				
			||||||
$STD npm run install:components
 | 
					$STD npm run install:components
 | 
				
			||||||
@@ -39,7 +34,6 @@ sed -i "80s#//httpAddress: 'localhost'#httpAddress: '0.0.0.0'#g" /opt/cryptpad/c
 | 
				
			|||||||
if [[ "$onlyoffice" =~ ^[Yy]$ ]]; then
 | 
					if [[ "$onlyoffice" =~ ^[Yy]$ ]]; then
 | 
				
			||||||
  $STD bash -c "./install-onlyoffice.sh --accept-license"
 | 
					  $STD bash -c "./install-onlyoffice.sh --accept-license"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
					 | 
				
			||||||
msg_ok "Setup ${APPLICATION}"
 | 
					msg_ok "Setup ${APPLICATION}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Creating Service"
 | 
					msg_info "Creating Service"
 | 
				
			||||||
@@ -69,7 +63,6 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
rm -f $temp_file
 | 
					 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,15 +14,12 @@ network_check
 | 
				
			|||||||
update_os
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NODE_VERSION="22" setup_nodejs
 | 
					NODE_VERSION="22" setup_nodejs
 | 
				
			||||||
 | 
					fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					 | 
				
			||||||
msg_info "Installing Dashy ${RELEASE} (Patience)"
 | 
					msg_info "Installing Dashy ${RELEASE} (Patience)"
 | 
				
			||||||
mkdir -p /opt/dashy
 | 
					 | 
				
			||||||
curl -fsSL "https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz -C /opt/dashy --strip-components=1
 | 
					 | 
				
			||||||
cd /opt/dashy
 | 
					cd /opt/dashy
 | 
				
			||||||
$STD npm install
 | 
					$STD npm install
 | 
				
			||||||
$STD npm run build
 | 
					$STD npm run build
 | 
				
			||||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
					 | 
				
			||||||
msg_ok "Installed Dashy ${RELEASE}"
 | 
					msg_ok "Installed Dashy ${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Creating Service"
 | 
					msg_info "Creating Service"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,6 +57,15 @@ else
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					read -r -p "${TAB3}Would you like to expose the Docker TCP socket? <y/N> " prompt
 | 
				
			||||||
 | 
					if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
 | 
				
			||||||
 | 
					  msg_info "Exposing Docker TCP socket"
 | 
				
			||||||
 | 
					  $STD mkdir -p /etc/docker
 | 
				
			||||||
 | 
					  $STD echo '{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }' > /etc/docker/daemon.json
 | 
				
			||||||
 | 
					  $STD rc-service docker restart
 | 
				
			||||||
 | 
					  msg_ok "Exposed Docker TCP socket at tcp://+:2375"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
motd_ssh
 | 
					motd_ssh
 | 
				
			||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,6 +22,7 @@ msg_ok "Installed Dependencies"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
 | 
					NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
 | 
				
			||||||
PG_VERSION="16" setup_postgresql
 | 
					PG_VERSION="16" setup_postgresql
 | 
				
			||||||
 | 
					fetch_and_deploy_gh_release "docmost" "docmost/docmost"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setting up PostgreSQL"
 | 
					msg_info "Setting up PostgreSQL"
 | 
				
			||||||
DB_NAME="docmost_db"
 | 
					DB_NAME="docmost_db"
 | 
				
			||||||
@@ -40,12 +41,7 @@ $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
 | 
				
			|||||||
} >>~/docmost.creds
 | 
					} >>~/docmost.creds
 | 
				
			||||||
msg_ok "Set up PostgreSQL"
 | 
					msg_ok "Set up PostgreSQL"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing Docmost (Patience)"
 | 
					msg_info "Configuring Docmost (Patience)"
 | 
				
			||||||
temp_file=$(mktemp)
 | 
					 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/docmost/docmost/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					 | 
				
			||||||
curl -fsSL "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file""
 | 
					 | 
				
			||||||
tar -xzf "$temp_file"
 | 
					 | 
				
			||||||
mv docmost-${RELEASE} /opt/docmost
 | 
					 | 
				
			||||||
cd /opt/docmost
 | 
					cd /opt/docmost
 | 
				
			||||||
mv .env.example .env
 | 
					mv .env.example .env
 | 
				
			||||||
mkdir data
 | 
					mkdir data
 | 
				
			||||||
@@ -56,8 +52,7 @@ sed -i -e "s|APP_SECRET=.*|APP_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z
 | 
				
			|||||||
export NODE_OPTIONS="--max-old-space-size=2048"
 | 
					export NODE_OPTIONS="--max-old-space-size=2048"
 | 
				
			||||||
$STD pnpm install
 | 
					$STD pnpm install
 | 
				
			||||||
$STD pnpm build
 | 
					$STD pnpm build
 | 
				
			||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
					msg_ok "Configured Docmost"
 | 
				
			||||||
msg_ok "Installed Docmost"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Creating Service"
 | 
					msg_info "Creating Service"
 | 
				
			||||||
cat <<EOF >/etc/systemd/system/docmost.service
 | 
					cat <<EOF >/etc/systemd/system/docmost.service
 | 
				
			||||||
@@ -81,7 +76,6 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
rm -f "$temp_file"
 | 
					 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,17 +24,15 @@ if [[ "$CTTYPE" == "0" ]]; then
 | 
				
			|||||||
fi
 | 
					fi
 | 
				
			||||||
msg_ok "Set Up Hardware Acceleration"
 | 
					msg_ok "Set Up Hardware Acceleration"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LATEST=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
					fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing Emby"
 | 
					msg_info "Configuring Emby"
 | 
				
			||||||
curl -fsSL "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb" -o "emby-server-deb_${LATEST}_amd64.deb"
 | 
					 | 
				
			||||||
$STD dpkg -i emby-server-deb_${LATEST}_amd64.deb
 | 
					 | 
				
			||||||
if [[ "$CTTYPE" == "0" ]]; then
 | 
					if [[ "$CTTYPE" == "0" ]]; then
 | 
				
			||||||
  sed -i -e 's/^ssl-cert:x:104:$/render:x:104:root,emby/' -e 's/^render:x:108:root,emby$/ssl-cert:x:108:/' /etc/group
 | 
					  sed -i -e 's/^ssl-cert:x:104:$/render:x:104:root,emby/' -e 's/^render:x:108:root,emby$/ssl-cert:x:108:/' /etc/group
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
  sed -i -e 's/^ssl-cert:x:104:$/render:x:104:emby/' -e 's/^render:x:108:emby$/ssl-cert:x:108:/' /etc/group
 | 
					  sed -i -e 's/^ssl-cert:x:104:$/render:x:104:emby/' -e 's/^render:x:108:emby$/ssl-cert:x:108:/' /etc/group
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
msg_ok "Installed Emby"
 | 
					msg_ok "Configured Emby"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
motd_ssh
 | 
					motd_ssh
 | 
				
			||||||
customize
 | 
					customize
 | 
				
			||||||
@@ -42,5 +40,4 @@ customize
 | 
				
			|||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
rm emby-server-deb_${LATEST}_amd64.deb
 | 
					 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,15 +13,7 @@ setting_up_container
 | 
				
			|||||||
network_check
 | 
					network_check
 | 
				
			||||||
update_os
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing FFmpeg (Patience)"
 | 
					FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
 | 
				
			||||||
cd /usr/local/bin
 | 
					 | 
				
			||||||
curl -fsSL "https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz" -o "ffmpeg-release-amd64-static.tar.xz"
 | 
					 | 
				
			||||||
$STD tar -xvf ffmpeg-release-amd64-static.tar.xz
 | 
					 | 
				
			||||||
rm -f ffmpeg-*.tar.xz
 | 
					 | 
				
			||||||
cd ffmpeg-*
 | 
					 | 
				
			||||||
mv ffmpeg ffprobe /usr/local/bin/
 | 
					 | 
				
			||||||
rm -rf /usr/local/bin/ffmpeg-*
 | 
					 | 
				
			||||||
msg_ok "Installed FFmpeg"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setting Up Hardware Acceleration"
 | 
					msg_info "Setting Up Hardware Acceleration"
 | 
				
			||||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
 | 
					$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
 | 
				
			||||||
@@ -34,15 +26,7 @@ if [[ "$CTTYPE" == "0" ]]; then
 | 
				
			|||||||
fi
 | 
					fi
 | 
				
			||||||
msg_ok "Set Up Hardware Acceleration"
 | 
					msg_ok "Set Up Hardware Acceleration"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing ErsatzTV"
 | 
					fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
 | 
				
			||||||
temp_file=$(mktemp)
 | 
					 | 
				
			||||||
cd /opt
 | 
					 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
 | 
					 | 
				
			||||||
curl -fsSL "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-x64.tar.gz" -o "$temp_file"
 | 
					 | 
				
			||||||
tar -xzf "$temp_file"
 | 
					 | 
				
			||||||
mv /opt/ErsatzTV-${RELEASE}-linux-x64 /opt/ErsatzTV
 | 
					 | 
				
			||||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
					 | 
				
			||||||
msg_ok "Installed ErsatzTV"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Creating Service"
 | 
					msg_info "Creating Service"
 | 
				
			||||||
cat <<EOF >/etc/systemd/system/ersatzTV.service
 | 
					cat <<EOF >/etc/systemd/system/ersatzTV.service
 | 
				
			||||||
@@ -53,8 +37,8 @@ After=multi-user.target
 | 
				
			|||||||
[Service]
 | 
					[Service]
 | 
				
			||||||
Type=simple
 | 
					Type=simple
 | 
				
			||||||
User=root
 | 
					User=root
 | 
				
			||||||
WorkingDirectory=/opt/ErsatzTV 
 | 
					WorkingDirectory=/opt/ErsatzTV
 | 
				
			||||||
ExecStart=/opt/ErsatzTV/ErsatzTV  
 | 
					ExecStart=/opt/ErsatzTV/ErsatzTV
 | 
				
			||||||
Restart=always
 | 
					Restart=always
 | 
				
			||||||
RestartSec=30
 | 
					RestartSec=30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -68,7 +52,6 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
rm -f ${temp_file}
 | 
					 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,11 @@ $STD /opt/esphome/.venv/bin/python -m pip install --upgrade pip
 | 
				
			|||||||
$STD /opt/esphome/.venv/bin/python -m pip install esphome tornado esptool
 | 
					$STD /opt/esphome/.venv/bin/python -m pip install esphome tornado esptool
 | 
				
			||||||
msg_ok "Setup and Installed ESPHome"
 | 
					msg_ok "Setup and Installed ESPHome"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Linking esphome to /usr/local/bin"
 | 
				
			||||||
 | 
					rm -f /usr/local/bin/esphome
 | 
				
			||||||
 | 
					ln -s /opt/esphome/.venv/bin/esphome /usr/local/bin/esphome
 | 
				
			||||||
 | 
					msg_ok "Linked esphome binary"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Creating Service"
 | 
					msg_info "Creating Service"
 | 
				
			||||||
mkdir -p /root/config
 | 
					mkdir -p /root/config
 | 
				
			||||||
cat <<EOF >/etc/systemd/system/esphomeDashboard.service
 | 
					cat <<EOF >/etc/systemd/system/esphomeDashboard.service
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
# Author: CrazyWolf13
 | 
					# Author: CrazyWolf13
 | 
				
			||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
# Source: https://github.com/arunavo4/gitea-mirror
 | 
					# Source: https://github.com/RayLabsHQ/gitea-mirror
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
					source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
				
			||||||
color
 | 
					color
 | 
				
			||||||
@@ -28,7 +28,7 @@ ln -sf /opt/bun/bin/bun /usr/local/bin/bun
 | 
				
			|||||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bunx
 | 
					ln -sf /opt/bun/bin/bun /usr/local/bin/bunx
 | 
				
			||||||
msg_ok "Installed Bun"
 | 
					msg_ok "Installed Bun"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fetch_and_deploy_gh_release "gitea-mirror" "arunavo4/gitea-mirror"
 | 
					fetch_and_deploy_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing gitea-mirror"
 | 
					msg_info "Installing gitea-mirror"
 | 
				
			||||||
cd /opt/gitea-mirror
 | 
					cd /opt/gitea-mirror
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user