mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			239 Commits
		
	
	
		
			2025-07-11
			...
			2025-07-28
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					c8a107e730 | ||
| 
						 | 
					404b9feef2 | ||
| 
						 | 
					cc6f56fec8 | ||
| 
						 | 
					89ab0f162c | ||
| 
						 | 
					8846915506 | ||
| 
						 | 
					ecc585ebef | ||
| 
						 | 
					72dcd61244 | ||
| 
						 | 
					0955ec4b7f | ||
| 
						 | 
					4fb5ea4ec2 | ||
| 
						 | 
					7051dfeea7 | ||
| 
						 | 
					253c4f4f5b | ||
| 
						 | 
					69e947246a | ||
| 
						 | 
					1f1bc5f12d | ||
| 
						 | 
					15e3958687 | ||
| 
						 | 
					7b82199a36 | ||
| 
						 | 
					01631c305a | ||
| 
						 | 
					bc36a60a49 | ||
| 
						 | 
					d4c59caf12 | ||
| 
						 | 
					bd9c778922 | ||
| 
						 | 
					63d65420a9 | ||
| 
						 | 
					08e451f8de | ||
| 
						 | 
					b602a9d50c | ||
| 
						 | 
					759239bc7c | ||
| 
						 | 
					9c50105e86 | ||
| 
						 | 
					7bf69cbd07 | ||
| 
						 | 
					48c63aaebb | ||
| 
						 | 
					ba70f9867b | ||
| 
						 | 
					c4ab8f92d5 | ||
| 
						 | 
					9fd1a868cb | ||
| 
						 | 
					a5d540648e | ||
| 
						 | 
					3676dff24e | ||
| 
						 | 
					b80ad6655f | ||
| 
						 | 
					1eb0099f2a | ||
| 
						 | 
					759f3f8c79 | ||
| 
						 | 
					33f6d698c7 | ||
| 
						 | 
					7b4bab66af | ||
| 
						 | 
					5322ae69c3 | ||
| 
						 | 
					27426ded94 | ||
| 
						 | 
					1e035c5c85 | ||
| 
						 | 
					0db8e39b40 | ||
| 
						 | 
					2588029d1e | ||
| 
						 | 
					67973ada07 | ||
| 
						 | 
					ac6cf2af7b | ||
| 
						 | 
					8900d12a9d | ||
| 
						 | 
					3e2d9bdd97 | ||
| 
						 | 
					07da06cb75 | ||
| 
						 | 
					e176779d49 | ||
| 
						 | 
					44cee5f303 | ||
| 
						 | 
					22ccd36e55 | ||
| 
						 | 
					c688887f43 | ||
| 
						 | 
					6afa25b06b | ||
| 
						 | 
					02ad46585e | ||
| 
						 | 
					2c57cd815b | ||
| 
						 | 
					72fc8a1880 | ||
| 
						 | 
					72cf24fef4 | ||
| 
						 | 
					a7a6a81596 | ||
| 
						 | 
					470a2593a2 | ||
| 
						 | 
					7efdc02bc4 | ||
| 
						 | 
					c1ebb07416 | ||
| 
						 | 
					9cf83f0ef4 | ||
| 
						 | 
					57a299fe03 | ||
| 
						 | 
					7272c8dd50 | ||
| 
						 | 
					aa9373402e | ||
| 
						 | 
					ff429ded15 | ||
| 
						 | 
					5b6b55d37a | ||
| 
						 | 
					e8e90ce5b5 | ||
| 
						 | 
					1ae40a929b | ||
| 
						 | 
					0484259f39 | ||
| 
						 | 
					cadd0a53bd | ||
| 
						 | 
					c82c185e4e | ||
| 
						 | 
					89b2b21761 | ||
| 
						 | 
					0a722a242f | ||
| 
						 | 
					01be7acf10 | ||
| 
						 | 
					2d66d09de2 | ||
| 
						 | 
					67069cfb21 | ||
| 
						 | 
					e78c590772 | ||
| 
						 | 
					d956763642 | ||
| 
						 | 
					af4aedf15a | ||
| 
						 | 
					e25f3dce52 | ||
| 
						 | 
					eda1b1aea8 | ||
| 
						 | 
					16e2d2206c | ||
| 
						 | 
					33a03f4b0e | ||
| 
						 | 
					5867ef3288 | ||
| 
						 | 
					8ef59b590a | ||
| 
						 | 
					72d6fb40dc | ||
| 
						 | 
					7e9d786202 | ||
| 
						 | 
					ed934a21ff | ||
| 
						 | 
					c9015cca20 | ||
| 
						 | 
					b52e958623 | ||
| 
						 | 
					1f51e96cb1 | ||
| 
						 | 
					de1a93bf6d | ||
| 
						 | 
					8bfb78e001 | ||
| 
						 | 
					4fa4ed35cc | ||
| 
						 | 
					4a050f3723 | ||
| 
						 | 
					9304835775 | ||
| 
						 | 
					a2fa104176 | ||
| 
						 | 
					3c0888abdd | ||
| 
						 | 
					d6af60f0c0 | ||
| 
						 | 
					0a83090ad2 | ||
| 
						 | 
					035419b4b9 | ||
| 
						 | 
					d19130d8f1 | ||
| 
						 | 
					b36f982fc2 | ||
| 
						 | 
					d67fa6cf38 | ||
| 
						 | 
					4201ab58ab | ||
| 
						 | 
					0f3b95b3ff | ||
| 
						 | 
					feea82e0ba | ||
| 
						 | 
					0e0c954f0c | ||
| 
						 | 
					6b74f6247f | ||
| 
						 | 
					4159ba3970 | ||
| 
						 | 
					a53daa3559 | ||
| 
						 | 
					4b3233d6a8 | ||
| 
						 | 
					ff51b1e5dc | ||
| 
						 | 
					1aab127bdf | ||
| 
						 | 
					baf7dff759 | ||
| 
						 | 
					b4ec04a54f | ||
| 
						 | 
					2ee8269684 | ||
| 
						 | 
					84860a9893 | ||
| 
						 | 
					ebb7da43c1 | ||
| 
						 | 
					44c584dced | ||
| 
						 | 
					2bede5256f | ||
| 
						 | 
					2848cf6d6b | ||
| 
						 | 
					bce076161e | ||
| 
						 | 
					040a15aa3e | ||
| 
						 | 
					5c0cffce6f | ||
| 
						 | 
					d552fb86c1 | ||
| 
						 | 
					42af89dd2d | ||
| 
						 | 
					003fc3c080 | ||
| 
						 | 
					a638dc8672 | ||
| 
						 | 
					d7668531e7 | ||
| 
						 | 
					30ca65e1d5 | ||
| 
						 | 
					ae84b7d281 | ||
| 
						 | 
					202eed7c13 | ||
| 
						 | 
					e194a36301 | ||
| 
						 | 
					7b93eed34a | ||
| 
						 | 
					5a3855566b | ||
| 
						 | 
					85595871df | ||
| 
						 | 
					901837b4ae | ||
| 
						 | 
					9f1273349f | ||
| 
						 | 
					e6756385ed | ||
| 
						 | 
					74be3e70b9 | ||
| 
						 | 
					9060e8f372 | ||
| 
						 | 
					2adcf04426 | ||
| 
						 | 
					88d58cd100 | ||
| 
						 | 
					1046ffb544 | ||
| 
						 | 
					a011b60a6e | ||
| 
						 | 
					be6ac828ca | ||
| 
						 | 
					a196541771 | ||
| 
						 | 
					ca7564d0e5 | ||
| 
						 | 
					ccdf6a4aec | ||
| 
						 | 
					c2c2e4030e | ||
| 
						 | 
					268d692281 | ||
| 
						 | 
					3547552c23 | ||
| 
						 | 
					3579c93d80 | ||
| 
						 | 
					65e0ed2976 | ||
| 
						 | 
					2bd9f4a7c6 | ||
| 
						 | 
					f56489cb07 | ||
| 
						 | 
					852bfbd71c | ||
| 
						 | 
					255bd7a803 | ||
| 
						 | 
					ffe774dc4c | ||
| 
						 | 
					2f08a8623b | ||
| 
						 | 
					1af6cc6b54 | ||
| 
						 | 
					0113c7e7fd | ||
| 
						 | 
					745533759a | ||
| 
						 | 
					c62b244569 | ||
| 
						 | 
					2600e84a14 | ||
| 
						 | 
					51faa3b03d | ||
| 
						 | 
					a5ed6c1af7 | ||
| 
						 | 
					05f552eca7 | ||
| 
						 | 
					da71a0fa01 | ||
| 
						 | 
					2a359b5d2d | ||
| 
						 | 
					a125d00cad | ||
| 
						 | 
					14f36819c2 | ||
| 
						 | 
					b4df44bc5c | ||
| 
						 | 
					53fa29e01f | ||
| 
						 | 
					33e19bc535 | ||
| 
						 | 
					52bc5f33e6 | ||
| 
						 | 
					51a6024a1b | ||
| 
						 | 
					49aa5ae552 | ||
| 
						 | 
					6dc91a2144 | ||
| 
						 | 
					03813ff991 | ||
| 
						 | 
					c0df5b79f5 | ||
| 
						 | 
					523b3e6a70 | ||
| 
						 | 
					4ce715acd4 | ||
| 
						 | 
					1ad394367e | ||
| 
						 | 
					0b0ae1a3bc | ||
| 
						 | 
					63c5912723 | ||
| 
						 | 
					dafb4af6a8 | ||
| 
						 | 
					88e3a334f7 | ||
| 
						 | 
					bbd600a348 | ||
| 
						 | 
					c90f800a69 | ||
| 
						 | 
					ca5f0629b0 | ||
| 
						 | 
					a7f67e5534 | ||
| 
						 | 
					03c4e54da6 | ||
| 
						 | 
					eb86d3e960 | ||
| 
						 | 
					968b7cdf43 | ||
| 
						 | 
					688d296d13 | ||
| 
						 | 
					0379223ead | ||
| 
						 | 
					7a0ca05153 | ||
| 
						 | 
					fb3bf03332 | ||
| 
						 | 
					6d312c9c8d | ||
| 
						 | 
					a2dde6594e | ||
| 
						 | 
					f7c9d77019 | ||
| 
						 | 
					8f4f2f4d92 | ||
| 
						 | 
					f15e4ea552 | ||
| 
						 | 
					1a90d90d5e | ||
| 
						 | 
					11f1e86500 | ||
| 
						 | 
					9d84657763 | ||
| 
						 | 
					31d57da5ab | ||
| 
						 | 
					7d223b984b | ||
| 
						 | 
					417c4e466c | ||
| 
						 | 
					b16fa8d34f | ||
| 
						 | 
					3a2f0bf2cc | ||
| 
						 | 
					a83b58f1df | ||
| 
						 | 
					e5e8b1e020 | ||
| 
						 | 
					3b3e62c4cf | ||
| 
						 | 
					478b65b2c2 | ||
| 
						 | 
					1982ca80d2 | ||
| 
						 | 
					b060de68c0 | ||
| 
						 | 
					a437a7896b | ||
| 
						 | 
					561a2f2712 | ||
| 
						 | 
					aa0a2e1654 | ||
| 
						 | 
					b34b4e09d8 | ||
| 
						 | 
					f48593ac81 | ||
| 
						 | 
					eba06a27f3 | ||
| 
						 | 
					ac1d7f8169 | ||
| 
						 | 
					595fb1ecd9 | ||
| 
						 | 
					207616ec66 | ||
| 
						 | 
					9297ee5e7b | ||
| 
						 | 
					3fc21c7705 | ||
| 
						 | 
					a514a7ff97 | ||
| 
						 | 
					591106adb4 | ||
| 
						 | 
					149b2f1602 | ||
| 
						 | 
					3aff85b730 | ||
| 
						 | 
					c116e773b3 | ||
| 
						 | 
					1e58019e2e | ||
| 
						 | 
					17e671cae9 | ||
| 
						 | 
					4d236e6382 | ||
| 
						 | 
					f4ac341c15 | ||
| 
						 | 
					20e9e9efe8 | 
							
								
								
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							@@ -26,6 +26,7 @@ SECURITY.md linguist-documentation
 | 
			
		||||
# ---------------------------------------
 | 
			
		||||
# Exclude generated/config files
 | 
			
		||||
*.json linguist-generated
 | 
			
		||||
