mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			115 Commits
		
	
	
		
			2024-11-23
			...
			2024-12-06
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					59deaa0a19 | ||
| 
						 | 
					a4803d178d | ||
| 
						 | 
					259203ee51 | ||
| 
						 | 
					944328625a | ||
| 
						 | 
					3d38ad0288 | ||
| 
						 | 
					c46f15cdc1 | ||
| 
						 | 
					e2aa5fe627 | ||
| 
						 | 
					493c2c931c | ||
| 
						 | 
					ce545bd499 | ||
| 
						 | 
					0ba2ea9183 | ||
| 
						 | 
					cff3fa8696 | ||
| 
						 | 
					871fd6517d | ||
| 
						 | 
					3a876c99ef | ||
| 
						 | 
					5c3fe0e802 | ||
| 
						 | 
					3ec3478b2d | ||
| 
						 | 
					67524454d7 | ||
| 
						 | 
					ec27e92833 | ||
| 
						 | 
					fa20526525 | ||
| 
						 | 
					4f5712097b | ||
| 
						 | 
					3c388ef157 | ||
| 
						 | 
					df99c30ab3 | ||
| 
						 | 
					6d307f07a9 | ||
| 
						 | 
					0d472640ff | ||
| 
						 | 
					54dd0ba420 | ||
| 
						 | 
					47ecc7a006 | ||
| 
						 | 
					4bb5741707 | ||
| 
						 | 
					d6ff28abf5 | ||
| 
						 | 
					c188b54398 | ||
| 
						 | 
					b8e2de30a5 | ||
| 
						 | 
					f710b541e4 | ||
| 
						 | 
					9c722be967 | ||
| 
						 | 
					b9f889c6c3 | ||
| 
						 | 
					baa29fb096 | ||
| 
						 | 
					e74f6f8efe | ||
| 
						 | 
					9c8223d64e | ||
| 
						 | 
					336ea19b39 | ||
| 
						 | 
					1ca99781ff | ||
| 
						 | 
					342e145273 | ||
| 
						 | 
					85b80393bd | ||
| 
						 | 
					53807c9633 | ||
| 
						 | 
					8301204cc0 | ||
| 
						 | 
					70952b3db3 | ||
| 
						 | 
					e9506e3c0c | ||
| 
						 | 
					869ddc0d5e | ||
| 
						 | 
					11d1f0f981 | ||
| 
						 | 
					c75148ec51 | ||
| 
						 | 
					8c7b72e71b | ||
| 
						 | 
					3f1cde865e | ||
| 
						 | 
					ddc867ea4e | ||
| 
						 | 
					78948b08cf | ||
| 
						 | 
					f0936500d3 | ||
| 
						 | 
					fe4b8fed8a | ||
| 
						 | 
					ec273ba221 | ||
| 
						 | 
					d5d5a3d3a3 | ||
| 
						 | 
					617b42dd8e | ||
| 
						 | 
					274867dc11 | ||
| 
						 | 
					17e5d69052 | ||
| 
						 | 
					c9148547ef | ||
| 
						 | 
					942ad74b73 | ||
| 
						 | 
					6fb5512878 | ||
| 
						 | 
					b191579f11 | ||
| 
						 | 
					bc10a3fa17 | ||
| 
						 | 
					dc49ad1133 | ||
| 
						 | 
					b15a59315e | ||
| 
						 | 
					b9fe3855b0 | ||
| 
						 | 
					74b4b5150c | ||
| 
						 | 
					689122b14a | ||
| 
						 | 
					2fbd5f5068 | ||
| 
						 | 
					40c70192af | ||
| 
						 | 
					5f3985cd0a | ||
| 
						 | 
					8901aa4d7f | ||
| 
						 | 
					862b72ab39 | ||
| 
						 | 
					b328eedc75 | ||
| 
						 | 
					543142ebf1 | ||
| 
						 | 
					e30c413ea5 | ||
| 
						 | 
					d7102d1233 | ||
| 
						 | 
					f7087e57f9 | ||
| 
						 | 
					b17ede296c | ||
| 
						 | 
					ae49d1d8d7 | ||
| 
						 | 
					03be08be63 | ||
| 
						 | 
					000f206d90 | ||
| 
						 | 
					e9ebfffb57 | ||
| 
						 | 
					11147e4482 | ||
| 
						 | 
					e786b09199 | ||
| 
						 | 
					0afeac4266 | ||
| 
						 | 
					1558b0d875 | ||
| 
						 | 
					1cb822b34c | ||
| 
						 | 
					24cfb32c3d | ||
| 
						 | 
					2599bff463 | ||
| 
						 | 
					e40de17874 | ||
| 
						 | 
					e8719df21b | ||
| 
						 | 
					257bccad6c | ||
| 
						 | 
					4e66916ebc | ||
| 
						 | 
					1be91e9fad | ||
| 
						 | 
					c098031a5a | ||
| 
						 | 
					928a5cb9e5 | ||
| 
						 | 
					9d72b5872a | ||
| 
						 | 
					60b9103a34 | ||
| 
						 | 
					a2ae582992 | ||
| 
						 | 
					853c727167 | ||
| 
						 | 
					9795d41d39 | ||
| 
						 | 
					a4dd7f5449 | ||
| 
						 | 
					a61c42ea4d | ||
| 
						 | 
					99b130d186 | ||
| 
						 | 
					df1c1ea873 | ||
| 
						 | 
					f6047ee9fb | ||
| 
						 | 
					ca819064f7 | ||
| 
						 | 
					e5d39ab555 | ||
| 
						 | 
					2e3d5f8b0c | ||
| 
						 | 
					0864afbbf3 | ||
| 
						 | 
					0cb071ce11 | ||
| 
						 | 
					8e7a9f363a | ||
| 
						 | 
					3c045b967c | ||
| 
						 | 
					a0516b43a0 | ||
| 
						 | 
					7ffd6cbef0 | 
							
								
								
									
										79
									
								
								.github/workflows/deploy-pages.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										79
									
								
								.github/workflows/deploy-pages.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,79 +0,0 @@
 | 
			
		||||
# Sample workflow for building and deploying a Next.js site to GitHub Pages
 | 
			
		||||
#
 | 
			
		||||
# To get started with Next.js see: https://nextjs.org/docs/getting-started
 | 
			
		||||
#
 | 
			
		||||
