mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			131 Commits
		
	
	
		
			2024-11-26
			...
			2024-12-13
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					bcc6342f83 | ||
| 
						 | 
					ca902c50fb | ||
| 
						 | 
					69fe688418 | ||
| 
						 | 
					2d9fcbb635 | ||
| 
						 | 
					0573adc83c | ||
| 
						 | 
					c0cf76f0d5 | ||
| 
						 | 
					77d2df5a0f | ||
| 
						 | 
					82ba836743 | ||
| 
						 | 
					8c1b48453c | ||
| 
						 | 
					ae0684b696 | ||
| 
						 | 
					aab63c8db2 | ||
| 
						 | 
					e7ac005592 | ||
| 
						 | 
					6fb6c58454 | ||
| 
						 | 
					0d63e66379 | ||
| 
						 | 
					cfb755a862 | ||
| 
						 | 
					4a60a29f1d | ||
| 
						 | 
					ec27945abd | ||
| 
						 | 
					d6ead654ad | ||
| 
						 | 
					4f66476de5 | ||
| 
						 | 
					e4354c1d53 | ||
| 
						 | 
					8a6ea7cbac | ||
| 
						 | 
					96d691c862 | ||
| 
						 | 
					82ee63a6db | ||
| 
						 | 
					102669cd11 | ||
| 
						 | 
					ae120c1e23 | ||
| 
						 | 
					c056dd97ea | ||
| 
						 | 
					5b2cbd3e99 | ||
| 
						 | 
					cadae9796e | ||
| 
						 | 
					9eb5cc022a | ||
| 
						 | 
					52898b4edf | ||
| 
						 | 
					e45aba86bd | ||
| 
						 | 
					be4e6503d7 | ||