frontend/public/json/*.json linguist-generated=false
 | 
			
		||||
*.lock linguist-generated
 | 
			
		||||
*.yml linguist-generated
 | 
			
		||||
*.yaml linguist-generated
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/auto-update-app-headers.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/auto-update-app-headers.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -11,7 +11,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  update-app-files:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -9,7 +9,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  autolabeler:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
    env:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/changelog-pr.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/changelog-pr.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -8,7 +8,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  update-changelog-pull-request:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    env:
 | 
			
		||||
      CONFIG_PATH: .github/changelog-pr-config.json
 | 
			
		||||
      BRANCH_NAME: github-action-update-changelog
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/close-discussion.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/close-discussion.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -12,7 +12,7 @@ permissions:
 | 
			
		||||
jobs:
 | 
			
		||||
  close-discussion:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Repository
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/crawl-versions.yaml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/crawl-versions.yaml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -13,7 +13,7 @@ permissions:
 | 
			
		||||
jobs:
 | 
			
		||||
  crawl-versions:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Repository
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/delete-json-branch.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/delete-json-branch.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -10,7 +10,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  delete_branch:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout the code
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										83
									
								
								.github/workflows/frontend-cicd.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										83
									
								
								.github/workflows/frontend-cicd.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -24,12 +24,87 @@ concurrency:
 | 
			
		||||
  cancel-in-progress: false
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  build:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
  test-json-files:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    defaults:
 | 
			
		||||
      run:
 | 
			
		||||
        working-directory: frontend  # Set default working directory for all run steps
 | 
			
		||||
        working-directory: frontend
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
      - name: Setup Python
 | 
			
		||||
        uses: actions/setup-python@v4
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: "3.x"
 | 
			
		||||
 | 
			
		||||
      - name: Test JSON files
 | 
			
		||||
        run: |
 | 
			
		||||
          python3 << 'EOF'
 | 
			
		||||
          import json
 | 
			
		||||
          import glob
 | 
			
		||||
          import os
 | 
			
		||||
          import sys
 | 
			
		||||
 | 
			
		||||
          def test_json_files():
 | 
			
		||||
              # Change to the correct directory
 | 
			
		||||
              json_dir = "public/json"
 | 
			
		||||
              if not os.path.exists(json_dir):
 | 
			
		||||
                  print(f"❌ Directory not found: {json_dir}")
 | 
			
		||||
                  return False
 | 
			
		||||
              
 | 
			
		||||
              # Find all JSON files
 | 
			
		||||
              pattern = os.path.join(json_dir, "*.json")
 | 
			
		||||
              json_files = glob.glob(pattern)
 | 
			
		||||
              
 | 
			
		||||
              if not json_files:
 | 
			
		||||
                  print(f"⚠️  No JSON files found in {json_dir}")
 | 
			
		||||
                  return True
 | 
			
		||||
              
 | 
			
		||||
              print(f"Testing {len(json_files)} JSON files for valid syntax...")
 | 
			
		||||
              
 | 
			
		||||
              invalid_files = []
 | 
			
		||||
              
 | 
			
		||||
              for file_path in json_files:
 | 
			
		||||
                  try:
 | 
			
		||||
                      with open(file_path, 'r', encoding='utf-8') as f:
 | 
			
		||||
                          json.load(f)
 | 
			
		||||
                      print(f"✅ Valid JSON: {file_path}")
 | 
			
		||||
                  except json.JSONDecodeError as e:
 | 
			
		||||
                      print(f"❌ Invalid JSON syntax in: {file_path}")
 | 
			
		||||
                      print(f"   Error: {e}")
 | 
			
		||||
                      invalid_files.append(file_path)
 | 
			
		||||
                  except Exception as e:
 | 
			
		||||
                      print(f"⚠️  Error reading: {file_path}")
 | 
			
		||||
                      print(f"   Error: {e}")
 | 
			
		||||
                      invalid_files.append(file_path)
 | 
			
		||||
              
 | 
			
		||||
              print("\n=== JSON Validation Summary ===")
 | 
			
		||||
              print(f"Total files tested: {len(json_files)}")
 | 
			
		||||
              print(f"Valid files: {len(json_files) - len(invalid_files)}")
 | 
			
		||||
              print(f"Invalid files: {len(invalid_files)}")
 | 
			
		||||
              
 | 
			
		||||
              if invalid_files:
 | 
			
		||||
                  print("\n❌ Found invalid JSON file(s):")
 | 
			
		||||
                  for file_path in invalid_files:
 | 
			
		||||
                      print(f"  - {file_path}")
 | 
			
		||||
                  return False
 | 
			
		||||
              else:
 | 
			
		||||
                  print("\n✅ All JSON files have valid syntax!")
 | 
			
		||||
                  return True
 | 
			
		||||
 | 
			
		||||
          if __name__ == "__main__":
 | 
			
		||||
              success = test_json_files()
 | 
			
		||||
              sys.exit(0 if success else 1)
 | 
			
		||||
          EOF
 | 
			
		||||
  
 | 
			
		||||
  build:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    needs: test-json-files
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    defaults:
 | 
			
		||||
      run:
 | 
			
		||||
        working-directory: frontend
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/github-release.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/github-release.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -8,7 +8,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  create-daily-release:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
    steps:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/update-json-date.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/update-json-date.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -11,7 +11,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  update-app-files:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/validate-filenames.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/validate-filenames.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -11,7 +11,7 @@ jobs:
 | 
			
		||||
  check-files:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    name: Check changed files
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										252
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										252
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,6 +10,258 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-07-28
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Refactor: Cronicle [@tremor021](https://github.com/tremor021) ([#6314](https://github.com/community-scripts/ProxmoxVE/pull/6314))
 | 
			
		||||
- Refactor: HiveMQ [@tremor021](https://github.com/tremor021) ([#6313](https://github.com/community-scripts/ProxmoxVE/pull/6313))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - fix: SSH authorized keys not added in Alpine install script [@enihsyou](https://github.com/enihsyou) ([#6316](https://github.com/community-scripts/ProxmoxVE/pull/6316))
 | 
			
		||||
    - fix: removing ",gw=" from GATE var when reading/writing from/to config. [@teohz](https://github.com/teohz) ([#6177](https://github.com/community-scripts/ProxmoxVE/pull/6177))
 | 
			
		||||
    - add 'g++' to actualbudget-install.sh [@saivishnu725](https://github.com/saivishnu725) ([#6293](https://github.com/community-scripts/ProxmoxVE/pull/6293))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - [core]: create_lxc: better handling, fix lock handling, improve template validation & storage selection UX [@MickLesk](https://github.com/MickLesk) ([#6296](https://github.com/community-scripts/ProxmoxVE/pull/6296))
 | 
			
		||||
    - ProxmoxVE 9.0 Beta: add BETA Version as test in pve_check [@MickLesk](https://github.com/MickLesk) ([#6295](https://github.com/community-scripts/ProxmoxVE/pull/6295))
 | 
			
		||||
    - karakeep: Run workers in prod without tsx [@vhsdream](https://github.com/vhsdream) ([#6285](https://github.com/community-scripts/ProxmoxVE/pull/6285))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: grocy [@tremor021](https://github.com/tremor021) ([#6307](https://github.com/community-scripts/ProxmoxVE/pull/6307))
 | 
			
		||||
    - Refactor: Navidrome [@tremor021](https://github.com/tremor021) ([#6300](https://github.com/community-scripts/ProxmoxVE/pull/6300))
 | 
			
		||||
    - Refactor: Gotify [@tremor021](https://github.com/tremor021) ([#6301](https://github.com/community-scripts/ProxmoxVE/pull/6301))
 | 
			
		||||
    - Refactor: Grafana [@tremor021](https://github.com/tremor021) ([#6306](https://github.com/community-scripts/ProxmoxVE/pull/6306))
 | 
			
		||||
    - Refactor: Argus [@tremor021](https://github.com/tremor021) ([#6305](https://github.com/community-scripts/ProxmoxVE/pull/6305))
 | 
			
		||||
    - n8n: refactor environmentfile [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6297](https://github.com/community-scripts/ProxmoxVE/pull/6297))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - temp change the analytics url to one that works untill community one is fixed [@BramSuurdje](https://github.com/BramSuurdje) ([#6319](https://github.com/community-scripts/ProxmoxVE/pull/6319))
 | 
			
		||||
 | 
			
		||||
## 2025-07-27
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - karakeep: export DATA_DIR from user config in update [@vhsdream](https://github.com/vhsdream) ([#6283](https://github.com/community-scripts/ProxmoxVE/pull/6283))
 | 
			
		||||
    - go2rtc: Fix release download handling [@tremor021](https://github.com/tremor021) ([#6280](https://github.com/community-scripts/ProxmoxVE/pull/6280))
 | 
			
		||||
 | 
			
		||||
## 2025-07-26
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - PiAlert: Update dependencies [@leiweibau](https://github.com/leiweibau) ([#6251](https://github.com/community-scripts/ProxmoxVE/pull/6251))
 | 
			
		||||
 | 
			
		||||
## 2025-07-25
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Cleanuparr ([#6238](https://github.com/community-scripts/ProxmoxVE/pull/6238))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Immich: fix #6236 [@vhsdream](https://github.com/vhsdream) ([#6243](https://github.com/community-scripts/ProxmoxVE/pull/6243))
 | 
			
		||||
    - Wizarr: use absolute path to uv [@vhsdream](https://github.com/vhsdream) ([#6221](https://github.com/community-scripts/ProxmoxVE/pull/6221))
 | 
			
		||||
    - Immich v1.136.0 [@vhsdream](https://github.com/vhsdream) ([#6219](https://github.com/community-scripts/ProxmoxVE/pull/6219))
 | 
			
		||||
 | 
			
		||||
## 2025-07-24
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Alpine TeamSpeak Server [@tremor021](https://github.com/tremor021) ([#6201](https://github.com/community-scripts/ProxmoxVE/pull/6201))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Immich: Pin Version to v1.135.3 [@MickLesk](https://github.com/MickLesk) ([#6212](https://github.com/community-scripts/ProxmoxVE/pull/6212))
 | 
			
		||||
    - Habitica: force npm to 10 [@MickLesk](https://github.com/MickLesk) ([#6192](https://github.com/community-scripts/ProxmoxVE/pull/6192))
 | 
			
		||||
    - sabnzbd: add uv setup in update [@MickLesk](https://github.com/MickLesk) ([#6191](https://github.com/community-scripts/ProxmoxVE/pull/6191))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - SnipeIT - Update dependencies  [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#6217](https://github.com/community-scripts/ProxmoxVE/pull/6217))
 | 
			
		||||
    - Refactor: VictoriaMetrics [@tremor021](https://github.com/tremor021) ([#6210](https://github.com/community-scripts/ProxmoxVE/pull/6210))
 | 
			
		||||
    - Headscale: Add headscale-admin UI as option [@tremor021](https://github.com/tremor021) ([#6205](https://github.com/community-scripts/ProxmoxVE/pull/6205))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Gokapi [@tremor021](https://github.com/tremor021) ([#6197](https://github.com/community-scripts/ProxmoxVE/pull/6197))
 | 
			
		||||
    - Refactor: duplicati [@tremor021](https://github.com/tremor021) ([#6202](https://github.com/community-scripts/ProxmoxVE/pull/6202))
 | 
			
		||||
    - Refactor: go2rtc [@tremor021](https://github.com/tremor021) ([#6198](https://github.com/community-scripts/ProxmoxVE/pull/6198))
 | 
			
		||||
    - Refactor: Headscale [@tremor021](https://github.com/tremor021) ([#6180](https://github.com/community-scripts/ProxmoxVE/pull/6180))
 | 
			
		||||
 | 
			
		||||
## 2025-07-23
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - documenso: remove customerId by creating initial user [@MickLesk](https://github.com/MickLesk) ([#6171](https://github.com/community-scripts/ProxmoxVE/pull/6171))
 | 
			
		||||
 | 
			
		||||
## 2025-07-22
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Salt ([#6116](https://github.com/community-scripts/ProxmoxVE/pull/6116))
 | 
			
		||||
- LinkStack ([#6137](https://github.com/community-scripts/ProxmoxVE/pull/6137))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - tools.func - fix typo for target_file [@tjcomserv](https://github.com/tjcomserv) ([#6156](https://github.com/community-scripts/ProxmoxVE/pull/6156))
 | 
			
		||||
    - fix(nginxproxymanager.sh): Set the version number before build. [@JMarcosHP](https://github.com/JMarcosHP) ([#6139](https://github.com/community-scripts/ProxmoxVE/pull/6139))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Fixed the previous fix of the anti-nag hook and propagated fixes everywhere [@imcrazytwkr](https://github.com/imcrazytwkr) ([#6162](https://github.com/community-scripts/ProxmoxVE/pull/6162))
 | 
			
		||||
    - [core]: Improved LXC Container Startup Handling [@MickLesk](https://github.com/MickLesk) ([#6142](https://github.com/community-scripts/ProxmoxVE/pull/6142))
 | 
			
		||||
    - wallos: add cron in installer for yearly cost [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6133](https://github.com/community-scripts/ProxmoxVE/pull/6133))
 | 
			
		||||
 | 
			
		||||
  - #### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
    - gitea-mirror: add: migration to 3.0 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6138](https://github.com/community-scripts/ProxmoxVE/pull/6138))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - [core]: tools.func: increase setup_php function [@MickLesk](https://github.com/MickLesk) ([#6141](https://github.com/community-scripts/ProxmoxVE/pull/6141))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - Bump form-data from 4.0.3 to 4.0.4 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#6150](https://github.com/community-scripts/ProxmoxVE/pull/6150))
 | 
			
		||||
 | 
			
		||||
## 2025-07-21
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Teamspeak-Server ([#6121](https://github.com/community-scripts/ProxmoxVE/pull/6121))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - pve-post-installer: remove Nag-File if already exist [@luckman212](https://github.com/luckman212) ([#6098](https://github.com/community-scripts/ProxmoxVE/pull/6098))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - firefly: fix permissions at update [@MickLesk](https://github.com/MickLesk) ([#6119](https://github.com/community-scripts/ProxmoxVE/pull/6119))
 | 
			
		||||
    - nginxproxymanager: remove injected footer link (tteck) [@MickLesk](https://github.com/MickLesk) ([#6117](https://github.com/community-scripts/ProxmoxVE/pull/6117))
 | 
			
		||||
 | 
			
		||||
## 2025-07-20
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Fix OpenWebUI install/update scripts [@karamanliev](https://github.com/karamanliev) ([#6093](https://github.com/community-scripts/ProxmoxVE/pull/6093))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - karakeep: add DB_WAL_MODE; suppress test output [@vhsdream](https://github.com/vhsdream) ([#6101](https://github.com/community-scripts/ProxmoxVE/pull/6101))
 | 
			
		||||
 | 
			
		||||
## 2025-07-19
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Fixed nag script on ProxMox 8.4.5 [@imcrazytwkr](https://github.com/imcrazytwkr) ([#6084](https://github.com/community-scripts/ProxmoxVE/pull/6084))
 | 
			
		||||
 | 
			
		||||
## 2025-07-18
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - AdventureLog: add backup folder before update [@MickLesk](https://github.com/MickLesk) ([#6066](https://github.com/community-scripts/ProxmoxVE/pull/6066))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Bar-Assistant: add Cocktail database [@MickLesk](https://github.com/MickLesk) ([#6068](https://github.com/community-scripts/ProxmoxVE/pull/6068))
 | 
			
		||||
    - ErsatzTV: use project prebuild ffmpeg version [@MickLesk](https://github.com/MickLesk) ([#6067](https://github.com/community-scripts/ProxmoxVE/pull/6067))
 | 
			
		||||
 | 
			
		||||
## 2025-07-17
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Cloudreve ([#6044](https://github.com/community-scripts/ProxmoxVE/pull/6044))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - config-file: set GATE [@ahmaddxb](https://github.com/ahmaddxb) ([#6042](https://github.com/community-scripts/ProxmoxVE/pull/6042))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - add "setup_composer" in update_script (baikal, bar-assistant, firefly) [@MickLesk](https://github.com/MickLesk) ([#6047](https://github.com/community-scripts/ProxmoxVE/pull/6047))
 | 
			
		||||
    - PLANKA: Fix update procedure [@tremor021](https://github.com/tremor021) ([#6031](https://github.com/community-scripts/ProxmoxVE/pull/6031))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Reactive Resume: switch source to community-maintained fork [@vhsdream](https://github.com/vhsdream) ([#6051](https://github.com/community-scripts/ProxmoxVE/pull/6051))
 | 
			
		||||
 | 
			
		||||
## 2025-07-16
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - homepage.sh: resolves #6028 [@vhsdream](https://github.com/vhsdream) ([#6032](https://github.com/community-scripts/ProxmoxVE/pull/6032))
 | 
			
		||||
    - karakeep-install: Disable Playwright browser download, remove MCP build [@vhsdream](https://github.com/vhsdream) ([#5833](https://github.com/community-scripts/ProxmoxVE/pull/5833))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - chore: reorganize nginxproxymanager update script [@Kirbo](https://github.com/Kirbo) ([#5971](https://github.com/community-scripts/ProxmoxVE/pull/5971))
 | 
			
		||||
 | 
			
		||||
## 2025-07-15
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - checkmk: change password crawling based on there docs [@MickLesk](https://github.com/MickLesk) ([#6001](https://github.com/community-scripts/ProxmoxVE/pull/6001))
 | 
			
		||||
    - Whiptail: Improve Dialogue to work with ESC [@MickLesk](https://github.com/MickLesk) ([#6003](https://github.com/community-scripts/ProxmoxVE/pull/6003))
 | 
			
		||||
    - 2FAuth: Improve Update-Check [@MickLesk](https://github.com/MickLesk) ([#5998](https://github.com/community-scripts/ProxmoxVE/pull/5998))
 | 
			
		||||
 | 
			
		||||
  - #### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
    - EMQX: Purge Old Install (remove acl.conf too!) [@MickLesk](https://github.com/MickLesk) ([#5999](https://github.com/community-scripts/ProxmoxVE/pull/5999))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: PeaNUT [@MickLesk](https://github.com/MickLesk) ([#6002](https://github.com/community-scripts/ProxmoxVE/pull/6002))
 | 
			
		||||
 | 
			
		||||
## 2025-07-14
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Bar Assistant ([#5977](https://github.com/community-scripts/ProxmoxVE/pull/5977))
 | 
			
		||||
- Mealie ([#5968](https://github.com/community-scripts/ProxmoxVE/pull/5968))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Config-File: Some Addons, Bugfixes...  [@MickLesk](https://github.com/MickLesk) ([#5978](https://github.com/community-scripts/ProxmoxVE/pull/5978))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - add --break-system-packages certbot-dns-cloudflare to the nginxproxym… [@tug-benson](https://github.com/tug-benson) ([#5957](https://github.com/community-scripts/ProxmoxVE/pull/5957))
 | 
			
		||||
    - Dashy: remove unbound variable (RELEASE) [@MickLesk](https://github.com/MickLesk) ([#5974](https://github.com/community-scripts/ProxmoxVE/pull/5974))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Update nic-offloading-fix: add Intel as search Text  [@calvin-li-developer](https://github.com/calvin-li-developer) ([#5954](https://github.com/community-scripts/ProxmoxVE/pull/5954))
 | 
			
		||||
 | 
			
		||||
## 2025-07-12
 | 
			
		||||
 | 
			
		||||
## 2025-07-11
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								ct/2fauth.sh
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								ct/2fauth.sh
									
									
									
									
									
								
							@@ -28,8 +28,11 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null || cat /opt/2fauth_version.txt 2>/dev/null)" ]]; then
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null)" ]] || [[ ! -f ~/.2fauth ]]; then
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
@@ -45,10 +48,11 @@ function update_script() {
 | 
			
		||||
      $STD apt-get install -y \
 | 
			
		||||
        lsb-release \
 | 
			
		||||
        gnupg2
 | 
			
		||||
      PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
 | 
			
		||||
      PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
 | 
			
		||||
      sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
 | 
			
		||||
    fi
 | 
			
		||||
    fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
 | 
			
		||||
    setup_composer
 | 
			
		||||
    mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
 | 
			
		||||
    mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
 | 
			
		||||
    cd "/opt/2fauth" || return
 | 
			
		||||
 
 | 
			
		||||
@@ -35,26 +35,29 @@ function update_script() {
 | 
			
		||||
    systemctl stop adventurelog-frontend
 | 
			
		||||
    msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backup Old Installation"
 | 
			
		||||
    mkdir -p /opt/adventurelog-backup
 | 
			
		||||
    cp /opt/adventurelog/backend/server/.env /opt/adventurelog-backup/backend/server/.env
 | 
			
		||||
    cp -r /opt/adventurelog/backend/server/media /opt/adventurelog-backup/backend/server/media
 | 
			
		||||
    cp /opt/adventurelog/frontend/.env /opt/adventurelog-backup/frontend/.env
 | 
			
		||||
    msg_ok "Backup done"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
 | 
			
		||||
    PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    # Backend Migration
 | 
			
		||||
    cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
 | 
			
		||||
    cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
 | 
			
		||||
 | 
			
		||||
    cd /opt/adventurelog/backend/server
 | 
			
		||||
    if [[ ! -x .venv/bin/python ]]; then
 | 
			
		||||
      $STD uv venv .venv
 | 
			
		||||
      $STD .venv/bin/python -m ensurepip --upgrade
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    $STD .venv/bin/python -m pip install --upgrade pip
 | 
			
		||||
    $STD .venv/bin/python -m pip install -r requirements.txt
 | 
			
		||||
    $STD .venv/bin/python -m manage collectstatic --noinput
 | 
			
		||||
    $STD .venv/bin/python -m manage migrate
 | 
			
		||||
 | 
			
		||||
    # Frontend Migration
 | 
			
		||||
    
 | 
			
		||||
    cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
 | 
			
		||||
    cd /opt/adventurelog/frontend
 | 
			
		||||
    $STD pnpm i
 | 
			
		||||
@@ -68,7 +71,6 @@ function update_script() {
 | 
			
		||||
    msg_ok "Services Started"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf /opt/v${RELEASE}.zip
 | 
			
		||||
    rm -rf /opt/adventurelog-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								ct/alpine-teamspeak-server.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								ct/alpine-teamspeak-server.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: tremor021 (Slaviša Arežina)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://teamspeak.com/en/
 | 
			
		||||
 | 
			
		||||
APP="Alpine-TeamSpeak-Server"
 | 
			
		||||
var_tags="${var_tags:-alpine;communication}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-256}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-alpine}"
 | 
			
		||||
var_version="${var_version:-3.22}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/teamspeak-server ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  set +o pipefail && RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.teamspeak3-server_linux_amd64-([0-9]+.[0-9]+.[0-9]+)./\1/p' | head -1) && set -o pipefail
 | 
			
		||||
 | 
			
		||||
  if [ "${RELEASE}" != "$(cat ~/.teamspeak-server)" ] || [ ! -f ~/.teamspeak-server ]; then
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
    $STD apk -U upgrade
 | 
			
		||||
    $STD service teamspeak stop
 | 
			
		||||
    curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
 | 
			
		||||
    tar -xf ./ts3server.tar.bz2
 | 
			
		||||
    cp -ru teamspeak3-server_linux_amd64/* /opt/teamspeak-server/
 | 
			
		||||
    rm -f ~/ts3server.tar.bz*
 | 
			
		||||
    rm -rf teamspeak3-server_linux_amd64
 | 
			
		||||
    echo "${RELEASE}" >~/.teamspeak-server
 | 
			
		||||
    $STD service teamspeak start
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}:9987${CL}"
 | 
			
		||||
							
								
								
									
										19
									
								
								ct/argus.sh
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								ct/argus.sh
									
									
									
									
									
								
							@@ -23,20 +23,23 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/argus ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/release-argus/Argus/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    rm -f /opt/argus/Argus
 | 
			
		||||
    curl -fsSL "https://github.com/release-argus/Argus/releases/download/${RELEASE}/Argus-${RELEASE}.linux-amd64" -o /opt/argus/Argus
 | 
			
		||||
    chmod +x /opt/argus/Argus
 | 
			
		||||
    systemctl restart argus
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.Argus 2>/dev/null)" ]] || [[ ! -f ~/.Argus ]]; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop argus
 | 
			
		||||
    msg_ok "Service stopped"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "Argus" "release-argus/Argus" "singlefile" "latest" "/opt/argus" "Argus*linux-amd64"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl start argus
 | 
			
		||||
    msg_ok "Service started"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "${APP} is already up to date (${RELEASE})"
 | 
			
		||||
 
 | 
			
		||||
@@ -39,12 +39,15 @@ function update_script() {
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
 | 
			
		||||
    setup_composer
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring Baikal"
 | 
			
		||||
    cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
 | 
			
		||||
    cp -r /opt/baikal-backup/Specific/ /opt/baikal/
 | 
			
		||||
    chown -R www-data:www-data /opt/baikal/
 | 
			
		||||
    chmod -R 755 /opt/baikal/
 | 
			
		||||
    cd /opt/baikal
 | 
			
		||||
    $STD composer install
 | 
			
		||||
    msg_ok "Configured Baikal"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										129
									
								
								ct/bar-assistant.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								ct/bar-assistant.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: bvdberg01 | CanbiZ
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/karlomikus/bar-assistant
 | 
			
		||||
# Source: https://github.com/karlomikus/vue-salt-rim
 | 
			
		||||
# Source: https://www.meilisearch.com/
 | 
			
		||||
 | 
			
		||||
APP="Bar-Assistant"
 | 
			
		||||
var_tags="${var_tags:-cocktails;drinks}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/bar-assistant ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE_MEILISEARCH=$(curl -fsSL https://api.github.com/repos/meilisearch/meilisearch/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
  RELEASE_BARASSISTANT=$(curl -fsSL https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
  RELEASE_SALTRIM=$(curl -fsSL https://api.github.com/repos/karlomikus/vue-salt-rim/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE_BARASSISTANT}" != "$(cat ~/.bar-assistant 2>/dev/null)" ]] || [[ ! -f ~/.bar-assistant ]]; then
 | 
			
		||||
    msg_info "Stopping nginx"
 | 
			
		||||
    systemctl stop nginx
 | 
			
		||||
    msg_ok "Stopped nginx"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up Bar Assistant"
 | 
			
		||||
    mv /opt/bar-assistant /opt/bar-assistant-backup
 | 
			
		||||
    msg_ok "Backed up Bar Assistant"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
 | 
			
		||||
    setup_composer
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE_BARASSISTANT}"
 | 
			
		||||
    cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env
 | 
			
		||||
    cp -r /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant
 | 
			
		||||
    cd /opt/bar-assistant
 | 
			
		||||
    $STD composer install --no-interaction
 | 
			
		||||
    $STD php artisan migrate --force
 | 
			
		||||
    $STD php artisan storage:link
 | 
			
		||||
    $STD php artisan bar:setup-meilisearch
 | 
			
		||||
    $STD php artisan scout:sync-index-settings
 | 
			
		||||
    $STD php artisan config:cache
 | 
			
		||||
    $STD php artisan route:cache
 | 
			
		||||
    $STD php artisan event:cache
 | 
			
		||||
    chown -R www-data:www-data /opt/bar-assistant
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE_BARASSISTANT}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting nginx"
 | 
			
		||||
    systemctl start nginx
 | 
			
		||||
    msg_ok "Started nginx"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/bar-assistant-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE_BARASSISTANT}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE_SALTRIM}" != "$(cat ~/.vue-salt-rim 2>/dev/null)" ]] || [[ ! -f ~/.vue-salt-rim ]]; then
 | 
			
		||||
    msg_info "Backing up Vue Salt Rim"
 | 
			
		||||
    mv /opt/vue-salt-rim /opt/vue-salt-rim-backup
 | 
			
		||||
    msg_ok "Backed up Vue Salt Rim"
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping nginx"
 | 
			
		||||
    systemctl stop nginx
 | 
			
		||||
    msg_ok "Stopped nginx"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Salt Rim to ${RELEASE_SALTRIM}"
 | 
			
		||||
    cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js
 | 
			
		||||
    cd /opt/vue-salt-rim
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE_SALTRIM}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting nginx"
 | 
			
		||||
    systemctl start nginx
 | 
			
		||||
    msg_ok "Started nginx"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/vue-salt-rim-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Salt Rim is already at ${RELEASE_SALTRIM}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE_MEILISEARCH}" != "$(cat ~/.meilisearch 2>/dev/null)" ]] || [[ ! -f ~/.meilisearch ]]; then
 | 
			
		||||
    msg_info "Stopping Meilisearch"
 | 
			
		||||
    systemctl stop meilisearch
 | 
			
		||||
    msg_ok "Stopped Meilisearch"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Meilisearch"
 | 
			
		||||
    systemctl start meilisearch
 | 
			
		||||
    msg_ok "Started Meilisearch"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Meilisearch"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Meilisearch is already at ${RELEASE_MEILISEARCH}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
							
								
								
									
										56
									
								
								ct/cleanuparr.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										56
									
								
								ct/cleanuparr.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Lucas Zampieri (zampierilucas) | MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/Cleanuparr/Cleanuparr
 | 
			
		||||
 | 
			
		||||
APP="Cleanuparr"
 | 
			
		||||
var_tags="${var_tags:-arr}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -f /opt/cleanuparr/Cleanuparr ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/Cleanuparr/Cleanuparr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat ~/.Cleanuparr 2>/dev/null)" ]] || [[ ! -f ~/.Cleanuparr ]]; then
 | 
			
		||||
        msg_info "Stopping ${APP}"
 | 
			
		||||
        systemctl stop cleanuparr
 | 
			
		||||
        msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
        fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "$RELEASE" "/opt/cleanuparr" "*linux-amd64.zip"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting ${APP}"
 | 
			
		||||
        systemctl start cleanuparr
 | 
			
		||||
        msg_ok "Started ${APP}"
 | 
			
		||||
        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 "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:11011${CL}"
 | 
			
		||||
							
								
								
									
										58
									
								
								ct/cloudreve.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								ct/cloudreve.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://cloudreve.org/
 | 
			
		||||
 | 
			
		||||
APP="Cloudreve"
 | 
			
		||||
var_tags="${var_tags:-cloud}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/cloudreve ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/cloudreve/cloudreve/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.cloudreve 2>/dev/null)" ]] || [[ ! -f ~/.cloudreve ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop cloudreve
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start cloudreve
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5212${CL}"
 | 
			
		||||
@@ -56,30 +56,18 @@ function update_script() {
 | 
			
		||||
    LATEST=$(curl -fsSL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
    IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
    msg_info "Installing Dependencies"
 | 
			
		||||
 | 
			
		||||
    $STD apt-get install -y git
 | 
			
		||||
    $STD apt-get install -y make
 | 
			
		||||
    $STD apt-get install -y g++
 | 
			
		||||
    $STD apt-get install -y gcc
 | 
			
		||||
    $STD apt-get install -y ca-certificates
 | 
			
		||||
    $STD apt-get install -y gnupg
 | 
			
		||||
    $STD apt-get install -y \
 | 
			
		||||
      git \
 | 
			
		||||
      build-essential \
 | 
			
		||||
      ca-certificates \
 | 
			
		||||
      gnupg2
 | 
			
		||||
    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_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
    msg_ok "Set up Node.js Repository"
 | 
			
		||||
    NODE_VERSION="22" setup_nodejs
 | 
			
		||||
    fetch_and_deploy_gh_release "cronicle" "jhuckaby/Cronicle"
 | 
			
		||||
 | 
			
		||||
    msg_info "Installing Node.js"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install -y nodejs
 | 
			
		||||
    msg_ok "Installed Node.js"
 | 
			
		||||
 | 
			
		||||
    msg_info "Installing Cronicle Worker"
 | 
			
		||||
    mkdir -p /opt/cronicle
 | 
			
		||||
    msg_info "Configuring Cronicle Worker"
 | 
			
		||||
    cd /opt/cronicle
 | 
			
		||||
    $STD tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    $STD node bin/build.js dist
 | 
			
		||||
    sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
 | 
			
		||||
@@ -88,6 +76,7 @@ function update_script() {
 | 
			
		||||
    chmod 775 /etc/init.d/cronicled
 | 
			
		||||
    $STD update-rc.d cronicled defaults
 | 
			
		||||
    msg_ok "Installed Cronicle Worker"
 | 
			
		||||
    
 | 
			
		||||
    echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -27,25 +27,19 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat ~/.duplicati)" ]] || [[ ! -f ~/.duplicati ]]; then
 | 
			
		||||
        msg_info "Stopping $APP"
 | 
			
		||||
        systemctl stop duplicati
 | 
			
		||||
        msg_ok "Stopped $APP"
 | 
			
		||||
        msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
        curl -fsSL "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" -o $(basename "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb")
 | 
			
		||||
        $STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb
 | 
			
		||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
        msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
        
 | 
			
		||||
        fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting $APP"
 | 
			
		||||
        systemctl start duplicati
 | 
			
		||||
        msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf ~/duplicati-${RELEASE}-linux-x64-gui.deb
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
        msg_ok "Update Successful"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,10 @@ function update_script() {
 | 
			
		||||
    systemctl stop emqx
 | 
			
		||||
    msg_ok "Stopped EMQX"
 | 
			
		||||
 | 
			
		||||
    msg_info "Removing old EMQX"
 | 
			
		||||
    $STD apt-get remove --purge -y emqx
 | 
			
		||||
    msg_ok "Removed old EMQX"
 | 
			
		||||
 | 
			
		||||
    msg_info "Downloading EMQX v${RELEASE}"
 | 
			
		||||
    DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
 | 
			
		||||
    curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
 | 
			
		||||
 
 | 
			
		||||
@@ -26,13 +26,14 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\Kv\K[^"]+' | head -n1)
 | 
			
		||||
  RELEASE_FFMPEG=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV-ffmpeg/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.ersatztv 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv ]]; then
 | 
			
		||||
    msg_info "Stopping ErsatzTV"
 | 
			
		||||
    systemctl stop ersatzTV
 | 
			
		||||
    msg_ok "Stopped ErsatzTV"
 | 
			
		||||
 | 
			
		||||
    FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
 | 
			
		||||
    fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ErsatzTV"
 | 
			
		||||
@@ -43,6 +44,29 @@ function update_script() {
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE_FFMPEG}" != "$(cat ~/.ersatztv-ffmpeg 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv-ffmpeg ]]; then
 | 
			
		||||
    msg_info "Stopping ErsatzTV"
 | 
			
		||||
    systemctl stop ersatzTV
 | 
			
		||||
    msg_ok "Stopped ErsatzTV"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Set ErsatzTV-ffmpeg links"
 | 
			
		||||
    chmod +x /opt/ErsatzTV-ffmpeg/bin/*
 | 
			
		||||
    ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg
 | 
			
		||||
    ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay
 | 
			
		||||
    ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe
 | 
			
		||||
    msg_ok "ffmpeg links set"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ErsatzTV"
 | 
			
		||||
    systemctl start ersatzTV
 | 
			
		||||
    msg_ok "Started ErsatzTV"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ErsatzTV-ffmpeg is already at ${RELEASE_FFMPEG}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,15 +39,20 @@ function update_script() {
 | 
			
		||||
    cp -r /opt/firefly/storage /opt/storage
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii"
 | 
			
		||||
    fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
 | 
			
		||||
    setup_composer
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    rm -rf /opt/firefly/storage
 | 
			
		||||
    cp /opt/.env /opt/firefly/.env
 | 
			
		||||
    cp -r /opt/storage /opt/firefly/storage
 | 
			
		||||
    cd /opt/firefly
 | 
			
		||||
    
 | 
			
		||||
    chown -R www-data:www-data /opt/firefly
 | 
			
		||||
    chmod -R 775 /opt/firefly/storage
 | 
			
		||||
    find /opt/firefly/storage -type d -exec chmod 775 {} \;
 | 
			
		||||
    find /opt/firefly/storage -type f -exec chmod 664 {} \;
 | 
			
		||||
    mkdir -p /opt/firefly/storage/framework/{cache/data,sessions,views}
 | 
			
		||||
    $STD sudo -u www-data php /opt/firefly/artisan cache:clear
 | 
			
		||||
 | 
			
		||||
    $STD php artisan migrate --seed --force
 | 
			
		||||
    $STD php artisan cache:clear
 | 
			
		||||
    $STD php artisan view:clear
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,26 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
 | 
			
		||||
  if [[ $APP_VERSION =~ ^2\. ]]; then
 | 
			
		||||
    if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️  VERSION 2.x DETECTED" --yesno \
 | 
			
		||||
      "WARNING: Version $APP_VERSION detected!\n\nUpdating from version 2.x will CLEAR ALL CONFIGURATION.\n\nThis includes:\n• API tokens\n• User settings\n• Repository configurations\n• All custom settings\n\nDo you want to continue with the update process?" 15 70 --defaultno
 | 
			
		||||
    then
 | 
			
		||||
      exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️  FINAL CONFIRMATION" --yesno \
 | 
			
		||||
        "FINAL WARNING: This update WILL clear all configuration!\n\nBEFORE PROCEEDING, please:\n\n• Copy API tokens to a safe location\n• Backup any custom configurations\n• Note down repository settings\n\nThis action CANNOT be undone!" 18 70 --defaultno 
 | 
			
		||||
    then
 | 
			
		||||
        whiptail --backtitle "Gitea Mirror Update" --title "Update Cancelled" --msgbox "Update process cancelled. Please backup your configuration before proceeding." 8 60
 | 
			
		||||
        exit 0
 | 
			
		||||
    fi
 | 
			
		||||
    whiptail --backtitle "Gitea Mirror Update" --title "Proceeding with Update" --msgbox \
 | 
			
		||||
        "Proceeding with version $APP_VERSION update.\n\nAll configuration will be cleared as warned." 8 50
 | 
			
		||||
    rm -rf /opt/gitea-mirror
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								ct/go2rtc.sh
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								ct/go2rtc.sh
									
									
									
									
									
								
							@@ -27,14 +27,23 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating $APP"
 | 
			
		||||
  systemctl stop go2rtc
 | 
			
		||||
  cd /opt/go2rtc
 | 
			
		||||
  rm go2rtc_linux_amd64
 | 
			
		||||
  curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64" -o $(basename "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64")
 | 
			
		||||
  chmod +x go2rtc_linux_amd64
 | 
			
		||||
  systemctl start go2rtc
 | 
			
		||||
  msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/AlexxIT/go2rtc/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.go2rtc 2>/dev/null)" ]] || [[ ! -f ~/.go2rtc ]]; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop go2rtc
 | 
			
		||||
    msg_ok "Stopped service"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl start go2rtc
 | 
			
		||||
    msg_ok "Started service"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								ct/gokapi.sh
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								ct/gokapi.sh
									
									
									
									
									
								
							@@ -27,8 +27,27 @@ function update_script() {
 | 
			
		||||
      msg_error "No ${APP} Installation Found!"
 | 
			
		||||
      exit
 | 
			
		||||
   fi
 | 
			
		||||
   msg_error "Currently we don't provide an update function for this ${APP}."
 | 
			
		||||
   exit
 | 
			
		||||
   if [[ -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
      mv /opt/${APP}_version ~/.gokapi
 | 
			
		||||
   fi
 | 
			
		||||
 | 
			
		||||
   RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/Gokapi/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
   if [[ "${RELEASE}" != "$(cat ~/.gokapi 2>/dev/null)" ]] || [[ ! -f ~/.gokapi ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop gokapi
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "gokapi-linux_amd64.zip"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start gokapi
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -38,4 +57,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:53842/setup${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:53842/setup${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								ct/gotify.sh
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								ct/gotify.sh
									
									
									
									
									
								
							@@ -29,23 +29,18 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.gotify 2>/dev/null)" ]] || [[ ! -f ~/.gotify ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop gotify
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cd /opt/gotify
 | 
			
		||||
    curl -fsSL "https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip" -o $(basename "https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip")
 | 
			
		||||
    $STD unzip -o gotify-linux-amd64.zip
 | 
			
		||||
    rm -rf gotify-linux-amd64.zip
 | 
			
		||||
    chmod +x gotify-linux-amd64
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
    fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-amd64.zip"
 | 
			
		||||
    chmod +x /opt/gotify/gotify-linux-amd64
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start gotify
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,7 @@ function update_script() {
 | 
			
		||||
      msg_error "No ${APP} Installation Found!"
 | 
			
		||||
      exit
 | 
			
		||||
   fi
 | 
			
		||||
   
 | 
			
		||||
   msg_info "Updating ${APP}"
 | 
			
		||||
   $STD apt-get update
 | 
			
		||||
   $STD apt-get -y upgrade
 | 
			
		||||
@@ -41,4 +42,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								ct/grocy.sh
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								ct/grocy.sh
									
									
									
									
									
								
							@@ -27,20 +27,20 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  php_version=$(php -v | head -n 1 | awk '{print $2}')
 | 
			
		||||
  if [[ ! $php_version == "8.3"* ]]; then
 | 
			
		||||
    msg_info "Updating PHP"
 | 
			
		||||
    curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
 | 
			
		||||
    echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ bookworm main" >/etc/apt/sources.list.d/php.list
 | 
			
		||||
    apt-get update
 | 
			
		||||
    apt-get install -y php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl,sqlite3,fpm,gd,zip,xml}
 | 
			
		||||
    systemctl reload apache2
 | 
			
		||||
    apt autoremove
 | 
			
		||||
    msg_ok "Updated PHP"
 | 
			
		||||
  
 | 
			
		||||
  php_ver=$(php -v | head -n 1 | awk '{print $2}')
 | 
			
		||||
  if [[ ! $php_ver == "8.3"* ]]; then
 | 
			
		||||
    PHP_VERSION="8.3" PHP_MODULE="sqlite3,bz2" PHP_APACHE="yes" setup_php
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/grocy/grocy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.grocy 2>/dev/null)" ]] || [[ ! -f ~/.grocy ]]; then
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    bash /var/www/html/update.sh
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating ${APP}"
 | 
			
		||||
  bash /var/www/html/update.sh
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/alpine-teamspeak-server
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/alpine-teamspeak-server
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ___    __      _                ______                    _____                  __        _____                          
 | 
			
		||||
   /   |  / /___  (_)___  ___      /_  __/__  ____ _____ ___ / ___/____  ___  ____ _/ /__     / ___/___  ______   _____  _____
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______/ / / _ \/ __ `/ __ `__ \\__ \/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ / /  __/ /_/ / / / / / /__/ / /_/ /  __/ /_/ / ,< /_____/__/ /  __/ /   | |/ /  __/ /    
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/     /_/  \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_|     /____/\___/_/    |___/\___/_/     
 | 
			
		||||
        /_/                                                    /_/                                                            
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/bar-assistant
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/bar-assistant
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____                   ___              _      __              __ 
 | 
			
		||||
   / __ )____ ______      /   |  __________(_)____/ /_____ _____  / /_
 | 
			
		||||
  / __  / __ `/ ___/_____/ /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/
 | 
			
		||||
 / /_/ / /_/ / /  /_____/ ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_  
 | 
			
		||||
/_____/\__,_/_/        /_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/  
 | 
			
		||||
                                                                      
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/cleanuparr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/cleanuparr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   ________                                            
 | 
			
		||||
  / ____/ /__  ____ _____  __  ______  ____ ___________
 | 
			
		||||
 / /   / / _ \/ __ `/ __ \/ / / / __ \/ __ `/ ___/ ___/
 | 
			
		||||
/ /___/ /  __/ /_/ / / / / /_/ / /_/ / /_/ / /  / /    
 | 
			
		||||
\____/_/\___/\__,_/_/ /_/\__,_/ .___/\__,_/_/  /_/     
 | 
			
		||||
                             /_/                       
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/cloudreve
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/cloudreve
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   ________                __                  
 | 
			
		||||
  / ____/ /___  __  ______/ /_______ _   _____ 
 | 
			
		||||
 / /   / / __ \/ / / / __  / ___/ _ \ | / / _ \
 | 
			
		||||
/ /___/ / /_/ / /_/ / /_/ / /  /  __/ |/ /  __/
 | 
			
		||||
\____/_/\____/\__,_/\__,_/_/   \___/|___/\___/ 
 | 
			
		||||
                                               
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/linkstack
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/linkstack
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __    _       __   _____ __             __  
 | 
			
		||||
   / /   (_)___  / /__/ ___// /_____ ______/ /__
 | 
			
		||||
  / /   / / __ \/ //_/\__ \/ __/ __ `/ ___/ //_/
 | 
			
		||||
 / /___/ / / / / ,<  ___/ / /_/ /_/ / /__/ ,<   
 | 
			
		||||
/_____/_/_/ /_/_/|_|/____/\__/\__,_/\___/_/|_|  
 | 
			
		||||
                                                
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/mealie
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/mealie
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __  ___           ___    
 | 
			
		||||
   /  |/  /__  ____ _/ (_)__ 
 | 
			
		||||
  / /|_/ / _ \/ __ `/ / / _ \
 | 
			
		||||
 / /  / /  __/ /_/ / / /  __/
 | 
			
		||||
/_/  /_/\___/\__,_/_/_/\___/ 
 | 
			
		||||
                             
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/salt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/salt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   _____       ____ 
 | 
			
		||||
  / ___/____ _/ / /_
 | 
			
		||||
  \__ \/ __ `/ / __/
 | 
			
		||||
 ___/ / /_/ / / /_  
 | 
			
		||||
/____/\__,_/_/\__/  
 | 
			
		||||
                    
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/teamspeak-server
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/teamspeak-server
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
  ______                                           __        _____                          
 | 
			
		||||
 /_  __/__  ____ _____ ___  _________  ___  ____ _/ /__     / ___/___  ______   _____  _____
 | 
			
		||||
  / / / _ \/ __ `/ __ `__ \/ ___/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
			
		||||
 / / /  __/ /_/ / / / / / (__  ) /_/ /  __/ /_/ / ,< /_____/__/ /  __/ /   | |/ /  __/ /    
 | 
			
		||||
/_/  \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_|     /____/\___/_/    |___/\___/_/     
 | 
			
		||||
                             /_/                                                            
 | 
			
		||||
@@ -27,18 +27,18 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
    mv /opt/"${APP}_version.txt" ~/.headscale
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.headscale 2>/dev/null)" ]] || [[ ! -f ~/.headscale ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop headscale
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    curl -fsSL "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb")
 | 
			
		||||
    dpkg -i headscale_${RELEASE}_linux_amd64.deb
 | 
			
		||||
    rm headscale_${RELEASE}_linux_amd64.deb
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
    fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
 | 
			
		||||
    fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    # Temporary fix until headscale project resolves service getting disabled on updates.
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ function update_script() {
 | 
			
		||||
    rm -rf homepage-${RELEASE}
 | 
			
		||||
    cd /opt/homepage
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    $STD npx --yes update-browserslist-db@latest
 | 
			
		||||
    $STD pnpm update --no-save caniuse-lite
 | 
			
		||||
    export NEXT_PUBLIC_VERSION="v$RELEASE"
 | 
			
		||||
    export NEXT_PUBLIC_REVISION="source"
 | 
			
		||||
    export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at')
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,8 @@ function update_script() {
 | 
			
		||||
    done
 | 
			
		||||
    msg_ok "Image-processing libraries updated"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  RELEASE="1.136.0"
 | 
			
		||||
  #RELEASE=$(curl -fsSL https://api.github.com/repos/immich-app/immich/releases?per_page=1 | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
    exit
 | 
			
		||||
@@ -102,7 +103,7 @@ function update_script() {
 | 
			
		||||
  mkdir -p "$ML_DIR"
 | 
			
		||||
  rm -rf "$SRC_DIR"
 | 
			
		||||
 | 
			
		||||
  fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "latest" "$SRC_DIR"
 | 
			
		||||
  fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.136.0" "$SRC_DIR"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} web and microservices"
 | 
			
		||||
  cd "$SRC_DIR"/server
 | 
			
		||||
@@ -120,7 +121,7 @@ function update_script() {
 | 
			
		||||
  $STD npm ci
 | 
			
		||||
  $STD npm run build
 | 
			
		||||
  cd "$SRC_DIR"
 | 
			
		||||
  cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
 | 
			
		||||
  cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,bin/start.sh} "$APP_DIR"/
 | 
			
		||||
  cp -a web/build "$APP_DIR"/www
 | 
			
		||||
  cp LICENSE "$APP_DIR"
 | 
			
		||||
  cd "$APP_DIR"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										117
									
								
								ct/karakeep.sh
									
									
									
									
									
								
							
							
						
						
									
										117
									
								
								ct/karakeep.sh
									
									
									
									
									
								
							@@ -27,59 +27,74 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/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 karakeep-web karakeep-workers karakeep-browser
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
    msg_info "Updating yt-dlp"
 | 
			
		||||
    $STD yt-dlp --update-to nightly
 | 
			
		||||
    msg_ok "Updated yt-dlp"
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    if [[ $(corepack -v) < "0.31.0" ]]; then
 | 
			
		||||
      $STD npm install -g corepack@0.31.0
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
 | 
			
		||||
      $STD apt-get install -y graphicsmagick ghostscript
 | 
			
		||||
    fi
 | 
			
		||||
    cd /opt
 | 
			
		||||
    if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
 | 
			
		||||
      mkdir -p /etc/karakeep
 | 
			
		||||
      mv /opt/karakeep/.env /etc/karakeep/karakeep.env
 | 
			
		||||
    fi
 | 
			
		||||
    rm -rf /opt/karakeep
 | 
			
		||||
    curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
 | 
			
		||||
    $STD unzip "v${RELEASE}.zip"
 | 
			
		||||
    mv karakeep-"${RELEASE}" /opt/karakeep
 | 
			
		||||
    cd /opt/karakeep/apps/web
 | 
			
		||||
    $STD pnpm install --frozen-lockfile
 | 
			
		||||
    $STD pnpm build
 | 
			
		||||
    cd /opt/karakeep/apps/workers
 | 
			
		||||
    $STD pnpm install --frozen-lockfile
 | 
			
		||||
    cd /opt/karakeep/apps/cli
 | 
			
		||||
    $STD pnpm install --frozen-lockfile
 | 
			
		||||
    $STD pnpm build
 | 
			
		||||
    cd /opt/karakeep/apps/mcp
 | 
			
		||||
    $STD pnpm install --frozen-lockfile
 | 
			
		||||
    $STD pnpm build
 | 
			
		||||
    export DATA_DIR=/opt/karakeep_data
 | 
			
		||||
    cd /opt/karakeep/packages/db
 | 
			
		||||
    $STD pnpm migrate
 | 
			
		||||
    sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start karakeep-browser karakeep-workers karakeep-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}."
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ -f ~/.karakeep && "$RELEASE" == "$(cat ~/.karakeep)" ]]; then
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Stopping Services"
 | 
			
		||||
  systemctl stop karakeep-web karakeep-workers karakeep-browser
 | 
			
		||||
  msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating yt-dlp"
 | 
			
		||||
  $STD yt-dlp --update-to nightly
 | 
			
		||||
  msg_ok "Updated yt-dlp"
 | 
			
		||||
 | 
			
		||||
  msg_info "Prepare update"
 | 
			
		||||
  if [[ -f /opt/${APP}_version.txt && "$(cat /opt/${APP}_version.txt)" < "0.23.0" ]]; then
 | 
			
		||||
    $STD apt-get install -y graphicsmagick ghostscript
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
 | 
			
		||||
    mkdir -p /etc/karakeep
 | 
			
		||||
    mv /opt/karakeep/.env /etc/karakeep/karakeep.env
 | 
			
		||||
  fi
 | 
			
		||||
  rm -rf /opt/karakeep
 | 
			
		||||
  msg_ok "Update prepared"
 | 
			
		||||
 | 
			
		||||
  if grep -q "start:prod" /etc/systemd/system/karakeep-workers.service; then
 | 
			
		||||
    sed -i 's|^ExecStart=.*$|ExecStart=/usr/bin/node dist/index.mjs|' /etc/systemd/system/karakeep-workers.service
 | 
			
		||||
    systemctl daemon-reload
 | 
			
		||||
  fi
 | 
			
		||||
  fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep"
 | 
			
		||||
  if command -v corepack >/dev/null; then
 | 
			
		||||
    $STD corepack disable
 | 
			
		||||
  fi
 | 
			
		||||
  MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
  corepack enable
 | 
			
		||||
  export PUPPETEER_SKIP_DOWNLOAD="true"
 | 
			
		||||
  export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
 | 
			
		||||
  export NEXT_TELEMETRY_DISABLED=1
 | 
			
		||||
  export CI="true"
 | 
			
		||||
  cd /opt/karakeep/apps/web
 | 
			
		||||
  $STD pnpm install --frozen-lockfile
 | 
			
		||||
  $STD pnpm build
 | 
			
		||||
  cd /opt/karakeep/apps/workers
 | 
			
		||||
  $STD pnpm install --frozen-lockfile
 | 
			
		||||
  $STD pnpm build
 | 
			
		||||
  cd /opt/karakeep/apps/cli
 | 
			
		||||
  $STD pnpm install --frozen-lockfile
 | 
			
		||||
  $STD pnpm build
 | 
			
		||||
  DATA_DIR="$(sed -n '/^DATA_DIR/p' /etc/karakeep/karakeep.env | awk -F= '{print $2}')"
 | 
			
		||||
  export DATA_DIR="${DATA_DIR:-/opt/karakeep_data}"
 | 
			
		||||
  cd /opt/karakeep/packages/db
 | 
			
		||||
  $STD pnpm migrate
 | 
			
		||||
  $STD pnpm store prune
 | 
			
		||||
  sed -i "s/^SERVER_VERSION=.*$/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env
 | 
			
		||||
  msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting Services"
 | 
			
		||||
  systemctl start karakeep-browser karakeep-workers karakeep-web
 | 
			
		||||
  msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
  msg_info "Cleaning up"
 | 
			
		||||
  $STD apt-get autoremove -y
 | 
			
		||||
  $STD apt-get autoclean -y
 | 
			
		||||
  msg_ok "Cleaned"
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								ct/linkstack.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								ct/linkstack.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Omar Minaya | MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://linkstack.org/
 | 
			
		||||
 | 
			
		||||
APP="LinkStack"
 | 
			
		||||
var_tags="${var_tags:-os}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f ~/.linkstack ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  PHP_VERSION="8.3" PHP_MODULE="sqlite3" PHP_APACHE="YES" setup_php
 | 
			
		||||
  msg_warn "LinkStack should be updated via the user interface."
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
							
								
								
									
										97
									
								
								ct/mealie.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								ct/mealie.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://mealie.io
 | 
			
		||||
 | 
			
		||||
APP="Mealie"
 | 
			
		||||
var_tags="${var_tags:-recipes}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/mealie ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/mealie-recipes/mealie/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.mealie 2>/dev/null)" ]] || [[ ! -f ~/.mealie ]]; then
 | 
			
		||||
 | 
			
		||||
    PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
    NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop mealie
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up .env and start.sh"
 | 
			
		||||
    cp -f /opt/mealie/mealie.env /opt/mealie/mealie.env.bak
 | 
			
		||||
    cp -f /opt/mealie/start.sh /opt/mealie/start.sh.bak
 | 
			
		||||
    msg_ok "Backup completed"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
 | 
			
		||||
 | 
			
		||||
    msg_info "Rebuilding Frontend"
 | 
			
		||||
    export NUXT_TELEMETRY_DISABLED=1
 | 
			
		||||
    cd /opt/mealie/frontend
 | 
			
		||||
    $STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
 | 
			
		||||
    $STD yarn generate
 | 
			
		||||
    cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend
 | 
			
		||||
    msg_ok "Frontend rebuilt"
 | 
			
		||||
 | 
			
		||||
    msg_info "Rebuilding Backend Environment"
 | 
			
		||||
    cd /opt/mealie
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9"
 | 
			
		||||
    MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short)
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/poetry build --output dist
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt
 | 
			
		||||
    echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt
 | 
			
		||||
    /opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt
 | 
			
		||||
    echo " \\" >>dist/requirements.txt
 | 
			
		||||
    /opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt
 | 
			
		||||
    msg_ok "Backend prepared"
 | 
			
		||||
 | 
			
		||||
    msg_info "Finalize Installation"
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist
 | 
			
		||||
    msg_ok "Mealie installed"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring Configuration"
 | 
			
		||||
    mv -f /opt/mealie/mealie.env.bak /opt/mealie/mealie.env
 | 
			
		||||
    mv -f /opt/mealie/start.sh.bak /opt/mealie/start.sh
 | 
			
		||||
    chmod +x /opt/mealie/start.sh
 | 
			
		||||
    msg_ok "Configuration restored"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start mealie
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update to $RELEASE Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
 | 
			
		||||
							
								
								
									
										14
									
								
								ct/n8n.sh
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								ct/n8n.sh
									
									
									
									
									
								
							@@ -34,6 +34,18 @@ function update_script() {
 | 
			
		||||
      echo "Installed NPM..."
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  if [ ! -f /opt/n8n.env ]; then
 | 
			
		||||
    sed -i 's|^Environment="N8N_SECURE_COOKIE=false"$|EnvironmentFile="/opt/n8n.env"|' /etc/systemd/system/n8n.service
 | 
			
		||||
    HOST_IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
    mkdir -p /opt
 | 
			
		||||
    cat <<EOF >/opt/n8n.env
 | 
			
		||||
N8N_SECURE_COOKIE=false
 | 
			
		||||
N8N_PORT=5678
 | 
			
		||||
N8N_PROTOCOL=http
 | 
			
		||||
N8N_HOST=$HOST_IP
 | 
			
		||||
EOF
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} LXC"
 | 
			
		||||
  $STD npm update -g n8n
 | 
			
		||||
  systemctl restart n8n
 | 
			
		||||
@@ -48,4 +60,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5678${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5678${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,27 +27,19 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
 | 
			
		||||
    if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat ~/.navidrome 2>/dev/null)" ]] || [[ ! -f ~/.navidrome ]]; then
 | 
			
		||||
        msg_info "Stopping Services"
 | 
			
		||||
        systemctl stop navidrome
 | 
			
		||||
        msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
        TMP_DEB=$(mktemp --suffix=.deb)
 | 
			
		||||
        curl -fsSL -o "${TMP_DEB}" "https://github.com/navidrome/navidrome/releases/download/${RELEASE}/navidrome_${RELEASE#v}_linux_amd64.deb"
 | 
			
		||||
        $STD apt-get install -y "${TMP_DEB}"
 | 
			
		||||
        echo "${RELEASE}" >/opt/"${APP}_version.txt"
 | 
			
		||||
        msg_ok "Updated Navidrome"
 | 
			
		||||
        fetch_and_deploy_gh_release "navidrome" "navidrome/navidrome" "binary"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting Services"
 | 
			
		||||
        systemctl start navidrome
 | 
			
		||||
        msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -f "${TMP_DEB}"
 | 
			
		||||
        msg_ok "Cleaned"
 | 
			
		||||
        msg_ok "Updated Successfully"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,15 +27,34 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if ! command -v pnpm &>/dev/null; then
 | 
			
		||||
    msg_info "Installing pnpm"
 | 
			
		||||
    #export NODE_OPTIONS=--openssl-legacy-provider
 | 
			
		||||
    $STD npm install -g pnpm@8.15
 | 
			
		||||
    msg_ok "Installed pnpm"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
 | 
			
		||||
    grep "tag_name" |
 | 
			
		||||
    awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
 | 
			
		||||
  msg_info "Downloading NPM v${RELEASE}"
 | 
			
		||||
  curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
 | 
			
		||||
  cd nginx-proxy-manager-"${RELEASE}" || exit
 | 
			
		||||
  msg_ok "Downloaded NPM v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Building Frontend"
 | 
			
		||||
  (
 | 
			
		||||
    sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
 | 
			
		||||
    sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
 | 
			
		||||
    cd ./frontend || exit
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    $STD pnpm upgrade
 | 
			
		||||
    $STD pnpm run build
 | 
			
		||||
  )
 | 
			
		||||
  msg_ok "Built Frontend"
 | 
			
		||||
 | 
			
		||||
  msg_info "Stopping Services"
 | 
			
		||||
  systemctl stop openresty
 | 
			
		||||
  systemctl stop npm
 | 
			
		||||
@@ -50,18 +69,11 @@ function update_script() {
 | 
			
		||||
    "$STD" /var/cache/nginx
 | 
			
		||||
  msg_ok "Cleaned Old Files"
 | 
			
		||||
 | 
			
		||||
  msg_info "Downloading NPM v${RELEASE}"
 | 
			
		||||
  curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
 | 
			
		||||
  cd nginx-proxy-manager-"${RELEASE}"
 | 
			
		||||
  msg_ok "Downloaded NPM v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
  ln -sf /usr/local/openresty/nginx/ /etc/nginx
 | 
			
		||||
  sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
 | 
			
		||||
  sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
 | 
			
		||||
  sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
 | 
			
		||||
  NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
 | 
			
		||||
  for NGINX_CONF in $NGINX_CONFS; do
 | 
			
		||||
@@ -97,19 +109,12 @@ function update_script() {
 | 
			
		||||
    $STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem
 | 
			
		||||
  fi
 | 
			
		||||
  mkdir -p /app/global /app/frontend/images
 | 
			
		||||
  cp -r frontend/dist/* /app/frontend
 | 
			
		||||
  cp -r frontend/app-images/* /app/frontend/images
 | 
			
		||||
  cp -r backend/* /app
 | 
			
		||||
  cp -r global/* /app/global
 | 
			
		||||
  $STD python3 -m pip install --no-cache-dir certbot-dns-cloudflare
 | 
			
		||||
  msg_ok "Setup Enviroment"
 | 
			
		||||
 | 
			
		||||
  msg_info "Building Frontend"
 | 
			
		||||
  cd ./frontend
 | 
			
		||||
  $STD pnpm install
 | 
			
		||||
  $STD pnpm upgrade
 | 
			
		||||
  $STD pnpm run build
 | 
			
		||||
  cp -r dist/* /app/frontend
 | 
			
		||||
  cp -r app-images/* /app/frontend/images
 | 
			
		||||
  msg_ok "Built Frontend"
 | 
			
		||||
  $STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare
 | 
			
		||||
  msg_ok "Setup Environment"
 | 
			
		||||
 | 
			
		||||
  msg_info "Initializing Backend"
 | 
			
		||||
  $STD rm -rf /app/config/default.json
 | 
			
		||||
@@ -128,7 +133,7 @@ function update_script() {
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
  fi
 | 
			
		||||
  cd /app
 | 
			
		||||
  cd /app || exit
 | 
			
		||||
  $STD pnpm install
 | 
			
		||||
  msg_ok "Initialized Backend"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -57,7 +57,7 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  systemctl stop open-webui.service
 | 
			
		||||
  $STD npm install
 | 
			
		||||
  $STD npm install --force
 | 
			
		||||
  export NODE_OPTIONS="--max-old-space-size=3584"
 | 
			
		||||
  $STD npm run build
 | 
			
		||||
  cd ./backend
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								ct/peanut.sh
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								ct/peanut.sh
									
									
									
									
									
								
							@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
APP="PeaNUT"
 | 
			
		||||
var_tags="${var_tags:-network;ups;}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-3072}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-7}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
@@ -27,22 +27,31 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.peanut 2>/dev/null)" ]] || [[ ! -f ~/.peanut ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop peanut
 | 
			
		||||
    curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz"
 | 
			
		||||
    tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1
 | 
			
		||||
    rm peanut.tar.gz
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    cd /opt/peanut
 | 
			
		||||
    $STD pnpm i
 | 
			
		||||
    $STD pnpm run build
 | 
			
		||||
    $STD pnpm run build:local
 | 
			
		||||
    cp -r .next/static .next/standalone/.next/
 | 
			
		||||
    mkdir -p /opt/peanut/.next/standalone/config
 | 
			
		||||
    ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
 | 
			
		||||
    systemctl start peanut
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start peanut
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								ct/planka.sh
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								ct/planka.sh
									
									
									
									
									
								
							@@ -28,33 +28,33 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/plankanban/planka/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/plankanban/planka/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.planka 2>/dev/null)" ]] || [[ ! -f ~/.planka ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop planka
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    mkdir -p /opt/planka-backup
 | 
			
		||||
    mkdir -p /opt/planka-backup/favicons
 | 
			
		||||
    mkdir -p /opt/planka-backup/user-avatars
 | 
			
		||||
    mkdir -p /opt/planka-backup/background-images
 | 
			
		||||
    mkdir -p /opt/planka-backup/attachments
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    mkdir -p /opt/planka-backup/{favicons,user-avatars,background-images,attachments}
 | 
			
		||||
    mv /opt/planka/.env /opt/planka-backup
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/public/favicons/* /opt/planka-backup/favicons/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/public/user-avatars/* /opt/planka-backup/user-avatars/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/public/background-images/* /opt/planka-backup/background-images/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/private/attachments/* /opt/planka-backup/attachments/
 | 
			
		||||
    [ -d /opt/planka/public/favicons ] && find /opt/planka/public/favicons -maxdepth 1 -type f -exec mv -t /opt/planka-backup/favicons {} +
 | 
			
		||||
    [ -d /opt/planka/public/user-avatars ] && find /opt/planka/public/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka-backup/user-avatars {} +
 | 
			
		||||
    [ -d /opt/planka/public/background-images ] && find /opt/planka/public/background-images -maxdepth 1 -type f -exec mv -t /opt/planka-backup/background-images {} +
 | 
			
		||||
    [ -d /opt/planka/private/attachments ] && find /opt/planka/private/attachments -maxdepth 1 -type f -exec mv -t /opt/planka-backup/attachments {} +
 | 
			
		||||
    rm -rf /opt/planka
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
 | 
			
		||||
    cd /opt/planka
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    
 | 
			
		||||
    msg_info "Restoring data"
 | 
			
		||||
    mv /opt/planka-backup/.env /opt/planka/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/public/favicons/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/public/user-avatars/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/public/background-images/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/private/attachments/
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
    [ -d /opt/planka-backup/favicons ] && find /opt/planka-backup/favicons -maxdepth 1 -type f -exec mv -t /opt/planka/public/favicons {} +
 | 
			
		||||
    [ -d /opt/planka-backup/user-avatars ] && find /opt/planka-backup/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka/public/user-avatars {} +
 | 
			
		||||
    [ -d /opt/planka-backup/background-images ] && find /opt/planka-backup/background-images -maxdepth 1 -type f -exec mv -t /opt/planka/public/background-images {} +
 | 
			
		||||
    [ -d /opt/planka-backup/attachments ] && find /opt/planka-backup/attachments -maxdepth 1 -type f -exec mv -t /opt/planka/private/attachments {} +
 | 
			
		||||
    msg_ok "Restored data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start planka
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://rxresu.me
 | 
			
		||||
# Source: https://rxresume.org
 | 
			
		||||
 | 
			
		||||
APP="Reactive-Resume"
 | 
			
		||||
var_tags="${var_tags:-documents}"
 | 
			
		||||
@@ -20,80 +20,75 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
    if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/AmruthPillai/Reactive-Resume/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
        msg_info "Stopping services"
 | 
			
		||||
        systemctl stop Reactive-Resume
 | 
			
		||||
        msg_ok "Stopped services"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
        cp /opt/${APP}/.env /opt/rxresume.env
 | 
			
		||||
        res_tmp=$(mktemp)
 | 
			
		||||
        rm -rf /opt/${APP}
 | 
			
		||||
        curl -fsSL "https://github.com/AmruthPillai/Reactive-Resume/archive/refs/tags/v${RELEASE}.zip" -O $res_tmp
 | 
			
		||||
        $STD unzip $res_tmp
 | 
			
		||||
        mv ${APP}-${RELEASE}/ /opt/${APP}
 | 
			
		||||
        cd /opt/${APP}
 | 
			
		||||
        export PUPPETEER_SKIP_DOWNLOAD="true"
 | 
			
		||||
        export NEXT_TELEMETRY_DISABLED=1
 | 
			
		||||
        export CI="true"
 | 
			
		||||
        export NODE_ENV="production"
 | 
			
		||||
        $STD pnpm install --frozen-lockfile
 | 
			
		||||
        $STD pnpm run build
 | 
			
		||||
        $STD pnpm run prisma:generate
 | 
			
		||||
        mv /opt/rxresume.env /opt/${APP}/.env
 | 
			
		||||
        msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating Minio"
 | 
			
		||||
        systemctl stop minio
 | 
			
		||||
        cd /tmp
 | 
			
		||||
        curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio.deb -o minio.deb
 | 
			
		||||
        $STD dpkg -i minio.deb
 | 
			
		||||
        msg_ok "Updated Minio"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating Browserless (Patience)"
 | 
			
		||||
        systemctl stop browserless
 | 
			
		||||
        cp /opt/browserless/.env /opt/browserless.env
 | 
			
		||||
        rm -rf browserless
 | 
			
		||||
        brwsr_tmp=$(mktemp)
 | 
			
		||||
        TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
        curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v${TAG}.zip -O $brwsr_tmp
 | 
			
		||||
        $STD unzip $brwsr_tmp
 | 
			
		||||
        mv browserless-${TAG}/ /opt/browserless
 | 
			
		||||
        cd /opt/browserless
 | 
			
		||||
        $STD npm install
 | 
			
		||||
        rm -rf src/routes/{chrome,edge,firefox,webkit}
 | 
			
		||||
        $STD node_modules/playwright-core/cli.js install --with-deps chromium
 | 
			
		||||
        $STD npm run build
 | 
			
		||||
        $STD npm run build:function
 | 
			
		||||
        $STD npm prune production
 | 
			
		||||
        mv /opt/browserless.env /opt/browserless/.env
 | 
			
		||||
        msg_ok "Updated Browserless"
 | 
			
		||||
 | 
			
		||||
        msg_info "Restarting services"
 | 
			
		||||
        systemctl start minio Reactive-Resume browserless
 | 
			
		||||
        msg_ok "Restarted services"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -f /tmp/minio.deb
 | 
			
		||||
        rm -f $brwsr_tmp
 | 
			
		||||
        rm -f $res_tmp
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
        msg_ok "Update Successful"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
    fi
 | 
			
		||||
  if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then
 | 
			
		||||
    msg_error "No $APP Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/lazy-media/Reactive-Resume/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ ! -f "$HOME"/.reactive-resume ]] || [[ "$RELEASE" != "$(cat "$HOME"/.reactive-resume)" ]]; then
 | 
			
		||||
    msg_info "Stopping services"
 | 
			
		||||
    systemctl stop Reactive-Resume
 | 
			
		||||
    msg_ok "Stopped services"
 | 
			
		||||
 | 
			
		||||
    cp /opt/"$APP"/.env /opt/rxresume.env
 | 
			
		||||
    rm -rf /opt/"$APP"
 | 
			
		||||
    fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume"
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    cd /opt/"$APP"
 | 
			
		||||
    export PUPPETEER_SKIP_DOWNLOAD="true"
 | 
			
		||||
    export NEXT_TELEMETRY_DISABLED=1
 | 
			
		||||
    export CI="true"
 | 
			
		||||
    export NODE_ENV="production"
 | 
			
		||||
    $STD pnpm install --frozen-lockfile
 | 
			
		||||
    $STD pnpm run build
 | 
			
		||||
    $STD pnpm run prisma:generate
 | 
			
		||||
    mv /opt/rxresume.env /opt/"$APP"/.env
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Minio"
 | 
			
		||||
    systemctl stop minio
 | 
			
		||||
    cd /tmp
 | 
			
		||||
    curl -fsSL https://dl.min.io/server/minio/release/linux-amd64/minio.deb -o minio.deb
 | 
			
		||||
    $STD dpkg -i minio.deb
 | 
			
		||||
    msg_ok "Updated Minio"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Browserless (Patience)"
 | 
			
		||||
    systemctl stop browserless
 | 
			
		||||
    cp /opt/browserless/.env /opt/browserless.env
 | 
			
		||||
    rm -rf /opt/browserless
 | 
			
		||||
    brwsr_tmp=$(mktemp)
 | 
			
		||||
    TAG=$(curl -fsSL https://api.github.com/repos/browserless/browserless/tags?per_page=1 | grep "name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
    curl -fsSL https://github.com/browserless/browserless/archive/refs/tags/v"$TAG".zip -o "$brwsr_tmp"
 | 
			
		||||
    $STD unzip "$brwsr_tmp"
 | 
			
		||||
    mv browserless-"$TAG"/ /opt/browserless
 | 
			
		||||
    cd /opt/browserless
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    rm -rf src/routes/{chrome,edge,firefox,webkit}
 | 
			
		||||
    $STD node_modules/playwright-core/cli.js install --with-deps chromium
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    $STD npm run build:function
 | 
			
		||||
    $STD npm prune production
 | 
			
		||||
    mv /opt/browserless.env /opt/browserless/.env
 | 
			
		||||
    msg_ok "Updated Browserless"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restarting services"
 | 
			
		||||
    systemctl start minio Reactive-Resume browserless
 | 
			
		||||
    msg_ok "Restarted services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f /tmp/minio.deb
 | 
			
		||||
    rm -f "$brwsr_tmp"
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. $APP is already at v{$RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,7 @@ function update_script() {
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    setup_uv
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    systemctl stop sabnzbd
 | 
			
		||||
    cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										50
									
								
								ct/salt.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								ct/salt.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: bvdberg01
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/saltstack/salt
 | 
			
		||||
 | 
			
		||||
APP="Salt"
 | 
			
		||||
var_tags="${var_tags:-automations}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-3}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /etc/salt ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
			
		||||
  if [[ ! -f /~.salt ]] || [[ "${RELEASE}" != "$(cat /~.salt)" ]]; then
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    sed -i "s/^\(Pin: version \).*/\1${RELEASE}/" /etc/apt/preferences.d/salt-pin-1001
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get upgrade -y
 | 
			
		||||
    echo "${RELEASE}" >/~.salt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "${APP} is already up to date (${RELEASE})"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
							
								
								
									
										63
									
								
								ct/teamspeak-server.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								ct/teamspeak-server.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: tremor021 (Slaviša Arežina)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://teamspeak.com/en/
 | 
			
		||||
 | 
			
		||||