name: Deploy Next.js site to Pages
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches: ["main"]
 | 
			
		||||
    paths:
 | 
			
		||||
      - frontend/**
 | 
			
		||||
      - json/**
 | 
			
		||||
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
  pages: write
 | 
			
		||||
  id-token: write
 | 
			
		||||
 | 
			
		||||
concurrency:
 | 
			
		||||
  group: "pages"
 | 
			
		||||
  cancel-in-progress: false
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  build:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    defaults:
 | 
			
		||||
      run:
 | 
			
		||||
        working-directory: frontend  # Set default working directory for all run steps
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
      - name: Detect package manager
 | 
			
		||||
        id: detect-package-manager
 | 
			
		||||
        run: |
 | 
			
		||||
          if [ -f "${{ github.workspace }}/frontend/yarn.lock" ]; then
 | 
			
		||||
            echo "manager=yarn" >> $GITHUB_OUTPUT
 | 
			
		||||
            echo "command=install" >> $GITHUB_OUTPUT
 | 
			
		||||
            echo "runner=yarn" >> $GITHUB_OUTPUT
 | 
			
		||||
            exit 0
 | 
			
		||||
          elif [ -f "${{ github.workspace }}/frontend/package.json" ]; then
 | 
			
		||||
            echo "manager=npm" >> $GITHUB_OUTPUT
 | 
			
		||||
            echo "command=ci" >> $GITHUB_OUTPUT
 | 
			
		||||
            echo "runner=npx --no-install" >> $GITHUB_OUTPUT
 | 
			
		||||
            exit 0
 | 
			
		||||
          else
 | 
			
		||||
            echo "Unable to determine package manager"
 | 
			
		||||
            exit 1
 | 
			
		||||
          fi
 | 
			
		||||
      - name: Setup Node
 | 
			
		||||
        uses: actions/setup-node@v4
 | 
			
		||||
        with:
 | 
			
		||||
          node-version: "20"
 | 
			
		||||
          cache: ${{ steps.detect-package-manager.outputs.manager }}
 | 
			
		||||
          cache-dependency-path: frontend/package-lock.json  # Specify the path to package-lock.json
 | 
			
		||||
      - name: Setup Pages
 | 
			
		||||
        uses: actions/configure-pages@v5
 | 
			
		||||
        with:
 | 
			
		||||
          static_site_generator: next
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        run: ${{ steps.detect-package-manager.outputs.manager }} ${{ steps.detect-package-manager.outputs.command }} --legacy-peer-deps
 | 
			
		||||
      - name: Build with Next.js
 | 
			
		||||
        run: ${{ steps.detect-package-manager.outputs.runner }} next build
 | 
			
		||||
      - name: Upload artifact
 | 
			
		||||
        uses: actions/upload-pages-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          path: frontend/out
 | 
			
		||||
 | 
			
		||||
  deploy:
 | 
			
		||||
    environment:
 | 
			
		||||
      name: github-pages
 | 
			
		||||
      url: ${{ steps.deployment.outputs.page_url }}
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    needs: build
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Deploy to GitHub Pages
 | 
			
		||||
        id: deployment
 | 
			
		||||
        uses: actions/deploy-pages@v4
 | 
			
		||||
							
								
								
									
										78
									
								
								.github/workflows/frontend-cicd.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								.github/workflows/frontend-cicd.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
# Based on https://github.com/actions/starter-workflows/blob/main/pages/nextjs.yml
 | 
			
		||||
 | 
			
		||||
name: Frontend CI/CD
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches: ["main"]
 | 
			
		||||
    paths:
 | 
			
		||||
      - frontend/**
 | 
			
		||||
      - json/**
 | 
			
		||||
 | 
			
		||||
  pull_request:
 | 
			
		||||
    branches: ["main"]
 | 
			
		||||
    types: [opened, synchronize, reopened, edited]
 | 
			
		||||
    paths:
 | 
			
		||||
      - frontend/**
 | 
			
		||||
      - json/**
 | 
			
		||||
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
 | 
			
		||||
permissions:
 | 
			
		||||
  contents: read
 | 
			
		||||
 | 
			
		||||
concurrency:
 | 
			
		||||
  group: pages-${{ github.ref }}
 | 
			
		||||
  cancel-in-progress: false
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  build:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    defaults:
 | 
			
		||||
      run:
 | 
			
		||||
        working-directory: frontend  # Set default working directory for all run steps
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
      - name: Setup Node
 | 
			
		||||
        uses: actions/setup-node@v4
 | 
			
		||||
        with:
 | 
			
		||||
          node-version: "20"
 | 
			
		||||
          cache: npm
 | 
			
		||||
          cache-dependency-path: frontend/package-lock.json
 | 
			
		||||
 | 
			
		||||
      - name: Install dependencies
 | 
			
		||||
        run: npm ci --prefer-offline --legacy-peer-deps
 | 
			
		||||
 | 
			
		||||
      - name: Run tests
 | 
			
		||||
        run: npm run test
 | 
			
		||||
 | 
			
		||||
      - name: Configure Next.js for pages
 | 
			
		||||
        uses: actions/configure-pages@v5
 | 
			
		||||
        with:
 | 
			
		||||
          static_site_generator: next
 | 
			
		||||
 | 
			
		||||
      - name: Build with Next.js
 | 
			
		||||
        run: npm run build
 | 
			
		||||
 | 
			
		||||
      - name: Upload artifact
 | 
			
		||||
        if: github.ref == 'refs/heads/main'
 | 
			
		||||
        uses: actions/upload-pages-artifact@v3
 | 
			
		||||
        with:
 | 
			
		||||
          path: frontend/out
 | 
			
		||||
 | 
			
		||||
  deploy:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    needs: build
 | 
			
		||||
    if: github.ref == 'refs/heads/main'
 | 
			
		||||
    permissions:
 | 
			
		||||
      pages: write
 | 
			
		||||
      id-token: write
 | 
			
		||||
    environment:
 | 
			
		||||
      name: github-pages
 | 
			
		||||
      url: ${{ steps.deployment.outputs.page_url }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Deploy to GitHub Pages
 | 
			
		||||
        id: deployment
 | 
			
		||||
        uses: actions/deploy-pages@v4
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/github-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/github-release.yml
									
									
									
									
										vendored
									
									
								
							@@ -21,5 +21,5 @@ jobs:
 | 
			
		||||
          YESTERDAY_CHANGELOG_NOTES=$(awk '/^## '"$YESTERDAY"'/ {f=1; next} f && /^## [0-9]{4}-[0-9]{2}-[0-9]{2}/ {f=0} f && !/^## / {print}' CHANGELOG.md)
 | 
			
		||||
          
 | 
			
		||||
          if [ -n "$YESTERDAY_CHANGELOG_NOTES" ]; then
 | 
			
		||||
            gh release create "$YESTERDAY" -n "$YESTERDAY_CHANGELOG_NOTES" --latest
 | 
			
		||||
            gh release create "$YESTERDAY" -t "$YESTERDAY" -n "$YESTERDAY_CHANGELOG_NOTES" --latest
 | 
			
		||||
          fi
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										175
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										175
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -16,6 +16,181 @@ All LXC instances created using this repository come pre-installed with Midnight
 | 
			
		||||
> [!IMPORTANT]
 | 
			
		||||
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
 | 
			
		||||
 | 
			
		||||
## 2024-12-06
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix bugs in Komga update [@DysfunctionalProgramming](https://github.com/DysfunctionalProgramming) ([#717](https://github.com/community-scripts/ProxmoxVE/pull/717))
 | 
			
		||||
- Bookstack: Fix Update function composer [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#700](https://github.com/community-scripts/ProxmoxVE/pull/700))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- fix: note component in json-editor getting out of focus when typing and revert theme switch animation [@BramSuurdje](https://github.com/BramSuurdje) ([#706](https://github.com/community-scripts/ProxmoxVE/pull/706))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- Update frontend CI/CD workflow [@havardthom](https://github.com/havardthom) ([#703](https://github.com/community-scripts/ProxmoxVE/pull/703))
 | 
			
		||||
 | 
			
		||||
## 2024-12-05
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- PostgreSQL: Change authentication method from peer to md5 for UNIX sockets [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#650](https://github.com/community-scripts/ProxmoxVE/pull/650))
 | 
			
		||||
- Fix stdout in unifi.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#688](https://github.com/community-scripts/ProxmoxVE/pull/688))
 | 
			
		||||
- Fix `rm` bug in Vikunja update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#692](https://github.com/community-scripts/ProxmoxVE/pull/692))
 | 
			
		||||
 | 
			
		||||
## 2024-12-04
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Update Spelling 'Environment' in nginxproxymanager [@MathijsG](https://github.com/MathijsG) ([#676](https://github.com/community-scripts/ProxmoxVE/pull/676))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Update homepage.json documentation and website links [@patchmonkey](https://github.com/patchmonkey) ([#668](https://github.com/community-scripts/ProxmoxVE/pull/668))
 | 
			
		||||
 | 
			
		||||
## 2024-12-03
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New Script: Onedev [@quantumryuu](https://github.com/quantumryuu) ([#612](https://github.com/community-scripts/ProxmoxVE/pull/612))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Script Update: SnipeIT [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#641](https://github.com/community-scripts/ProxmoxVE/pull/641))
 | 
			
		||||
 | 
			
		||||
## 2024-12-02
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New Script: Hoarder LXC [@vhsdream](https://github.com/vhsdream) ([#567](https://github.com/community-scripts/ProxmoxVE/pull/567))
 | 
			
		||||
- New script: SnipeIT LXC [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#538](https://github.com/community-scripts/ProxmoxVE/pull/538))
 | 
			
		||||
- New Script: Glance [@quantumryuu](https://github.com/quantumryuu) ([#595](https://github.com/community-scripts/ProxmoxVE/pull/595))
 | 
			
		||||
- New script: Unbound LXC [@wimb0](https://github.com/wimb0) ([#547](https://github.com/community-scripts/ProxmoxVE/pull/547))
 | 
			
		||||
- New script: Mylar3 LXC [@davalanche](https://github.com/davalanche) ([#554](https://github.com/community-scripts/ProxmoxVE/pull/554))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Stirling-PDF: replace dependency for v0.35.0 and add check and fix in stirling-pdf.sh [@vhsdream](https://github.com/vhsdream) ([#614](https://github.com/community-scripts/ProxmoxVE/pull/614))
 | 
			
		||||
- qbittorrent: do not override the configuration port in systemd [@zdraganov](https://github.com/zdraganov) ([#618](https://github.com/community-scripts/ProxmoxVE/pull/618))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- chore: Update unbound logo to have only the actual logo [@BramSuurdje](https://github.com/BramSuurdje) ([#648](https://github.com/community-scripts/ProxmoxVE/pull/648))
 | 
			
		||||
- fix: vaultwarden info mismatch [@BramSuurdje](https://github.com/BramSuurdje) ([#645](https://github.com/community-scripts/ProxmoxVE/pull/645))
 | 
			
		||||
- Wallos json fix [@quantumryuu](https://github.com/quantumryuu) ([#630](https://github.com/community-scripts/ProxmoxVE/pull/630))
 | 
			
		||||
 | 
			
		||||
## 2024-11-30
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Convert line endings in the-lounge.sh [@jamezpolley](https://github.com/jamezpolley) ([#599](https://github.com/community-scripts/ProxmoxVE/pull/599))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- add some Information for Monitor-All Script [@MickLesk](https://github.com/MickLesk) ([#605](https://github.com/community-scripts/ProxmoxVE/pull/605))
 | 
			
		||||
 | 
			
		||||
## 2024-11-29
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New Script: The Lounge IRC [@quantumryuu](https://github.com/quantumryuu) ([#571](https://github.com/community-scripts/ProxmoxVE/pull/571))
 | 
			
		||||
- New Script: LubeLogger [@quantumryuu](https://github.com/quantumryuu) ([#574](https://github.com/community-scripts/ProxmoxVE/pull/574))
 | 
			
		||||
- New Script: Inspircd [@quantumryuu](https://github.com/quantumryuu) ([#576](https://github.com/community-scripts/ProxmoxVE/pull/576))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix msg_error on zwave-js-ui [@MickLesk](https://github.com/MickLesk) ([#585](https://github.com/community-scripts/ProxmoxVE/pull/585))
 | 
			
		||||
- Fix Kimai Apache2 Rights [@MickLesk](https://github.com/MickLesk) ([#577](https://github.com/community-scripts/ProxmoxVE/pull/577))
 | 
			
		||||
 | 
			
		||||
## 2024-11-28
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Add vitest, add json validation tests, fix broken json files [@havardthom](https://github.com/havardthom) ([#566](https://github.com/community-scripts/ProxmoxVE/pull/566))
 | 
			
		||||
- Add update script to Pocketbase [@dsiebel](https://github.com/dsiebel) ([#535](https://github.com/community-scripts/ProxmoxVE/pull/535))
 | 
			
		||||
- Fix MongoDB install in Unifi script [@havardthom](https://github.com/havardthom) ([#564](https://github.com/community-scripts/ProxmoxVE/pull/564))
 | 
			
		||||
- Remove changing DISK_REF for zfspool mikrotik-routeros.sh [@tjcomserv](https://github.com/tjcomserv) ([#529](https://github.com/community-scripts/ProxmoxVE/pull/529))
 | 
			
		||||
- Fix Z-Wave JS UI script [@MickLesk](https://github.com/MickLesk) ([#546](https://github.com/community-scripts/ProxmoxVE/pull/546))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Show Changelog on Mobile Devices [@MickLesk](https://github.com/MickLesk) ([#558](https://github.com/community-scripts/ProxmoxVE/pull/558))
 | 
			
		||||
 | 
			
		||||
## 2024-11-27
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
- Zabbix: Use Agent2 as Default | Update Script added | some other Improvements [@MickLesk](https://github.com/MickLesk) ([#527](https://github.com/community-scripts/ProxmoxVE/pull/527))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix: install mosquitto from mosquitto repo [@dsiebel](https://github.com/dsiebel) ([#534](https://github.com/community-scripts/ProxmoxVE/pull/534))
 | 
			
		||||
- Patch Netbird Script | Container Boot-Check | Debian/Ubuntu Only [@MickLesk](https://github.com/MickLesk) ([#528](https://github.com/community-scripts/ProxmoxVE/pull/528))
 | 
			
		||||
- Install MongoDB 4.2 for non-AVX CPUs in Unifi LXC [@ColinOppenheim](https://github.com/ColinOppenheim) ([#319](https://github.com/community-scripts/ProxmoxVE/pull/319))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Fix json error in zabbix.json [@havardthom](https://github.com/havardthom) ([#543](https://github.com/community-scripts/ProxmoxVE/pull/543))
 | 
			
		||||
- Fix another json error in add-netbird-lxc.json [@havardthom](https://github.com/havardthom) ([#545](https://github.com/community-scripts/ProxmoxVE/pull/545))
 | 
			
		||||
 | 
			
		||||
## 2024-11-26
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix Vikunja install script to prevent database deletion upon updating [@vhsdream](https://github.com/vhsdream) ([#524](https://github.com/community-scripts/ProxmoxVE/pull/524))
 | 
			
		||||
 | 
			
		||||
## 2024-11-25
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
- Remove Scrypted script [@MickLesk](https://github.com/MickLesk) ([#511](https://github.com/community-scripts/ProxmoxVE/pull/511))
 | 
			
		||||
  - Because of request from Scrypted maintainer: [#494](https://github.com/community-scripts/ProxmoxVE/issues/494)
 | 
			
		||||
  - Official Scrypted script can be used instead: https://docs.scrypted.app/installation.html#proxmox-ve
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix bugs in Calibre-Web update [@havardthom](https://github.com/havardthom) ([#517](https://github.com/community-scripts/ProxmoxVE/pull/517))
 | 
			
		||||
- Fix upload folder in listmonk LXC [@bvdberg01](https://github.com/bvdberg01) ([#515](https://github.com/community-scripts/ProxmoxVE/pull/515))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Fix website url in Zoraxy documentation [@miggi92](https://github.com/miggi92) ([#506](https://github.com/community-scripts/ProxmoxVE/pull/506))
 | 
			
		||||
 | 
			
		||||
## 2024-11-24
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### ✨ New Scripts
 | 
			
		||||
 | 
			
		||||
- New script: listmonk LXC [@bvdberg01](https://github.com/bvdberg01) ([#442](https://github.com/community-scripts/ProxmoxVE/pull/442))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- Add release title to github-release.yml [@havardthom](https://github.com/havardthom) ([#481](https://github.com/community-scripts/ProxmoxVE/pull/481))
 | 
			
		||||
 | 
			
		||||
## 2024-11-23
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ echo -e "Loading..."
 | 
			
		||||
APP="Aria2"
 | 
			
		||||
var_disk="8"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="1028"
 | 
			
		||||
var_ram="1024"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
variables
 | 
			
		||||
 
 | 
			
		||||
@@ -70,9 +70,10 @@ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_v
 | 
			
		||||
  unzip -q v${RELEASE}.zip
 | 
			
		||||
  mv BookStack-${RELEASE} /opt/bookstack
 | 
			
		||||
  mv /opt/.env /opt/bookstack/.env
 | 
			
		||||
  cd /opt/bookstack
 | 
			
		||||
  COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev  &>/dev/null
 | 
			
		||||
  php artisan key:generate &>/dev/null
 | 
			
		||||
  php artisan migrate &>/dev/null
 | 
			
		||||
  php artisan key:generate --force &>/dev/null
 | 
			
		||||
  php artisan migrate --force &>/dev/null
 | 
			
		||||
  echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
  msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -61,11 +61,14 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating $APP LXC"
 | 
			
		||||
  msg_info "Stopping ${APP}"
 | 
			
		||||
  systemctl stop cps
 | 
			
		||||
  msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP}"
 | 
			
		||||
  cd /opt/kepubify
 | 
			
		||||
  rm kepubify-linux-64bit
 | 
			
		||||
  curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit &>/dev/null
 | 
			
		||||
  rm -rf kepubify-linux-64bit
 | 
			
		||||
  curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit
 | 
			
		||||
  chmod +x kepubify-linux-64bit
 | 
			
		||||
  menu_array=("1" "Enables gdrive as storage backend for your ebooks" OFF \
 | 
			
		||||
    "2" "Enables sending emails via a googlemail account without enabling insecure apps" OFF \
 | 
			
		||||
@@ -140,16 +143,19 @@ function update_script() {
 | 
			
		||||
      esac
 | 
			
		||||
    done
 | 
			
		||||
  fi
 | 
			
		||||
  if [ ! -z "$options" ] && [ ${#options[@]} -gt 0 ]; then
 | 
			
		||||
  if [ ${#options[@]} -gt 0 ]; then
 | 
			
		||||
    cps_options=$(IFS=, ; echo "${options[*]}")
 | 
			
		||||
    echo $cps_options > /opt/calibre-web/options.txt
 | 
			
		||||
    pip install --upgrade calibreweb[$cps_options]
 | 
			
		||||
    pip install --upgrade calibreweb[$cps_options] &>/dev/null
 | 
			
		||||
  else
 | 
			
		||||
    rm /opt/calibre-web/options.txt 2> /dev/null
 | 
			
		||||
    pip install --upgrade calibreweb
 | 
			
		||||
    rm -rf /opt/calibre-web/options.txt
 | 
			
		||||
    pip install --upgrade calibreweb &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  msg_info "Starting ${APP}"
 | 
			
		||||
  systemctl start cps
 | 
			
		||||
  msg_ok "Updated $APP LXC"
 | 
			
		||||
  msg_ok "Started ${APP}"
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										99
									
								
								ct/glance.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								ct/glance.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,99 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: kristocopani
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
clear
 | 
			
		||||
cat <<"EOF"
 | 
			
		||||
   ________                    
 | 
			
		||||
  / ____/ /___ _____  ________ 
 | 
			
		||||
 / / __/ / __ `/ __ \/ ___/ _ \
 | 
			
		||||
/ /_/ / / /_/ / / / / /__/  __/
 | 
			
		||||
\____/_/\__,_/_/ /_/\___/\___/ 
 | 
			
		||||
                               
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="Glance"
 | 
			
		||||
var_disk="2"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  CT_TYPE="1"
 | 
			
		||||
  PW=""
 | 
			
		||||
  CT_ID=$NEXTID
 | 
			
		||||
  HN=$NSAPP
 | 
			
		||||
  DISK_SIZE="$var_disk"
 | 
			
		||||
  CORE_COUNT="$var_cpu"
 | 
			
		||||
  RAM_SIZE="$var_ram"
 | 
			
		||||
  BRG="vmbr0"
 | 
			
		||||
  NET="dhcp"
 | 
			
		||||
  GATE=""
 | 
			
		||||
  APT_CACHER=""
 | 
			
		||||
  APT_CACHER_IP=""
 | 
			
		||||
  DISABLEIP6="no"
 | 
			
		||||
  MTU=""
 | 
			
		||||
  SD=""
 | 
			
		||||
  NS=""
 | 
			
		||||
  MAC=""
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  SSH="no"
 | 
			
		||||
  VERB="no"
 | 
			
		||||
  echo_default
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /etc/systemd/system/glance.service ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/glanceapp/glance/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 Service"
 | 
			
		||||
    systemctl stop glance
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    wget -q https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz 
 | 
			
		||||
    rm -rf /opt/glance/glance
 | 
			
		||||
    tar -xzf glance-linux-amd64.tar.gz -C /opt/glance
 | 
			
		||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start glance
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/glance-linux-amd64.tar.gz
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  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 "${APP} should be reachable by going to the following URL.
 | 
			
		||||
         ${BL}http://${IP}:8080${CL} \n"
 | 
			
		||||
							
								
								
									
										106
									
								
								ct/hoarder.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								ct/hoarder.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2024 tteck
 | 
			
		||||
# Author: MickLesk (Canbiz) & vhsdream
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
clear
 | 
			
		||||
cat <<"EOF"
 | 
			
		||||
    __  __                     __
 | 
			
		||||
   / / / /___  ____ __________/ /__  _____
 | 
			
		||||
  / /_/ / __ \/ __ `/ ___/ __  / _ \/ ___/
 | 
			
		||||
 / __  / /_/ / /_/ / /  / /_/ /  __/ /
 | 
			
		||||
/_/ /_/\____/\__,_/_/   \__,_/\___/_/
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="Hoarder"
 | 
			
		||||
var_disk="8"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="4096"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  CT_TYPE="1"
 | 
			
		||||
  PW=""
 | 
			
		||||
  CT_ID=$NEXTID
 | 
			
		||||
  HN=$NSAPP
 | 
			
		||||
  DISK_SIZE="$var_disk"
 | 
			
		||||
  CORE_COUNT="$var_cpu"
 | 
			
		||||
  RAM_SIZE="$var_ram"
 | 
			
		||||
  BRG="vmbr0"
 | 
			
		||||
  NET="dhcp"
 | 
			
		||||
  GATE=""
 | 
			
		||||
  APT_CACHER=""
 | 
			
		||||
  APT_CACHER_IP=""
 | 
			
		||||
  DISABLEIP6="no"
 | 
			
		||||
  MTU=""
 | 
			
		||||
  SD=""
 | 
			
		||||
  NS=""
 | 
			
		||||
  MAC=""
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  SSH="no"
 | 
			
		||||
  VERB="no"
 | 
			
		||||
  echo_default
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
if [[ ! -d /opt/hoarder ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/hoarder-app/hoarder/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
PREV_RELEASE=$(cat /opt/${APP}_version.txt)
 | 
			
		||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then
 | 
			
		||||
  msg_info "Stopping Services"
 | 
			
		||||
  systemctl stop hoarder-web hoarder-workers hoarder-browser
 | 
			
		||||
  msg_ok "Stopped Services"
 | 
			
		||||
  msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
  cd /opt
 | 
			
		||||
  mv /opt/hoarder/.env /opt/.env
 | 
			
		||||
  rm -rf /opt/hoarder
 | 
			
		||||
  wget -q "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
  unzip -q v${RELEASE}.zip
 | 
			
		||||
  mv hoarder-${RELEASE} /opt/hoarder
 | 
			
		||||
  cd /opt/hoarder/apps/web
 | 
			
		||||
  pnpm install --frozen-lockfile &>/dev/null
 | 
			
		||||
  pnpm exec next build --experimental-build-mode compile &>/dev/null
 | 
			
		||||
  cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
 | 
			
		||||
  cd /opt/hoarder/apps/workers
 | 
			
		||||
  pnpm install --frozen-lockfile &>/dev/null
 | 
			
		||||
  export DATA_DIR=/opt/hoarder_data
 | 
			
		||||
  cd /opt/hoarder/packages/db
 | 
			
		||||
  pnpm migrate &>/dev/null
 | 
			
		||||
  mv /opt/.env /opt/hoarder/.env
 | 
			
		||||
  sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /opt/hoarder/.env
 | 
			
		||||
  msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
  
 | 
			
		||||
  msg_info "Starting Services"
 | 
			
		||||
  systemctl start hoarder-browser hoarder-workers hoarder-web
 | 
			
		||||
  msg_ok "Started Services"
 | 
			
		||||
  msg_info "Cleaning up"
 | 
			
		||||
  rm -R /opt/v${RELEASE}.zip
 | 
			
		||||
  echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
  msg_ok "Cleaned"
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
else
 | 
			
		||||
  msg_ok "No update required.  ${APP} is already at ${RELEASE}."
 | 
			
		||||
fi
 | 
			
		||||
exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${APP} Setup should be reachable by going to the following URL.
 | 
			
		||||
         ${BL}http://${IP}:3000${CL} \n"
 | 
			
		||||
							
								
								
									
										97
									
								
								ct/inspircd.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								ct/inspircd.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: kristocopani
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
clear
 | 
			
		||||
cat <<"EOF"
 | 
			
		||||
    ____                 ________  ______    __
 | 
			
		||||
   /  _/___  _________  /  _/ __ \/ ____/___/ /
 | 
			
		||||
   / // __ \/ ___/ __ \ / // /_/ / /   / __  / 
 | 
			
		||||
 _/ // / / (__  ) /_/ // // _, _/ /___/ /_/ /  
 | 
			
		||||
/___/_/ /_/____/ .___/___/_/ |_|\____/\__,_/   
 | 
			
		||||
              /_/                              
 | 
			
		||||
 
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="InspIRCd"
 | 
			
		||||
var_disk="2"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  CT_TYPE="1"
 | 
			
		||||
  PW=""
 | 
			
		||||
  CT_ID=$NEXTID
 | 
			
		||||
  HN=$NSAPP
 | 
			
		||||
  DISK_SIZE="$var_disk"
 | 
			
		||||
  CORE_COUNT="$var_cpu"
 | 
			
		||||
  RAM_SIZE="$var_ram"
 | 
			
		||||
  BRG="vmbr0"
 | 
			
		||||
  NET="dhcp"
 | 
			
		||||
  GATE=""
 | 
			
		||||
  APT_CACHER=""
 | 
			
		||||
  APT_CACHER_IP=""
 | 
			
		||||
  DISABLEIP6="no"
 | 
			
		||||
  MTU=""
 | 
			
		||||
  SD=""
 | 
			
		||||
  NS=""
 | 
			
		||||
  MAC=""
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  SSH="no"
 | 
			
		||||
  VERB="no"
 | 
			
		||||
  echo_default
 | 
			
		||||
}
 | 
			
		||||
function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /lib/systemd/system/inspircd.service ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/inspircd/inspircd/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 Service"
 | 
			
		||||
    systemctl stop inspircd
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    wget -q https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u1_amd64.deb
 | 
			
		||||
    apt-get install "./inspircd_${RELEASE}.deb12u1_amd64.deb" -y &>/dev/nul
 | 
			
		||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start inspircd
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/inspircd_${RELEASE}.deb12u1_amd64.deb
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  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 "${APP} server should be reachable by connecting to the following server.
 | 
			
		||||
         ${BL}Server Name:${IP} Port:6667${CL} \n"
 | 
			
		||||
@@ -56,7 +56,7 @@ function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
if [[ ! -f /opt/komga/komga*.jar ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
if [[ ! -f /opt/komga/komga.jar ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
msg_info "Updating ${APP}"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/gotson/komga/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
 | 
			
		||||
@@ -65,8 +65,8 @@ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_v
 | 
			
		||||
  msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
  rm -rf /opt/komga/komga*.jar
 | 
			
		||||
  wget -q "https://github.com/gotson/komga/releases/download/v${RELEASE}/komga-${RELEASE}.jar"
 | 
			
		||||
  wget -q "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar"
 | 
			
		||||
  rm -rf /opt/komga/komga.jar
 | 
			
		||||
  mv -f komga-${RELEASE}.jar /opt/komga/komga.jar
 | 
			
		||||
  echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
  msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										101
									
								
								ct/listmonk.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								ct/listmonk.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: bvdberg01
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
clear
 | 
			
		||||
cat <<"EOF"
 | 
			
		||||
    ___      __                        __  
 | 
			
		||||
   / (_)____/ /_____ ___  ____  ____  / /__
 | 
			
		||||
  / / / ___/ __/ __ `__ \/ __ \/ __ \/ //_/
 | 
			
		||||
 / / (__  ) /_/ / / / / / /_/ / / / / ,<   
 | 
			
		||||
/_/_/____/\__/_/ /_/ /_/\____/_/ /_/_/|_|  
 | 
			
		||||
                                           
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="listmonk"
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  CT_TYPE="1"
 | 
			
		||||
  PW=""
 | 
			
		||||
  CT_ID=$NEXTID
 | 
			
		||||
  HN=$NSAPP
 | 
			
		||||
  DISK_SIZE="$var_disk"
 | 
			
		||||
  CORE_COUNT="$var_cpu"
 | 
			
		||||
  RAM_SIZE="$var_ram"
 | 
			
		||||
  BRG="vmbr0"
 | 
			
		||||
  NET="dhcp"
 | 
			
		||||
  GATE=""
 | 
			
		||||
  APT_CACHER=""
 | 
			
		||||
  APT_CACHER_IP=""
 | 
			
		||||
  DISABLEIP6="no"
 | 
			
		||||
  MTU=""
 | 
			
		||||
  SD=""
 | 
			
		||||
  NS=""
 | 
			
		||||
  MAC=""
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  SSH="no"
 | 
			
		||||
  VERB="no"
 | 
			
		||||
  echo_default
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
if [[ ! -f /etc/systemd/system/listmonk.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/knadh/listmonk/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 ${APP}"
 | 
			
		||||
  systemctl stop listmonk
 | 
			
		||||
  msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
  cd /opt
 | 
			
		||||
  mv /opt/listmonk/ /opt/listmonk-backup
 | 
			
		||||
  mkdir /opt/listmonk/
 | 
			
		||||
  wget -q "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_amd64.tar.gz"
 | 
			
		||||
  tar -xzf "listmonk_${RELEASE}_linux_amd64.tar.gz" -C /opt/listmonk
 | 
			
		||||
  mv /opt/listmonk-backup/config.toml /opt/listmonk/config.toml
 | 
			
		||||
  mv /opt/listmonk-backup/uploads /opt/listmonk/uploads
 | 
			
		||||
  /opt/listmonk/listmonk --upgrade --yes --config /opt/listmonk/config.toml &>/dev/null
 | 
			
		||||
  echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
  msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting ${APP}"
 | 
			
		||||
  systemctl start listmonk
 | 
			
		||||
  msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Cleaning up"
 | 
			
		||||
  rm -rf "/opt/listmonk_${RELEASE}_linux_amd64.tar.gz"
 | 
			
		||||
  rm -rf /opt/listmonk-backup/
 | 
			
		||||
  msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
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 "${APP} should be reachable by going to the following URL.
 | 
			
		||||
         ${BL}http://${IP}:9000${CL} \n"
 | 
			
		||||
							
								
								
									
										104
									
								
								ct/lubelogger.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								ct/lubelogger.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: kristocopani
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
clear
 | 
			
		||||
cat <<"EOF"
 | 
			
		||||
    __          __         __                               
 | 
			
		||||
   / /   __  __/ /_  ___  / /   ____  ____ _____ ____  _____
 | 
			
		||||
  / /   / / / / __ \/ _ \/ /   / __ \/ __ `/ __ `/ _ \/ ___/
 | 
			
		||||
 / /___/ /_/ / /_/ /  __/ /___/ /_/ / /_/ / /_/ /  __/ /    
 | 
			
		||||
/_____/\__,_/_.___/\___/_____/\____/\__, /\__, /\___/_/     
 | 
			
		||||
                                   /____//____/             
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="LubeLogger"
 | 
			
		||||
var_disk="2"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  CT_TYPE="1"
 | 
			
		||||
  PW=""
 | 
			
		||||
  CT_ID=$NEXTID
 | 
			
		||||
  HN=$NSAPP
 | 
			
		||||
  DISK_SIZE="$var_disk"
 | 
			
		||||
  CORE_COUNT="$var_cpu"
 | 
			
		||||
  RAM_SIZE="$var_ram"
 | 
			
		||||
  BRG="vmbr0"
 | 
			
		||||
  NET="dhcp"
 | 
			
		||||
  GATE=""
 | 
			
		||||
  APT_CACHER=""
 | 
			
		||||
  APT_CACHER_IP=""
 | 
			
		||||
  DISABLEIP6="no"
 | 
			
		||||
  MTU=""
 | 
			
		||||
  SD=""
 | 
			
		||||
  NS=""
 | 
			
		||||
  MAC=""
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  SSH="no"
 | 
			
		||||
  VERB="no"
 | 
			
		||||
  echo_default
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /etc/systemd/system/lubelogger.service ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/hargata/lubelog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  RELEASE_TRIMMED=$(echo "${RELEASE}" | tr -d ".")
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop lubelogger
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    wget -q https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
 | 
			
		||||
    cp /opt/lubelogger/appsettings.json /opt/appsettings.json
 | 
			
		||||
    rm -rf /opt/lubelogger
 | 
			
		||||
    unzip -qq LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip -d lubelogger
 | 
			
		||||
    chmod 700 /opt/lubelogger/CarCareTracker
 | 
			
		||||
    mv -f /opt/appsettings.json /opt/lubelogger/appsettings.json
 | 
			
		||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start lubelogger
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  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 "${APP} should be reachable by going to the following URL.
 | 
			
		||||
         ${BL}http://${IP}:5000${CL} \n"
 | 
			
		||||
							
								
								
									
										79
									
								
								ct/mylar3.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								ct/mylar3.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: davalanche
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/mylar3/mylar3
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
clear
 | 
			
		||||
cat <<"EOF"
 | 
			
		||||
    __  ___      __          _____
 | 
			
		||||
   /  |/  /_  __/ /___ _____|__  /
 | 
			
		||||
  / /|_/ / / / / / __ `/ ___//_ <
 | 
			
		||||
 / /  / / /_/ / / /_/ / /  ___/ /
 | 
			
		||||
/_/  /_/\__, /_/\__,_/_/  /____/
 | 
			
		||||
       /____/
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="Mylar3"
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  CT_TYPE="1"
 | 
			
		||||
  PW=""
 | 
			
		||||
  CT_ID=$NEXTID
 | 
			
		||||
  HN=$NSAPP
 | 
			
		||||
  DISK_SIZE="$var_disk"
 | 
			
		||||
  CORE_COUNT="$var_cpu"
 | 
			
		||||
  RAM_SIZE="$var_ram"
 | 
			
		||||
  BRG="vmbr0"
 | 
			
		||||
  NET="dhcp"
 | 
			
		||||
  GATE=""
 | 
			
		||||
  APT_CACHER=""
 | 
			
		||||
  APT_CACHER_IP=""
 | 
			
		||||
  DISABLEIP6="no"
 | 
			
		||||
  MTU=""
 | 
			
		||||
  SD=""
 | 
			
		||||
  NS=""
 | 
			
		||||
  MAC=""
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  SSH="no"
 | 
			
		||||
  VERB="no"
 | 
			
		||||
  echo_default
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
if [[ ! -d /opt/mylar3 ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name')
 | 
			
		||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
  rm -rf /opt/mylar3/* /opt/mylar3/.*
 | 
			
		||||
  wget -qO- https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz | tar -xz --strip-components=1 -C /opt/mylar3
 | 
			
		||||
  systemctl restart mylar3
 | 
			
		||||
  echo "${RELEASE}" > /opt/${APP}_version.txt
 | 
			
		||||
  msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
else
 | 
			
		||||
  msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
fi
 | 
			
		||||
exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${APP} should be reachable by going to the following URL.
 | 
			
		||||
         ${BL}http://${IP}:8090${CL} \n"
 | 
			
		||||
							
								
								
									
										99
									
								
								ct/onedev.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								ct/onedev.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,99 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: kristocopani
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
clear
 | 
			
		||||
cat <<"EOF"
 | 
			
		||||
   ____             ____           
 | 
			
		||||
  / __ \____  ___  / __ \___ _   __
 | 
			
		||||
 / / / / __ \/ _ \/ / / / _ \ | / /
 | 
			
		||||
/ /_/ / / / /  __/ /_/ /  __/ |/ / 
 | 
			
		||||
\____/_/ /_/\___/_____/\___/|___/  
 | 
			
		||||
                                    
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="OneDev"
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="2048"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  CT_TYPE="1"
 | 
			
		||||
  PW=""
 | 
			
		||||
  CT_ID=$NEXTID
 | 
			
		||||
  HN=$NSAPP
 | 
			
		||||
  DISK_SIZE="$var_disk"
 | 
			
		||||
  CORE_COUNT="$var_cpu"
 | 
			
		||||
  RAM_SIZE="$var_ram"
 | 
			
		||||
  BRG="vmbr0"
 | 
			
		||||
  NET="dhcp"
 | 
			
		||||
  GATE=""
 | 
			
		||||
  APT_CACHER=""
 | 
			
		||||
  APT_CACHER_IP=""
 | 
			
		||||
  DISABLEIP6="no"
 | 
			
		||||
  MTU=""
 | 
			
		||||
  SD=""
 | 
			
		||||
  NS=""
 | 
			
		||||
  MAC=""
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  SSH="no"
 | 
			
		||||
  VERB="no"
 | 
			
		||||
  echo_default
 | 
			
		||||
}
 | 
			
		||||
function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /etc/systemd/system/onedev.service ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  GITHUB_RELEASE=$(curl -s https://api.github.com/repos/theonedev/onedev/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${GITHUB_RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop onedev
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${GITHUB_RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    wget -q https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz
 | 
			
		||||
    tar -xzf onedev-latest.tar.gz
 | 
			
		||||
    /opt/onedev-latest/bin/upgrade.sh /opt/onedev >/dev/null
 | 
			
		||||
    RELEASE=$(cat /opt/onedev/release.properties | grep "version" | cut -d'=' -f2)
 | 
			
		||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start onedev
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/onedev-latest
 | 
			
		||||
    rm -rf /opt/onedev-latest.tar.gz
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  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 "${APP} should be reachable by going to the following URL.
 | 
			
		||||
         ${BL}http://${IP}:6610${CL} \n"
 | 
			
		||||
@@ -52,6 +52,26 @@ function default_settings() {
 | 
			
		||||
  echo_default
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -f /etc/systemd/system/pocketbase.service || ! -x /opt/pocketbase/pocketbase ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
  msg_info "Stopping ${APP}"
 | 
			
		||||
  systemctl stop pocketbase
 | 
			
		||||
  msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP}"
 | 
			
		||||
  /opt/pocketbase/pocketbase update
 | 
			
		||||
  msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting ${APP}"
 | 
			
		||||
  systemctl start pocketbase
 | 
			
		||||
  msg_ok "Started ${APP}"
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										98
									
								
								ct/snipeit.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								ct/snipeit.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
 | 
			
		||||
#Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: Michel Roegl-Brunner (michelroegl-brunner)
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
function header_info {
 | 
			
		||||
clear
 | 
			
		||||
cat <<"EOF"
 | 
			
		||||
   _____       _                  __________
 | 
			
		||||
  / ___/____  (_)___  ___        /  _/_  __/
 | 
			
		||||
  \__ \/ __ \/ / __ \/ _ \______ / /  / /   
 | 
			
		||||
 ___/ / / / / / /_/ /  __/_____// /  / /    
 | 
			
		||||
/____/_/ /_/_/ .___/\___/     /___/ /_/     
 | 
			
		||||
            /_/                             
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="SnipeIT"
 | 
			
		||||
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="2048"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  CT_TYPE="1"
 | 
			
		||||
  PW=""
 | 
			
		||||
  CT_ID=$NEXTID
 | 
			
		||||
  HN=$NSAPP
 | 
			
		||||
  DISK_SIZE="$var_disk"
 | 
			
		||||
  CORE_COUNT="$var_cpu"
 | 
			
		||||
  RAM_SIZE="$var_ram"
 | 
			
		||||
  BRG="vmbr0"
 | 
			
		||||
  NET="dhcp"
 | 
			
		||||
  GATE=""
 | 
			
		||||
  APT_CACHER=""
 | 
			
		||||
  APT_CACHER_IP=""
 | 
			
		||||
  DISABLEIP6="no"
 | 
			
		||||
  MTU=""
 | 
			
		||||
  SD=""
 | 
			
		||||
  NS=""
 | 
			
		||||
  MAC=""
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  SSH="no"
 | 
			
		||||
  VERB="no"
 | 
			
		||||
  echo_default
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
if [[ ! -d /opt/snipe-it ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/snipe/snipe-it/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 "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
  apt-get update &>/dev/null
 | 
			
		||||
  apt-get -y upgrade &>/dev/null
 | 
			
		||||
  mv /opt/snipe-it /opt/snipe-it-backup
 | 
			
		||||
  cd /opt
 | 
			
		||||
  wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip" &>/dev/null
 | 
			
		||||
  unzip -q v${RELEASE}.zip
 | 
			
		||||
  mv snipe-it-${RELEASE} /opt/snipe-it
 | 
			
		||||
  cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
 | 
			
		||||
  cp -r /opt/snipe-it-backup/public/uploads/ /opt/snipe-it/public/uploads/
 | 
			
		||||
  cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
 | 
			
		||||
  cd /opt/snipe-it/
 | 
			
		||||
  export COMPOSER_ALLOW_SUPERUSER=1
 | 
			
		||||
  composer install --no-dev --prefer-source &>/dev/null
 | 
			
		||||
  composer dump-autoload &>/dev/null
 | 
			
		||||
  php artisan migrate --force &>/dev/null
 | 
			
		||||
  php artisan config:clear &>/dev/null
 | 
			
		||||
  php artisan route:clear &>/dev/null
 | 
			
		||||
  php artisan cache:clear &>/dev/null
 | 
			
		||||
  php artisan view:clear &>/dev/null
 | 
			
		||||
  chown -R www-data: /opt/snipe-it
 | 
			
		||||
  chmod -R 755 /opt/snipe-it
 | 
			
		||||
  rm -rf /opt/v${RELEASE}.zip
 | 
			
		||||
  rm -rf /opt/snipe-it-backup
 | 
			
		||||
  msg_ok "Updated ${APP} LXC"
 | 
			
		||||
else
 | 
			
		||||
  msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
			
		||||
fi
 | 
			
		||||
exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
@@ -56,7 +56,7 @@ function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
if [[ ! -d /opt/Sonarr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
if [[ ! -d /var/lib/sonarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
msg_info "Updating $APP v4"
 | 
			
		||||
systemctl stop sonarr.service
 | 
			
		||||
wget -q -O SonarrV4.tar.gz 'https://services.sonarr.tv/v1/download/main/latest?version=4&os=linux&arch=x64'
 | 
			
		||||
 
 | 
			
		||||
@@ -59,6 +59,10 @@ check_container_resources
 | 
			
		||||
if [[ ! -d /opt/Stirling-PDF ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
msg_info "Updating ${APP}"
 | 
			
		||||
systemctl stop stirlingpdf
 | 
			
		||||
if [[ -n $(dpkg -l | grep -w ocrmypdf) ]] && [[ -z $(dpkg -l | grep -w qpdf) ]]; then
 | 
			
		||||
  apt-get remove -y ocrmypdf &>/dev/null
 | 
			
		||||
  apt-get install -y qpdf &>/dev/null
 | 
			
		||||
fi
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
wget -q https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz
 | 
			
		||||
tar -xzf v$RELEASE.tar.gz
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										93
									
								
								ct/the-lounge.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								ct/the-lounge.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: kristocopani
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
clear
 | 
			
		||||
cat <<"EOF"
 | 
			
		||||
  ________               __                               
 | 
			
		||||
 /_  __/ /_  ___        / /   ____  __  ______  ____ ____ 
 | 
			
		||||
  / / / __ \/ _ \______/ /   / __ \/ / / / __ \/ __ `/ _ \
 | 
			
		||||
 / / / / / /  __/_____/ /___/ /_/ / /_/ / / / / /_/ /  __/
 | 
			
		||||
/_/ /_/ /_/\___/     /_____/\____/\__,_/_/ /_/\__, /\___/ 
 | 
			
		||||
                                             /____/       
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="The-Lounge"
 | 
			
		||||
var_disk="4"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="2048"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function default_settings() {
 | 
			
		||||
  CT_TYPE="1"
 | 
			
		||||
  PW=""
 | 
			
		||||
  CT_ID=$NEXTID
 | 
			
		||||
  HN=$NSAPP
 | 
			
		||||
  DISK_SIZE="$var_disk"
 | 
			
		||||
  CORE_COUNT="$var_cpu"
 | 
			
		||||
  RAM_SIZE="$var_ram"
 | 
			
		||||
  BRG="vmbr0"
 | 
			
		||||
  NET="dhcp"
 | 
			
		||||
  GATE=""
 | 
			
		||||
  APT_CACHER=""
 | 
			
		||||
  APT_CACHER_IP=""
 | 
			
		||||
  DISABLEIP6="no"
 | 
			
		||||
  MTU=""
 | 
			
		||||
  SD=""
 | 
			
		||||
  NS=""
 | 
			
		||||
  MAC=""
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  SSH="no"
 | 
			
		||||
  VERB="yes"
 | 
			
		||||
  echo_default
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
if [[ ! -f /usr/lib/systemd/system/thelounge.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/thelounge/thelounge-deb/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 Service"
 | 
			
		||||
  systemctl stop thelounge
 | 
			
		||||
  msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
  apt-get install --only-upgrade nodejs &>/dev/null
 | 
			
		||||
  cd /opt
 | 
			
		||||
  wget -q https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb
 | 
			
		||||
  dpkg -i ./thelounge_${RELEASE}_all.deb
 | 
			
		||||
  msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting Service"
 | 
			
		||||
  systemctl start thelounge
 | 
			
		||||
  msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
  msg_info "Cleaning up"
 | 
			
		||||
  rm -rf "/opt/thelounge_${RELEASE}_all.deb"
 | 
			
		||||
  msg_ok "Cleaned"
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
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 "${APP} Setup should be reachable by going to the following URL.
 | 
			
		||||
         ${BL}http://${IP}:9000${CL} \n"
 | 
			
		||||
@@ -1,28 +1,27 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2024 tteck
 | 
			
		||||
# Author: tteck (tteckster)
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: wimb0
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
clear
 | 
			
		||||
cat <<"EOF"
 | 
			
		||||
   _____                       __           __
 | 
			
		||||
  / ___/____________  ______  / /____  ____/ /
 | 
			
		||||
  \__ \/ ___/ ___/ / / / __ \/ __/ _ \/ __  / 
 | 
			
		||||
 ___/ / /__/ /  / /_/ / /_/ / /_/  __/ /_/ /  
 | 
			
		||||
/____/\___/_/   \__, / .___/\__/\___/\__,_/   
 | 
			
		||||
               /____/_/                       
 | 
			
		||||
 
 | 
			
		||||
   __  __      __                          __
 | 
			
		||||
  / / / /___  / /_  ____  __  ______  ____/ /
 | 
			
		||||
 / / / / __ \/ __ \/ __ \/ / / / __ \/ __  / 
 | 
			
		||||
/ /_/ / / / / /_/ / /_/ / /_/ / / / / /_/ /  
 | 
			
		||||
\____/_/ /_/_.___/\____/\__,_/_/ /_/\__,_/   
 | 
			
		||||
                                             
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="Scrypted"
 | 
			
		||||
var_disk="8"
 | 
			
		||||
var_cpu="2"
 | 
			
		||||
var_ram="2048"
 | 
			
		||||
APP="Unbound"
 | 
			
		||||
var_disk="2"
 | 
			
		||||
var_cpu="1"
 | 
			
		||||
var_ram="512"
 | 
			
		||||
var_os="debian"
 | 
			
		||||
var_version="12"
 | 
			
		||||
variables
 | 
			
		||||
@@ -57,11 +56,11 @@ function update_script() {
 | 
			
		||||
header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
if [[ ! -f /etc/systemd/system/scrypted.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
msg_info "Updating ${APP} LXC"
 | 
			
		||||
if [[ ! -d /etc/unbound ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
msg_info "Updating $APP LXC"
 | 
			
		||||
apt-get update &>/dev/null
 | 
			
		||||
apt-get -y upgrade &>/dev/null
 | 
			
		||||
msg_ok "Updated Successfully"
 | 
			
		||||
msg_ok "Updated $APP LXC"
 | 
			
		||||
exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -70,5 +69,5 @@ build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${APP} should be reachable by going to the following URL.
 | 
			
		||||
         ${BL}https://${IP}:10443${CL} \n"
 | 
			
		||||
echo -e "${APP} should be online.
 | 
			
		||||
         ${BL} Set your DNS server to ${IP}:5335 ${CL} \n"
 | 
			
		||||
@@ -17,10 +17,6 @@ cat <<"EOF"
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
header_info
 | 
			
		||||
if ! grep -q -m1 'avx[^ ]*' /proc/cpuinfo; then
 | 
			
		||||
  echo "AVX instruction set is not supported on this CPU."
 | 
			
		||||
  exit
 | 
			
		||||
fi
 | 
			
		||||
echo -e "Loading..."
 | 
			
		||||
APP="Unifi"
 | 
			
		||||
var_disk="8"
 | 
			
		||||
@@ -62,8 +58,8 @@ check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
if [[ ! -d /usr/lib/unifi ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
msg_info "Updating ${APP}"
 | 
			
		||||
apt-get update --allow-releaseinfo-change
 | 
			
		||||
apt-get install -y unifi
 | 
			
		||||
apt-get update --allow-releaseinfo-change &>/dev/null
 | 
			
		||||
apt-get install -y unifi &>/dev/null
 | 
			
		||||
msg_ok "Updated Successfully"
 | 
			
		||||
exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -67,7 +67,7 @@ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_v
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
  cd /opt
 | 
			
		||||
  rm -rf /opt/*
 | 
			
		||||
  rm -rf /opt/vikunja/vikunja
 | 
			
		||||
  wget -q "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb"
 | 
			
		||||
  DEBIAN_FRONTEND=noninteractive dpkg -i vikunja-$RELEASE-amd64.deb &>/dev/null
 | 
			
		||||
  echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								ct/zabbix.sh
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								ct/zabbix.sh
									
									
									
									
									
								
							@@ -57,11 +57,32 @@ header_info
 | 
			
		||||
check_container_storage
 | 
			
		||||
check_container_resources
 | 
			
		||||
if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
			
		||||
msg_info "Stopping ${APP} Services"
 | 
			
		||||
systemctl stop zabbix-server zabbix-agent2
 | 
			
		||||
msg_ok "Stopped ${APP} Services"
 | 
			
		||||
 | 
			
		||||
msg_info "Updating $APP LXC"
 | 
			
		||||
mkdir -p /opt/zabbix-backup/
 | 
			
		||||
cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
 | 
			
		||||
cp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix-backup/
 | 
			
		||||
cp -R /usr/share/zabbix/ /opt/zabbix-backup/
 | 
			
		||||
cp -R /usr/share/zabbix-* /opt/zabbix-backup/
 | 
			
		||||
rm -Rf /etc/apt/sources.list.d/zabbix.list
 | 
			
		||||
cd /tmp
 | 
			
		||||
wget -q https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
dpkg -i zabbix-release_latest+debian12_all.deb &>/dev/null
 | 
			
		||||
apt-get update &>/dev/null
 | 
			
		||||
apt-get -y upgrade &>/dev/null
 | 
			
		||||
systemctl restart zabbix-server
 | 
			
		||||
msg_ok "Updated $APP LXC"
 | 
			
		||||
apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-* &>/dev/null
 | 
			
		||||
 | 
			
		||||
msg_info "Starting ${APP} Services"
 | 
			
		||||
systemctl start zabbix-server zabbix-agent2
 | 
			
		||||
systemctl restart apache2
 | 
			
		||||
msg_ok "Started ${APP} Services"
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning Up"
 | 
			
		||||
rm -rf /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
msg_ok "Updated Successfully"
 | 
			
		||||
exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -56,41 +56,36 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/zwave-js-ui ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  if [[ ! -d /opt/zwave-js-ui ]]; then 
 | 
			
		||||
    msg_error "No ${APP} Installation Found!";
 | 
			
		||||
    exit; 
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  msg_info "Stopping Z-wave JS UI"
 | 
			
		||||
  systemctl stop zwave-js-ui.service
 | 
			
		||||
  msg_ok "Stopped Z-wave JS UI"
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop zwave-js-ui
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating Z-wave JS UI"
 | 
			
		||||
  wget https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip &>/dev/null
 | 
			
		||||
  unzip zwave-js-ui-${RELEASE}-linux.zip &>/dev/null
 | 
			
		||||
  \cp -R zwave-js-ui-linux /opt/zwave-js-ui
 | 
			
		||||
  service_path="/etc/systemd/system/zwave-js-ui.service"
 | 
			
		||||
  echo "[Unit]
 | 
			
		||||
  Description=zwave-js-ui
 | 
			
		||||
  Wants=network-online.target
 | 
			
		||||
  After=network-online.target
 | 
			
		||||
  [Service]
 | 
			
		||||
  User=root
 | 
			
		||||
  WorkingDirectory=/opt/zwave-js-ui
 | 
			
		||||
  ExecStart=/opt/zwave-js-ui/zwave-js-ui-linux
 | 
			
		||||
  [Install]
 | 
			
		||||
  WantedBy=multi-user.target" >$service_path
 | 
			
		||||
  msg_ok "Updated Z-wave JS UI"
 | 
			
		||||
    msg_info "Updating Z-Wave JS UI"
 | 
			
		||||
    rm -rf /opt/zwave-js-ui/*
 | 
			
		||||
    cd /opt/zwave-js-ui
 | 
			
		||||
    wget -q https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip
 | 
			
		||||
    unzip -q zwave-js-ui-${RELEASE}-linux.zip
 | 
			
		||||
    msg_ok "Updated Z-Wave JS UI"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting Z-wave JS UI"
 | 
			
		||||
  systemctl enable --now zwave-js-ui.service
 | 
			
		||||
  msg_ok "Started Z-wave JS UI"
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start zwave-js-ui
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
  msg_info "Cleanup"
 | 
			
		||||
  rm -rf zwave-js-ui-${RELEASE}-linux.zip zwave-js-ui-linux store
 | 
			
		||||
  msg_ok "Cleaned"
 | 
			
		||||
  msg_ok "Updated Successfully!\n"
 | 
			
		||||
  exit
 | 
			
		||||
    msg_info "Cleanup"
 | 
			
		||||
    rm -rf /opt/zwave-js-ui/zwave-js-ui-${RELEASE}-linux.zip
 | 
			
		||||
    rm -rf /opt/zwave-js-ui/store
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully!\n"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required.  ${APP} is already at ${RELEASE}."
 | 
			
		||||
  fi
 | 
			
		||||
exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2381
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2381
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -13,6 +13,7 @@
 | 
			
		||||
    "build": "next build",
 | 
			
		||||
    "start": "next start",
 | 
			
		||||
    "lint": "next lint",
 | 
			
		||||
    "test": "vitest",
 | 
			
		||||
    "deploy": "next build && touch out/.nojekyll && git add out/ && git commit -m \"Deploy\" && git subtree push --prefix out origin gh-pages",
 | 
			
		||||
    "format:write": "prettier --write \"**/*.{ts,tsx,mdx}\" --cache",
 | 
			
		||||
    "format:check": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache",
 | 
			
		||||