| 
						 | 
					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 | 
							
								
								
									
										71
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										71
									
								
								.github/ISSUE_TEMPLATE/bug_report.yml
									
									
									
									
										vendored
									
									
								
							@@ -5,44 +5,64 @@ body:
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: |
 | 
			
		||||
        **IMPORTANT:** Failure to comply with the following guidelines may result in immediate closure.
 | 
			
		||||
        - Prior to submitting, kindly search the closed issues to check if the problem you are reporting has already been addressed and resolved. If you come across a closed issue that pertains to your problem, please leave a comment on that issue instead of creating a new one.
 | 
			
		||||
        - If the default Linux distribution is not adhered to, script support will be discontinued.
 | 
			
		||||
        - When encountering the error message `[ERROR] in line 23: exit code *: while executing command "$@" > /dev/null 2>&1`, make sure to run the script in verbose mode to accurately determine the underlying issue.
 | 
			
		||||
        - For suggestions, questions, or feature/script requests, please use the [Discussions section.](https://github.com/community-scripts/ProxmoxVE/discussions)
 | 
			
		||||
        # 🐞 **Script Issue Report**
 | 
			
		||||
        Thank you for taking the time to report an issue! Please provide as much detail as possible to help us address the problem efficiently.  
 | 
			
		||||
 | 
			
		||||
        ## ⚠️ **IMPORTANT**  
 | 
			
		||||
        - 🔍 **Search first:** Before submitting, check if the issue has already been reported or resolved in [closed issues](https://github.com/community-scripts/ProxmoxVE/issues?q=is%3Aissue+is%3Aclosed). If found, comment on that issue instead of creating a new one.  
 | 
			
		||||
        Alternatively, check the **[Discussions](https://github.com/community-scripts/ProxmoxVE/discussions)** under the *"Announcement"* or *"Guide"* categories for relevant information.  
 | 
			
		||||
        - 🛠️ **Supported environments only:** Ensure you are using a default Linux distribution. Custom setups may not be supported.  
 | 
			
		||||
        - 🔎 If you encounter `[ERROR] in line 23: exit code *: while executing command "$@" > /dev/null 2>&1`, rerun the script with verbose mode before submitting the issue.  
 | 
			
		||||
        - 💡 For general questions, feature requests, or suggestions, use the [Discussions section](https://github.com/community-scripts/ProxmoxVE/discussions).  
 | 
			
		||||
 | 
			
		||||
  - type: input
 | 
			
		||||
    id: guidelines
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Please verify that you have read and understood the guidelines.
 | 
			
		||||
      label: ✅ Have you read and understood the above guidelines?
 | 
			
		||||
      placeholder: "yes"
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    id: bug
 | 
			
		||||
  - type: input
 | 
			
		||||
    id: script_name
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: A clear and concise description of the issue.
 | 
			
		||||
      label: 📜 What is the name of the script you are using?
 | 
			
		||||
      placeholder: "e.g., NextcloudPi, Zigbee2MQTT"
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
  - type: input
 | 
			
		||||
    id: script_command
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: 📂 What was the exact command used to execute the script?
 | 
			
		||||
      placeholder: "e.g., bash -c \"$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/zigbee2mqtt.sh)\" or \"update\""
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    id: issue_description
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: 📝 Provide a clear and concise description of the issue.
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: checkboxes
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: What settings are you currently utilizing?
 | 
			
		||||
      label: ⚙️ What settings are you using?
 | 
			
		||||
      options:
 | 
			
		||||
        - label: Default Settings
 | 
			
		||||
        - label: Advanced Settings
 | 
			
		||||
 | 
			
		||||
  - type: markdown
 | 
			
		||||
    attributes:
 | 
			
		||||
      value: "If using Advanced Settings, please try Default Settings before creating an issue."
 | 
			
		||||
      value: "💡 **Tip:** If you are using Advanced Settings, please test with Default Settings before submitting an issue."
 | 
			
		||||
 | 
			
		||||
  - type: dropdown
 | 
			
		||||
    id: distribution
 | 
			
		||||
    id: linux_distribution
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Which Linux distribution are you employing?
 | 
			
		||||
      label: 🖥️ Which Linux distribution are you using?
 | 
			
		||||
      options:
 | 
			
		||||
        - 
 | 
			
		||||
        - Alpine
 | 
			
		||||
@@ -51,21 +71,30 @@ body:
 | 
			
		||||
        - Ubuntu 20.04
 | 
			
		||||
        - Ubuntu 22.04
 | 
			
		||||
        - Ubuntu 24.04
 | 
			
		||||
        - Ubuntu 24.10
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    id: screenshot
 | 
			
		||||
    id: steps_to_reproduce
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: If relevant, including screenshots or a code block can be helpful in clarifying the issue.
 | 
			
		||||
      placeholder: "Code blocks begin and conclude by enclosing the code with three backticks (```) above and below it."
 | 
			
		||||
      label: 🔄 Steps to reproduce the issue.
 | 
			
		||||
      placeholder: "e.g., Step 1: ..., Step 2: ..."
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    id: reproduce
 | 
			
		||||
    id: error_output
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: Please provide detailed steps to reproduce the issue.
 | 
			
		||||
      placeholder: "First do this, then this ..."
 | 
			
		||||
      label: ❌ Paste the full error output (if available).
 | 
			
		||||
      placeholder: "Include any relevant logs or error messages."
 | 
			
		||||
    validations:
 | 
			
		||||
      required: true
 | 
			
		||||
 | 
			
		||||
  - type: textarea
 | 
			
		||||
    id: additional_context
 | 
			
		||||
    attributes:
 | 
			
		||||
      label: 🖼️ Additional context (optional).
 | 
			
		||||
      placeholder: "Include screenshots, code blocks (use triple backticks ```), or any other relevant information."
 | 
			
		||||
    validations:
 | 
			
		||||
      required: false
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										48
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							@@ -1,31 +1,39 @@
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> We are meticulous when it comes to merging code into the main branch, so please understand that we may reject pull requests that do not meet the project's standards. It's never personal. Also, game-related scripts have a lower chance of being merged.
 | 
			
		||||
> **🛠️ Note:**  
 | 
			
		||||
> We are meticulous about merging code into the main branch, so please understand that pull requests not meeting the project's standards may be rejected. It's never personal!  
 | 
			
		||||
> 🎮 **Note for game-related scripts:** These have a lower likelihood of being merged.
 | 
			
		||||
 | 
			
		||||
## Description
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## ✍️ Description
 | 
			
		||||
Provide a summary of the changes made and/or reference the issue being addressed.
 | 
			
		||||
 | 
			
		||||
Fixes # (issue)
 | 
			
		||||
- 
 | 
			
		||||
 | 
			
		||||
## Type of change
 | 
			
		||||
Please check the relevant option(s):
 | 
			
		||||
- - -
 | 
			
		||||
 | 
			
		||||
- [ ] Bug fix (non-breaking change that resolves an issue)
 | 
			
		||||
- [ ] New feature (non-breaking change that adds functionality)
 | 
			
		||||
- [ ] Breaking change (a fix or feature that would cause existing functionality to change unexpectedly)
 | 
			
		||||
- [ ] New script (a fully functional and thoroughly tested script or set of scripts.)
 | 
			
		||||
- Related Issue: # (issue number, if applicable)  
 | 
			
		||||
- Related PR: # (if applicable)  
 | 
			
		||||
- Related Discussion: [Link](https://github.com/community-scripts/ProxmoxVE/discussions)  
 | 
			
		||||
 | 
			
		||||
## Prerequisites
 | 
			
		||||
The following efforts must be made for the PR to be considered. Please check when completed:
 | 
			
		||||
- [ ] Self-review performed (I have reviewed my code, ensuring it follows established patterns and conventions)
 | 
			
		||||
- [ ] Testing performed (I have tested my changes, ensuring everything works as expected)
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## 🛠️ Type of Change
 | 
			
		||||
Please check the relevant options:  
 | 
			
		||||
- [ ] Bug fix (non-breaking change that resolves an issue)  
 | 
			
		||||
- [ ] New feature (non-breaking change that adds functionality)  
 | 
			
		||||
- [ ] Breaking change (fix or feature that would cause existing functionality to change unexpectedly)  
 | 
			
		||||
- [ ] New script (a fully functional and thoroughly tested script or set of scripts)  
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## ✅ Prerequisites
 | 
			
		||||
The following steps must be completed for the pull request to be considered:  
 | 
			
		||||
- [ ] Self-review performed (I have reviewed my code to ensure it follows established patterns and conventions.)  
 | 
			
		||||
- [ ] Testing performed (I have thoroughly tested my changes and verified expected functionality.)  
 | 
			
		||||
- [ ] Documentation updated (I have updated any relevant documentation)
 | 
			
		||||
 | 
			
		||||
## Additional Information (optional)
 | 
			
		||||
Provide any additional context or screenshots about the feature or fix here.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## 📋 Additional Information (optional)
 | 
			
		||||
Provide any extra context or screenshots about the feature or fix here.  
 | 
			
		||||
 | 
			
		||||
## Related Pull Requests / Discussions
 | 
			
		||||
 | 
			
		||||
If there are other pull requests or discussions related to this change, please link them here:
 | 
			
		||||
- Related PR #
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								.github/workflows/changelog-pr.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/workflows/changelog-pr.yml
									
									
									
									
										vendored
									
									
								
							@@ -63,6 +63,7 @@ jobs:
 | 
			
		||||
            const { data: pulls } = await github.rest.pulls.list({
 | 
			
		||||
              owner: context.repo.owner,
 | 
			
		||||
              repo: context.repo.repo,
 | 
			
		||||
              base: "main",
 | 
			
		||||
              state: "closed",
 | 
			
		||||
              sort: "updated",
 | 
			
		||||
              direction: "desc",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
							
								
								
									
										214
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										214
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -16,6 +16,220 @@ 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-13
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix Keycloak Update Function [@MickLesk](https://github.com/MickLesk) ([#762](https://github.com/community-scripts/ProxmoxVE/pull/762))
 | 
			
		||||
- Fix config bug in Alpine Vaultwarden [@havardthom](https://github.com/havardthom) ([#775](https://github.com/community-scripts/ProxmoxVE/pull/775))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Change MISC from red to green [@MickLesk](https://github.com/MickLesk) ([#815](https://github.com/community-scripts/ProxmoxVE/pull/815))
 | 
			
		||||
- Update some JSON Files for Website [@MickLesk](https://github.com/MickLesk) ([#812](https://github.com/community-scripts/ProxmoxVE/pull/812))
 | 
			
		||||
- Update Notes & Documentation for Proxmox Backup Server [@MickLesk](https://github.com/MickLesk) ([#804](https://github.com/community-scripts/ProxmoxVE/pull/804))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- Github: Optimize Issue Template & PR Template [@MickLesk](https://github.com/MickLesk) ([#802](https://github.com/community-scripts/ProxmoxVE/pull/802))
 | 
			
		||||
 | 
			
		||||
## 2024-12-12
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Update jellyfin.sh / Fix infinite loop [@gerpo](https://github.com/gerpo) ([#792](https://github.com/community-scripts/ProxmoxVE/pull/792))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Fix port and website in nextcloudpi.json [@PhoenixEmik](https://github.com/PhoenixEmik) ([#790](https://github.com/community-scripts/ProxmoxVE/pull/790))
 | 
			
		||||
- Add post-install note to mqtt.json [@havardthom](https://github.com/havardthom) ([#783](https://github.com/community-scripts/ProxmoxVE/pull/783))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
- Filter pull requests on main branch in changelog-pr.yml [@havardthom](https://github.com/havardthom) ([#793](https://github.com/community-scripts/ProxmoxVE/pull/793))
 | 
			
		||||
- Fix Z-Wave JS UI Breaking Change in CHANGELOG.md [@havardthom](https://github.com/havardthom) ([#781](https://github.com/community-scripts/ProxmoxVE/pull/781))
 | 
			
		||||
 | 
			
		||||
## 2024-12-09
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Fix PostgreSQL password bug in Umami install [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#750](https://github.com/community-scripts/ProxmoxVE/pull/750))
 | 
			
		||||
 | 
			
		||||
## 2024-12-08
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Use MongoDB 4.4 in Unifi for non-AVX users [@havardthom](https://github.com/havardthom) ([#691](https://github.com/community-scripts/ProxmoxVE/pull/691))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Move homarr to Dashboards section [@CrazyWolf13](https://github.com/CrazyWolf13) ([#740](https://github.com/community-scripts/ProxmoxVE/pull/740))
 | 
			
		||||
 | 
			
		||||
## 2024-12-07
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
- Zigbee2MQTT: Remove dev branch choice until v2.0.0 release [@havardthom](https://github.com/havardthom) ([#702](https://github.com/community-scripts/ProxmoxVE/pull/702))
 | 
			
		||||
- Fix Hoarder build failure by installing Chromium stable [@vhsdream](https://github.com/vhsdream) ([#723](https://github.com/community-scripts/ProxmoxVE/pull/723))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
- Bugfix: Include script name in website search [@havardthom](https://github.com/havardthom) ([#731](https://github.com/community-scripts/ProxmoxVE/pull/731))
 | 
			
		||||
 | 
			
		||||
### ❔ Unlabelled
 | 
			
		||||
 | 
			
		||||
- Fix broken build.func [@havardthom](https://github.com/havardthom) ([#736](https://github.com/community-scripts/ProxmoxVE/pull/736))
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 | 
			
		||||
### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
- Fix Z-Wave JS UI script [@MickLesk](https://github.com/MickLesk) ([#546](https://github.com/community-scripts/ProxmoxVE/pull/546))
 | 
			
		||||
  - [Migration guide](https://github.com/community-scripts/ProxmoxVE/discussions/635)
 | 
			
		||||
 | 
			
		||||
### 🚀 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))
 | 
			
		||||
 | 
			
		||||
### 🌐 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
 | 
			
		||||
 
 | 
			
		||||
@@ -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}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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"
 | 
			
		||||
@@ -61,7 +61,7 @@ if [[ ! -d /usr/lib/jellyfin ]]; then msg_error "No ${APP} Installation Found!";
 | 
			
		||||
msg_info "Updating ${APP} LXC"
 | 
			
		||||
apt-get update &>/dev/null
 | 
			
		||||
apt-get -y upgrade &>/dev/null
 | 
			
		||||
apt-get --with-new-pkgs upgrade jellyfin jellyfin-server &>/dev/null
 | 
			
		||||
apt-get -y --with-new-pkgs upgrade jellyfin jellyfin-server &>/dev/null
 | 
			
		||||
msg_ok "Updated ${APP} LXC"
 | 
			
		||||
exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -65,18 +65,14 @@ apt-get update &>/dev/null
 | 
			
		||||
apt-get -y upgrade &>/dev/null
 | 
			
		||||
 | 
			
		||||
RELEASE=$(curl -s https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
msg_info "Downloading Keycloak v$RELEASE"
 | 
			
		||||
msg_info "Updating Keycloak to v$RELEASE"
 | 
			
		||||
cd /opt
 | 
			
		||||
wget -q https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz
 | 
			
		||||
$STD tar -xvf keycloak-$RELEASE.tar.gz
 | 
			
		||||
 | 
			
		||||
msg_info "Merging configuration files"
 | 
			
		||||
cp -r keycloak/conf keycloak-$RELEASE
 | 
			
		||||
cp -r keycloak/providers keycloak-$RELEASE
 | 
			
		||||
cp -r keycloak/themes keycloak-$RELEASE
 | 
			
		||||
 | 
			
		||||
msg_info "Updating Keycloak"
 | 
			
		||||
mv keycloak keycloak.old
 | 
			
		||||
tar -xzf keycloak-$RELEASE.tar.gz
 | 
			
		||||
cp -r keycloak.old/conf keycloak-$RELEASE
 | 
			
		||||
cp -r keycloak.old/providers keycloak-$RELEASE
 | 
			
		||||
cp -r keycloak.old/themes keycloak-$RELEASE
 | 
			
		||||
mv keycloak-$RELEASE keycloak
 | 
			
		||||
 | 
			
		||||
msg_info "Delete temporary installation files"
 | 
			
		||||
 
 | 
			
		||||
@@ -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}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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"
 | 
			
		||||
							
								
								
									
										73
									
								
								ct/unbound.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								ct/unbound.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
#!/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: 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="Unbound"
 | 
			
		||||
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 [[ ! -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 $APP LXC"
 | 
			
		||||
exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\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
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ export const formattedBadge = (type: string) => {
 | 
			
		||||
        <Badge className="text-yellow-500/75 border-yellow-500/75">LXC</Badge>
 | 
			
		||||
      );
 | 
			
		||||
    case "misc":
 | 
			
		||||
      return <Badge className="text-red-500/75 border-red-500/75">MISC</Badge>;
 | 
			
		||||
      return <Badge className="text-green-500/75 border-green-500/75">MISC</Badge>;
 | 
			
		||||
  }
 | 
			
		||||
  return null;
 | 
			
		||||
};
 | 
			
		||||
@@ -95,7 +95,7 @@ export default function CommandMenu() {
 | 
			
		||||
              {category.scripts.map((script) => (
 | 
			
		||||
                <CommandItem
 | 
			
		||||
                  key={`script:${script.slug}`}
 | 
			
		||||
                  value={script.slug}
 | 
			
		||||
                  value={`${script.slug}-${script.name}`}
 | 
			
		||||
                  onSelect={() => {
 | 
			
		||||
                    setOpen(false);
 | 
			
		||||
                    router.push(`/scripts?id=${script.slug}`);
 | 
			
		||||
 
 | 
			
		||||
@@ -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"]
 | 
			
		||||
  },
 | 
			
		||||
})
 | 
			
		||||
@@ -25,7 +25,9 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Alpine-Vaultwarden"
 | 
			
		||||
$STD apk add vaultwarden
 | 
			
		||||
sed -i -e 's/# export ADMIN_TOKEN=.*/export ADMIN_TOKEN='\'''\''/' -e '/^# export ROCKET_ADDRESS=0\.0\.0\.0/s/^# //' -e 's|export WEB_VAULT_ENABLED=.*|export WEB_VAULT_ENABLED=true|' /etc/conf.d/vaultwarden
 | 
			
		||||
sed -i -e 's|export WEB_VAULT_ENABLED=.*|export WEB_VAULT_ENABLED=true|' /etc/conf.d/vaultwarden
 | 
			
		||||
echo -e "export ADMIN_TOKEN=''" >>/etc/conf.d/vaultwarden
 | 
			
		||||
echo -e "export ROCKET_ADDRESS=0.0.0.0" >>/etc/conf.d/vaultwarden
 | 
			
		||||
msg_ok "Installed Alpine-Vaultwarden"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Web-Vault"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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"
 | 
			
		||||
							
								
								
									
										181
									
								
								install/hoarder-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								install/hoarder-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,181 @@
 | 
			
		||||
#!/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/stable \
 | 
			
		||||
  chromium-common/stable \
 | 
			
		||||
  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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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"
 | 
			
		||||
@@ -37,7 +37,7 @@ msg_ok "Installed Node.js"
 | 
			
		||||
msg_info "Setting up postgresql"
 | 
			
		||||
DB_NAME=umamidb
 | 
			
		||||
DB_USER=umami
 | 
			
		||||
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
 | 
			
		||||
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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,24 @@ $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.4"
 | 
			
		||||
  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
 | 
			
		||||
  fi
 | 
			
		||||
  wget -qO- https://www.mongodb.org/static/pgp/server-4.4.asc | gpg --dearmor > /usr/share/keyrings/mongodb-server-4.4.gpg
 | 
			
		||||
  echo "deb [signed-by=/usr/share/keyrings/mongodb-server-4.4.gpg] https://repo.mongodb.org/apt/debian buster/mongodb-org/4.4 main" >/etc/apt/sources.list.d/mongodb-org-4.4.list
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get install -y mongodb-org
 | 
			
		||||
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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -40,20 +40,8 @@ msg_info "Setting up Zigbee2MQTT Repository"
 | 
			
		||||
$STD git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
 | 
			
		||||
msg_ok "Set up Zigbee2MQTT Repository"
 | 
			
		||||
 | 
			
		||||
read -r -p "Switch to Edge/dev branch? (y/N) " prompt
 | 
			
		||||
if [[ $prompt == "y" ]]; then
 | 
			
		||||
  DEV="y"
 | 
			
		||||
else
 | 
			
		||||
  DEV="n"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Zigbee2MQTT"
 | 
			
		||||
cd /opt/zigbee2mqtt
 | 
			
		||||
if [[ $DEV == "y" ]]; then
 | 
			
		||||
$STD git fetch origin dev:dev
 | 
			
		||||
$STD git checkout dev
 | 
			
		||||
$STD git pull
 | 
			
		||||
fi
 | 
			
		||||
$STD npm ci
 | 
			
		||||
msg_ok "Installed Zigbee2MQTT"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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,8 +8,8 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "5006",
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "interface_port": 5006,
 | 
			
		||||
    "documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/807",
 | 
			
		||||
    "website": "https://actualbudget.org/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/actualbudget/actual/master/packages/desktop-client/public/maskable-512x512.png",
 | 
			
		||||
    "description": "Actual Budget is a super fast and privacy-focused app for managing your finances. At its heart is the well proven and much loved Envelope Budgeting methodology.",
 | 
			
		||||
@@ -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"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -33,11 +33,11 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "After the script finishes, reboot the LXC then run `tailscale up` in the LXC console",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Adguard Home can be updated via the user interface.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
@@ -30,5 +30,10 @@
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "AdventureLog uses an initial local IP, if you change your LXC-IP, you need to change the IP here: `/opt/adventurelog/backend/server/.env` and here: `/opt/adventurelog/frontend/.env`",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Resource and network settings are adjustable post LXC creation.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
@@ -30,5 +30,10 @@
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": "alpine"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "To Update Alpine: `apk update && apk upgrade`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Apache-Cassandra Configuration: `nano /etc/cassandra/cassandra.yaml`",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Show Login Credentials: `cat CouchDB.creds`",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Within the LXC console, run `cat rpc.secret` to display the rpc-secret. Copy this token and paste it into the Aria2 RPC Secret Token box within the AriaNG Settings. Then, click the reload AriaNG button.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -8,8 +8,8 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "13378",
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "interface_port": 13378,
 | 
			
		||||
    "documentation": "https://www.audiobookshelf.org/guides/",
 | 
			
		||||
    "website": "https://www.audiobookshelf.org/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/loganmarchione/homelab-svg-assets/main/assets/audiobookshelf.svg",
 | 
			
		||||
    "description": "Audiobookshelf is a Self-hosted audiobook and podcast server.",
 | 
			
		||||
@@ -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,8 +8,8 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "7474",
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "interface_port": 7474,
 | 
			
		||||
    "documentation": "https://autobrr.com/configuration/autobrr",
 | 
			
		||||
    "website": "https://autobrr.com/",
 | 
			
		||||
    "logo": "https://raw.githubusercontent.com/autobrr/autobrr/master/.github/images/logo.png",
 | 
			
		||||
    "description": "Autobrr is a torrent downloading tool that automates the process of downloading torrents. It is designed to be modern and user-friendly, providing users with a convenient and efficient way to download torrent files. With Autobrr, you can schedule and manage your torrent downloads, and have the ability to automatically download torrents based on certain conditions, such as time of day or availability of seeds. This can save you time and effort, allowing you to focus on other tasks while your torrents are being downloaded in the background.",
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Blocky Configuration Path: `/opt/blocky/config.yml`",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Add Calibre-Web Extras via `update`",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
@@ -30,5 +30,10 @@
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Set a root password if using autologin. This will be the Cockpit password.`sudo passwd root`",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -33,11 +33,11 @@
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Execute within the Proxmox shell",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
    ]
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
@@ -32,12 +32,8 @@
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Primary and Worker Private Keys Must Match.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Configuration Path: `/opt/cronicle/conf/config.json`",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
            "text": "Configuration Path: `/opt/cronicle/conf/config.json` (Primary and Worker Private Keys Must Match)",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -8,9 +8,9 @@
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": "8084",
 | 
			
		||||
    "interface_port": 8084,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": null,
 | 
			
		||||
    "website": "https://daemonsync.me/",
 | 
			
		||||
    "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",
 | 
			
		||||
    "description": "Sync files from app to server, share photos & videos, back up your data and stay secure inside local network.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
@@ -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"
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user