APP="Teamspeak-Server"
 | 
			
		||||
var_tags="${var_tags:-voice;communication}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/teamspeak-server ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | grep -oP 'teamspeak3-server_linux_amd64-\K[0-9]+\.[0-9]+\.[0-9]+' | head -1)
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.teamspeak-server 2>/dev/null)" ]] || [[ ! -f ~/.teamspeak-server ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop teamspeak-server
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
 | 
			
		||||
    tar -xf ./ts3server.tar.bz2
 | 
			
		||||
    cp -ru teamspeak3-server_linux_amd64/* /opt/teamspeak-server/
 | 
			
		||||
    rm -f ~/ts3server.tar.bz*
 | 
			
		||||
    echo "${RELEASE}" >~/.teamspeak-server
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start teamspeak-server
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "Already up to date"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}:9987${CL}"
 | 
			
		||||
@@ -29,7 +29,7 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.threadfin 2>/dev/null)" ]] || [[ ! -f ~/.threadfin ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.threadfin_version 2>/dev/null)" ]] || [[ ! -f ~/.threadfin_version ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop threadfin
 | 
			
		||||
 
 | 
			
		||||
@@ -27,31 +27,25 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ ! -f ~/.victoriametrics ]] || [[ "${RELEASE}" != "$(cat ~/.victoriametrics)" ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop victoriametrics
 | 
			
		||||
    [[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl stop victoriametrics-logs
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    temp_dir=$(mktemp -d)
 | 
			
		||||
    cd $temp_dir
 | 
			
		||||
    curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz")
 | 
			
		||||
    curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz")
 | 
			
		||||
    find /opt/victoriametrics -maxdepth 1 -type f -executable -delete
 | 
			
		||||
    tar -xf victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
 | 
			
		||||
    tar -xf vmutils-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
 | 
			
		||||
    fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "victoria-metrics-linux-amd64-v+([0-9.]).tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "vmutils-linux-amd64-v+([0-9.]).tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
 | 
			
		||||
    chmod +x /opt/victoriametrics/*
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start victoriametrics
 | 
			
		||||
    [[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl start victoriametrics-logs
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf $temp_dir
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -41,6 +41,9 @@ function update_script() {
 | 
			
		||||
    rm -rf /opt/wallos/db/wallos.empty.db
 | 
			
		||||
    mv /opt/wallos.db /opt/wallos/db/wallos.db
 | 
			
		||||
    mv /opt/logos/* /opt/wallos/images/uploads/logos
 | 
			
		||||
    if ! grep -q "storetotalyearlycost.php" /opt/wallos.cron; then
 | 
			
		||||
      echo "30 1 * * 1 php /opt/wallos/endpoints/cronjobs/storetotalyearlycost.php >> /var/log/cron/storetotalyearlycost.log 2>&1" >> /opt/wallos.cron
 | 
			
		||||
    fi
 | 
			
		||||
    chown -R www-data:www-data /opt/wallos
 | 
			
		||||
    chmod -R 755 /opt/wallos
 | 
			
		||||
    mkdir -p /var/log/cron
 | 
			
		||||
 
 | 
			
		||||
@@ -45,13 +45,13 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    cd /opt/wizarr
 | 
			
		||||
    uv -q sync --locked
 | 
			
		||||
    $STD uv -q run pybabel compile -d app/translations
 | 
			
		||||
    /usr/local/bin/uv -q sync --locked
 | 
			
		||||
    $STD /usr/local/bin/uv -q run pybabel compile -d app/translations
 | 
			
		||||
    $STD npm --prefix app/static install
 | 
			
		||||
    $STD npm --prefix app/static run build:css
 | 
			
		||||
    mkdir -p ./.cache
 | 
			
		||||
    $STD tar -xf "$BACKUP_FILE" --directory=/
 | 
			
		||||
    $STD uv -q run flask db upgrade
 | 
			
		||||
    $STD /usr/local/bin/uv -q run flask db upgrade
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -7749,9 +7749,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/form-data": {
 | 
			
		||||
      "version": "4.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==",
 | 
			
		||||
      "version": "4.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
 | 
			
		||||
      "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/bar-assistant.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/bar-assistant.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Bar-Assistant",
 | 
			
		||||
  "slug": "bar-assistant",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    24
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-07-14",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 80,
 | 
			
		||||
  "documentation": "https://docs.barassistant.app/",
 | 
			
		||||
  "website": "https://barassistant.app/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/bar-assistant.webp",
 | 
			
		||||
  "config_path": "/opt/bar-assistant",
 | 
			
		||||
  "description": "Bar Assistant is all-in-one solution for managing your home bar. Compared to other recipe management software that usually tries to be more for general use, Bar Assistant is made specifically for managing cocktail recipes. This means that there are a lot of cocktail-oriented features, like ingredient substitutes, first-class ingredients, ABV calculations, unit switching and more..",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/bar-assistant.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -1,40 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Calibre-Web",
 | 
			
		||||
  "slug": "calibre-web",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    11
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8083,
 | 
			
		||||
  "documentation": "https://github.com/janeczku/calibre-web/wiki",
 | 
			
		||||
  "website": "https://github.com/janeczku/calibre-web",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/calibre-web.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "Calibre-Web is a web app for browsing, reading and downloading eBooks stored in a Calibre database.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/calibre-web.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": "admin",
 | 
			
		||||
    "password": "admin123"
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Add Calibre-Web Extras via `update`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/cleanuparr.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/cleanuparr.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Cleanuparr",
 | 
			
		||||
  "slug": "cleanuparr",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    14
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-07-25",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 11011,
 | 
			
		||||
  "documentation": "https://cleanuparr.github.io/Cleanuparr/docs/",
 | 
			
		||||
  "website": "https://github.com/Cleanuparr/Cleanuparr",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/cleanuparr.webp",
 | 
			
		||||
  "config_path": "/opt/cleanuparr/config",
 | 
			
		||||
  "description": "Cleanuparr is a tool for automating the cleanup of unwanted or blocked files in Sonarr, Radarr, and supported download clients like qBittorrent, Transmission, and Deluge. It removes incomplete, blocked, or malicious downloads and can trigger replacement searches to ensure your media library stays complete and up-to-date.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/cleanuparr.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								frontend/public/json/cloudreve.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/public/json/cloudreve.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Cloudreve",
 | 
			
		||||
  "slug": "cloudreve",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    12
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-07-17",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 5212,
 | 
			
		||||
  "documentation": "https://docs.cloudreve.org/en/",
 | 
			
		||||
  "website": "https://cloudreve.org/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/cloudreve.webp",
 | 
			
		||||
  "config_path": "/opt/cloudreve/data/conf.ini",
 | 
			
		||||
  "description": "Cloudreve is an open-source, community-driven cloud storage system that provides file sharing, synchronization, and management features. It supports a wide range of storage backends and integrates with various notification and logging platforms.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/cloudreve.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 10,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "After Installation: Register your user -> Login -> Dashboard -> Accept Primary URL.",
 | 
			
		||||
      "type": "warn"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3012,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "documentation": "https://github.com/jhuckaby/Cronicle/blob/master/README.md",
 | 
			
		||||
  "website": "https://github.com/jhuckaby/Cronicle",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/chronicle.webp",
 | 
			
		||||
  "config_path": "/opt/cronicle/conf/config.json",
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 80,
 | 
			
		||||
  "documentation": "https://gotify.net/docs/index",
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,10 @@
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Configuration settings: `/etc/headscale/config.yaml`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Access headscale-admin UI via `http://<LXC-IP>/admin/`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 1883,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "documentation": "https://github.com/hivemq/hivemq-community-edition/wiki",
 | 
			
		||||
  "website": "https://www.hivemq.com/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/hivemq.webp",
 | 
			
		||||
  "config_path": "/opt/hivemq/conf/config.xml",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								frontend/public/json/linkstack.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								frontend/public/json/linkstack.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "LinkStack",
 | 
			
		||||
  "slug": "linkstack",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    9
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-07-22",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "config_path": "/var/www/html/linkstack/.env",
 | 
			
		||||
  "interface_port": 80,
 | 
			
		||||
  "documentation": "https://docs.linkstack.org/",
 | 
			
		||||
  "website": "https://linkstack.org/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/linkstack.webp",
 | 
			
		||||
  "description": "LinkStack is an open-source, self-hosted alternative to Linktree, allowing users to create a customizable profile page to share multiple links, hosted on their own server.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/linkstack.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "LinkStack can be updated via the user interface.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Complete setup via the web interface at http://<container-ip>/. Check installation logs: `cat ~/linkstack-install.log`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/mealie.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/mealie.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Mealie",
 | 
			
		||||
  "slug": "mealie",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    13
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-07-14",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "config_path": "/opt/mealie/mealie.env",
 | 
			
		||||
  "interface_port": 9000,
 | 
			
		||||
  "documentation": "https://mealie.io/",
 | 
			
		||||
  "website": "https://mealie.io/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/mealie.webp",
 | 
			
		||||
  "description": "Mealie is a self hosted recipe manager, meal planner and shopping list with a RestAPI backend and a reactive frontend built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the URL and Mealie will automatically import the relevant data, or add a family recipe with the UI editor. Mealie also provides an API for interactions from 3rd party applications.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/mealie.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 10,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
  "documentation": "https://docs.n8n.io/",
 | 
			
		||||
  "website": "https://n8n.io/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/n8n.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "config_path": "/opt/n8n.env",
 | 
			
		||||
  "description": "n8n is a workflow automation tool that enables users to automate various tasks and processes by connecting various data sources, systems, and services. It provides a visual interface for building workflows, allowing users to easily define and automate complex sequences of actions, such as data processing, conditional branching, and API calls. n8n supports a wide range of integrations, making it a versatile tool for automating a variety of use cases, from simple data processing workflows to complex business processes. With its extendable architecture, n8n is designed to be easily customizable and can be adapted to meet the specific needs of different users and industries.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
@@ -31,5 +31,10 @@
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "You may need to configure the `WEBHOOK_URL` in the config file when using a domain.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,40 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Navidrome",
 | 
			
		||||
    "slug": "navidrome",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        13
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 4533,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://www.navidrome.org/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/navidrome.webp",
 | 
			
		||||
    "config_path": "/etc/navidrome/navidrome.toml",
 | 
			
		||||
    "description": "Navidrome is a music server solution that makes your music collection accessible from anywhere. It provides a modern web-based user interface and compatibility with a range of third-party mobile apps for both iOS and Android devices. With Navidrome, users can access their music collection from anywhere, whether at home or on the go. The software supports a variety of music formats, making it easy for users to play their favorite songs and albums. Navidrome provides a simple and user-friendly interface for managing and organizing music collections, making it a valuable tool for music lovers who want to access their music from anywhere. The software is designed to be easy to set up and use, making it a popular choice for those who want to host their own music server and enjoy their music collection from anywhere.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/navidrome.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "To change Navidrome music folder path, `nano /etc/navidrome/navidrome.toml`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
  "name": "Navidrome",
 | 
			
		||||
  "slug": "navidrome",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    13
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 4533,
 | 
			
		||||
  "documentation": "https://www.navidrome.org/docs/",
 | 
			
		||||
  "website": "https://www.navidrome.org/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/navidrome.webp",
 | 
			
		||||
  "config_path": "/etc/navidrome/navidrome.toml",
 | 
			
		||||
  "description": "Navidrome is a music server solution that makes your music collection accessible from anywhere. It provides a modern web-based user interface and compatibility with a range of third-party mobile apps for both iOS and Android devices. With Navidrome, users can access their music collection from anywhere, whether at home or on the go. The software supports a variety of music formats, making it easy for users to play their favorite songs and albums. Navidrome provides a simple and user-friendly interface for managing and organizing music collections, making it a valuable tool for music lovers who want to access their music from anywhere. The software is designed to be easy to set up and use, making it a popular choice for those who want to host their own music server and enjoy their music collection from anywhere.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/navidrome.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To change Navidrome music folder path, `nano /etc/navidrome/navidrome.toml`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "NIC Offloading Fix",
 | 
			
		||||
  "name": "Intel e1000e NIC Offloading Fix",
 | 
			
		||||
  "slug": "nic-offloading-fix",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
  "name": "ONLYOFFICE Docs",
 | 
			
		||||
  "slug": "onlyoffice",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    9
 | 
			
		||||
    12
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-06-24",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,41 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "OPNsense",
 | 
			
		||||
  "slug": "opnsense-vm",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    4,
 | 
			
		||||
    2
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-02-11",
 | 
			
		||||
  "type": "vm",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 443,
 | 
			
		||||
  "documentation": "https://docs.opnsense.org/",
 | 
			
		||||
  "website": "https://opnsense.org/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/opnsense.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "OPNsense is an open-source firewall and routing platform based on FreeBSD. It provides advanced security features, including intrusion detection, VPN support, traffic shaping, and web filtering, with an intuitive web interface for easy management. Known for its reliability and regular updates, OPNsense is a popular choice for both businesses and home networks.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "vm/opnsense-vm.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 4,
 | 
			
		||||
        "ram": 8192,
 | 
			
		||||
        "hdd": 10,
 | 
			
		||||
        "os": "FreeBSD",
 | 
			
		||||
        "version": "latest"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": "root",
 | 
			
		||||
    "password": "opnsense"
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "It will fail with default settings if there is no vmbr0 and vmbr1 on your node. Use advanced settings in this case.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,35 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "PeaNUT",
 | 
			
		||||
    "slug": "peanut",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        4
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-06-14",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 3000,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://github.com/Brandawg93/PeaNUT/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp",
 | 
			
		||||
    "config_path": "/etc/peanut/settings.yml",
 | 
			
		||||
    "description": "PeaNUT is a small dashboard for Network UPS Tools (NUT). It provides a web interface to monitor and manage UPS devices. PeaNUT allows users to view device status, retrieve information, and manage UPS parameters through its API. It's customizable for different UPS devices and supports integration with the Homepage dashboard.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/peanut.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 3072,
 | 
			
		||||
                "hdd": 7,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
  "name": "PeaNUT",
 | 
			
		||||
  "slug": "peanut",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    4
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-06-14",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://github.com/Brandawg93/PeaNUT/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/peanut.webp",
 | 
			
		||||
  "config_path": "/etc/peanut/settings.yml",
 | 
			
		||||
  "description": "PeaNUT is a small dashboard for Network UPS Tools (NUT). It provides a web interface to monitor and manage UPS devices. PeaNUT allows users to view device status, retrieve information, and manage UPS parameters through its API. It's customizable for different UPS devices and supports integration with the Homepage dashboard.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/peanut.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 7,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Create Proxmox-API-Token first: `https://github.com/rcourtman/Pulse?tab=readme-ov-file#creating-a-proxmox-api-token`",
 | 
			
		||||
      "text": "Create Proxmox-API-Token first: `https://github.com/rcourtman/Pulse?tab=readme-ov-file#creating-api-token`",
 | 
			
		||||
      "type": "Info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -9,8 +9,8 @@
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://docs.rxresu.me/",
 | 
			
		||||
  "website": "https://rxresu.me",
 | 
			
		||||
  "documentation": "https://docs.rxresume.org/",
 | 
			
		||||
  "website": "https://rxresume.org",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/reactive-resume-light.png",
 | 
			
		||||
    "config_path": "/opt/reactive-resume/.env",
 | 
			
		||||
  "description": "A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever.",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/salt.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/salt.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Salt",
 | 
			
		||||
  "slug": "salt",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    19
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-07-22",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "config_path": "/opt/salt/.env",
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://docs.saltproject.io/salt/install-guide/en/latest/",
 | 
			
		||||
  "website": "https://saltproject.io/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/salt.webp",
 | 
			
		||||
  "description": "SaltStack Salt is a software for automating the management and configuration of IT infrastructure and applications. It is an event-driven automation tool and framework used to deploy, configure, and manage complex IT systems. Its primary functions include configuration management, where it ensures consistent configurations and manages operating system deployment and software installation. It also automates and orchestrates routine IT processes and can create self-aware, self-healing systems.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/salt.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 3,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										55
									
								
								frontend/public/json/teamspeak-server.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								frontend/public/json/teamspeak-server.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Teamspeak-Server",
 | 
			
		||||
  "slug": "teamspeak-server",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    24
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-07-21",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 9987,
 | 
			
		||||
  "documentation": "https://support.teamspeak.com/hc/en-us/categories/360000302017-TeamSpeak-3",
 | 
			
		||||
  "website": "https://teamspeak.com/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/teamspeak-light.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "TeamSpeak is a voice over IP (VoIP) application, primarily used by gamers and teams to chat in real time on dedicated servers. It delivers crystal‑clear, low‑latency voice communication.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/teamspeak-server.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "type": "alpine",
 | 
			
		||||
      "script": "ct/alpine-teamspeak-server.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 256,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "os": "alpine",
 | 
			
		||||
        "version": "3.22"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Use `journalctl -u teamspeak-server.service` inside Debian LXC console to check for admin credentials!",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Use `cat /var/log/teamspeak.err.log` inside Alpine LXC console to check for admin credentials!",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -45,7 +45,7 @@ export const navbarLinks = [
 | 
			
		||||
export const mostPopularScripts = ["post-pve-install", "docker", "homeassistant"];
 | 
			
		||||
 | 
			
		||||
export const analytics = {
 | 
			
		||||
  url: "analytics.community-scripts.org",
 | 
			
		||||
  url: "analytics.bramsuurd.nl",
 | 
			
		||||
  token: "aefee1b9-2a12-4ac2-9d82-a63113edc62e",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ $STD apt-get install -y \
 | 
			
		||||
  nginx
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
 | 
			
		||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
 | 
			
		||||
setup_composer
 | 
			
		||||
setup_mariadb
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,8 @@ update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  make
 | 
			
		||||
  make \
 | 
			
		||||
  g++
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Actual Budget"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										68
									
								
								install/alpine-teamspeak-server-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								install/alpine-teamspeak-server-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: tremor021 (Slaviša Arežina)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://teamspeak.com/en/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing dependencies"
 | 
			
		||||
$STD apk add --no-cache \
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  libstdc++ \
 | 
			
		||||
  libc6-compat
 | 
			
		||||
msg_ok "Installed dependencies"
 | 
			
		||||
 | 
			
		||||
RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n 's/.*teamspeak3-server_linux_amd64-\([0-9.]\+\).*/\1/p' | head -1)
 | 
			
		||||