@@ -59,20 +60,26 @@
 | 
			
		||||
    "zod": "^3.23.8"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@testing-library/dom": "^10.4.0",
 | 
			
		||||
    "@testing-library/react": "^16.0.1",
 | 
			
		||||
    "@types/node": "^22",
 | 
			
		||||
    "@types/react": "npm:types-react@19.0.0-rc.1",
 | 
			
		||||
    "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
 | 
			
		||||
    "@types/react": "npm:types-react@19.0.0-rc.1",
 | 
			
		||||
    "@typescript-eslint/eslint-plugin": "^8.8.1",
 | 
			
		||||
    "@typescript-eslint/parser": "^8.8.1",
 | 
			
		||||
    "@vitejs/plugin-react": "^4.3.4",
 | 
			
		||||
    "eslint-config-next": "15.0.2",
 | 
			
		||||
    "postcss": "^8",
 | 
			
		||||
    "eslint": "^9.13.0",
 | 
			
		||||
    "prettier": "^3.2.5",
 | 
			
		||||
    "jsdom": "^25.0.1",
 | 
			
		||||
    "postcss": "^8",
 | 
			
		||||
    "prettier-plugin-tailwindcss": "^0.6.5",
 | 
			
		||||
    "tailwindcss": "^3.4.9",
 | 
			
		||||
    "prettier": "^3.2.5",
 | 
			
		||||
    "tailwindcss-animate": "^1.0.7",
 | 
			
		||||
    "tailwindcss-animated": "^1.1.2",
 | 
			
		||||
    "typescript": "^5"
 | 
			
		||||
    "tailwindcss": "^3.4.9",
 | 
			
		||||
    "typescript": "^5",
 | 
			
		||||
    "vite-tsconfig-paths": "^5.1.3",
 | 
			
		||||
    "vitest": "^2.1.6"
 | 
			
		||||
  },
 | 
			
		||||
  "overrides": {
 | 
			
		||||
    "@types/react": "npm:types-react@19.0.0-rc.1",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								frontend/src/__tests__/app/page.test.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								frontend/src/__tests__/app/page.test.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
import { screen } from "@testing-library/dom";
 | 
			
		||||
import { render } from "@testing-library/react";
 | 
			
		||||
import { describe, expect, it } from "vitest";
 | 
			
		||||
import Page from "@/app/page";
 | 
			
		||||
 | 
			
		||||
describe("Page", () => {
 | 
			
		||||
  it("should show button to view scripts", () => {
 | 
			
		||||
    render(<Page />);
 | 
			
		||||
    expect(screen.getByRole("button", { name: "View Scripts" })).toBeDefined();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										53
									
								
								frontend/src/__tests__/public/validate-json.test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								frontend/src/__tests__/public/validate-json.test.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
import { describe, it, assert, beforeAll } from "vitest";
 | 
			
		||||
import { promises as fs } from "fs";
 | 
			
		||||
import path from "path";
 | 
			
		||||
import { ScriptSchema, type Script } from "@/app/json-editor/_schemas/schemas";
 | 
			
		||||
import { Metadata } from "@/lib/types";
 | 
			
		||||
 | 
			
		||||
const jsonDir = "public/json";
 | 
			
		||||
const metadataFileName = "metadata.json";
 | 
			
		||||
const encoding = "utf-8";
 | 
			
		||||
 | 
			
		||||
const fileNames = (await fs.readdir(jsonDir))
 | 
			
		||||
  .filter((fileName) => fileName !== metadataFileName)
 | 
			
		||||
 | 
			
		||||
describe.each(fileNames)("%s", async (fileName) => {
 | 
			
		||||
  let script: Script;
 | 
			
		||||
 | 
			
		||||
  beforeAll(async () => {
 | 
			
		||||
    const filePath =  path.resolve(jsonDir, fileName);
 | 
			
		||||
    const fileContent = await fs.readFile(filePath, encoding)
 | 
			
		||||
    script = JSON.parse(fileContent);
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it("should have valid json according to script schema", () => {
 | 
			
		||||
    ScriptSchema.parse(script);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it("should have a corresponding script file", () => {
 | 
			
		||||
    script.install_methods.forEach((method) => {
 | 
			
		||||
      const scriptPath = path.resolve("..", method.script)
 | 
			
		||||
      assert(fs.stat(scriptPath), `Script file not found: ${scriptPath}`)
 | 
			
		||||
    })
 | 
			
		||||
  });
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
describe(`${metadataFileName}`, async () => {
 | 
			
		||||
  let metadata: Metadata;
 | 
			
		||||
 | 
			
		||||
  beforeAll(async () => {
 | 
			
		||||
    const filePath =  path.resolve(jsonDir, metadataFileName);
 | 
			
		||||
    const fileContent = await fs.readFile(filePath, encoding)
 | 
			
		||||
    metadata = JSON.parse(fileContent);
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  it("should have valid json according to metadata schema", () => {
 | 
			
		||||
    // TODO: create zod schema for metadata. Move zod schemas to /lib/types.ts
 | 
			
		||||
    assert(metadata.categories.length > 0);
 | 
			
		||||
    metadata.categories.forEach((category) => {
 | 
			
		||||
        assert.isString(category.name)
 | 
			
		||||
        assert.isNumber(category.id)
 | 
			
		||||
        assert.isNumber(category.sort_order)
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										4
									
								
								frontend/src/__tests__/setupTests.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								frontend/src/__tests__/setupTests.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
import { vi } from "vitest";
 | 
			
		||||
 | 
			
		||||
// Mock canvas getContext
 | 
			
		||||
HTMLCanvasElement.prototype.getContext = vi.fn();
 | 
			
		||||
@@ -9,11 +9,9 @@ import {
 | 
			
		||||
import { Category } from "@/lib/types";
 | 
			
		||||
import { cn } from "@/lib/utils";
 | 
			
		||||
import { z } from "zod";
 | 
			
		||||
import { ScriptSchema } from "../_schemas/schemas";
 | 
			
		||||
import { type Script } from "../_schemas/schemas";
 | 
			
		||||
import { memo } from "react";
 | 
			
		||||
 | 
			
		||||
type Script = z.infer<typeof ScriptSchema>;
 | 
			
		||||
 | 
			
		||||
type CategoryProps = {
 | 
			
		||||
  script: Script;
 | 
			
		||||
  setScript: (script: Script) => void;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,11 +9,9 @@ import {
 | 
			
		||||
} from "@/components/ui/select";
 | 
			
		||||
import { OperatingSystems } from "@/config/siteConfig";
 | 
			
		||||
import { PlusCircle, Trash2 } from "lucide-react";
 | 
			
		||||
import { memo, useCallback, useEffect, useRef } from "react";
 | 
			
		||||
import { memo, useCallback, useRef } from "react";
 | 
			
		||||
import { z } from "zod";
 | 
			
		||||
import { InstallMethodSchema, ScriptSchema } from "../_schemas/schemas";
 | 
			
		||||
 | 
			
		||||
type Script = z.infer<typeof ScriptSchema>;
 | 
			
		||||
import { InstallMethodSchema, ScriptSchema, type Script } from "../_schemas/schemas";
 | 
			
		||||
 | 
			
		||||
type InstallMethodProps = {
 | 
			
		||||
  script: Script;
 | 
			
		||||
@@ -194,11 +192,11 @@ function InstallMethod({
 | 
			
		||||
              </SelectContent>
 | 
			
		||||
            </Select>
 | 
			
		||||
            <Select
 | 
			
		||||
              value={method.resources.version ? String(method.resources.version) : undefined}
 | 
			
		||||
              value={method.resources.version || undefined}
 | 
			
		||||
              onValueChange={(value) =>
 | 
			
		||||
                updateInstallMethod(index, "resources", {
 | 
			
		||||
                  ...method.resources,
 | 
			
		||||
                  version: value ? Number(value) : null,
 | 
			
		||||
                  version: value || null,
 | 
			
		||||
                })
 | 
			
		||||
              }
 | 
			
		||||
              disabled={method.type === "alpine"}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,10 +11,8 @@ import { AlertColors } from "@/config/siteConfig";
 | 
			
		||||
import { cn } from "@/lib/utils";
 | 
			
		||||
import { PlusCircle, Trash2 } from "lucide-react";
 | 
			
		||||
import { z } from "zod";
 | 
			
		||||
import { ScriptSchema } from "../_schemas/schemas";
 | 
			
		||||
import { memo, useCallback } from "react";
 | 
			
		||||
 | 
			
		||||
type Script = z.infer<typeof ScriptSchema>;
 | 
			
		||||
import { ScriptSchema, type Script } from "../_schemas/schemas";
 | 
			
		||||
import { memo, useCallback, useRef } from "react";
 | 
			
		||||
 | 
			
		||||
type NoteProps = {
 | 
			
		||||
  script: Script;
 | 
			
		||||
@@ -29,6 +27,8 @@ function Note({
 | 
			
		||||
  setIsValid,
 | 
			
		||||
  setZodErrors,
 | 
			
		||||
}: NoteProps) {
 | 
			
		||||
  const inputRefs = useRef<(HTMLInputElement | null)[]>([]);
 | 
			
		||||
 | 
			
		||||
  const addNote = useCallback(() => {
 | 
			
		||||
    setScript({
 | 
			
		||||
      ...script,
 | 
			
		||||
@@ -51,6 +51,12 @@ function Note({
 | 
			
		||||
    setIsValid(result.success);
 | 
			
		||||
    setZodErrors(result.success ? null : result.error);
 | 
			
		||||
    setScript(updated);
 | 
			
		||||
    // Restore focus after state update
 | 
			
		||||
    if (key === "text") {
 | 
			
		||||
      setTimeout(() => {
 | 
			
		||||
        inputRefs.current[index]?.focus();
 | 
			
		||||
      }, 0);
 | 
			
		||||
    }
 | 
			
		||||
  }, [script, setScript, setIsValid, setZodErrors]);
 | 
			
		||||
 | 
			
		||||
  const removeNote = useCallback((index: number) => {
 | 
			
		||||
@@ -60,46 +66,51 @@ function Note({
 | 
			
		||||
    });
 | 
			
		||||
  }, [script, setScript]);
 | 
			
		||||
 | 
			
		||||
  const NoteItem = memo(({ note, index }: { note: Script["notes"][number], index: number }) => (
 | 
			
		||||
    <div className="space-y-2 border p-4 rounded">
 | 
			
		||||
      <Input
 | 
			
		||||
        placeholder="Note Text"
 | 
			
		||||
        value={note.text}
 | 
			
		||||
        onChange={(e) => updateNote(index, "text", e.target.value)}
 | 
			
		||||
      />
 | 
			
		||||
      <Select
 | 
			
		||||
        value={note.type}
 | 
			
		||||
        onValueChange={(value) => updateNote(index, "type", value)}
 | 
			
		||||
      >
 | 
			
		||||
        <SelectTrigger className="flex-1">
 | 
			
		||||
          <SelectValue placeholder="Type" />
 | 
			
		||||
        </SelectTrigger>
 | 
			
		||||
        <SelectContent>
 | 
			
		||||
          {Object.keys(AlertColors).map((type) => (
 | 
			
		||||
            <SelectItem key={type} value={type}>
 | 
			
		||||
              <span className="flex items-center gap-2">
 | 
			
		||||
                {type.charAt(0).toUpperCase() + type.slice(1)}{" "}
 | 
			
		||||
                <div
 | 
			
		||||
                  className={cn(
 | 
			
		||||
                    "size-4 rounded-full border",
 | 
			
		||||
                    AlertColors[type as keyof typeof AlertColors],
 | 
			
		||||
                  )}
 | 
			
		||||
                />
 | 
			
		||||
              </span>
 | 
			
		||||
            </SelectItem>
 | 
			
		||||
          ))}
 | 
			
		||||
        </SelectContent>
 | 
			
		||||
      </Select>
 | 
			
		||||
      <Button
 | 
			
		||||
        size="sm"
 | 
			
		||||
        variant="destructive"
 | 
			
		||||
        type="button"
 | 
			
		||||
        onClick={() => removeNote(index)}
 | 
			
		||||
      >
 | 
			
		||||
        <Trash2 className="mr-2 h-4 w-4" /> Remove Note
 | 
			
		||||
      </Button>
 | 
			
		||||
    </div>
 | 
			
		||||
  ));
 | 
			
		||||
  const NoteItem = memo(
 | 
			
		||||
    ({ note, index }: { note: Script["notes"][number]; index: number }) => (
 | 
			
		||||
      <div className="space-y-2 border p-4 rounded">
 | 
			
		||||
        <Input
 | 
			
		||||
          placeholder="Note Text"
 | 
			
		||||
          value={note.text}
 | 
			
		||||
          onChange={(e) => updateNote(index, "text", e.target.value)}
 | 
			
		||||
          ref={(el) => {
 | 
			
		||||
            inputRefs.current[index] = el;
 | 
			
		||||
          }}
 | 
			
		||||
        />
 | 
			
		||||
        <Select
 | 
			
		||||
          value={note.type}
 | 
			
		||||
          onValueChange={(value) => updateNote(index, "type", value)}
 | 
			
		||||
        >
 | 
			
		||||
          <SelectTrigger className="flex-1">
 | 
			
		||||
            <SelectValue placeholder="Type" />
 | 
			
		||||
          </SelectTrigger>
 | 
			
		||||
          <SelectContent>
 | 
			
		||||
            {Object.keys(AlertColors).map((type) => (
 | 
			
		||||
              <SelectItem key={type} value={type}>
 | 
			
		||||
                <span className="flex items-center gap-2">
 | 
			
		||||
                  {type.charAt(0).toUpperCase() + type.slice(1)}{" "}
 | 
			
		||||
                  <div
 | 
			
		||||
                    className={cn(
 | 
			
		||||
                      "size-4 rounded-full border",
 | 
			
		||||
                      AlertColors[type as keyof typeof AlertColors],
 | 
			
		||||
                    )}
 | 
			
		||||
                  />
 | 
			
		||||
                </span>
 | 
			
		||||
              </SelectItem>
 | 
			
		||||
            ))}
 | 
			
		||||
          </SelectContent>
 | 
			
		||||
        </Select>
 | 
			
		||||
        <Button
 | 
			
		||||
          size="sm"
 | 
			
		||||
          variant="destructive"
 | 
			
		||||
          type="button"
 | 
			
		||||
          onClick={() => removeNote(index)}
 | 
			
		||||
        >
 | 
			
		||||
          <Trash2 className="mr-2 h-4 w-4" /> Remove Note
 | 
			
		||||
        </Button>
 | 
			
		||||
      </div>
 | 
			
		||||
    ),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  NoteItem.displayName = 'NoteItem';
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ export const InstallMethodSchema = z.object({
 | 
			
		||||
    ram: z.number().nullable(),
 | 
			
		||||
    hdd: z.number().nullable(),
 | 
			
		||||
    os: z.string().nullable(),
 | 
			
		||||
    version: z.number().nullable(),
 | 
			
		||||
    version: z.string().nullable(),
 | 
			
		||||
  }),
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@@ -24,8 +24,8 @@ export const ScriptSchema = z.object({
 | 
			
		||||
  slug: z.string().min(1, "Slug is required"),
 | 
			
		||||
  categories: z.array(z.number()),
 | 
			
		||||
  date_created: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format").min(1, "Date is required"),
 | 
			
		||||
  type: z.enum(["vm", "ct", "misc"], {
 | 
			
		||||
    errorMap: () => ({ message: "Type must be either 'vm', 'ct', or 'misc'" })
 | 
			
		||||
  type: z.enum(["vm", "ct", "misc", "turnkey"], {
 | 
			
		||||
    errorMap: () => ({ message: "Type must be either 'vm', 'ct', 'misc' or 'turnkey'" })
 | 
			
		||||
  }),
 | 
			
		||||
  updateable: z.boolean(),
 | 
			
		||||
  privileged: z.boolean(),
 | 
			
		||||
@@ -41,3 +41,5 @@ export const ScriptSchema = z.object({
 | 
			
		||||
  }),
 | 
			
		||||
  notes: z.array(NoteSchema),
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export type Script = z.infer<typeof ScriptSchema>;
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,11 @@ import { Button } from "@/components/ui/button";
 | 
			
		||||
import { Calendar } from "@/components/ui/calendar";
 | 
			
		||||
import { Input } from "@/components/ui/input";
 | 
			
		||||
import { Label } from "@/components/ui/label";
 | 
			
		||||
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
 | 
			
		||||
import {
 | 
			
		||||
  Popover,
 | 
			
		||||
  PopoverContent,
 | 
			
		||||
  PopoverTrigger,
 | 
			
		||||
} from "@/components/ui/popover";
 | 
			
		||||
import {
 | 
			
		||||
  Select,
 | 
			
		||||
  SelectContent,
 | 
			
		||||
@@ -26,9 +30,7 @@ import { z } from "zod";
 | 
			
		||||
import Categories from "./_components/Categories";
 | 
			
		||||
import InstallMethod from "./_components/InstallMethod";
 | 
			
		||||
import Note from "./_components/Note";
 | 
			
		||||
import { ScriptSchema } from "./_schemas/schemas";
 | 
			
		||||
 | 
			
		||||
type Script = z.infer<typeof ScriptSchema>;
 | 
			
		||||
import { ScriptSchema, type Script } from "./_schemas/schemas";
 | 
			
		||||
 | 
			
		||||
const initialScript: Script = {
 | 
			
		||||
  name: "",
 | 
			
		||||
@@ -64,25 +66,29 @@ export default function JSONGenerator() {
 | 
			
		||||
      .catch((error) => console.error("Error fetching categories:", error));
 | 
			
		||||
  }, []);
 | 
			
		||||
 | 
			
		||||
  const updateScript = useCallback((key: keyof Script, value: Script[keyof Script]) => {
 | 
			
		||||
    setScript((prev) => {
 | 
			
		||||
      const updated = { ...prev, [key]: value };
 | 
			
		||||
  const updateScript = useCallback(
 | 
			
		||||
    (key: keyof Script, value: Script[keyof Script]) => {
 | 
			
		||||
      setScript((prev) => {
 | 
			
		||||
        const updated = { ...prev, [key]: value };
 | 
			
		||||
 | 
			
		||||
      if (key === "type" || key === "slug") {
 | 
			
		||||
        updated.install_methods = updated.install_methods.map((method) => ({
 | 
			
		||||
          ...method,
 | 
			
		||||
          script: method.type === "alpine"
 | 
			
		||||
            ? `/${updated.type}/alpine-${updated.slug}.sh`
 | 
			
		||||
            : `/${updated.type}/${updated.slug}.sh`,
 | 
			
		||||
        }));
 | 
			
		||||
      }
 | 
			
		||||
        if (key === "type" || key === "slug") {
 | 
			
		||||
          updated.install_methods = updated.install_methods.map((method) => ({
 | 
			
		||||
            ...method,
 | 
			
		||||
            script:
 | 
			
		||||
              method.type === "alpine"
 | 
			
		||||
                ? `/${updated.type}/alpine-${updated.slug}.sh`
 | 
			
		||||
                : `/${updated.type}/${updated.slug}.sh`,
 | 
			
		||||
          }));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
      const result = ScriptSchema.safeParse(updated);
 | 
			
		||||
      setIsValid(result.success);
 | 
			
		||||
      setZodErrors(result.success ? null : result.error);
 | 
			
		||||
      return updated;
 | 
			
		||||
    });
 | 
			
		||||
  }, []);
 | 
			
		||||
        const result = ScriptSchema.safeParse(updated);
 | 
			
		||||
        setIsValid(result.success);
 | 
			
		||||
        setZodErrors(result.success ? null : result.error);
 | 
			
		||||
        return updated;
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    [],
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  const handleCopy = useCallback(() => {
 | 
			
		||||
    navigator.clipboard.writeText(JSON.stringify(script, null, 2));
 | 
			
		||||
@@ -91,37 +97,43 @@ export default function JSONGenerator() {
 | 
			
		||||
    toast.success("Copied metadata to clipboard");
 | 
			
		||||
  }, [script]);
 | 
			
		||||
 | 
			
		||||
  const handleDateSelect = useCallback((date: Date | undefined) => {
 | 
			
		||||
    updateScript(
 | 
			
		||||
      "date_created",
 | 
			
		||||
      format(date || new Date(), "yyyy-MM-dd")
 | 
			
		||||
    );
 | 
			
		||||
  }, [updateScript]);
 | 
			
		||||
 | 
			
		||||
  const formattedDate = useMemo(() => 
 | 
			
		||||
    script.date_created ? format(script.date_created, "PPP") : undefined,
 | 
			
		||||
    [script.date_created]
 | 
			
		||||
  const handleDateSelect = useCallback(
 | 
			
		||||
    (date: Date | undefined) => {
 | 
			
		||||
      updateScript("date_created", format(date || new Date(), "yyyy-MM-dd"));
 | 
			
		||||
    },
 | 
			
		||||
    [updateScript],
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  const validationAlert = useMemo(() => (
 | 
			
		||||
    <Alert className={cn("text-black", isValid ? "bg-green-100" : "bg-red-100")}>
 | 
			
		||||
      <AlertTitle>{isValid ? "Valid JSON" : "Invalid JSON"}</AlertTitle>
 | 
			
		||||
      <AlertDescription>
 | 
			
		||||
        {isValid
 | 
			
		||||
          ? "The current JSON is valid according to the schema."
 | 
			
		||||
          : "The current JSON does not match the required schema."}
 | 
			
		||||
      </AlertDescription>
 | 
			
		||||
      {zodErrors && (
 | 
			
		||||
        <div className="mt-2 space-y-1">
 | 
			
		||||
          {zodErrors.errors.map((error, index) => (
 | 
			
		||||
            <AlertDescription key={index} className="p-1 text-red-500">
 | 
			
		||||
              {error.path.join(".")} - {error.message}
 | 
			
		||||
            </AlertDescription>
 | 
			
		||||
          ))}
 | 
			
		||||
        </div>
 | 
			
		||||
      )}
 | 
			
		||||
    </Alert>
 | 
			
		||||
  ), [isValid, zodErrors]);
 | 
			
		||||
  const formattedDate = useMemo(
 | 
			
		||||
    () =>
 | 
			
		||||
      script.date_created ? format(script.date_created, "PPP") : undefined,
 | 
			
		||||
    [script.date_created],
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  const validationAlert = useMemo(
 | 
			
		||||
    () => (
 | 
			
		||||
      <Alert
 | 
			
		||||
        className={cn("text-black", isValid ? "bg-green-100" : "bg-red-100")}
 | 
			
		||||
      >
 | 
			
		||||
        <AlertTitle>{isValid ? "Valid JSON" : "Invalid JSON"}</AlertTitle>
 | 
			
		||||
        <AlertDescription>
 | 
			
		||||
          {isValid
 | 
			
		||||
            ? "The current JSON is valid according to the schema."
 | 
			
		||||
            : "The current JSON does not match the required schema."}
 | 
			
		||||
        </AlertDescription>
 | 
			
		||||
        {zodErrors && (
 | 
			
		||||
          <div className="mt-2 space-y-1">
 | 
			
		||||
            {zodErrors.errors.map((error, index) => (
 | 
			
		||||
              <AlertDescription key={index} className="p-1 text-red-500">
 | 
			
		||||
                {error.path.join(".")} - {error.message}
 | 
			
		||||
              </AlertDescription>
 | 
			
		||||
            ))}
 | 
			
		||||
          </div>
 | 
			
		||||
        )}
 | 
			
		||||
      </Alert>
 | 
			
		||||
    ),
 | 
			
		||||
    [isValid, zodErrors],
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="flex h-screen mt-20">
 | 
			
		||||
@@ -222,14 +234,18 @@ export default function JSONGenerator() {
 | 
			
		||||
            <div className="flex items-center space-x-2">
 | 
			
		||||
              <Switch
 | 
			
		||||
                checked={script.updateable}
 | 
			
		||||
                onCheckedChange={(checked) => updateScript("updateable", checked)}
 | 
			
		||||
                onCheckedChange={(checked) =>
 | 
			
		||||
                  updateScript("updateable", checked)
 | 
			
		||||
                }
 | 
			
		||||
              />
 | 
			
		||||
              <label>Updateable</label>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div className="flex items-center space-x-2">
 | 
			
		||||
              <Switch
 | 
			
		||||
                checked={script.privileged}
 | 
			
		||||
                onCheckedChange={(checked) => updateScript("privileged", checked)}
 | 
			
		||||
                onCheckedChange={(checked) =>
 | 
			
		||||
                  updateScript("privileged", checked)
 | 
			
		||||
                }
 | 
			
		||||
              />
 | 
			
		||||
              <label>Privileged</label>
 | 
			
		||||
            </div>
 | 
			
		||||
@@ -238,7 +254,12 @@ export default function JSONGenerator() {
 | 
			
		||||
            placeholder="Interface Port"
 | 
			
		||||
            type="number"
 | 
			
		||||
            value={script.interface_port || ""}
 | 
			
		||||
            onChange={(e) => updateScript("interface_port", e.target.value ? Number(e.target.value) : null)}
 | 
			
		||||
            onChange={(e) =>
 | 
			
		||||
              updateScript(
 | 
			
		||||
                "interface_port",
 | 
			
		||||
                e.target.value ? Number(e.target.value) : null,
 | 
			
		||||
              )
 | 
			
		||||
            }
 | 
			
		||||
          />
 | 
			
		||||
          <div className="flex gap-2">
 | 
			
		||||
            <Input
 | 
			
		||||
@@ -249,7 +270,9 @@ export default function JSONGenerator() {
 | 
			
		||||
            <Input
 | 
			
		||||
              placeholder="Documentation URL"
 | 
			
		||||
              value={script.documentation || ""}
 | 
			
		||||
              onChange={(e) => updateScript("documentation", e.target.value || null)}
 | 
			
		||||
              onChange={(e) =>
 | 
			
		||||
                updateScript("documentation", e.target.value || null)
 | 
			
		||||
              }
 | 
			
		||||
            />
 | 
			
		||||
          </div>
 | 
			
		||||
          <InstallMethod
 | 
			
		||||
@@ -262,18 +285,22 @@ export default function JSONGenerator() {
 | 
			
		||||
          <Input
 | 
			
		||||
            placeholder="Username"
 | 
			
		||||
            value={script.default_credentials.username || ""}
 | 
			
		||||
            onChange={(e) => updateScript("default_credentials", {
 | 
			
		||||
              ...script.default_credentials,
 | 
			
		||||
              username: e.target.value || null,
 | 
			
		||||
            })}
 | 
			
		||||
            onChange={(e) =>
 | 
			
		||||
              updateScript("default_credentials", {
 | 
			
		||||
                ...script.default_credentials,
 | 
			
		||||
                username: e.target.value || null,
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          />
 | 
			
		||||
          <Input
 | 
			
		||||
            placeholder="Password"
 | 
			
		||||
            value={script.default_credentials.password || ""}
 | 
			
		||||
            onChange={(e) => updateScript("default_credentials", {
 | 
			
		||||
              ...script.default_credentials,
 | 
			
		||||
              password: e.target.value || null,
 | 
			
		||||
            })}
 | 
			
		||||
            onChange={(e) =>
 | 
			
		||||
              updateScript("default_credentials", {
 | 
			
		||||
                ...script.default_credentials,
 | 
			
		||||
                password: e.target.value || null,
 | 
			
		||||
              })
 | 
			
		||||
            }
 | 
			
		||||
          />
 | 
			
		||||
          <Note
 | 
			
		||||
            script={script}
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ export default function ScriptAccordion({
 | 
			
		||||
      value={expandedItem}
 | 
			
		||||
      onValueChange={handleAccordionChange}
 | 
			
		||||
      collapsible
 | 
			
		||||
      className="overflow-y-scroll max-h-[calc(100vh-210px)] overflow-x-hidden mt-3 p-2"
 | 
			
		||||
      className="overflow-y-scroll max-h-[calc(100vh-220px)] overflow-x-hidden mt-3 p-2"
 | 
			
		||||
    >
 | 
			
		||||
      {items.map((category) => (
 | 
			
		||||
        <AccordionItem
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ export const navbarLinks = [
 | 
			
		||||
  {
 | 
			
		||||
    href: `https://github.com/community-scripts/${basePath}/blob/main/CHANGELOG.md`,
 | 
			
		||||
    event: "Change Log",
 | 
			
		||||
    icon: <Scroll className="h-4 w-4 hidden sm:block" />,
 | 
			
		||||
    icon: <Scroll className="h-4 w-4" />,
 | 
			
		||||
    text: "Change Log",
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ export type Script = {
 | 
			
		||||
      ram: number | null;
 | 
			
		||||
      hdd: number | null;
 | 
			
		||||
      os: string | null;
 | 
			
		||||
      version: number | null;
 | 
			
		||||
      version: string | null;
 | 
			
		||||
    };
 | 
			
		||||
  }[];
 | 
			
		||||
  default_credentials: {
 | 
			
		||||
 
 | 
			
		||||
@@ -30,24 +30,6 @@
 | 
			
		||||
    --chart-3: 197 37% 24%;
 | 
			
		||||
    --chart-4: 43 74% 66%;
 | 
			
		||||
    --chart-5: 27 87% 67%;
 | 
			
		||||
    --expo-out: linear(
 | 
			
		||||
      0 0%,
 | 
			
		||||
      0.1684 2.66%,
 | 
			
		||||
      0.3165 5.49%,
 | 
			
		||||
      0.446 8.52%,
 | 
			
		||||
      0.5581 11.78%,
 | 
			
		||||
      0.6535 15.29%,
 | 
			
		||||
      0.7341 19.11%,
 | 
			
		||||
      0.8011 23.3%,
 | 
			
		||||
      0.8557 27.93%,
 | 
			
		||||
      0.8962 32.68%,
 | 
			
		||||
      0.9283 38.01%,
 | 
			
		||||
      0.9529 44.08%,
 | 
			
		||||
      0.9711 51.14%,
 | 
			
		||||
      0.9833 59.06%,
 | 
			
		||||
      0.9915 68.74%,
 | 
			
		||||
      1 100%
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::selection {
 | 
			
		||||
@@ -81,42 +63,6 @@
 | 
			
		||||
    --chart-4: 280 65% 60%;
 | 
			
		||||
    --chart-5: 340 75% 55%;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::view-transition-group(root) {
 | 
			
		||||
    animation-duration: 0.7bun s;
 | 
			
		||||
    animation-timing-function: var(--expo-out);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::view-transition-new(root) {
 | 
			
		||||
    animation-name: reveal-light;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ::view-transition-old(root),
 | 
			
		||||
  .dark::view-transition-old(root) {
 | 
			
		||||
    animation: none;
 | 
			
		||||
    z-index: -1;
 | 
			
		||||
  }
 | 
			
		||||
  .dark::view-transition-new(root) {
 | 
			
		||||
    animation-name: reveal-dark;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @keyframes reveal-dark {
 | 
			
		||||
    from {
 | 
			
		||||
      clip-path: polygon(50% -71%, -50% 71%, -50% 71%, 50% -71%);
 | 
			
		||||
    }
 | 
			
		||||
    to {
 | 
			
		||||
      clip-path: polygon(50% -71%, -50% 71%, 50% 171%, 171% 50%);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @keyframes reveal-light {
 | 
			
		||||
    from {
 | 
			
		||||
      clip-path: polygon(171% 50%, 50% 171%, 50% 171%, 171% 50%);
 | 
			
		||||
    }
 | 
			
		||||
    to {
 | 
			
		||||
      clip-path: polygon(171% 50%, 50% 171%, -50% 71%, 50% -71%);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@layer base {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								frontend/vitest.config.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								frontend/vitest.config.mjs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
import { defineConfig } from 'vitest/config'
 | 
			
		||||
import react from '@vitejs/plugin-react'
 | 
			
		||||
import tsconfigPaths from 'vite-tsconfig-paths'
 | 
			
		||||
 
 | 
			
		||||
export default defineConfig({
 | 
			
		||||
  plugins: [tsconfigPaths(), react()],
 | 
			
		||||
  test: {
 | 
			
		||||
    environment: "jsdom",
 | 
			
		||||
    setupFiles: ["src/__tests__/setupTests.ts"]
 | 
			
		||||
  },
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										81
									
								
								install/glance-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								install/glance-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: kristocopani
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
    curl \
 | 
			
		||||
    sudo \
 | 
			
		||||
    mc 
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Glance"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/glanceapp/glance/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
cd /opt
 | 
			
		||||
wget -q https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz
 | 
			
		||||
mkdir -p /opt/glance
 | 
			
		||||
tar -xzf glance-linux-amd64.tar.gz -C /opt/glance
 | 
			
		||||
cat <<EOF >/opt/glance/glance.yml
 | 
			
		||||
pages:
 | 
			
		||||
  - name: Startpage
 | 
			
		||||
    width: slim
 | 
			
		||||
    hide-desktop-navigation: true
 | 
			
		||||
    center-vertically: true
 | 
			
		||||
    columns:
 | 
			
		||||
      - size: full
 | 
			
		||||
        widgets:
 | 
			
		||||
          - type: search
 | 
			
		||||
            autofocus: true
 | 
			
		||||
          - type: bookmarks
 | 
			
		||||
            groups:
 | 
			
		||||
              - title: General
 | 
			
		||||
                links:
 | 
			
		||||
                  - title: Google
 | 
			
		||||
                    url: https://www.google.com/
 | 
			
		||||
                  - title: Helper Scripts
 | 
			
		||||
                    url: https://github.com/community-scripts/ProxmoxVE
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed Glance"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
service_path="/etc/systemd/system/glance.service"
 | 
			
		||||
echo "[Unit]
 | 
			
		||||
Description=Glance Daemon
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/glance
 | 
			
		||||
ExecStart=/opt/glance/glance --config /opt/glance/glance.yml
 | 
			
		||||
TimeoutStopSec=20
 | 
			
		||||
KillMode=process
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target" >$service_path
 | 
			
		||||
 | 
			
		||||
systemctl enable -q --now glance.service
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/glance-linux-amd64.tar.gz
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										180
									
								
								install/hoarder-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										180
									
								
								install/hoarder-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,180 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2024 tteck
 | 
			
		||||
# Author: MickLesk (Canbiz) & vhsdream
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  g++ \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  curl \
 | 
			
		||||
  git \
 | 
			
		||||
  sudo \
 | 
			
		||||
  gnupg \
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  chromium \
 | 
			
		||||
  mc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Additional Tools"
 | 
			
		||||
wget -q https://github.com/Y2Z/monolith/releases/latest/download/monolith-gnu-linux-x86_64 -O /usr/bin/monolith
 | 
			
		||||
chmod +x /usr/bin/monolith
 | 
			
		||||
wget -q https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux -O /usr/bin/yt-dlp
 | 
			
		||||
chmod +x /usr/bin/yt-dlp
 | 
			
		||||
msg_ok "Installed Additional Tools"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Meilisearch"
 | 
			
		||||
cd /tmp
 | 
			
		||||
wget -q https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb
 | 
			
		||||
$STD dpkg -i meilisearch.deb
 | 
			
		||||
wget -q https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -O /etc/meilisearch.toml
 | 
			
		||||
MASTER_KEY=$(openssl rand -base64 12)
 | 
			
		||||
sed -i \
 | 
			
		||||
    -e 's|^env =.*|env = "production"|' \
 | 
			
		||||
    -e "s|^# master_key =.*|master_key = \"$MASTER_KEY\"|" \
 | 
			
		||||
    -e 's|^db_path =.*|db_path = "/var/lib/meilisearch/data"|' \
 | 
			
		||||
    -e 's|^dump_dir =.*|dump_dir = "/var/lib/meilisearch/dumps"|' \
 | 
			
		||||
    -e 's|^snapshot_dir =.*|snapshot_dir = "/var/lib/meilisearch/snapshots"|' \
 | 
			
		||||
    -e 's|^# no_analytics = true|no_analytics = true|' \
 | 
			
		||||
    /etc/meilisearch.toml
 | 
			
		||||
msg_ok "Installed Meilisearch"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
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
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Hoarder"
 | 
			
		||||
cd /opt
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/hoarder-app/hoarder/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
wget -q "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
unzip -q v${RELEASE}.zip
 | 
			
		||||
mv hoarder-${RELEASE} /opt/hoarder
 | 
			
		||||
cd /opt/hoarder
 | 
			
		||||
corepack enable
 | 
			
		||||
export PUPPETEER_SKIP_DOWNLOAD="true"
 | 
			
		||||
export NEXT_TELEMETRY_DISABLED=1
 | 
			
		||||
export CI="true"
 | 
			
		||||
cd /opt/hoarder/apps/web
 | 
			
		||||
$STD pnpm install --frozen-lockfile
 | 
			
		||||
$STD pnpm exec next build --experimental-build-mode compile
 | 
			
		||||
cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
 | 
			
		||||
cd /opt/hoarder/apps/workers
 | 
			
		||||
$STD pnpm install --frozen-lockfile
 | 
			
		||||
 | 
			
		||||
export DATA_DIR=/opt/hoarder_data
 | 
			
		||||
HOARDER_SECRET=$(openssl rand -base64 36 | cut -c1-24)
 | 
			
		||||
cat <<EOF >/opt/hoarder/.env
 | 
			
		||||
SERVER_VERSION=$RELEASE
 | 
			
		||||
NEXTAUTH_SECRET="$HOARDER_SECRET"
 | 
			
		||||
NEXTAUTH_URL="http://localhost:3000"
 | 
			
		||||
DATA_DIR="$DATA_DIR"
 | 
			
		||||
MEILI_ADDR="http://127.0.0.1:7700"
 | 
			
		||||
MEILI_MASTER_KEY="$MASTER_KEY"
 | 
			
		||||
BROWSER_WEB_URL="http://127.0.0.1:9222"
 | 
			
		||||
 | 
			
		||||
# If you're planning to use OpenAI for tagging. Uncomment the following line:
 | 
			
		||||
# OPENAI_API_KEY="<API_KEY>"
 | 
			
		||||
 | 
			
		||||
# If you're planning to use ollama for tagging, uncomment the following lines:
 | 
			
		||||
# OLLAMA_BASE_URL="<OLLAMA_ADDR>"
 | 
			
		||||
 | 
			
		||||
# You can change the models used by uncommenting the following lines, and changing them according to your needs:
 | 
			
		||||
# INFERENCE_TEXT_MODEL="gpt-4o-mini"
 | 
			
		||||
# INFERENCE_IMAGE_MODEL="gpt-4o-mini" 
 | 
			
		||||
EOF
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed Hoarder"
 | 
			
		||||
 | 
			
		||||
msg_info "Running Database Migration"
 | 
			
		||||
mkdir -p ${DATA_DIR}
 | 
			
		||||
cd /opt/hoarder/packages/db
 | 
			
		||||
$STD pnpm migrate
 | 
			
		||||
msg_ok "Database Migration Completed"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Services"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/meilisearch.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Meilisearch
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/hoarder-web.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Hoarder Web
 | 
			
		||||
Wants=network.target hoarder-workers.service
 | 
			
		||||
After=network.target hoarder-workers.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=pnpm start
 | 
			
		||||
WorkingDirectory=/opt/hoarder/apps/web
 | 
			
		||||
EnvironmentFile=/opt/hoarder/.env
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/hoarder-browser.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Hoarder Headless Browser
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
User=root
 | 
			
		||||
ExecStart=/usr/bin/chromium --headless --no-sandbox --disable-gpu --disable-dev-shm-usage --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222 --hide-scrollbars
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/systemd/system/hoarder-workers.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Hoarder Workers
 | 
			
		||||
Wants=network.target hoarder-browser.service meilisearch.service
 | 
			
		||||
After=network.target hoarder-browser.service meilisearch.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=pnpm start:prod
 | 
			
		||||
WorkingDirectory=/opt/hoarder/apps/workers
 | 
			
		||||
EnvironmentFile=/opt/hoarder/.env
 | 
			
		||||
Restart=always
 | 
			
		||||
TimeoutStopSec=5
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
systemctl -q enable --now meilisearch.service hoarder-browser.service hoarder-workers.service hoarder-web.service
 | 
			
		||||
msg_ok "Created Services"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /tmp/meilisearch.deb
 | 
			
		||||
rm -f /opt/v${RELEASE}.zip
 | 
			
		||||
$STD apt-get autoremove -y
 | 
			
		||||
$STD apt-get autoclean -y
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										54
									
								
								install/inspircd-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								install/inspircd-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: kristocopani
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
    curl \
 | 
			
		||||
    mc \
 | 
			
		||||
    sudo 
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
msg_info "Installing InspIRCd"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/inspircd/inspircd/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
cd /opt
 | 
			
		||||
wget -q https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u1_amd64.deb
 | 
			
		||||
$STD apt-get install "./inspircd_${RELEASE}.deb12u1_amd64.deb" -y &>/dev/null
 | 
			
		||||
cat <<EOF >/etc/inspircd/inspircd.conf
 | 
			
		||||
<define name="networkDomain" value="helper-scripts.com">
 | 
			
		||||
<define name="networkName" value="Proxmox VE Helper-Scripts">
 | 
			
		||||
 | 
			
		||||
<server
 | 
			
		||||
        name="irc.&networkDomain;"
 | 
			
		||||
        description="&networkName; IRC server"
 | 
			
		||||
        network="&networkName;">
 | 
			
		||||
<admin
 | 
			
		||||
       name="Admin"
 | 
			
		||||
       description="Supreme Overlord"
 | 
			
		||||
       email="irc@&networkDomain;">
 | 
			
		||||
<bind address="" port="6667" type="clients">
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed InspIRCd"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/inspircd_${RELEASE}.deb12u1_amd64.deb
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -56,9 +56,9 @@ $STD composer install --no-dev --optimize-autoloader --no-interaction
 | 
			
		||||
cp .env.dist .env
 | 
			
		||||
sed -i "/^DATABASE_URL=/c\DATABASE_URL=mysql://$DB_USER:$DB_PASS@127.0.0.1:3306/$DB_NAME?charset=utf8mb4&serverVersion=$MYSQL_VERSION" /opt/kimai/.env
 | 
			
		||||
$STD bin/console kimai:install -n
 | 
			
		||||
chown -R :www-data .
 | 
			
		||||
chmod -R g+r .
 | 
			
		||||
chmod -R g+rw var/
 | 
			
		||||
chown -R :www-data /opt/kimai
 | 
			
		||||
chmod -R g+r /opt/kimai
 | 
			
		||||
chmod -R g+rw /opt/kimai
 | 
			
		||||
sudo chown -R www-data:www-data /opt/kimai
 | 
			
		||||
sudo chmod -R 755 /opt/kimai
 | 
			
		||||
$STD expect <<EOF
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										80
									
								
								install/listmonk-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								install/listmonk-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: bvdberg01
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  postgresql
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL"
 | 
			
		||||
DB_NAME=listmonk
 | 
			
		||||
DB_USER=listmonk
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
 | 
			
		||||
{
 | 
			
		||||
echo "listmonk-Credentials"
 | 
			
		||||
echo -e "listmonk Database User: \e[32m$DB_USER\e[0m"
 | 
			
		||||
echo -e "listmonk Database Password: \e[32m$DB_PASS\e[0m"
 | 
			
		||||
echo -e "listmonk Database Name: \e[32m$DB_NAME\e[0m"
 | 
			
		||||
} >> ~/listmonk.creds
 | 
			
		||||
msg_ok "Set up PostgreSQL"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing listmonk"
 | 
			
		||||
cd /opt
 | 
			
		||||
mkdir /opt/listmonk
 | 
			
		||||
mkdir /opt/listmonk/uploads
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/knadh/listmonk/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
wget -q "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_amd64.tar.gz"
 | 
			
		||||
tar -xzf "listmonk_${RELEASE}_linux_amd64.tar.gz" -C /opt/listmonk
 | 
			
		||||
 | 
			
		||||
$STD /opt/listmonk/listmonk --new-config --config /opt/listmonk/config.toml
 | 
			
		||||
sed -i -e 's/address = "localhost:9000"/address = "0.0.0.0:9000"/' -e 's/^password = ".*"/password = "'"$DB_PASS"'"/' /opt/listmonk/config.toml
 | 
			
		||||
$STD /opt/listmonk/listmonk --install --yes --config /opt/listmonk/config.toml
 | 
			
		||||
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Installed listmonk"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/listmonk.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Listmonk Service
 | 
			
		||||
Wants=network.target
 | 
			
		||||
After=postgresql.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/opt/listmonk/listmonk --config /opt/listmonk/config.toml
 | 
			
		||||
Restart=always
 | 
			
		||||
RestartSec=3
 | 
			
		||||
WorkingDirectory=/opt/listmonk
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now listmonk
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf "/opt/listmonk_${RELEASE}_linux_amd64.tar.gz"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										72
									
								
								install/lubelogger-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								install/lubelogger-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: kristocopani
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
    curl \
 | 
			
		||||
    sudo \
 | 
			
		||||
    wget \
 | 
			
		||||
    mc \
 | 
			
		||||
    zip \
 | 
			
		||||
    jq
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
msg_info "Installing LubeLogger"
 | 
			
		||||
cd /opt
 | 
			
		||||
mkdir -p /opt/lubelogger
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/hargata/lubelog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
RELEASE_TRIMMED=$(echo "${RELEASE}" | tr -d ".")
 | 
			
		||||
cd /opt/lubelogger
 | 
			
		||||
wget -q https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
 | 
			
		||||
unzip -q LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
 | 
			
		||||
chmod 700 /opt/lubelogger/CarCareTracker
 | 
			
		||||
cp /opt/lubelogger/appsettings.json /opt/lubelogger/appsettings_bak.json
 | 
			
		||||
jq '.Kestrel = {"Endpoints": {"Http": {"Url": "http://0.0.0.0:5000"}}}' /opt/lubelogger/appsettings_bak.json > /opt/lubelogger/appsettings.json
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed LubeLogger"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/lubelogger.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=LubeLogger Daemon
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
User=root
 | 
			
		||||
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/lubelogger
 | 
			
		||||
ExecStart=/opt/lubelogger/CarCareTracker
 | 
			
		||||
TimeoutStopSec=20
 | 
			
		||||
KillMode=process
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
systemctl enable --now -q lubelogger.service
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/lubelogger/appsettings_bak.json
 | 
			
		||||
rm -rf /opt/lubelogger/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -21,6 +21,11 @@ $STD apt-get install -y gpg
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Mosquitto MQTT Broker"
 | 
			
		||||
source /etc/os-release
 | 
			
		||||
curl -fsSL http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key >/usr/share/keyrings/mosquitto-repo.gpg.key
 | 
			
		||||
chmod go+r /usr/share/keyrings/mosquitto-repo.gpg.key
 | 
			
		||||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/mosquitto-repo.gpg.key] http://repo.mosquitto.org/debian ${VERSION_CODENAME} main" >/etc/apt/sources.list.d/mosquitto.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get -y install mosquitto
 | 
			
		||||
$STD apt-get -y install mosquitto-clients
 | 
			
		||||
cat <<EOF >/etc/mosquitto/conf.d/default.conf
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										68
									
								
								install/mylar3-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								install/mylar3-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: davalanche
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/mylar3/mylar3
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  jq
 | 
			
		||||
echo "deb http://deb.debian.org/debian bookworm non-free non-free-firmware" > /etc/apt/sources.list.d/non-free.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y unrar
 | 
			
		||||
rm /etc/apt/sources.list.d/non-free.list
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Updating Python3"
 | 
			
		||||
$STD apt-get install -y python3-pip
 | 
			
		||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
			
		||||
$STD pip install -U --no-cache-dir pip
 | 
			
		||||
msg_ok "Updated Python3"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing ${APPLICATION}"
 | 
			
		||||
mkdir -p /opt/mylar3
 | 
			
		||||
mkdir -p /opt/mylar3-data
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name')
 | 
			
		||||
wget -qO- https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz | tar -xz --strip-components=1 -C /opt/mylar3
 | 
			
		||||
$STD pip install --no-cache-dir -r /opt/mylar3/requirements.txt
 | 
			
		||||
echo "${RELEASE}" > /opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Installed ${APPLICATION}"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/mylar3.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Mylar3 Service
 | 
			
		||||
After=network-online.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=/usr/bin/python3 /opt/mylar3/Mylar.py --daemon --nolaunch --datadir=/opt/mylar3-data
 | 
			
		||||
GuessMainPID=no
 | 
			
		||||
Type=forking
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now mylar3.service
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -80,7 +80,7 @@ else
 | 
			
		||||
  cd ./nginx-proxy-manager-${RELEASE}
 | 
			
		||||
  msg_ok "Downloaded Nginx Proxy Manager v${RELEASE}"
 | 
			
		||||
fi
 | 
			
		||||
msg_info "Setting up Enviroment"
 | 
			
		||||
msg_info "Setting up Environment"
 | 
			
		||||
ln -sf /usr/bin/python3 /usr/bin/python
 | 
			
		||||
ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
 | 
			
		||||
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								install/onedev-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								install/onedev-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: kristocopani
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
    curl \
 | 
			
		||||
    mc \
 | 
			
		||||
    sudo \
 | 
			
		||||
    default-jdk \
 | 
			
		||||
    git
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
msg_info "Installing OneDev"
 | 
			
		||||
cd /opt
 | 
			
		||||
wget -q https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz
 | 
			
		||||
tar -xzf onedev-latest.tar.gz
 | 
			
		||||
mv /opt/onedev-latest /opt/onedev
 | 
			
		||||
$STD /opt/onedev/bin/server.sh install
 | 
			
		||||
systemctl start onedev
 | 
			
		||||
RELEASE=$(cat /opt/onedev/release.properties | grep "version" | cut -d'=' -f2)
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed OneDev"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/onedev-latest.tar.gz
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -20,8 +20,8 @@ $STD apt-get install -y mc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Pocketbase"
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/pocketbase/pocketbase/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
wget -q https://github.com/pocketbase/pocketbase/releases/download/v${RELEASE}/pocketbase_${RELEASE}_linux_amd64.zip -O /tmp/pocketbase.zip
 | 
			
		||||
RELEASE="$(curl -s https://api.github.com/repos/pocketbase/pocketbase/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')"
 | 
			
		||||
wget -q "https://github.com/pocketbase/pocketbase/releases/download/v${RELEASE}/pocketbase_${RELEASE}_linux_amd64.zip" -O /tmp/pocketbase.zip
 | 
			
		||||
mkdir -p /opt/pocketbase/{pb_public,pb_migrations,pb_hooks}
 | 
			
		||||
unzip -q -o /tmp/pocketbase.zip -d /opt/pocketbase
 | 
			
		||||
 | 
			
		||||
@@ -49,6 +49,7 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /tmp/pocketbase.zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ cat <<EOF >/etc/postgresql/17/main/pg_hba.conf
 | 
			
		||||
local   all             postgres                                peer
 | 
			
		||||
# TYPE  DATABASE        USER            ADDRESS                 METHOD
 | 
			
		||||
# "local" is for Unix domain socket connections only
 | 
			
		||||
local   all             all                                     peer
 | 
			
		||||
local   all             all                                     md5
 | 
			
		||||
# IPv4 local connections:
 | 
			
		||||
host    all             all             127.0.0.1/32            scram-sha-256
 | 
			
		||||
host    all             all             0.0.0.0/24              md5
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ cat <<EOF >/etc/systemd/system/qbittorrent-nox.service
 | 
			
		||||
Description=qBittorrent client
 | 
			
		||||
After=network.target
 | 
			
		||||
[Service]
 | 
			
		||||
ExecStart=/usr/bin/qbittorrent-nox --webui-port=8090
 | 
			
		||||
ExecStart=/usr/bin/qbittorrent-nox
 | 
			
		||||
Restart=always
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
 
 | 
			
		||||
@@ -1,136 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2024 tteck
 | 
			
		||||
# Author: tteck (tteckster)
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies (Patience)"
 | 
			
		||||
$STD apt-get -y install software-properties-common apt-utils
 | 
			
		||||
$STD apt-get -y update
 | 
			
		||||
$STD apt-get -y upgrade
 | 
			
		||||
$STD apt-get install -y avahi-daemon
 | 
			
		||||
$STD apt-get -y install \
 | 
			
		||||
    build-essential \
 | 
			
		||||
    gcc \
 | 
			
		||||
    gir1.2-gtk-3.0 \
 | 
			
		||||
    libcairo2-dev \
 | 
			
		||||
    libgirepository1.0-dev \
 | 
			
		||||
    libglib2.0-dev \
 | 
			
		||||
    libjpeg-dev \
 | 
			
		||||
    libgif-dev \
 | 
			
		||||
    libopenjp2-7 \
 | 
			
		||||
    libpango1.0-dev \
 | 
			
		||||
    librsvg2-dev \
 | 
			
		||||
    pkg-config \
 | 
			
		||||
    curl \
 | 
			
		||||
    sudo \
 | 
			
		||||
    mc \
 | 
			
		||||
    ca-certificates \
 | 
			
		||||
    gpg
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting Up Hardware Acceleration"
 | 
			
		||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
 | 
			
		||||
if [[ "$CTTYPE" == "0" ]]; then
 | 
			
		||||
  chgrp video /dev/dri
 | 
			
		||||
  chmod 755 /dev/dri
 | 
			
		||||
  chmod 660 /dev/dri/*
 | 
			
		||||
  $STD adduser $(id -u -n) video
 | 
			
		||||
  $STD adduser $(id -u -n) render
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Set Up Hardware Acceleration"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing GStreamer (Patience)"
 | 
			
		||||
$STD apt-get -y install \
 | 
			
		||||
    gstreamer1.0-tools \
 | 
			
		||||
    libgstreamer1.0-dev \
 | 
			
		||||
    libgstreamer-plugins-base1.0-dev \
 | 
			
		||||
    libgstreamer-plugins-bad1.0-dev \
 | 
			
		||||
    gstreamer1.0-plugins-base \
 | 
			
		||||
    gstreamer1.0-plugins-good \
 | 
			
		||||
    gstreamer1.0-plugins-bad \
 | 
			
		||||
    gstreamer1.0-plugins-ugly \
 | 
			
		||||
    gstreamer1.0-libav \
 | 
			
		||||
    gstreamer1.0-alsa
 | 
			
		||||
msg_ok "Installed GStreamer"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
msg_ok "Set up Node.js Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Updating Python3"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  python3 \
 | 
			
		||||
  python3-dev \
 | 
			
		||||
  python3-pip
 | 
			
		||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
			
		||||
msg_ok "Updated Python3"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python3 Dependencies"
 | 
			
		||||
$STD apt-get -y install \
 | 
			
		||||
    python3-gi \
 | 
			
		||||
    python3-gst-1.0 \
 | 
			
		||||
    python3-matplotlib \
 | 
			
		||||
    python3-numpy \
 | 
			
		||||
    python3-opencv \
 | 
			
		||||
    python3-pil \
 | 
			
		||||
    python3-setuptools \
 | 
			
		||||
    python3-skimage \
 | 
			
		||||
    python3-wheel
 | 
			
		||||
$STD python3 -m pip install --upgrade pip
 | 
			
		||||
$STD python3 -m pip install aiofiles debugpy typing_extensions typing
 | 
			
		||||
msg_ok "Installed Python3 Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Scrypted"
 | 
			
		||||
$STD npx -y scrypted@latest install-server
 | 
			
		||||
 | 
			
		||||
if [[ "$CTTYPE" == "0" ]]; then
 | 
			
		||||
  sed -i -e 's/^sgx:x:104:$/render:x:104:root/' -e 's/^render:x:106:root$/sgx:x:106:/' /etc/group
 | 
			
		||||
else
 | 
			
		||||
  sed -i -e 's/^sgx:x:104:$/render:x:104:/' -e 's/^render:x:106:$/sgx:x:106:/' /etc/group
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Installed Scrypted"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/scrypted.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Scrypted service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
User=root
 | 
			
		||||
Group=root
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/usr/bin/npx -y scrypted serve
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=3
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now scrypted.service
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										108
									
								
								install/snipeit-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								install/snipeit-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,108 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: Michel Roegl-Brunner (michelroegl-brunner)
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  composer \
 | 
			
		||||
  git \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc \
 | 
			
		||||
  nginx \
 | 
			
		||||
  php8.2-{bcmath,common,ctype,curl,fileinfo,fpm,gd,iconv,intl,mbstring,mysql,soap,xml,xsl,zip,cli} \
 | 
			
		||||
  mariadb-server 
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up database"
 | 
			
		||||
DB_NAME=snipeit_db
 | 
			
		||||
DB_USER=snipeit
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
mysql -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
 | 
			
		||||
mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
 | 
			
		||||
{
 | 
			
		||||
    echo "SnipeIT-Credentials"
 | 
			
		||||
    echo "SnipeIT Database User: $DB_USER"
 | 
			
		||||
    echo "SnipeIT Database Password: $DB_PASS"
 | 
			
		||||
    echo "SnipeIT Database Name: $DB_NAME"
 | 
			
		||||
} >> ~/snipeit.creds
 | 
			
		||||
msg_ok "Set up database"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Snipe-IT"
 | 
			
		||||
cd /opt
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
unzip -q v${RELEASE}.zip
 | 
			
		||||
mv snipe-it-${RELEASE} /opt/snipe-it
 | 
			
		||||
 | 
			
		||||
cd /opt/snipe-it
 | 
			
		||||
cp .env.example .env
 | 
			
		||||
IPADDRESS=$(hostname -I | awk '{print $1}')
 | 
			
		||||
 | 
			
		||||
sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
 | 
			
		||||
       -e "s|^DB_DATABASE=.*|DB_DATABASE=$DB_NAME|" \
 | 
			
		||||
       -e "s|^DB_USERNAME=.*|DB_USERNAME=$DB_USER|" \
 | 
			
		||||
       -e "s|^DB_PASSWORD=.*|DB_PASSWORD=$DB_PASS|" .env
 | 
			
		||||
 | 
			
		||||
chown -R www-data: /opt/snipe-it
 | 
			
		||||
chmod -R 755 /opt/snipe-it
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
export COMPOSER_ALLOW_SUPERUSER=1
 | 
			
		||||
$STD composer update --no-plugins --no-scripts
 | 
			
		||||
$STD composer install --no-dev --prefer-source --no-plugins --no-scripts
 | 
			
		||||
 | 
			
		||||
$STD php artisan key:generate --force
 | 
			
		||||
msg_ok "Installed SnipeIT"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/nginx/conf.d/snipeit.conf
 | 
			
		||||
server {
 | 
			
		||||
        listen 80;
 | 
			
		||||
        root /opt/snipe-it/public;
 | 
			
		||||
        server_name $IPADDRESS; 
 | 
			
		||||
        index index.php;
 | 
			
		||||
                
 | 
			
		||||
        location / {
 | 
			
		||||
                try_files \$uri \$uri/ /index.php?\$query_string;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        location ~ \.php\$ {
 | 
			
		||||
                include fastcgi.conf;
 | 
			
		||||
                include snippets/fastcgi-php.conf;
 | 
			
		||||
                fastcgi_pass unix:/run/php/php8.2-fpm.sock;
 | 
			
		||||
                fastcgi_split_path_info ^(.+\.php)(/.+)\$;
 | 
			
		||||
                fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
 | 
			
		||||
                include fastcgi_params;
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
systemctl reload nginx
 | 
			
		||||
msg_ok "Configured Service"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/v${RELEASE}.zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -28,7 +28,7 @@ $STD apt-get install -y \
 | 
			
		||||
  make \
 | 
			
		||||
  g++ \
 | 
			
		||||
  unpaper \
 | 
			
		||||
  ocrmypdf \
 | 
			
		||||
  qpdf \
 | 
			
		||||
  poppler-utils
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								install/the-lounge-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								install/the-lounge-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: kristocopani
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  gpg \
 | 
			
		||||
  wget \
 | 
			
		||||
  mc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Node.js Repository"
 | 
			
		||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
msg_ok "Set up Node.js Repository"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Node.js"
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y nodejs
 | 
			
		||||
$STD npm install --global yarn
 | 
			
		||||
msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing The Lounge"
 | 
			
		||||
cd /opt
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/thelounge/thelounge-deb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
wget -q https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb
 | 
			
		||||
$STD dpkg -i ./thelounge_${RELEASE}_all.deb
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed The Lounge"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/thelounge_${RELEASE}_all.deb
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										94
									
								
								install/unbound-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								install/unbound-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,94 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2024 community-scripts ORG
 | 
			
		||||
# Author: wimb0
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  sudo \
 | 
			
		||||
  curl \
 | 
			
		||||
  mc 
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Unbound"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  unbound \
 | 
			
		||||
  unbound-host
 | 
			
		||||
msg_info "Installed Unbound"
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/unbound/unbound.conf.d/unbound.conf
 | 
			
		||||
server:
 | 
			
		||||
  interface: 0.0.0.0
 | 
			
		||||
  port: 5335
 | 
			
		||||
  do-ip6: no
 | 
			
		||||
  hide-identity: yes
 | 
			
		||||
  hide-version: yes
 | 
			
		||||
  harden-referral-path: yes
 | 
			
		||||
  cache-min-ttl: 300
 | 
			
		||||
  cache-max-ttl: 14400
 | 
			
		||||
  serve-expired: yes
 | 
			
		||||
  serve-expired-ttl: 3600
 | 
			
		||||
  prefetch: yes
 | 
			
		||||
  prefetch-key: yes
 | 
			
		||||
  target-fetch-policy: "3 2 1 1 1"
 | 
			
		||||
  unwanted-reply-threshold: 10000000
 | 
			
		||||
  rrset-cache-size: 256m
 | 
			
		||||
  msg-cache-size: 128m
 | 
			
		||||
  so-rcvbuf: 1m
 | 
			
		||||
  private-address: 192.168.0.0/16
 | 
			
		||||
  private-address: 169.254.0.0/16
 | 
			
		||||
  private-address: 172.16.0.0/12
 | 
			
		||||
  private-address: 10.0.0.0/8
 | 
			
		||||
  private-address: fd00::/8
 | 
			
		||||
  private-address: fe80::/10
 | 
			
		||||
  access-control: 192.168.0.0/16 allow
 | 
			
		||||
  access-control: 172.16.0.0/12 allow
 | 
			
		||||
  access-control: 10.0.0.0/8 allow
 | 
			
		||||
  access-control: 127.0.0.1/32 allow
 | 
			
		||||
  chroot: ""
 | 
			
		||||
  logfile: /var/log/unbound.log
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
touch /var/log/unbound.log
 | 
			
		||||
chown unbound:unbound /var/log/unbound.log
 | 
			
		||||
 | 
			
		||||
systemctl restart unbound
 | 
			
		||||
msg_ok "Installed Unbound"
 | 
			
		||||
 | 
			
		||||
msg_ok "Configuring Logrotate"
 | 
			
		||||
cat <<EOF >/etc/logrotate.d/unbound
 | 
			
		||||
/var/log/unbound.log {
 | 
			
		||||
  daily
 | 
			
		||||
  rotate 7
 | 
			
		||||
  missingok
 | 
			
		||||
  notifempty
 | 
			
		||||
  compress
 | 
			
		||||
  delaycompress
 | 
			
		||||
  sharedscripts
 | 
			
		||||
  create 644
 | 
			
		||||
  postrotate
 | 
			
		||||
    /usr/sbin/unbound-control log_reopen
 | 
			
		||||
  endscript
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
systemctl restart logrotate
 | 
			
		||||
msg_ok "Configured Logrotate"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -28,11 +28,25 @@ $STD apt-get update
 | 
			
		||||
$STD apt-get install -y temurin-17-jre
 | 
			
		||||
msg_ok "Installed Eclipse Temurin JRE"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing MongoDB"
 | 
			
		||||
wget -qO- https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-7.0.gpg
 | 
			
		||||
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" >/etc/apt/sources.list.d/mongodb-org-7.0.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y mongodb-org
 | 
			
		||||
if ! grep -q -m1 'avx[^ ]*' /proc/cpuinfo; then
 | 
			
		||||
  msg_ok "No AVX Support Detected"
 | 
			
		||||
  msg_info "Installing MongoDB 4.2"
 | 
			
		||||
  if ! dpkg -l | grep -q "libssl1.1"; then
 | 
			
		||||
    wget -q http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1n-0+deb10u6_amd64.deb
 | 
			
		||||
    $STD dpkg -i libssl1.1_1.1.1n-0+deb10u6_amd64.deb
 | 
			
		||||
    $STD apt-get install -f -y  # Fix any broken dependencies
 | 
			
		||||
  fi
 | 
			
		||||
  wget -qO- https://www.mongodb.org/static/pgp/server-4.2.asc | gpg --dearmor > /usr/share/keyrings/mongodb-server-4.2.gpg
 | 
			
		||||
  echo "deb [signed-by=/usr/share/keyrings/mongodb-server-4.2.gpg] https://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" >/etc/apt/sources.list.d/mongodb-org-4.2.list
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get install -y mongodb-org=4.2.17
 | 
			
		||||
else
 | 
			
		||||
  msg_info "Installing MongoDB 7.0"
 | 
			
		||||
  wget -qO- https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-7.0.gpg
 | 
			
		||||
  echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] http://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" >/etc/apt/sources.list.d/mongodb-org-7.0.list
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get install -y mongodb-org
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Installed MongoDB"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing UniFi Network Server"
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,9 @@ cd /opt
 | 
			
		||||
RELEASE=$(curl -s https://dl.vikunja.io/vikunja/ | grep -oP 'href="/vikunja/\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
 | 
			
		||||
wget -q "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb"
 | 
			
		||||
$STD dpkg -i vikunja-$RELEASE-amd64.deb
 | 
			
		||||
sudo sed -i 's/^  timezone: .*/  timezone: UTC/' /etc/vikunja/config.yml
 | 
			
		||||
sed -i 's|^  timezone: .*|  timezone: UTC|' /etc/vikunja/config.yml
 | 
			
		||||
sed -i 's|"./vikunja.db"|"/etc/vikunja/vikunja.db"|' /etc/vikunja/config.yml
 | 
			
		||||
sed -i 's|./files|/etc/vikunja/files|' /etc/vikunja/config.yml
 | 
			
		||||
systemctl start vikunja.service
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Installed Vikunja"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,17 +14,19 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y curl
 | 
			
		||||
$STD apt-get install -y sudo
 | 
			
		||||
$STD apt-get install -y mc
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Zabbix"
 | 
			
		||||
wget -q https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_7.0-1+debian12_all.deb
 | 
			
		||||
$STD dpkg -i zabbix-release_7.0-1+debian12_all.deb
 | 
			
		||||
rm zabbix-release_7.0-1+debian12_all.deb
 | 
			
		||||
cd /tmp
 | 
			
		||||
wget -q https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
$STD dpkg -i /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts zabbix-agent
 | 
			
		||||
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts 
 | 
			
		||||
$STD apt-get install -y zabbix-agent2 zabbix-agent2-plugin-*
 | 
			
		||||
msg_ok "Installed Zabbix"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL"
 | 
			
		||||
@@ -50,14 +52,15 @@ echo -e "zabbix Database Name: \e[32m$DB_NAME\e[0m" >>~/zabbix.creds
 | 
			
		||||
msg_ok "Set up PostgreSQL"
 | 
			
		||||
 | 
			
		||||
msg_info "Starting Services"
 | 
			
		||||
systemctl restart zabbix-server zabbix-agent apache2
 | 
			
		||||
systemctl enable -q zabbix-server zabbix-agent apache2
 | 
			
		||||
systemctl restart zabbix-server zabbix-agent2 apache2
 | 
			
		||||
systemctl enable -q --now zabbix-server zabbix-agent2 apache2
 | 
			
		||||
msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /tmp/zabbix-release_latest+debian12_all.deb
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,33 +14,43 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y curl
 | 
			
		||||
$STD apt-get install -y sudo
 | 
			
		||||
$STD apt-get install -y mc
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  curl \
 | 
			
		||||
  sudo \
 | 
			
		||||
  mc 
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Z-Wave JS UI"
 | 
			
		||||
mkdir /opt/zwave-js-ui
 | 
			
		||||
mkdir -p /opt/zwave-js-ui
 | 
			
		||||
mkdir -p /opt/zwave_store
 | 
			
		||||
cd /opt/zwave-js-ui
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
$STD wget https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip
 | 
			
		||||
$STD unzip zwave-js-ui-${RELEASE}-linux.zip
 | 
			
		||||
wget -q https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip
 | 
			
		||||
unzip -q zwave-js-ui-${RELEASE}-linux.zip
 | 
			
		||||
cat <<EOF >/opt/.env
 | 
			
		||||
ZWAVEJS_EXTERNAL_CONFIG=/opt/zwave_store/.config-db
 | 
			
		||||
STORE_DIR=/opt/zwave_store
 | 
			
		||||
EOF
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed Z-Wave JS UI"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
service_path="/etc/systemd/system/zwave-js-ui.service"
 | 
			
		||||
echo "[Unit]
 | 
			
		||||
cat <<EOF > /etc/systemd/system/zwave-js-ui.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=zwave-js-ui
 | 
			
		||||
Wants=network-online.target
 | 
			
		||||
After=network-online.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/opt/zwave-js-ui
 | 
			
		||||
ExecStart=/opt/zwave-js-ui/zwave-js-ui-linux
 | 
			
		||||
EnvironmentFile=/opt/.env
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target" >$service_path
 | 
			
		||||
systemctl start zwave-js-ui
 | 
			
		||||
$STD systemctl enable zwave-js-ui
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now zwave-js-ui
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "5006",
 | 
			
		||||
    "interface_port": 5006,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://actualbudget.org/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/actualbudget/actual/master/packages/desktop-client/public/maskable-512x512.png",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/actualbudget.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -33,11 +33,15 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "After the script finishes, reboot the LXC then run `netbird up` in the LXC console",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "text": "Execute within the Proxmox main shell",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "The script only works in Debian/Ubuntu, not in Alpine!",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "3000",
 | 
			
		||||
    "interface_port": 3000,
 | 
			
		||||
    "documentation": "https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started",
 | 
			
		||||
    "website": "https://adguard.com/en/adguard-home/overview.html",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/home-assistant/brands/master/core_integrations/adguard/icon.png",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/adguard.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "512",
 | 
			
		||||
                "hdd": "2",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 2,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "3000",
 | 
			
		||||
    "interface_port": 3000,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://adventurelog.app/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/seanmorley15/AdventureLog/refs/heads/main/documentation/static/img/favicon.png",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/adventurelog.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "7",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 7,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": true,
 | 
			
		||||
    "interface_port": "8090",
 | 
			
		||||
    "interface_port": 8090,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.ispyconnect.com/",
 | 
			
		||||
    "logo": "https://ispycontent.azureedge.net/img/ispy2.png?raw=true",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/agentdvr.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "8",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 8,
 | 
			
		||||
                "os": "ubuntu",
 | 
			
		||||
                "version": "22.04"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/alpine.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "512",
 | 
			
		||||
                "hdd": "0.1",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 0.1,
 | 
			
		||||
                "os": "alpine",
 | 
			
		||||
                "version": "3.19"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/apache-cassandra.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "5984",
 | 
			
		||||
    "interface_port": 5984,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://couchdb.apache.org/",
 | 
			
		||||
    "logo": "https://couchdb.apache.org/image/couch@2x.png",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/apache-couchdb.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "4096",
 | 
			
		||||
                "hdd": "10",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 4096,
 | 
			
		||||
                "hdd": 10,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "3142",
 | 
			
		||||
    "interface_port": 3142,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.unix-ag.uni-kl.de/~bloch/acng/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/linux.svg",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/apt-cacher-ng.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "512",
 | 
			
		||||
                "hdd": "2",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 2,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/archivebox.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "1024",
 | 
			
		||||
                "hdd": "8",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 8,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "6880",
 | 
			
		||||
    "interface_port": 6880,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://aria2.github.io/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/linux.svg",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/aria2.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "1028",
 | 
			
		||||
                "hdd": "8",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 8,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "13378",
 | 
			
		||||
    "interface_port": 13378,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.audiobookshelf.org/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/audiobookshelf.svg",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/audiobookshelf.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "7474",
 | 
			
		||||
    "interface_port": 7474,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://autobrr.com/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/autobrr/autobrr/master/.github/images/logo.png",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/autobrr.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "8",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 8,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "6767",
 | 
			
		||||
    "interface_port": 6767,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.bazarr.media/",
 | 
			
		||||
    "logo": "https://www.bazarr.media/assets/img/logo.png",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/bazarr.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "1024",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "4000",
 | 
			
		||||
    "interface_port": 4000,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://0xerr0r.github.io/blocky/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/0xERR0R/blocky/main/docs/blocky.svg",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/blocky.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "512",
 | 
			
		||||
                "hdd": "2",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 2,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "80",
 | 
			
		||||
    "interface_port": 80,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.bookstackapp.com/",
 | 
			
		||||
    "logo": "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fassets.stickpng.com%2Fimages%2F6308b74c61b3e2a522f0145e.png&f=1&nofb=1&ipt=7ce7870e5081489216eb3294b735356d1c7ede678f97cadba4392bd96e032170&ipo=images",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/bookstack.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "1024",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/bunkerweb.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "1024",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "80",
 | 
			
		||||
    "interface_port": 80,
 | 
			
		||||
    "documentation": "https://caddyserver.com/docs/",
 | 
			
		||||
    "website": "https://caddyserver.com/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/caddy.svg",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/caddy.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "512",
 | 
			
		||||
                "hdd": "2",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 2,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "8083",
 | 
			
		||||
    "interface_port": 8083,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://github.com/janeczku/calibre-web",
 | 
			
		||||
    "logo": "https://sasquatters.com/media/2017/04/Calibre-web-banner-768x512.jpg",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/calibre-web.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "80",
 | 
			
		||||
    "interface_port": 80,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.casaos.io/",
 | 
			
		||||
    "logo": "https://wiki.casaos.io/_assets/casaos-no-text.svg",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/casaos.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "8",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 8,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "5000",
 | 
			
		||||
    "interface_port": 5000,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://changedetection.io/",
 | 
			
		||||
    "logo": "https://github.com/dgtlmoon/changedetection.io/blob/master/changedetectionio/static/images/avatar-256x256.png?raw=true",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/changedetection.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "1024",
 | 
			
		||||
                "hdd": "8",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 8,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": true,
 | 
			
		||||
    "interface_port": "8089",
 | 
			
		||||
    "interface_port": 8089,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://getchannels.com/dvr-server/",
 | 
			
		||||
    "logo": "https://getchannels.com/a/images/channels-logo.svg",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/channels.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "1024",
 | 
			
		||||
                "hdd": "8",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 8,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/cloudflared.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "512",
 | 
			
		||||
                "hdd": "2",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 2,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "9090",
 | 
			
		||||
    "interface_port": 9090,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://cockpit-project.org/",
 | 
			
		||||
    "logo": "https://i0.wp.com/easycode.page/wp-content/uploads/2021/10/cockpit.png?fit=400%2C400&ssl=1",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/cockpit.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "1024",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "misc",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "8680",
 | 
			
		||||
    "interface_port": 8680,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://user-images.githubusercontent.com/674621/71187801-14e60a80-2280-11ea-94c9-e56576f76baf.png",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,32 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Collabora Online",
 | 
			
		||||
    "slug": "collabora-online",
 | 
			
		||||
    "categories": [],
 | 
			
		||||
    "date_created": "2024-09-05",
 | 
			
		||||
    "type": "LXC",
 | 
			
		||||
    "updateable": 1,
 | 
			
		||||
    "privileged": 0,
 | 
			
		||||
    "interface_port": "9980",
 | 
			
		||||
    "documentation": "",
 | 
			
		||||
    "website": "https://www.collaboraonline.com/collabora-online/",
 | 
			
		||||
    "logo": "https://wiki.calculate-linux.org/download_images/original/collabora-logo.png",
 | 
			
		||||
    "description": "Collabora Online is a cloud-based office suite that enables real-time collaboration on documents, spreadsheets, and presentations. It supports multiple formats and integrates with platforms like Nextcloud and SharePoint",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "bash -c \"$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/collabora-online.sh)\"",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "",
 | 
			
		||||
                "ram": "",
 | 
			
		||||
                "hdd": "",
 | 
			
		||||
                "os": "",
 | 
			
		||||
                "version": ""
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": "admin",
 | 
			
		||||
        "password": "admin"
 | 
			
		||||
    },
 | 
			
		||||
    "alerts": []
 | 
			
		||||
}
 | 
			
		||||
@@ -1,32 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Collabora Online",
 | 
			
		||||
    "slug": "collabora-online",
 | 
			
		||||
    "categories": [],
 | 
			
		||||
    "date_created": "2024-09-05",
 | 
			
		||||
    "type": "LXC",
 | 
			
		||||
    "updateable": 1,
 | 
			
		||||
    "privileged": 0,
 | 
			
		||||
    "interface_port": "9980",
 | 
			
		||||
    "documentation": "",
 | 
			
		||||
    "website": "https://www.collaboraonline.com/collabora-online/",
 | 
			
		||||
    "logo": "https://wiki.calculate-linux.org/download_images/original/collabora-logo.png",
 | 
			
		||||
    "description": "Collabora Online is a cloud-based office suite that enables real-time collaboration on documents, spreadsheets, and presentations. It supports multiple formats and integrates with platforms like Nextcloud and SharePoint",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "bash -c \"$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/collabora-online.sh)\"",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "",
 | 
			
		||||
                "ram": "",
 | 
			
		||||
                "hdd": "",
 | 
			
		||||
                "os": "",
 | 
			
		||||
                "version": ""
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": "admin",
 | 
			
		||||
        "password": "admin"
 | 
			
		||||
    },
 | 
			
		||||
    "alerts": []
 | 
			
		||||
}
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "8082",
 | 
			
		||||
    "interface_port": 8082,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.commafeed.com/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/Athou/commafeed/master/commafeed-client/public/app-icon-144.png",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/commafeed.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "3012",
 | 
			
		||||
    "interface_port": 3012,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://github.com/jhuckaby/Cronicle",
 | 
			
		||||
    "logo": "https://github.com/jhuckaby/Cronicle/blob/master/htdocs/images/logo-128.png?raw=true",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/cronicle.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "512",
 | 
			
		||||
                "hdd": "2",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 2,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "8084",
 | 
			
		||||
    "interface_port": 8084,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "logo": "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fimg.informer.com%2Ficons_mac%2Fpng%2F128%2F350%2F350335.png&f=1&nofb=1",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/daemonsync.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "512",
 | 
			
		||||
                "hdd": "8",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 8,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "4000",
 | 
			
		||||
    "interface_port": 4000,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://dashy.to/",
 | 
			
		||||
    "logo": "https://github.com/Lissy93/dashy/raw/master/public/web-icons/dashy-logo.png",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/dashy.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "6",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 6,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "vm/debian-vm.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "2",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 2,
 | 
			
		||||
                "os": null,
 | 
			
		||||
                "version": null
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/debian.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "512",
 | 
			
		||||
                "hdd": "2",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 2,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": true,
 | 
			
		||||
    "interface_port": "80",
 | 
			
		||||
    "interface_port": 80,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.phoscon.de/en/conbee2/software#deconz",
 | 
			
		||||
    "logo": "https://phoscon.de/img/phoscon-logo128x.svg",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/deconz.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "1024",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "8112",
 | 
			
		||||
    "interface_port": 8112,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.deluge-torrent.org/",
 | 
			
		||||
    "logo": "https://dev.deluge-torrent.org/chrome/common/deluge_logo.png",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/deluge.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/docker.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "4",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
@@ -29,9 +29,9 @@
 | 
			
		||||
            "type": "alpine",
 | 
			
		||||
            "script": "ct/alpine-docker.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "1",
 | 
			
		||||
                "ram": "1024",
 | 
			
		||||
                "hdd": "2",
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 2,
 | 
			
		||||
                "os": "alpine",
 | 
			
		||||
                "version": "3.19"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "5001",
 | 
			
		||||
    "interface_port": 5001,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://github.com/louislam/dockge",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/louislam/dockge/master/frontend/public/icon.svg",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/dockge.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "18",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 18,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "8096",
 | 
			
		||||
    "interface_port": 8096,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://emby.media/",
 | 
			
		||||
    "logo": "https://github.com/home-assistant/brands/blob/master/core_integrations/emby/icon.png?raw=true",
 | 
			
		||||
@@ -18,9 +18,9 @@
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/emby.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": "2",
 | 
			
		||||
                "ram": "2048",
 | 
			
		||||
                "hdd": "8",
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 8,
 | 
			
		||||
                "os": "ubuntu",
 | 
			
		||||
                "version": "22.04"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user