msg_info "Installing Teamspeak Server v${RELEASE}"
 | 
			
		||||
mkdir -p /opt/teamspeak-server
 | 
			
		||||
cd /opt/teamspeak-server
 | 
			
		||||
curl -fsSL "https://files.teamspeak-services.com/releases/server/${RELEASE}/teamspeak3-server_linux_amd64-${RELEASE}.tar.bz2" -o ts3server.tar.bz2
 | 
			
		||||
tar xf ts3server.tar.bz2 --strip-components=1
 | 
			
		||||
mkdir -p logs data lib
 | 
			
		||||
mv *.so lib
 | 
			
		||||
touch data/ts3server.sqlitedb data/query_ip_blacklist.txt data/query_ip_whitelist.txt .ts3server_license_accepted
 | 
			
		||||
echo "${RELEASE}" >~/.teamspeak-server
 | 
			
		||||
msg_ok "Installed TeamSpeak Server v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
msg_info "Enabling TeamSpeak Server Service"
 | 
			
		||||
cat <<EOF >/etc/init.d/teamspeak
 | 
			
		||||
#!/sbin/openrc-run
 | 
			
		||||
 | 
			
		||||
name="TeamSpeak Server"
 | 
			
		||||
description="TeamSpeak 3 Server"
 | 
			
		||||
command="/opt/teamspeak-server/ts3server_startscript.sh"
 | 
			
		||||
command_args="start"
 | 
			
		||||
output_log="/var/log/teamspeak.out.log"
 | 
			
		||||
error_log="/var/log/teamspeak.err.log"
 | 
			
		||||
command_background=true
 | 
			
		||||
pidfile="/run/teamspeak-server.pid"
 | 
			
		||||
directory="/opt/teamspeak-server"
 | 
			
		||||
 | 
			
		||||
depend() {
 | 
			
		||||
    need net
 | 
			
		||||
    use dns
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
chmod +x /etc/init.d/teamspeak
 | 
			
		||||
$STD rc-update add teamspeak default
 | 
			
		||||
msg_ok "Enabled TeamSpeak Server Service"
 | 
			
		||||
 | 
			
		||||
msg_info "Starting TeamSpeak Server"
 | 
			
		||||
$STD service teamspeak start
 | 
			
		||||
msg_ok "Started TeamSpeak Server"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -r ts3server.tar.bz* LICENSE* CHANGELOG doc serverquerydocs tsdns redist
 | 
			
		||||
$STD apk cache clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -13,17 +13,7 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  jq
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Argus"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/release-argus/Argus/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
			
		||||
mkdir -p /opt/argus
 | 
			
		||||
curl -fsSL "https://github.com/release-argus/Argus/releases/download/${RELEASE}/Argus-${RELEASE}.linux-amd64" -o /opt/argus/Argus
 | 
			
		||||
chmod +x /opt/argus/Argus
 | 
			
		||||
msg_ok "Setup Argus"
 | 
			
		||||
fetch_and_deploy_gh_release "Argus" "release-argus/Argus" "singlefile" "latest" "/opt/argus" "Argus*linux-amd64"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Argus Config"
 | 
			
		||||
cat <<EOF >/opt/argus/config.yml
 | 
			
		||||
@@ -71,7 +61,6 @@ service:
 | 
			
		||||
      icon_link_to: https://helper-scripts.com/
 | 
			
		||||
      web_url: https://github.com/community-scripts/ProxmoxVE/releases
 | 
			
		||||
EOF
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Setup Config"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ update_os
 | 
			
		||||
 | 
			
		||||
PG_VERSION="16" setup_postgresql
 | 
			
		||||
PHP_APACHE="YES" PHP_MODULE="pgsql" PHP_VERSION="8.2" setup_php
 | 
			
		||||
setup_composer
 | 
			
		||||
fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up PostgreSQL Database"
 | 
			
		||||
@@ -32,6 +33,8 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMP
 | 
			
		||||
msg_ok "Set up PostgreSQL Database"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Baikal"
 | 
			
		||||
cd /opt/baikal
 | 
			
		||||
$STD composer install
 | 
			
		||||
cat <<EOF >/opt/baikal/config/baikal.yaml
 | 
			
		||||
database:
 | 
			
		||||
    backend: pgsql
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										197
									
								
								install/bar-assistant-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										197
									
								
								install/bar-assistant-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,197 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: bvdberg01 | CanbiZ
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/karlomikus/bar-assistant
 | 
			
		||||
# Source: https://github.com/karlomikus/vue-salt-rim
 | 
			
		||||
# Source: https://www.meilisearch.com/
 | 
			
		||||
 | 
			
		||||
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 \
 | 
			
		||||
  redis-server \
 | 
			
		||||
  nginx \
 | 
			
		||||
  lsb-release \
 | 
			
		||||
  libvips
 | 
			
		||||
#php-{ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm}
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PHP_VERSION="8.3" PHP_FPM=YES PHP_MODULE="ffi,opcache,redis,zip,pdo-sqlite,bcmath,pdo,curl,dom,fpm" setup_php
 | 
			
		||||
setup_composer
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
 | 
			
		||||
fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
 | 
			
		||||
fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring PHP"
 | 
			
		||||
PHPVER=$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION . "\n";')
 | 
			
		||||
sed -i.bak -E 's/^\s*;?\s*ffi\.enable\s*=.*/ffi.enable=true/' /etc/php/${PHPVER}/fpm/php.ini
 | 
			
		||||
$STD systemctl reload php${PHPVER}-fpm
 | 
			
		||||
msg_info "configured PHP"
 | 
			
		||||
 | 
			
		||||
msg_info "Configure MeiliSearch"
 | 
			
		||||
curl -fsSL 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|' \
 | 
			
		||||
  -e 's|^http_addr =.*|http_addr = "127.0.0.1:7700"|' \
 | 
			
		||||
  /etc/meilisearch.toml
 | 
			
		||||
msg_ok "Configured MeiliSearch"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating MeiliSearch service"
 | 
			
		||||
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
 | 
			
		||||
systemctl enable -q --now meilisearch
 | 
			
		||||
sleep 5
 | 
			
		||||
msg_ok "Created Service MeiliSearch"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Bar Assistant"
 | 
			
		||||
cd /opt/bar-assistant
 | 
			
		||||
cp /opt/bar-assistant/.env.dist /opt/bar-assistant/.env
 | 
			
		||||
mkdir -p /opt/bar-assistant/resources/data
 | 
			
		||||
curl -fsSL https://github.com/bar-assistant/data/archive/refs/heads/v5.tar.gz | tar -xz --strip-components=1 -C /opt/bar-assistant/resources/data
 | 
			
		||||
MeiliSearch_API_KEY=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"key":"[^"]*"' | head -n 1 | sed 's/"key":"//;s/"//')
 | 
			
		||||
MeiliSearch_API_KEY_UID=$(curl -s -X GET 'http://127.0.0.1:7700/keys' -H "Authorization: Bearer $MASTER_KEY" | grep -o '"uid":"[^"]*"' | head -n 1 | sed 's/"uid":"//;s/"//')
 | 
			
		||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
sed -i -e "s|^APP_URL=|APP_URL=http://${LOCAL_IP}/bar/|" \
 | 
			
		||||
  -e "s|^MEILISEARCH_HOST=|MEILISEARCH_HOST=http://127.0.0.1:7700|" \
 | 
			
		||||
  -e "s|^MEILISEARCH_KEY=|MEILISEARCH_KEY=${MASTER_KEY}|" \
 | 
			
		||||
  -e "s|^MEILISEARCH_API_KEY=|MEILISEARCH_API_KEY=${MeiliSearch_API_KEY}|" \
 | 
			
		||||
  -e "s|^MEILISEARCH_API_KEY_UID=|MEILISEARCH_API_KEY_UID=${MeiliSearch_API_KEY_UID}|" \
 | 
			
		||||
  /opt/bar-assistant/.env
 | 
			
		||||
$STD composer install --no-interaction
 | 
			
		||||
$STD php artisan key:generate
 | 
			
		||||
touch storage/bar-assistant/database.ba3.sqlite
 | 
			
		||||
$STD php artisan migrate --force
 | 
			
		||||
$STD php artisan storage:link
 | 
			
		||||
$STD php artisan bar:setup-meilisearch
 | 
			
		||||
$STD php artisan scout:sync-index-settings
 | 
			
		||||
$STD php artisan config:cache
 | 
			
		||||
$STD php artisan route:cache
 | 
			
		||||
$STD php artisan event:cache
 | 
			
		||||
mkdir /opt/bar-assistant/storage/bar-assistant/uploads/temp
 | 
			
		||||
chown -R www-data:www-data /opt/bar-assistant
 | 
			
		||||
msg_ok "Installed Bar Assistant"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Salt Rim"
 | 
			
		||||
cd /opt/vue-salt-rim
 | 
			
		||||
cat <<EOF >/opt/vue-salt-rim/public/config.js
 | 
			
		||||
window.srConfig = {}
 | 
			
		||||
window.srConfig.API_URL = "http://${LOCAL_IP}/bar"
 | 
			
		||||
window.srConfig.MEILISEARCH_URL = "http://${LOCAL_IP}/search"
 | 
			
		||||
EOF
 | 
			
		||||
$STD npm install
 | 
			
		||||
$STD npm run build
 | 
			
		||||
msg_ok "Installed Salt Rim"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/nginx/sites-available/barassistant.conf
 | 
			
		||||
server {
 | 
			
		||||
    listen 80 default_server;
 | 
			
		||||
    listen [::]:80 default_server;
 | 
			
		||||
    server_name _;
 | 
			
		||||
 | 
			
		||||
    location = /favicon.ico { access_log off; log_not_found off; }
 | 
			
		||||
    location = /robots.txt  { access_log off; log_not_found off; }
 | 
			
		||||
 | 
			
		||||
    client_max_body_size 100M;
 | 
			
		||||
 | 
			
		||||
    location /bar/ {
 | 
			
		||||
        proxy_pass http://127.0.0.1:8080/;
 | 
			
		||||
        proxy_set_header Host \$host;
 | 
			
		||||
        proxy_set_header X-Real-IP \$remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
 | 
			
		||||
        proxy_set_header X-Forwarded-Proto \$scheme;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location /search/ {
 | 
			
		||||
        proxy_pass http://127.0.0.1:7700/;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location / {
 | 
			
		||||
        proxy_pass http://127.0.0.1:8081/;
 | 
			
		||||
        proxy_set_header Host \$host;
 | 
			
		||||
        proxy_set_header X-Real-IP \$remote_addr;
 | 
			
		||||
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
 | 
			
		||||
        proxy_set_header X-Forwarded-Proto \$scheme;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
server {
 | 
			
		||||
    listen 127.0.0.1:8080;
 | 
			
		||||
    server_name example.com;
 | 
			
		||||
    root /opt/bar-assistant/public;
 | 
			
		||||
 | 
			
		||||
    add_header X-Frame-Options "SAMEORIGIN";
 | 
			
		||||
    add_header X-Content-Type-Options "nosniff";
 | 
			
		||||
 | 
			
		||||
    index index.php;
 | 
			
		||||
    charset utf-8;
 | 
			
		||||
 | 
			
		||||
    location / {
 | 
			
		||||
        try_files \$uri \$uri/ /index.php?\$query_string;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location = /favicon.ico { access_log off; log_not_found off; }
 | 
			
		||||
    location = /robots.txt  { access_log off; log_not_found off; }
 | 
			
		||||
 | 
			
		||||
    error_page 404 /index.php;
 | 
			
		||||
 | 
			
		||||
    location ~ ^/index\.php(/|$) {
 | 
			
		||||
        fastcgi_pass unix:/var/run/php/php$PHPVER-fpm.sock;
 | 
			
		||||
        fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
 | 
			
		||||
        include fastcgi_params;
 | 
			
		||||
        fastcgi_hide_header X-Powered-By;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    location ~ /\.(?!well-known).* {
 | 
			
		||||
        deny all;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
server {
 | 
			
		||||
    listen 127.0.0.1:8081;
 | 
			
		||||
    server_name _;
 | 
			
		||||
    root /opt/vue-salt-rim/dist;
 | 
			
		||||
 | 
			
		||||
    location / {
 | 
			
		||||
        try_files \$uri \$uri/ /index.html;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
ln -s /etc/nginx/sites-available/barassistant.conf /etc/nginx/sites-enabled/
 | 
			
		||||
rm -f /etc/nginx/sites-enabled/default
 | 
			
		||||
$STD systemctl reload nginx
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -1,67 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 tteck
 | 
			
		||||
# Author: tteck (tteckster)
 | 
			
		||||
# Co-Author: remz1337
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/janeczku/calibre-web
 | 
			
		||||
 | 
			
		||||
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 imagemagick
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Python Dependencies"
 | 
			
		||||
$STD apt-get -y install python3-pip
 | 
			
		||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
			
		||||
msg_ok "Installed Python Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Kepubify"
 | 
			
		||||
mkdir -p /opt/kepubify
 | 
			
		||||
cd /opt/kepubify
 | 
			
		||||
curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit &>/dev/null
 | 
			
		||||
chmod +x kepubify-linux-64bit
 | 
			
		||||
msg_ok "Installed Kepubify"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Calibre-Web"
 | 
			
		||||
mkdir -p /opt/calibre-web
 | 
			
		||||
$STD apt-get install -y calibre
 | 
			
		||||
$STD curl -fsSL https://github.com/janeczku/calibre-web/raw/master/library/metadata.db -o /opt/calibre-web/metadata.db
 | 
			
		||||
$STD pip install calibreweb
 | 
			
		||||
$STD pip install jsonschema
 | 
			
		||||
msg_ok "Installed Calibre-Web"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/cps.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Calibre-Web Server
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/calibre-web
 | 
			
		||||
ExecStart=/usr/local/bin/cps
 | 
			
		||||
TimeoutStopSec=20
 | 
			
		||||
KillMode=process
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now cps
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -24,13 +24,20 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
PASSWORD=$(omd create monitoring | grep "password:" | awk '{print $NF}')
 | 
			
		||||
$STD omd start
 | 
			
		||||
SITE_NAME="monitoring"
 | 
			
		||||
$STD omd create "$SITE_NAME"
 | 
			
		||||
MKPASSWORD=$(openssl rand -base64 18 | tr -d '/+=' | cut -c1-16)
 | 
			
		||||
 | 
			
		||||
echo -e "$MKPASSWORD\n$MKPASSWORD" | su - "$SITE_NAME" -c "cmk-passwd cmkadmin --stdin"
 | 
			
		||||
$STD omd start "$SITE_NAME"
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
    echo "Application-Credentials"
 | 
			
		||||
    echo "Username: cmkadmin"
 | 
			
		||||
    echo "Password: $PASSWORD"
 | 
			
		||||
  echo "Application-Credentials"
 | 
			
		||||
  echo "Username: cmkadmin"
 | 
			
		||||
  echo "Password: $MKPASSWORD"
 | 
			
		||||
  echo "Site: $SITE_NAME"
 | 
			
		||||
} >>~/checkmk.creds
 | 
			
		||||
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								install/cleanuparr-install.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										46
									
								
								install/cleanuparr-install.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Lucas Zampieri (zampierilucas) | MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/Cleanuparr/Cleanuparr
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-amd64.zip"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/cleanuparr.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Cleanuparr Daemon
 | 
			
		||||
After=syslog.target network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/opt/cleanuparr
 | 
			
		||||
ExecStart=/opt/cleanuparr/Cleanuparr
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=5
 | 
			
		||||
Environment="PORT=11011"
 | 
			
		||||
Environment="CONFIG_DIR=/opt/cleanuparr/config"
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now cleanuparr
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										43
									
								
								install/cloudreve-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								install/cloudreve-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://cloudreve.org/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "cloudreve" "cloudreve/cloudreve" "prebuild" "latest" "/opt/cloudreve" "*linux_amd64.tar.gz"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/cloudreve.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Cloudreve Service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/opt/cloudreve/cloudreve
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=5
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
systemctl enable -q --now cloudreve
 | 
			
		||||
msg_ok "Service Setup"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -14,13 +14,11 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "cronicle" "jhuckaby/Cronicle"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Cronicle Primary Server"
 | 
			
		||||
LATEST=$(curl -fsSL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
msg_info "Configuring Cronicle Primary Server"
 | 
			
		||||
IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
mkdir -p /opt/cronicle
 | 
			
		||||
cd /opt/cronicle
 | 
			
		||||
$STD tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1
 | 
			
		||||
$STD npm install
 | 
			
		||||
$STD node bin/build.js dist
 | 
			
		||||
sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
 | 
			
		||||
@@ -29,7 +27,7 @@ $STD /opt/cronicle/bin/control.sh start
 | 
			
		||||
$STD cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled
 | 
			
		||||
chmod 775 /etc/init.d/cronicled
 | 
			
		||||
$STD update-rc.d cronicled defaults
 | 
			
		||||
msg_ok "Installed Cronicle Primary Server"
 | 
			
		||||
msg_ok "Configured Cronicle Primary Server"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 
 | 
			
		||||
@@ -16,11 +16,11 @@ update_os
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dashy ${RELEASE} (Patience)"
 | 
			
		||||
msg_info "Installing Dashy"
 | 
			
		||||
cd /opt/dashy
 | 
			
		||||
$STD npm install
 | 
			
		||||
$STD npm run build
 | 
			
		||||
msg_ok "Installed Dashy ${RELEASE}"
 | 
			
		||||
msg_ok "Installed Dashy"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/dashy.service
 | 
			
		||||
 
 | 
			
		||||
@@ -79,7 +79,7 @@ msg_ok "Installed Documenso"
 | 
			
		||||
 | 
			
		||||
msg_info "Create User"
 | 
			
		||||
PASSWORD_HASH=$(python3 -c "import bcrypt; print(bcrypt.hashpw(b'helper-scripts', bcrypt.gensalt(rounds=12)).decode())")
 | 
			
		||||
$STD sudo -u postgres psql -d documenso_db -c "INSERT INTO \"User\" (name, email, \"emailVerified\", password, \"identityProvider\", roles, \"createdAt\", \"lastSignedIn\", \"updatedAt\", \"customerId\") VALUES ('helper-scripts', 'helper-scripts@local.com', '2025-01-20 17:14:45.058', '$PASSWORD_HASH', 'DOCUMENSO', ARRAY['USER', 'ADMIN']::\"Role\"[], '2025-01-20 16:04:05.543', '2025-01-20 16:14:55.249', '2025-01-20 16:14:55.25', NULL) RETURNING id;"
 | 
			
		||||
$STD sudo -u postgres psql -d documenso_db -c "INSERT INTO \"User\" (name, email, \"emailVerified\", password, \"identityProvider\", roles, \"createdAt\", \"lastSignedIn\", \"updatedAt\") VALUES ('helper-scripts', 'helper-scripts@local.com', '2025-01-20 17:14:45.058', '$PASSWORD_HASH', 'DOCUMENSO', ARRAY['USER', 'ADMIN']::\"Role\"[], '2025-01-20 16:04:05.543', '2025-01-20 16:14:55.249', '2025-01-20 16:14:55.25') RETURNING id;"
 | 
			
		||||
$STD npm run prisma:migrate-deploy
 | 
			
		||||
msg_ok "User created"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -20,19 +20,16 @@ $STD apt-get install -y \
 | 
			
		||||
  libfontconfig1
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Duplicati"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
			
		||||
curl -fsSL "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" -o "duplicati-${RELEASE}-linux-x64-gui.deb"
 | 
			
		||||
$STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb
 | 
			
		||||
echo "${RELEASE}" >/opt/Duplicati_version.txt
 | 
			
		||||
msg_ok "Finished setting up Duplicati"
 | 
			
		||||
fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring duplicati"
 | 
			
		||||
DECRYPTKEY=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
ADMINPASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
{
 | 
			
		||||
  echo "Admin password = ${ADMINPASS}"
 | 
			
		||||
  echo "Database encryption key = ${DECRYPTKEY}"
 | 
			
		||||
} >>~/duplicati.creds
 | 
			
		||||
msg_ok "Configured duplicati"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/duplicati.service
 | 
			
		||||
@@ -54,10 +51,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f duplicati-${RELEASE}-linux-x64-gui.deb
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 
 | 
			
		||||
@@ -13,8 +13,6 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
 | 
			
		||||
 | 
			
		||||
msg_info "Setting Up Hardware Acceleration"
 | 
			
		||||
$STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
 | 
			
		||||
if [[ "$CTTYPE" == "0" ]]; then
 | 
			
		||||
@@ -26,7 +24,37 @@ if [[ "$CTTYPE" == "0" ]]; then
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Set Up Hardware Acceleration"
 | 
			
		||||
 | 
			
		||||
read -r -p "${TAB3}Do you need the intel-media-va-driver-non-free driver for HW encoding (Debian 12 only)? <y/N> " prompt
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Installing Intel Hardware Acceleration (non-free)"
 | 
			
		||||
  cat <<EOF >/etc/apt/sources.list.d/non-free.list
 | 
			
		||||
 | 
			
		||||
deb http://deb.debian.org/debian bookworm non-free non-free-firmware
 | 
			
		||||
deb-src http://deb.debian.org/debian bookworm non-free non-free-firmware
 | 
			
		||||
 | 
			
		||||
deb http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
 | 
			
		||||
deb-src http://deb.debian.org/debian-security bookworm-security non-free non-free-firmware
 | 
			
		||||
 | 
			
		||||
deb http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
 | 
			
		||||
deb-src http://deb.debian.org/debian bookworm-updates non-free non-free-firmware
 | 
			
		||||
EOF
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get -y install {intel-media-va-driver-non-free,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
 | 
			
		||||
else
 | 
			
		||||
  msg_info "Installing Intel Hardware Acceleration"
 | 
			
		||||
  $STD apt-get -y install {va-driver-all,ocl-icd-libopencl1,intel-opencl-icd,vainfo,intel-gpu-tools}
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Installed and Set Up Intel Hardware Acceleration"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
 | 
			
		||||
fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
 | 
			
		||||
 | 
			
		||||
msg_info "Set ErsatzTV-ffmpeg links"
 | 
			
		||||
chmod +x /opt/ErsatzTV-ffmpeg/bin/*
 | 
			
		||||
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg
 | 
			
		||||
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay
 | 
			
		||||
ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe
 | 
			
		||||
msg_ok "ffmpeg links set"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/ersatzTV.service
 | 
			
		||||
 
 | 
			
		||||
@@ -13,14 +13,9 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y apache2
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PHP_VERSION="8.4" PHP_APACHE="YES" PHP_MODULE="mysql" setup_php
 | 
			
		||||
setup_composer
 | 
			
		||||
setup_mariadb
 | 
			
		||||
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii"
 | 
			
		||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up database"
 | 
			
		||||
@@ -38,6 +33,8 @@ mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRI
 | 
			
		||||
} >>~/firefly.creds
 | 
			
		||||
msg_ok "Set up database"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
 | 
			
		||||
 | 
			
		||||
msg_info "Configuring Firefly III (Patience)"
 | 
			
		||||
chown -R www-data:www-data /opt/firefly
 | 
			
		||||
chmod -R 775 /opt/firefly/storage
 | 
			
		||||
@@ -45,8 +42,6 @@ cd /opt/firefly
 | 
			
		||||
cp .env.example .env
 | 
			
		||||
sed -i "s/DB_HOST=.*/DB_HOST=localhost/" /opt/firefly/.env
 | 
			
		||||
sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$DB_PASS/" /opt/firefly/.env
 | 
			
		||||
echo "export COMPOSER_ALLOW_SUPERUSER=1" >>~/.bashrc
 | 
			
		||||
source ~/.bashrc
 | 
			
		||||
$STD composer install --no-dev --no-plugins --no-interaction
 | 
			
		||||
$STD php artisan firefly:upgrade-database
 | 
			
		||||
$STD php artisan firefly:correct-database
 | 
			
		||||
 
 | 
			
		||||
@@ -42,10 +42,7 @@ if [[ "$CTTYPE" == "0" ]]; then
 | 
			
		||||
fi
 | 
			
		||||
msg_ok "Set Up Hardware Acceleration"
 | 
			
		||||
 | 
			
		||||
#RELEASE=$(curl -fsSL https://api.github.com/repos/blakeblackshear/frigate/releases/latest | jq -r '.tag_name')
 | 
			
		||||
msg_ok "Stop spinner to prevent segmentation fault"
 | 
			
		||||
msg_info "Installing Frigate v0.14.1 (Perseverance)"
 | 
			
		||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
 | 
			
		||||
cd ~
 | 
			
		||||
mkdir -p /opt/frigate/models
 | 
			
		||||
curl -fsSL "https://github.com/blakeblackshear/frigate/archive/refs/tags/v0.14.1.tar.gz" -o "frigate.tar.gz"
 | 
			
		||||
 
 | 
			
		||||
@@ -13,15 +13,10 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing go2rtc"
 | 
			
		||||
mkdir -p /opt/go2rtc
 | 
			
		||||
cd /opt/go2rtc
 | 
			
		||||
curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64" -o "go2rtc_linux_amd64"
 | 
			
		||||
chmod +x go2rtc_linux_amd64
 | 
			
		||||
msg_ok "Installed go2rtc"
 | 
			
		||||
USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
service_path="/etc/systemd/system/go2rtc.service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/go2rtc.service
 | 
			
		||||
echo "[Unit]
 | 
			
		||||
Description=go2rtc service
 | 
			
		||||
After=network.target
 | 
			
		||||
@@ -32,7 +27,8 @@ User=root
 | 
			
		||||
ExecStart=/opt/go2rtc/go2rtc_linux_amd64
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target" >$service_path
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now go2rtc
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user