mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			358 Commits
		
	
	
		
			2025-07-15
			...
			2025-08-04
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					01c6eb3a67 | ||
| 
						 | 
					5aabc88723 | ||
| 
						 | 
					23340f5d24 | ||
| 
						 | 
					77dcf87e6a | ||
| 
						 | 
					d9cefc3777 | ||
| 
						 | 
					7d6806e1fb | ||
| 
						 | 
					86d438c3a1 | ||
| 
						 | 
					fdc381e501 | ||
| 
						 | 
					3b1b8a7da2 | ||
| 
						 | 
					96f2c9c990 | ||
| 
						 | 
					349827aa97 | ||
| 
						 | 
					4dc458c605 | ||
| 
						 | 
					b5b6048697 | ||
| 
						 | 
					dc5fcb83e8 | ||
| 
						 | 
					db86049a3e | ||
| 
						 | 
					e6ceca0bc7 | ||
| 
						 | 
					d24425efad | ||
| 
						 | 
					3dda41df94 | ||
| 
						 | 
					fc77ca85e4 | ||
| 
						 | 
					db09b9cc36 | ||
| 
						 | 
					9f933c1e56 | ||
| 
						 | 
					efe45185fc | ||
| 
						 | 
					0a56fee31e | ||
| 
						 | 
					20048d442a | ||
| 
						 | 
					b1be93155c | ||
| 
						 | 
					1e2eb31560 | ||
| 
						 | 
					ca701632e1 | ||
| 
						 | 
					c3c5a7584b | ||
| 
						 | 
					3cd1fc7bce | ||
| 
						 | 
					1c7a39438c | ||
| 
						 | 
					46728b01fe | ||
| 
						 | 
					e0abf63778 | ||
| 
						 | 
					4451f07990 | ||
| 
						 | 
					6776912a42 | ||
| 
						 | 
					b914fd95df | ||
| 
						 | 
					f33afd9163 | ||
| 
						 | 
					c811b51a0a | ||
| 
						 | 
					ccbf86196b | ||
| 
						 | 
					64366a0b34 | ||
| 
						 | 
					183c459549 | ||
| 
						 | 
					44e62f73d4 | ||
| 
						 | 
					2f97e14f4d | ||
| 
						 | 
					7cd5a8d771 | ||
| 
						 | 
					9846bfd067 | ||
| 
						 | 
					77c37a5552 | ||
| 
						 | 
					8efcab38a4 | ||
| 
						 | 
					201782552c | ||
| 
						 | 
					7433f7df0c | ||
| 
						 | 
					dde882f9e5 | ||
| 
						 | 
					b8bdf56297 | ||
| 
						 | 
					df504635a5 | ||
| 
						 | 
					158bdfc88e | ||
| 
						 | 
					4eaffda82d | ||
| 
						 | 
					074bb615e7 | ||
| 
						 | 
					7c0869e29b | ||
| 
						 | 
					7862d23866 | ||
| 
						 | 
					e1669c22de | ||
| 
						 | 
					00a69678c0 | ||
| 
						 | 
					1c2ccf81d2 | ||
| 
						 | 
					88483b7dab | ||
| 
						 | 
					7c41c51bfe | ||
| 
						 | 
					ecf01637a5 | ||
| 
						 | 
					3068ae1383 | ||
| 
						 | 
					ca8cddb788 | ||
| 
						 | 
					750397e1af | ||
| 
						 | 
					30172379cd | ||
| 
						 | 
					f07b273be3 | ||
| 
						 | 
					e5c673df44 | ||
| 
						 | 
					61fb45a0b8 | ||
| 
						 | 
					084ceae9d9 | ||
| 
						 | 
					054a963ca2 | ||
| 
						 | 
					b366ffac34 | ||
| 
						 | 
					29747ab8b8 | ||
| 
						 | 
					12b904a014 | ||
| 
						 | 
					fad4d2e0d7 | ||
| 
						 | 
					899e576426 | ||
| 
						 | 
					0f29e5672c | ||
| 
						 | 
					3e1d43c29a | ||
| 
						 | 
					ff695fa4ea | ||
| 
						 | 
					93b80362f6 | ||
| 
						 | 
					52e08e5474 | ||
| 
						 | 
					b9408ef06f | ||
| 
						 | 
					4652338536 | ||
| 
						 | 
					3c7c540576 | ||
| 
						 | 
					a0502e00db | ||
| 
						 | 
					6f56655ad6 | ||
| 
						 | 
					6de8d50969 | ||
| 
						 | 
					da217bb3e0 | ||
| 
						 | 
					f80c7008a8 | ||
| 
						 | 
					afd577db9e | ||
| 
						 | 
					47ab850e5b | ||
| 
						 | 
					654bd1f0d5 | ||
| 
						 | 
					b6bd8a6de4 | ||
| 
						 | 
					ae7fe6e3e1 | ||
| 
						 | 
					3bb787d746 | ||
| 
						 | 
					82ff5f587e | ||
| 
						 | 
					38cb85d9c4 | ||
| 
						 | 
					296bcbf56f | ||
| 
						 | 
					6f096b04fe | ||
| 
						 | 
					3c889430ed | ||
| 
						 | 
					bb664636f6 | ||
| 
						 | 
					5acca4975c | ||
| 
						 | 
					7f07395ab1 | ||
| 
						 | 
					dcd979e00c | ||
| 
						 | 
					e7c7b6384a | ||
| 
						 | 
					492be65aec | ||
| 
						 | 
					b5b59342bd | ||
| 
						 | 
					30fed5b1bc | ||
| 
						 | 
					dd30ad5fa3 | ||
| 
						 | 
					5b67c8a426 | ||
| 
						 | 
					709fb03305 | ||
| 
						 | 
					c7a1334b29 | ||
| 
						 | 
					9b2b794f9c | ||
| 
						 | 
					9e9bff2315 | ||
| 
						 | 
					dd2defebaf | ||
| 
						 | 
					9d3250a82d | ||
| 
						 | 
					d71c3efecd | ||
| 
						 | 
					d366abe8e2 | ||
| 
						 | 
					f76bb98d3d | ||
| 
						 | 
					4bd360d31b | ||
| 
						 | 
					27e095e1dd | ||
| 
						 | 
					e98f6051e2 | ||
| 
						 | 
					e4d0ac301d | ||
| 
						 | 
					907be41752 | ||
| 
						 | 
					af88ff3dd4 | ||
| 
						 | 
					2c618f53ca | ||
| 
						 | 
					16dbcac3a1 | ||
| 
						 | 
					0ba9c9dff3 | ||
| 
						 | 
					23573bfce9 | ||
| 
						 | 
					9f1431b263 | ||
| 
						 | 
					53beca39e8 | ||
| 
						 | 
					2701308b45 | ||
| 
						 | 
					f33c292c3e | ||
| 
						 | 
					234b4e334e | ||
| 
						 | 
					eada9f3ae8 | ||
| 
						 | 
					fb8c44b753 | ||
| 
						 | 
					4679d321a7 | ||
| 
						 | 
					50345c631a | ||
| 
						 | 
					2f61a2ffe2 | ||
| 
						 | 
					e9240fb9b8 | ||
| 
						 | 
					f77e7b626d | ||
| 
						 | 
					f8b901ab0d | ||
| 
						 | 
					25b811040c | ||
| 
						 | 
					05d11bf66d | ||
| 
						 | 
					c7aac080ac | ||
| 
						 | 
					0ad0a665ed | ||
| 
						 | 
					304f181bb2 | ||
| 
						 | 
					ea50246c91 | ||
| 
						 | 
					7aa1f18761 | ||
| 
						 | 
					ab6f2dd24f | ||
| 
						 | 
					815720b59e | ||
| 
						 | 
					5597f7fc41 | ||
| 
						 | 
					6450c3c6a4 | ||
| 
						 | 
					70cb8198fd | ||
| 
						 | 
					498723fd62 | ||
| 
						 | 
					d4146e0d43 | ||
| 
						 | 
					0ca0126420 | ||
| 
						 | 
					5af772af2f | ||
| 
						 | 
					241df52ae5 | ||
| 
						 | 
					10db421c45 | ||
| 
						 | 
					1f101c0bd3 | ||
| 
						 | 
					202eb3fb2a | ||
| 
						 | 
					e54ed7dc35 | ||
| 
						 | 
					34da66600d | ||
| 
						 | 
					5a889d8fc6 | ||
| 
						 | 
					22e9c33a2a | ||
| 
						 | 
					25a8df4902 | ||
| 
						 | 
					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 | 
							
								
								
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							@@ -26,6 +26,7 @@ SECURITY.md linguist-documentation
 | 
				
			|||||||
# ---------------------------------------
 | 
					# ---------------------------------------
 | 
				
			||||||
# Exclude generated/config files
 | 
					# Exclude generated/config files
 | 
				
			||||||
*.json linguist-generated
 | 
					*.json linguist-generated
 | 
				
			||||||
 | 
					frontend/public/json/*.json linguist-generated=false
 | 
				
			||||||
*.lock linguist-generated
 | 
					*.lock linguist-generated
 | 
				
			||||||
*.yml linguist-generated
 | 
					*.yml linguist-generated
 | 
				
			||||||
*.yaml linguist-generated
 | 
					*.yaml linguist-generated
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										81
									
								
								.github/workflows/frontend-cicd.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										81
									
								
								.github/workflows/frontend-cicd.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -24,12 +24,87 @@ concurrency:
 | 
				
			|||||||
  cancel-in-progress: false
 | 
					  cancel-in-progress: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  build:
 | 
					  test-json-files:
 | 
				
			||||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
    defaults:
 | 
					    defaults:
 | 
				
			||||||
      run:
 | 
					      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:
 | 
					    steps:
 | 
				
			||||||
      - name: Checkout
 | 
					      - name: Checkout
 | 
				
			||||||
        uses: actions/checkout@v4
 | 
					        uses: actions/checkout@v4
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										367
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										367
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,375 @@
 | 
				
			|||||||
> [!CAUTION]
 | 
					> [!CAUTION]
 | 
				
			||||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
					Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-08-05
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-08-04
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🆕 New Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - Tududi ([#6534](https://github.com/community-scripts/ProxmoxVE/pull/6534))
 | 
				
			||||||
 | 
					- ots ([#6532](https://github.com/community-scripts/ProxmoxVE/pull/6532))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - MySpeed: fix update and copy old tests back [@MickLesk](https://github.com/MickLesk) ([#6550](https://github.com/community-scripts/ProxmoxVE/pull/6550))
 | 
				
			||||||
 | 
					    - Composer: PATH Issues when updating [@MickLesk](https://github.com/MickLesk) ([#6543](https://github.com/community-scripts/ProxmoxVE/pull/6543))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Feat: enable tun for VPN services (wireguard) [@MickLesk](https://github.com/MickLesk) ([#6562](https://github.com/community-scripts/ProxmoxVE/pull/6562))
 | 
				
			||||||
 | 
					    - turnkey: add hostname & Fix TUN access [@masterofrpm](https://github.com/masterofrpm) ([#6512](https://github.com/community-scripts/ProxmoxVE/pull/6512))
 | 
				
			||||||
 | 
					    - Increase: Core Network check (pre-LXC Creation)  [@MickLesk](https://github.com/MickLesk) ([#6546](https://github.com/community-scripts/ProxmoxVE/pull/6546))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: PrivateBin [@tremor021](https://github.com/tremor021) ([#6559](https://github.com/community-scripts/ProxmoxVE/pull/6559))
 | 
				
			||||||
 | 
					    - Refactor: PocketID [@tremor021](https://github.com/tremor021) ([#6556](https://github.com/community-scripts/ProxmoxVE/pull/6556))
 | 
				
			||||||
 | 
					    - Refactor: Pocketbase [@tremor021](https://github.com/tremor021) ([#6554](https://github.com/community-scripts/ProxmoxVE/pull/6554))
 | 
				
			||||||
 | 
					    - Refactor: NocoDB [@tremor021](https://github.com/tremor021) ([#6548](https://github.com/community-scripts/ProxmoxVE/pull/6548))
 | 
				
			||||||
 | 
					    - Refactor: PairDrop [@tremor021](https://github.com/tremor021) ([#6528](https://github.com/community-scripts/ProxmoxVE/pull/6528))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-08-03
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - docmost: remove build step due new version [@MickLesk](https://github.com/MickLesk) ([#6513](https://github.com/community-scripts/ProxmoxVE/pull/6513))
 | 
				
			||||||
 | 
					    - Fix: Komga uses .komga as storage / so it fails after install [@MickLesk](https://github.com/MickLesk) ([#6517](https://github.com/community-scripts/ProxmoxVE/pull/6517))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 💥 Breaking Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Remove: Ubuntu 24.10-VM [@MickLesk](https://github.com/MickLesk) ([#6515](https://github.com/community-scripts/ProxmoxVE/pull/6515))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: openHAB [@tremor021](https://github.com/tremor021) ([#6524](https://github.com/community-scripts/ProxmoxVE/pull/6524))
 | 
				
			||||||
 | 
					    - Refactor: OpenProject [@tremor021](https://github.com/tremor021) ([#6525](https://github.com/community-scripts/ProxmoxVE/pull/6525))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-08-02
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - Alternative connectivity checks for LXC [@mariano-dagostino](https://github.com/mariano-dagostino) ([#6472](https://github.com/community-scripts/ProxmoxVE/pull/6472))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Immich: fix copy error during install [@vhsdream](https://github.com/vhsdream) ([#6497](https://github.com/community-scripts/ProxmoxVE/pull/6497))
 | 
				
			||||||
 | 
					    - MagicMirror: Fix install process [@tremor021](https://github.com/tremor021) ([#6492](https://github.com/community-scripts/ProxmoxVE/pull/6492))
 | 
				
			||||||
 | 
					    - chore: BookLore repo change [@vhsdream](https://github.com/vhsdream) ([#6493](https://github.com/community-scripts/ProxmoxVE/pull/6493))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - VictoriaMetrics: Make VictoriaLogs optional add-on [@tremor021](https://github.com/tremor021) ([#6489](https://github.com/community-scripts/ProxmoxVE/pull/6489))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-08-01
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Fumadocs: add git as dependency [@MickLesk](https://github.com/MickLesk) ([#6459](https://github.com/community-scripts/ProxmoxVE/pull/6459))
 | 
				
			||||||
 | 
					    - Immich: Fix immich-admin script; other fixes | pin to v.137.3 [@vhsdream](https://github.com/vhsdream) ([#6443](https://github.com/community-scripts/ProxmoxVE/pull/6443))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Re-Add: Suwayomi-Server [@MickLesk](https://github.com/MickLesk) ([#6458](https://github.com/community-scripts/ProxmoxVE/pull/6458))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Update homepage.sh to use setup_nodejs [@burgerga](https://github.com/burgerga) ([#6462](https://github.com/community-scripts/ProxmoxVE/pull/6462))
 | 
				
			||||||
 | 
					    - Refactor: Owncast [@tremor021](https://github.com/tremor021) ([#6434](https://github.com/community-scripts/ProxmoxVE/pull/6434))
 | 
				
			||||||
 | 
					    - Refactor: MediaMTX [@tremor021](https://github.com/tremor021) ([#6406](https://github.com/community-scripts/ProxmoxVE/pull/6406))
 | 
				
			||||||
 | 
					    - Refactor: LubeLogger [@tremor021](https://github.com/tremor021) ([#6400](https://github.com/community-scripts/ProxmoxVE/pull/6400))
 | 
				
			||||||
 | 
					    - Refactor: MagicMirror [@tremor021](https://github.com/tremor021) ([#6402](https://github.com/community-scripts/ProxmoxVE/pull/6402))
 | 
				
			||||||
 | 
					    - Refactor: Manage My Damn Life [@tremor021](https://github.com/tremor021) ([#6403](https://github.com/community-scripts/ProxmoxVE/pull/6403))
 | 
				
			||||||
 | 
					    - Refactor: Meilisearch [@tremor021](https://github.com/tremor021) ([#6407](https://github.com/community-scripts/ProxmoxVE/pull/6407))
 | 
				
			||||||
 | 
					    - Refactor: NodeBB [@tremor021](https://github.com/tremor021) ([#6419](https://github.com/community-scripts/ProxmoxVE/pull/6419))
 | 
				
			||||||
 | 
					    - Refactor: oauth2-proxy [@tremor021](https://github.com/tremor021) ([#6421](https://github.com/community-scripts/ProxmoxVE/pull/6421))
 | 
				
			||||||
 | 
					    - Refactor: Outline [@tremor021](https://github.com/tremor021) ([#6424](https://github.com/community-scripts/ProxmoxVE/pull/6424))
 | 
				
			||||||
 | 
					    - Refactor: Overseerr [@tremor021](https://github.com/tremor021) ([#6425](https://github.com/community-scripts/ProxmoxVE/pull/6425))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-07-31
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - OpenObserve: Fix release fetching [@tremor021](https://github.com/tremor021) ([#6409](https://github.com/community-scripts/ProxmoxVE/pull/6409))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 💥 Breaking Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Remove temp. Tandoor during Install & Update Issues [@MickLesk](https://github.com/MickLesk) ([#6438](https://github.com/community-scripts/ProxmoxVE/pull/6438))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: listmonk [@tremor021](https://github.com/tremor021) ([#6399](https://github.com/community-scripts/ProxmoxVE/pull/6399))
 | 
				
			||||||
 | 
					    - Refactor: Neo4j [@tremor021](https://github.com/tremor021) ([#6418](https://github.com/community-scripts/ProxmoxVE/pull/6418))
 | 
				
			||||||
 | 
					    - Refactor: Monica [@tremor021](https://github.com/tremor021) ([#6416](https://github.com/community-scripts/ProxmoxVE/pull/6416))
 | 
				
			||||||
 | 
					    - Refactor: Memos [@tremor021](https://github.com/tremor021) ([#6415](https://github.com/community-scripts/ProxmoxVE/pull/6415))
 | 
				
			||||||
 | 
					    - Refactor: Opengist [@tremor021](https://github.com/tremor021) ([#6423](https://github.com/community-scripts/ProxmoxVE/pull/6423))
 | 
				
			||||||
 | 
					    - Refactor: Ombi [@tremor021](https://github.com/tremor021) ([#6422](https://github.com/community-scripts/ProxmoxVE/pull/6422))
 | 
				
			||||||
 | 
					    - Refactor: MySpeed [@tremor021](https://github.com/tremor021) ([#6417](https://github.com/community-scripts/ProxmoxVE/pull/6417))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-07-30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Strip SD and NS prefixes before writing to config file [@mattv8](https://github.com/mattv8) ([#6356](https://github.com/community-scripts/ProxmoxVE/pull/6356))
 | 
				
			||||||
 | 
					    - [core] fix: expand $CACHER_IP in apt-proxy-detect.sh (revert quoted heredoc) [@MickLesk](https://github.com/MickLesk) ([#6385](https://github.com/community-scripts/ProxmoxVE/pull/6385))
 | 
				
			||||||
 | 
					    - PiAlert: bugfix dependencies [@leiweibau](https://github.com/leiweibau) ([#6396](https://github.com/community-scripts/ProxmoxVE/pull/6396))
 | 
				
			||||||
 | 
					    - Librespeed-Rust: Fix service name and RELEASE var fetching [@tremor021](https://github.com/tremor021) ([#6378](https://github.com/community-scripts/ProxmoxVE/pull/6378))
 | 
				
			||||||
 | 
					    - n8n: add build-essential as dependency [@MickLesk](https://github.com/MickLesk) ([#6392](https://github.com/community-scripts/ProxmoxVE/pull/6392))
 | 
				
			||||||
 | 
					    - Habitica: Fix trusted domains [@tremor021](https://github.com/tremor021) ([#6380](https://github.com/community-scripts/ProxmoxVE/pull/6380))
 | 
				
			||||||
 | 
					    - Mafl: Fix undeclared var [@tremor021](https://github.com/tremor021) ([#6371](https://github.com/community-scripts/ProxmoxVE/pull/6371))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: Lidarr [@tremor021](https://github.com/tremor021) ([#6379](https://github.com/community-scripts/ProxmoxVE/pull/6379))
 | 
				
			||||||
 | 
					    - Refactor: Kubo [@tremor021](https://github.com/tremor021) ([#6376](https://github.com/community-scripts/ProxmoxVE/pull/6376))
 | 
				
			||||||
 | 
					    - Refactor: Komga [@tremor021](https://github.com/tremor021) ([#6374](https://github.com/community-scripts/ProxmoxVE/pull/6374))
 | 
				
			||||||
 | 
					    - Refactor: Koillection [@tremor021](https://github.com/tremor021) ([#6373](https://github.com/community-scripts/ProxmoxVE/pull/6373))
 | 
				
			||||||
 | 
					    - Refactor: Karakeep [@tremor021](https://github.com/tremor021) ([#6372](https://github.com/community-scripts/ProxmoxVE/pull/6372))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-07-29
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🆕 New Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - Jeedom ([#6336](https://github.com/community-scripts/ProxmoxVE/pull/6336))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - PiAlert: add new dependencies [@leiweibau](https://github.com/leiweibau) ([#6337](https://github.com/community-scripts/ProxmoxVE/pull/6337))
 | 
				
			||||||
 | 
					    - Element Synapse CT RAM increased from 1024 to 2048 [@tjcomserv](https://github.com/tjcomserv) ([#6330](https://github.com/community-scripts/ProxmoxVE/pull/6330))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: HomeBox [@tremor021](https://github.com/tremor021) ([#6338](https://github.com/community-scripts/ProxmoxVE/pull/6338))
 | 
				
			||||||
 | 
					    - Refactor: InspIRCd [@tremor021](https://github.com/tremor021) ([#6343](https://github.com/community-scripts/ProxmoxVE/pull/6343))
 | 
				
			||||||
 | 
					    - Refactor: Jackett [@tremor021](https://github.com/tremor021) ([#6344](https://github.com/community-scripts/ProxmoxVE/pull/6344))
 | 
				
			||||||
 | 
					    - Update keycloak script to support configuration of latest release (v26) [@remz1337](https://github.com/remz1337) ([#6322](https://github.com/community-scripts/ProxmoxVE/pull/6322))
 | 
				
			||||||
 | 
					    - Refactor: Photoprism [@MickLesk](https://github.com/MickLesk) ([#6335](https://github.com/community-scripts/ProxmoxVE/pull/6335))
 | 
				
			||||||
 | 
					    - Refactor: Autobrr [@tremor021](https://github.com/tremor021) ([#6302](https://github.com/community-scripts/ProxmoxVE/pull/6302))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 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
 | 
					## 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
 | 
					## 2025-07-15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### 🚀 Updated Scripts
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,26 +35,29 @@ function update_script() {
 | 
				
			|||||||
    systemctl stop adventurelog-frontend
 | 
					    systemctl stop adventurelog-frontend
 | 
				
			||||||
    msg_ok "Services Stopped"
 | 
					    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"
 | 
					    fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
 | 
				
			||||||
    PYTHON_VERSION="3.12" setup_uv
 | 
					    PYTHON_VERSION="3.12" setup_uv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
    # Backend Migration
 | 
					 | 
				
			||||||
    cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
 | 
					    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
 | 
					    cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
 | 
				
			||||||
 | 
					 | 
				
			||||||
    cd /opt/adventurelog/backend/server
 | 
					    cd /opt/adventurelog/backend/server
 | 
				
			||||||
    if [[ ! -x .venv/bin/python ]]; then
 | 
					    if [[ ! -x .venv/bin/python ]]; then
 | 
				
			||||||
      $STD uv venv .venv
 | 
					      $STD uv venv .venv
 | 
				
			||||||
      $STD .venv/bin/python -m ensurepip --upgrade
 | 
					      $STD .venv/bin/python -m ensurepip --upgrade
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					 | 
				
			||||||
    $STD .venv/bin/python -m pip install --upgrade pip
 | 
					    $STD .venv/bin/python -m pip install --upgrade pip
 | 
				
			||||||
    $STD .venv/bin/python -m pip install -r requirements.txt
 | 
					    $STD .venv/bin/python -m pip install -r requirements.txt
 | 
				
			||||||
    $STD .venv/bin/python -m manage collectstatic --noinput
 | 
					    $STD .venv/bin/python -m manage collectstatic --noinput
 | 
				
			||||||
    $STD .venv/bin/python -m manage migrate
 | 
					    $STD .venv/bin/python -m manage migrate
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    # Frontend Migration
 | 
					 | 
				
			||||||
    cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
 | 
					    cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
 | 
				
			||||||
    cd /opt/adventurelog/frontend
 | 
					    cd /opt/adventurelog/frontend
 | 
				
			||||||
    $STD pnpm i
 | 
					    $STD pnpm i
 | 
				
			||||||
@@ -68,7 +71,6 @@ function update_script() {
 | 
				
			|||||||
    msg_ok "Services Started"
 | 
					    msg_ok "Services Started"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning Up"
 | 
					    msg_info "Cleaning Up"
 | 
				
			||||||
    rm -rf /opt/v${RELEASE}.zip
 | 
					 | 
				
			||||||
    rm -rf /opt/adventurelog-backup
 | 
					    rm -rf /opt/adventurelog-backup
 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					    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}"
 | 
				
			||||||
@@ -13,6 +13,7 @@ var_disk="${var_disk:-1}"
 | 
				
			|||||||
var_os="${var_os:-alpine}"
 | 
					var_os="${var_os:-alpine}"
 | 
				
			||||||
var_version="${var_version:-3.22}"
 | 
					var_version="${var_version:-3.22}"
 | 
				
			||||||
var_unprivileged="${var_unprivileged:-1}"
 | 
					var_unprivileged="${var_unprivileged:-1}"
 | 
				
			||||||
 | 
					var_tun="${var_tun:-1}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
header_info "$APP"
 | 
					header_info "$APP"
 | 
				
			||||||
variables
 | 
					variables
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								ct/argus.sh
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								ct/argus.sh
									
									
									
									
									
								
							@@ -23,20 +23,23 @@ function update_script() {
 | 
				
			|||||||
  header_info
 | 
					  header_info
 | 
				
			||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					 | 
				
			||||||
  if [[ ! -d /opt/argus ]]; then
 | 
					  if [[ ! -d /opt/argus ]]; then
 | 
				
			||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/release-argus/Argus/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
					  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
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.Argus 2>/dev/null)" ]] || [[ ! -f ~/.Argus ]]; then
 | 
				
			||||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
					    msg_info "Stopping service"
 | 
				
			||||||
    rm -f /opt/argus/Argus
 | 
					    systemctl stop argus
 | 
				
			||||||
    curl -fsSL "https://github.com/release-argus/Argus/releases/download/${RELEASE}/Argus-${RELEASE}.linux-amd64" -o /opt/argus/Argus
 | 
					    msg_ok "Service stopped"
 | 
				
			||||||
    chmod +x /opt/argus/Argus
 | 
					
 | 
				
			||||||
    systemctl restart argus
 | 
					    fetch_and_deploy_gh_release "Argus" "release-argus/Argus" "singlefile" "latest" "/opt/argus" "Argus*linux-amd64"
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting service"
 | 
				
			||||||
 | 
					    systemctl start argus
 | 
				
			||||||
 | 
					    msg_ok "Service started"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
					    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "${APP} is already up to date (${RELEASE})"
 | 
					    msg_ok "${APP} is already up to date (${RELEASE})"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,22 +27,24 @@ function update_script() {
 | 
				
			|||||||
        msg_error "No ${APP} Installation Found!"
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					        exit
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    msg_info "Stopping ${APP} LXC"
 | 
					 | 
				
			||||||
    systemctl stop autobrr.service
 | 
					 | 
				
			||||||
    msg_ok "Stopped ${APP} LXC"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} LXC"
 | 
					    RELEASE=$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
    rm -rf /usr/local/bin/*
 | 
					    if [[ "${RELEASE}" != "$(cat ~/.autobrr 2>/dev/null)" ]] || [[ ! -f ~/.autobrr ]]; then
 | 
				
			||||||
    curl -fsSL "$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4)" -o $(basename "$(curl -fsSL https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4)")
 | 
					      msg_info "Stopping ${APP} LXC"
 | 
				
			||||||
    tar -C /usr/local/bin -xzf autobrr*.tar.gz
 | 
					      systemctl stop autobrr
 | 
				
			||||||
    rm -rf autobrr*.tar.gz
 | 
					      msg_ok "Stopped ${APP} LXC"
 | 
				
			||||||
    msg_ok "Updated ${APP} LXC"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP} LXC"
 | 
					      fetch_and_deploy_gh_release "autobrr" "autobrr/autobrr" "prebuild" "latest" "/usr/local/bin" "autobrr_*_linux_x86_64.tar.gz"
 | 
				
			||||||
    systemctl start autobrr.service
 | 
					
 | 
				
			||||||
    msg_ok "Started ${APP} LXC"
 | 
					      msg_info "Starting ${APP} LXC"
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					      systemctl start autobrr
 | 
				
			||||||
    exit
 | 
					      msg_ok "Started ${APP} LXC"
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,6 +39,7 @@ function update_script() {
 | 
				
			|||||||
    msg_ok "Backed up data"
 | 
					    msg_ok "Backed up data"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
 | 
					    fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
 | 
				
			||||||
 | 
					    setup_composer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Configuring Baikal"
 | 
					    msg_info "Configuring Baikal"
 | 
				
			||||||
    cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
 | 
					    cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,6 +43,7 @@ function update_script() {
 | 
				
			|||||||
    msg_ok "Backed up Bar Assistant"
 | 
					    msg_ok "Backed up Bar Assistant"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/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}"
 | 
					    msg_info "Updating ${APP} to ${RELEASE_BARASSISTANT}"
 | 
				
			||||||
    cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env
 | 
					    cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
				
			|||||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
# Author: MickLesk (CanbiZ)
 | 
					# Author: MickLesk (CanbiZ)
 | 
				
			||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
# Source: https://github.com/adityachandelgit/BookLore
 | 
					# Source: https://github.com/booklore-app/BookLore
 | 
				
			||||||
 | 
					
 | 
				
			||||||
APP="BookLore"
 | 
					APP="BookLore"
 | 
				
			||||||
var_tags="${var_tags:-books;library}"
 | 
					var_tags="${var_tags:-books;library}"
 | 
				
			||||||
@@ -29,13 +29,13 @@ function update_script() {
 | 
				
			|||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/adityachandelgit/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/booklore-app/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
				
			||||||
  if [[ "${RELEASE}" != "$(cat ~/.booklore 2>/dev/null)" ]] || [[ ! -f ~/.booklore ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.booklore 2>/dev/null)" ]] || [[ ! -f ~/.booklore ]]; then
 | 
				
			||||||
    msg_info "Stopping $APP"
 | 
					    msg_info "Stopping $APP"
 | 
				
			||||||
    systemctl stop booklore
 | 
					    systemctl stop booklore
 | 
				
			||||||
    msg_ok "Stopped $APP"
 | 
					    msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fetch_and_deploy_gh_release "booklore" "adityachandelgit/BookLore"
 | 
					    fetch_and_deploy_gh_release "booklore" "booklore-app/BookLore"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Building Frontend"
 | 
					    msg_info "Building Frontend"
 | 
				
			||||||
    cd /opt/booklore/booklore-ui
 | 
					    cd /opt/booklore/booklore-ui
 | 
				
			||||||
@@ -45,7 +45,7 @@ function update_script() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    msg_info "Building Backend"
 | 
					    msg_info "Building Backend"
 | 
				
			||||||
    cd /opt/booklore/booklore-api
 | 
					    cd /opt/booklore/booklore-api
 | 
				
			||||||
    APP_VERSION=$(curl -fsSL https://api.github.com/repos/adityachandelgit/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
					    APP_VERSION=$(curl -fsSL https://api.github.com/repos/booklore-app/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
				
			||||||
    yq eval ".app.version = \"${APP_VERSION}\"" -i src/main/resources/application.yaml
 | 
					    yq eval ".app.version = \"${APP_VERSION}\"" -i src/main/resources/application.yaml
 | 
				
			||||||
    $STD ./gradlew clean build --no-daemon
 | 
					    $STD ./gradlew clean build --no-daemon
 | 
				
			||||||
    mkdir -p /opt/booklore/dist
 | 
					    mkdir -p /opt/booklore/dist
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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)
 | 
					    LATEST=$(curl -fsSL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
				
			||||||
    IP=$(hostname -I | awk '{print $1}')
 | 
					    IP=$(hostname -I | awk '{print $1}')
 | 
				
			||||||
    msg_info "Installing Dependencies"
 | 
					    msg_info "Installing Dependencies"
 | 
				
			||||||
 | 
					    $STD apt-get install -y \
 | 
				
			||||||
    $STD apt-get install -y git
 | 
					      git \
 | 
				
			||||||
    $STD apt-get install -y make
 | 
					      build-essential \
 | 
				
			||||||
    $STD apt-get install -y g++
 | 
					      ca-certificates \
 | 
				
			||||||
    $STD apt-get install -y gcc
 | 
					      gnupg2
 | 
				
			||||||
    $STD apt-get install -y ca-certificates
 | 
					 | 
				
			||||||
    $STD apt-get install -y gnupg
 | 
					 | 
				
			||||||
    msg_ok "Installed Dependencies"
 | 
					    msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Setting up Node.js Repository"
 | 
					    NODE_VERSION="22" setup_nodejs
 | 
				
			||||||
    mkdir -p /etc/apt/keyrings
 | 
					    fetch_and_deploy_gh_release "cronicle" "jhuckaby/Cronicle"
 | 
				
			||||||
    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"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Installing Node.js"
 | 
					    msg_info "Configuring Cronicle Worker"
 | 
				
			||||||
    $STD apt-get update
 | 
					 | 
				
			||||||
    $STD apt-get install -y nodejs
 | 
					 | 
				
			||||||
    msg_ok "Installed Node.js"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Installing Cronicle Worker"
 | 
					 | 
				
			||||||
    mkdir -p /opt/cronicle
 | 
					 | 
				
			||||||
    cd /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 npm install
 | 
				
			||||||
    $STD node bin/build.js dist
 | 
					    $STD node bin/build.js dist
 | 
				
			||||||
    sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
 | 
					    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
 | 
					    chmod 775 /etc/init.d/cronicled
 | 
				
			||||||
    $STD update-rc.d cronicled defaults
 | 
					    $STD update-rc.d cronicled defaults
 | 
				
			||||||
    msg_ok "Installed Cronicle Worker"
 | 
					    msg_ok "Installed Cronicle Worker"
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
 | 
					    echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,25 +27,19 @@ function update_script() {
 | 
				
			|||||||
        msg_error "No ${APP} Installation Found!"
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					        exit
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
					    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"
 | 
					        msg_info "Stopping $APP"
 | 
				
			||||||
        systemctl stop duplicati
 | 
					        systemctl stop duplicati
 | 
				
			||||||
        msg_ok "Stopped $APP"
 | 
					        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")
 | 
					        fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "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}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        msg_info "Starting $APP"
 | 
					        msg_info "Starting $APP"
 | 
				
			||||||
        systemctl start duplicati
 | 
					        systemctl start duplicati
 | 
				
			||||||
        msg_ok "Started $APP"
 | 
					        msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
        rm -rf ~/duplicati-${RELEASE}-linux-x64-gui.deb
 | 
					 | 
				
			||||||
        msg_ok "Cleanup Completed"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        msg_ok "Update Successful"
 | 
					        msg_ok "Update Successful"
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
					        msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
				
			|||||||
APP="Element Synapse"
 | 
					APP="Element Synapse"
 | 
				
			||||||
var_tags="${var_tags:-server}"
 | 
					var_tags="${var_tags:-server}"
 | 
				
			||||||
var_cpu="${var_cpu:-1}"
 | 
					var_cpu="${var_cpu:-1}"
 | 
				
			||||||
var_ram="${var_ram:-1024}"
 | 
					var_ram="${var_ram:-2048}"
 | 
				
			||||||
var_disk="${var_disk:-4}"
 | 
					var_disk="${var_disk:-4}"
 | 
				
			||||||
var_os="${var_os:-debian}"
 | 
					var_os="${var_os:-debian}"
 | 
				
			||||||
var_version="${var_version:-12}"
 | 
					var_version="${var_version:-12}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,13 +26,14 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/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
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.ersatztv 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv ]]; then
 | 
				
			||||||
    msg_info "Stopping ErsatzTV"
 | 
					    msg_info "Stopping ErsatzTV"
 | 
				
			||||||
    systemctl stop ersatzTV
 | 
					    systemctl stop ersatzTV
 | 
				
			||||||
    msg_ok "Stopped ErsatzTV"
 | 
					    msg_ok "Stopped ErsatzTV"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    FFMPEG_VERSION="latest" FFMPEG_TYPE="medium" setup_ffmpeg
 | 
					 | 
				
			||||||
    fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
 | 
					    fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ErsatzTV"
 | 
					    msg_info "Starting ErsatzTV"
 | 
				
			||||||
@@ -43,6 +44,29 @@ function update_script() {
 | 
				
			|||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,14 +40,19 @@ function update_script() {
 | 
				
			|||||||
    msg_ok "Backed up data"
 | 
					    msg_ok "Backed up data"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
 | 
					    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}"
 | 
					    msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
    rm -rf /opt/firefly/storage
 | 
					    rm -rf /opt/firefly/storage
 | 
				
			||||||
    cp /opt/.env /opt/firefly/.env
 | 
					    cp /opt/.env /opt/firefly/.env
 | 
				
			||||||
    cp -r /opt/storage /opt/firefly/storage
 | 
					    cp -r /opt/storage /opt/firefly/storage
 | 
				
			||||||
    cd /opt/firefly
 | 
					    
 | 
				
			||||||
    chown -R www-data:www-data /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 migrate --seed --force
 | 
				
			||||||
    $STD php artisan cache:clear
 | 
					    $STD php artisan cache:clear
 | 
				
			||||||
    $STD php artisan view:clear
 | 
					    $STD php artisan view:clear
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,6 +43,9 @@ function update_script() {
 | 
				
			|||||||
    msg_error "Project directory does not exist: $PROJECT_DIR"
 | 
					    msg_error "Project directory does not exist: $PROJECT_DIR"
 | 
				
			||||||
    exit 1
 | 
					    exit 1
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					  if ! command -v git &>/dev/null; then
 | 
				
			||||||
 | 
					    $STD apt-get install -y git
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Stopping service $SERVICE_NAME"
 | 
					  msg_info "Stopping service $SERVICE_NAME"
 | 
				
			||||||
  systemctl stop "$SERVICE_NAME"
 | 
					  systemctl stop "$SERVICE_NAME"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,26 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  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) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								ct/go2rtc.sh
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								ct/go2rtc.sh
									
									
									
									
									
								
							@@ -27,14 +27,23 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  msg_info "Updating $APP"
 | 
					
 | 
				
			||||||
  systemctl stop go2rtc
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/AlexxIT/go2rtc/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  cd /opt/go2rtc
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.go2rtc 2>/dev/null)" ]] || [[ ! -f ~/.go2rtc ]]; then
 | 
				
			||||||
  rm go2rtc_linux_amd64
 | 
					    msg_info "Stopping service"
 | 
				
			||||||
  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")
 | 
					    systemctl stop go2rtc
 | 
				
			||||||
  chmod +x go2rtc_linux_amd64
 | 
					    msg_ok "Stopped service"
 | 
				
			||||||
  systemctl start go2rtc
 | 
					
 | 
				
			||||||
  msg_ok "Updated $APP"
 | 
					    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
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								ct/gokapi.sh
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								ct/gokapi.sh
									
									
									
									
									
								
							@@ -27,8 +27,27 @@ function update_script() {
 | 
				
			|||||||
      msg_error "No ${APP} Installation Found!"
 | 
					      msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
      exit
 | 
					      exit
 | 
				
			||||||
   fi
 | 
					   fi
 | 
				
			||||||
   msg_error "Currently we don't provide an update function for this ${APP}."
 | 
					   if [[ -f /opt/${APP}_version.txt ]]; then
 | 
				
			||||||
   exit
 | 
					      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
 | 
					start
 | 
				
			||||||
@@ -38,4 +57,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}: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
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  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}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
    systemctl stop gotify
 | 
					    systemctl stop gotify
 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
					    fetch_and_deploy_gh_release "gotify" "gotify/server" "prebuild" "latest" "/opt/gotify" "gotify-linux-amd64.zip"
 | 
				
			||||||
    cd /opt/gotify
 | 
					    chmod +x /opt/gotify/gotify-linux-amd64
 | 
				
			||||||
    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}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
    systemctl start gotify
 | 
					    systemctl start gotify
 | 
				
			||||||
    msg_ok "Started ${APP}"
 | 
					    msg_ok "Started ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@ function update_script() {
 | 
				
			|||||||
      msg_error "No ${APP} Installation Found!"
 | 
					      msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
      exit
 | 
					      exit
 | 
				
			||||||
   fi
 | 
					   fi
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
   msg_info "Updating ${APP}"
 | 
					   msg_info "Updating ${APP}"
 | 
				
			||||||
   $STD apt-get update
 | 
					   $STD apt-get update
 | 
				
			||||||
   $STD apt-get -y upgrade
 | 
					   $STD apt-get -y upgrade
 | 
				
			||||||
@@ -41,4 +42,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								ct/grocy.sh
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								ct/grocy.sh
									
									
									
									
									
								
							@@ -27,20 +27,20 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  php_version=$(php -v | head -n 1 | awk '{print $2}')
 | 
					  
 | 
				
			||||||
  if [[ ! $php_version == "8.3"* ]]; then
 | 
					  php_ver=$(php -v | head -n 1 | awk '{print $2}')
 | 
				
			||||||
    msg_info "Updating PHP"
 | 
					  if [[ ! $php_ver == "8.3"* ]]; then
 | 
				
			||||||
    curl -fsSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
 | 
					    PHP_VERSION="8.3" PHP_MODULE="sqlite3,bz2" PHP_APACHE="yes" setup_php
 | 
				
			||||||
    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
 | 
					  fi
 | 
				
			||||||
    apt-get update
 | 
					  
 | 
				
			||||||
    apt-get install -y php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl,sqlite3,fpm,gd,zip,xml}
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/grocy/grocy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
    systemctl reload apache2
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.grocy 2>/dev/null)" ]] || [[ ! -f ~/.grocy ]]; then
 | 
				
			||||||
    apt autoremove
 | 
					    msg_info "Updating ${APP}"
 | 
				
			||||||
    msg_ok "Updated PHP"
 | 
					    bash /var/www/html/update.sh
 | 
				
			||||||
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  msg_info "Updating ${APP}"
 | 
					 | 
				
			||||||
  bash /var/www/html/update.sh
 | 
					 | 
				
			||||||
  msg_ok "Updated Successfully"
 | 
					 | 
				
			||||||
  exit
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								ct/headers/alpine-teamspeak-server
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/alpine-teamspeak-server
									
									
									
									
									
										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/jeedom
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/jeedom
									
									
									
									
									
										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/ots
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/ots
									
									
									
									
									
										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 @@
 | 
				
			|||||||
 | 
					  ______                                           __        _____                          
 | 
				
			||||||
 | 
					 /_  __/__  ____ _____ ___  _________  ___  ____ _/ /__     / ___/___  ______   _____  _____
 | 
				
			||||||
 | 
					  / / / _ \/ __ `/ __ `__ \/ ___/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
				
			||||||
 | 
					 / / /  __/ /_/ / / / / / (__  ) /_/ /  __/ /_/ / ,< /_____/__/ /  __/ /   | |/ /  __/ /    
 | 
				
			||||||
 | 
					/_/  \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_|     /____/\___/_/    |___/\___/_/     
 | 
				
			||||||
 | 
					                             /_/                                                            
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/tududi
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/tududi
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					  ______          __          ___ 
 | 
				
			||||||
 | 
					 /_  __/_  ______/ /_  ______/ (_)
 | 
				
			||||||
 | 
					  / / / / / / __  / / / / __  / / 
 | 
				
			||||||
 | 
					 / / / /_/ / /_/ / /_/ / /_/ / /  
 | 
				
			||||||
 | 
					/_/  \__,_/\__,_/\__,_/\__,_/_/   
 | 
				
			||||||
 | 
					                                  
 | 
				
			||||||
@@ -27,18 +27,18 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					  if [[ -f /opt/${APP}_version.txt ]]; then
 | 
				
			||||||
 | 
					    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) }')
 | 
					  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}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
    systemctl stop headscale
 | 
					    systemctl stop headscale
 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
					    fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
 | 
				
			||||||
    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")
 | 
					    fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
 | 
				
			||||||
    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}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
    # Temporary fix until headscale project resolves service getting disabled on updates.
 | 
					    # Temporary fix until headscale project resolves service getting disabled on updates.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,26 +22,24 @@ function update_script() {
 | 
				
			|||||||
  header_info
 | 
					  header_info
 | 
				
			||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
  if [[ ! -f /opt/homebox ]]; then
 | 
					  if [[ ! -d /opt/homebox ]]; then
 | 
				
			||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					  if [[ -x /opt/homebox ]]; then
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					    sed -i 's|/opt\b|/opt/homebox|g' /etc/systemd/system/homebox.service
 | 
				
			||||||
 | 
					    sed -i 's|^ExecStart=/opt/homebox$|ExecStart=/opt/homebox/homebox|' /etc/systemd/system/homebox.service
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.homebox 2>/dev/null)" ]] || [[ ! -f ~/.homebox ]]; then
 | 
				
			||||||
    msg_info "Stopping ${APP}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
    systemctl stop homebox
 | 
					    systemctl stop homebox
 | 
				
			||||||
    msg_ok "${APP} Stopped"
 | 
					    msg_ok "${APP} Stopped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
					    fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz"
 | 
				
			||||||
    cd /opt
 | 
					    chmod +x /opt/homebox/homebox
 | 
				
			||||||
    rm -rf homebox_bak
 | 
					    [ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env
 | 
				
			||||||
    rm -rf /tmp/homebox.tar.gz
 | 
					 | 
				
			||||||
    mv homebox homebox_bak
 | 
					 | 
				
			||||||
curl -fsSL "https://github.com/sysadminsmedia/homebox/releases/download/${RELEASE}/homebox_Linux_x86_64.tar.gz" -o "/tmp/homebox.tar.gz"
 | 
					 | 
				
			||||||
    tar -xzf /tmp/homebox.tar.gz -C /opt
 | 
					 | 
				
			||||||
    chmod +x /opt/homebox
 | 
					 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated Homebox"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
    systemctl start homebox
 | 
					    systemctl start homebox
 | 
				
			||||||
@@ -61,4 +59,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7745${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7745${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,14 +27,9 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
 | 
					
 | 
				
			||||||
    if ! command -v npm >/dev/null 2>&1; then
 | 
					  NODE_VERSION="22" NODE_MODULE="pnpm@latest" setup_nodejs
 | 
				
			||||||
      echo "Installing NPM..."
 | 
					
 | 
				
			||||||
      $STD apt-get install -y npm
 | 
					 | 
				
			||||||
      $STD npm install -g pnpm
 | 
					 | 
				
			||||||
      echo "Installed NPM..."
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
  # ensure that jq is installed
 | 
					  # ensure that jq is installed
 | 
				
			||||||
  if ! command -v jq &>/dev/null; then
 | 
					  if ! command -v jq &>/dev/null; then
 | 
				
			||||||
    $STD msg_info "Installing jq..."
 | 
					    $STD msg_info "Installing jq..."
 | 
				
			||||||
@@ -56,7 +51,7 @@ function update_script() {
 | 
				
			|||||||
    rm -rf homepage-${RELEASE}
 | 
					    rm -rf homepage-${RELEASE}
 | 
				
			||||||
    cd /opt/homepage
 | 
					    cd /opt/homepage
 | 
				
			||||||
    $STD pnpm install
 | 
					    $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_VERSION="v$RELEASE"
 | 
				
			||||||
    export NEXT_PUBLIC_REVISION="source"
 | 
					    export NEXT_PUBLIC_REVISION="source"
 | 
				
			||||||
    export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at')
 | 
					    export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at')
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										33
									
								
								ct/immich.sh
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								ct/immich.sh
									
									
									
									
									
								
							@@ -58,7 +58,8 @@ function update_script() {
 | 
				
			|||||||
    done
 | 
					    done
 | 
				
			||||||
    msg_ok "Image-processing libraries updated"
 | 
					    msg_ok "Image-processing libraries updated"
 | 
				
			||||||
  fi
 | 
					  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.137.3"
 | 
				
			||||||
 | 
					  #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
 | 
					  if [[ -f ~/.immich && "$RELEASE" == "$(cat ~/.immich)" ]]; then
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
@@ -98,11 +99,25 @@ function update_script() {
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cp "$ML_DIR"/ml_start.sh "$INSTALL_DIR"
 | 
					  cp "$ML_DIR"/ml_start.sh "$INSTALL_DIR"
 | 
				
			||||||
 | 
					  if grep -qs "set -a" "$APP_DIR"/bin/start.sh; then
 | 
				
			||||||
 | 
					    cp "$APP_DIR"/bin/start.sh "$INSTALL_DIR"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    cat <<EOF >"$INSTALL_DIR"/start.sh
 | 
				
			||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -a
 | 
				
			||||||
 | 
					. "$INSTALL_DIR"/.env
 | 
				
			||||||
 | 
					set +a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/usr/bin/node "$APP_DIR"/dist/main.js "\$@"
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					    chmod +x "$INSTALL_DIR"/start.sh
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  rm -rf "${APP_DIR:?}"/*
 | 
					  rm -rf "${APP_DIR:?}"/*
 | 
				
			||||||
  mkdir -p "$ML_DIR"
 | 
					  mkdir -p "$ML_DIR"
 | 
				
			||||||
  rm -rf "$SRC_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" "v${RELEASE}" "$SRC_DIR"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Updating ${APP} web and microservices"
 | 
					  msg_info "Updating ${APP} web and microservices"
 | 
				
			||||||
  cd "$SRC_DIR"/server
 | 
					  cd "$SRC_DIR"/server
 | 
				
			||||||
@@ -113,6 +128,10 @@ function update_script() {
 | 
				
			|||||||
  $STD npm ci
 | 
					  $STD npm ci
 | 
				
			||||||
  $STD npm run build
 | 
					  $STD npm run build
 | 
				
			||||||
  $STD npm prune --omit=dev --omit=optional
 | 
					  $STD npm prune --omit=dev --omit=optional
 | 
				
			||||||
 | 
					  cp -a {bin,dist,node_modules,resources,package*.json} "$APP_DIR"/
 | 
				
			||||||
 | 
					  cp package.json "$APP_DIR"/bin
 | 
				
			||||||
 | 
					  mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
 | 
				
			||||||
 | 
					  sed -i 's|^start|./start|' "$APP_DIR"/bin/immich-admin
 | 
				
			||||||
  cd "$SRC_DIR"/open-api/typescript-sdk
 | 
					  cd "$SRC_DIR"/open-api/typescript-sdk
 | 
				
			||||||
  $STD npm ci
 | 
					  $STD npm ci
 | 
				
			||||||
  $STD npm run build
 | 
					  $STD npm run build
 | 
				
			||||||
@@ -120,7 +139,6 @@ function update_script() {
 | 
				
			|||||||
  $STD npm ci
 | 
					  $STD npm ci
 | 
				
			||||||
  $STD npm run build
 | 
					  $STD npm run build
 | 
				
			||||||
  cd "$SRC_DIR"
 | 
					  cd "$SRC_DIR"
 | 
				
			||||||
  cp -a server/{node_modules,dist,bin,resources,package.json,package-lock.json,start*.sh} "$APP_DIR"/
 | 
					 | 
				
			||||||
  cp -a web/build "$APP_DIR"/www
 | 
					  cp -a web/build "$APP_DIR"/www
 | 
				
			||||||
  cp LICENSE "$APP_DIR"
 | 
					  cp LICENSE "$APP_DIR"
 | 
				
			||||||
  cd "$APP_DIR"
 | 
					  cd "$APP_DIR"
 | 
				
			||||||
@@ -150,8 +168,8 @@ function update_script() {
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
  ln -sf "$APP_DIR"/resources "$INSTALL_DIR"
 | 
					  ln -sf "$APP_DIR"/resources "$INSTALL_DIR"
 | 
				
			||||||
  cd "$APP_DIR"
 | 
					  cd "$APP_DIR"
 | 
				
			||||||
  grep -Rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
 | 
					  grep -rl /usr/src | xargs -n1 sed -i "s|\/usr/src|$INSTALL_DIR|g"
 | 
				
			||||||
  grep -RlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
 | 
					  grep -rlE "'/build'" | xargs -n1 sed -i "s|'/build'|'$APP_DIR'|g"
 | 
				
			||||||
  sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
 | 
					  sed -i "s@\"/cache\"@\"$INSTALL_DIR/cache\"@g" "$ML_DIR"/immich_ml/config.py
 | 
				
			||||||
  ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload
 | 
					  ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$APP_DIR"/upload
 | 
				
			||||||
  ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
 | 
					  ln -s "${UPLOAD_DIR:-/opt/immich/upload}" "$ML_DIR"/upload
 | 
				
			||||||
@@ -213,6 +231,7 @@ function compile_libjxl() {
 | 
				
			|||||||
    $STD make clean
 | 
					    $STD make clean
 | 
				
			||||||
    cd "$STAGING_DIR"
 | 
					    cd "$STAGING_DIR"
 | 
				
			||||||
    rm -rf "$SOURCE"/{build,third_party}
 | 
					    rm -rf "$SOURCE"/{build,third_party}
 | 
				
			||||||
 | 
					    sed -i "s/libjxl: .*$/libjxl: $LIBJXL_REVISION/" ~/.immich_library_revisions
 | 
				
			||||||
    msg_ok "Recompiled libjxl"
 | 
					    msg_ok "Recompiled libjxl"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -247,6 +266,7 @@ function compile_libheif() {
 | 
				
			|||||||
    $STD make clean
 | 
					    $STD make clean
 | 
				
			||||||
    cd "$STAGING_DIR"
 | 
					    cd "$STAGING_DIR"
 | 
				
			||||||
    rm -rf "$SOURCE"/build
 | 
					    rm -rf "$SOURCE"/build
 | 
				
			||||||
 | 
					    sed -i "s/libheif: .*$/libheif: $LIBHEIF_REVISION/" ~/.immich_library_revisions
 | 
				
			||||||
    msg_ok "Recompiled libheif"
 | 
					    msg_ok "Recompiled libheif"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -268,6 +288,7 @@ function compile_libraw() {
 | 
				
			|||||||
    ldconfig /usr/local/lib
 | 
					    ldconfig /usr/local/lib
 | 
				
			||||||
    $STD make clean
 | 
					    $STD make clean
 | 
				
			||||||
    cd "$STAGING_DIR"
 | 
					    cd "$STAGING_DIR"
 | 
				
			||||||
 | 
					    sed -i "s/libraw: .*$/libraw: $LIBRAW_REVISION/" ~/.immich_library_revisions
 | 
				
			||||||
    msg_ok "Recompiled libraw"
 | 
					    msg_ok "Recompiled libraw"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -287,6 +308,7 @@ function compile_imagemagick() {
 | 
				
			|||||||
    ldconfig /usr/local/lib
 | 
					    ldconfig /usr/local/lib
 | 
				
			||||||
    $STD make clean
 | 
					    $STD make clean
 | 
				
			||||||
    cd "$STAGING_DIR"
 | 
					    cd "$STAGING_DIR"
 | 
				
			||||||
 | 
					    sed -i "s/imagemagick: .*$/imagemagick: $IMAGEMAGICK_REVISION/" ~/.immich_library_revisions
 | 
				
			||||||
    msg_ok "Recompiled ImageMagick"
 | 
					    msg_ok "Recompiled ImageMagick"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -307,6 +329,7 @@ function compile_libvips() {
 | 
				
			|||||||
    ldconfig /usr/local/lib
 | 
					    ldconfig /usr/local/lib
 | 
				
			||||||
    cd "$STAGING_DIR"
 | 
					    cd "$STAGING_DIR"
 | 
				
			||||||
    rm -rf "$SOURCE"/build
 | 
					    rm -rf "$SOURCE"/build
 | 
				
			||||||
 | 
					    sed -i "s/libvips: .*$/libvips: $LIBVIPS_REVISION/" ~/.immich_library_revisions
 | 
				
			||||||
    msg_ok "Recompiled libvips"
 | 
					    msg_ok "Recompiled libvips"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,26 +27,19 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/inspircd/inspircd/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/inspircd/inspircd/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.inspircd 2>/dev/null)" ]] || [[ ! -f ~/.inspircd ]]; then
 | 
				
			||||||
    msg_info "Stopping Service"
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
    systemctl stop inspircd
 | 
					    systemctl stop inspircd
 | 
				
			||||||
    msg_ok "Stopped Service"
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    fetch_and_deploy_gh_release "inspircd" "inspircd/inspircd" "binary"
 | 
				
			||||||
    cd /opt
 | 
					 | 
				
			||||||
    curl -fsSL "https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u2_amd64.deb" -o $(basename "https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u2_amd64.deb")
 | 
					 | 
				
			||||||
    $STD apt-get install "./inspircd_${RELEASE}.deb12u2_amd64.deb" -y
 | 
					 | 
				
			||||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
					 | 
				
			||||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Service"
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
    systemctl start inspircd
 | 
					    systemctl start inspircd
 | 
				
			||||||
    msg_ok "Started Service"
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					 | 
				
			||||||
    rm -rf /opt/inspircd_${RELEASE}.deb12u2_amd64.deb
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,17 +27,18 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://github.com/Jackett/Jackett/releases/latest | grep "title>Release" | cut -d " " -f 4)
 | 
					
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [ ! -f /opt/.env ]; then
 | 
				
			||||||
    msg_info "Updating ${APP}"
 | 
					    sed -i 's|^Environment="DisableRootWarning=true"$|EnvironmentFile="/opt/.env"|' /etc/systemd/system/jackett.service
 | 
				
			||||||
    curl -fsSL "https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxAMDx64.tar.gz" -o $(basename "https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxAMDx64.tar.gz")
 | 
					    cat <<EOF >/opt/.env
 | 
				
			||||||
    systemctl stop jackett
 | 
					DisableRootWarning=true
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RELEASE=$(curl -s https://api.github.com/repos/Jackett/Jackett/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.jackett 2>/dev/null)" ]] || [[ ! -f ~/.jackett ]]; then
 | 
				
			||||||
    rm -rf /opt/Jackett
 | 
					    rm -rf /opt/Jackett
 | 
				
			||||||
    tar -xzf Jackett.Binaries.LinuxAMDx64.tar.gz -C /opt
 | 
					    fetch_and_deploy_gh_release "jackett" "Jackett/Jackett" "prebuild" "latest" "/opt/Jackett" "Jackett.Binaries.LinuxAMDx64.tar.gz" 
 | 
				
			||||||
    rm -rf Jackett.Binaries.LinuxAMDx64.tar.gz
 | 
					 | 
				
			||||||
    systemctl start jackett
 | 
					 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
					 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										46
									
								
								ct/jeedom.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								ct/jeedom.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					#!/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: Mips2648
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://jeedom.com/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="Jeedom"
 | 
				
			||||||
 | 
					var_tags="${var_tags:-automation;smarthome}"
 | 
				
			||||||
 | 
					var_cpu="${var_cpu:-2}"
 | 
				
			||||||
 | 
					var_ram="${var_ram:-2048}"
 | 
				
			||||||
 | 
					var_disk="${var_disk:-16}"
 | 
				
			||||||
 | 
					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 /var/www/html/core/config/version ]]; then
 | 
				
			||||||
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  msg_info "Updating OS"
 | 
				
			||||||
 | 
					  $STD apt-get update
 | 
				
			||||||
 | 
					  $STD apt-get -y upgrade
 | 
				
			||||||
 | 
					  msg_ok "OS updated, you can now update Jeedom from the Web UI."
 | 
				
			||||||
 | 
					  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}"
 | 
				
			||||||
							
								
								
									
										117
									
								
								ct/karakeep.sh
									
									
									
									
									
								
							
							
						
						
									
										117
									
								
								ct/karakeep.sh
									
									
									
									
									
								
							@@ -27,59 +27,74 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/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"
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
    systemctl start karakeep-browser karakeep-workers karakeep-web
 | 
					  if [[ -f ~/.karakeep && "$RELEASE" == "$(cat ~/.karakeep)" ]]; then
 | 
				
			||||||
    msg_ok "Started Services"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					    exit
 | 
				
			||||||
    rm -R /opt/v"${RELEASE}".zip
 | 
					 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					 | 
				
			||||||
  else
 | 
					 | 
				
			||||||
    msg_ok "No update required.  ${APP} is already at ${RELEASE}."
 | 
					 | 
				
			||||||
  fi
 | 
					  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
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
					source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
				
			||||||
# Copyright (c) 2021-2025 tteck
 | 
					# Copyright (c) 2021-2025 tteck
 | 
				
			||||||
# Author: tteck (tteckster)
 | 
					# Author: tteck (tteckster) | Co-Author: remz1337
 | 
				
			||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
# Source: https://www.keycloak.org/
 | 
					# Source: https://www.keycloak.org/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,34 +23,39 @@ function update_script() {
 | 
				
			|||||||
  header_info
 | 
					  header_info
 | 
				
			||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
  if [[ ! -f /etc/systemd/system/keycloak.service ]]; then
 | 
					  if [[ ! -d /opt/keycloak ]]; then
 | 
				
			||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  msg_info "Updating ${APP} LXC"
 | 
					
 | 
				
			||||||
 | 
					  msg_info "Stopping Keycloak"
 | 
				
			||||||
 | 
					  systemctl stop keycloak
 | 
				
			||||||
 | 
					  msg_ok "Stopped Keycloak"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Updating packages"
 | 
					  msg_info "Updating packages"
 | 
				
			||||||
  $STD apt-get update
 | 
					  $STD apt-get update
 | 
				
			||||||
  $STD apt-get -y upgrade
 | 
					  $STD apt-get -y upgrade
 | 
				
			||||||
 | 
					  msg_ok "Updated packages"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					  msg_info "Backup old Keycloak"
 | 
				
			||||||
  msg_info "Updating Keycloak to v$RELEASE"
 | 
					 | 
				
			||||||
  cd /opt
 | 
					  cd /opt
 | 
				
			||||||
  curl -fsSL "https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz" -o $(basename "https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz")
 | 
					 | 
				
			||||||
  mv keycloak keycloak.old
 | 
					  mv keycloak keycloak.old
 | 
				
			||||||
  tar -xzf keycloak-$RELEASE.tar.gz
 | 
					  tar -czf keycloak_conf_backup.tar.gz keycloak.old/conf
 | 
				
			||||||
  cp -r keycloak.old/conf keycloak-$RELEASE
 | 
					  msg_ok "Backup done"
 | 
				
			||||||
  cp -r keycloak.old/providers keycloak-$RELEASE
 | 
					 | 
				
			||||||
  cp -r keycloak.old/themes keycloak-$RELEASE
 | 
					 | 
				
			||||||
  mv keycloak-$RELEASE keycloak
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Delete temporary installation files"
 | 
					  fetch_and_deploy_gh_release "keycloak" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
 | 
				
			||||||
  rm keycloak-$RELEASE.tar.gz
 | 
					
 | 
				
			||||||
 | 
					  msg_info "Updating ${APP}"
 | 
				
			||||||
 | 
					  cd /opt
 | 
				
			||||||
 | 
					  mv keycloak_conf_backup.tar.gz keycloak/conf
 | 
				
			||||||
 | 
					  cp -r keycloak.old/providers keycloak
 | 
				
			||||||
 | 
					  cp -r keycloak.old/themes keycloak
 | 
				
			||||||
  rm -rf keycloak.old
 | 
					  rm -rf keycloak.old
 | 
				
			||||||
 | 
					  msg_ok "Updated ${APP} LXC"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Restating Keycloak"
 | 
					  msg_info "Restarting Keycloak"
 | 
				
			||||||
  systemctl restart keycloak
 | 
					  systemctl restart keycloak
 | 
				
			||||||
  msg_ok "Updated Successfully"
 | 
					  msg_ok "Restarted Keycloak"
 | 
				
			||||||
  exit
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,17 +28,18 @@ function update_script() {
 | 
				
			|||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/benjaminjonard/koillection/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/benjaminjonard/koillection/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ ! -f ~/.koillection ]] || [[ "${RELEASE}" != "$(cat ~/.koillection)" ]]; then
 | 
				
			||||||
    msg_info "Stopping Service"
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
    systemctl stop apache2
 | 
					    systemctl stop apache2
 | 
				
			||||||
    msg_ok "Stopped Service"
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Creating a backup"
 | 
				
			||||||
    cd /opt
 | 
					 | 
				
			||||||
    mv /opt/koillection/ /opt/koillection-backup
 | 
					    mv /opt/koillection/ /opt/koillection-backup
 | 
				
			||||||
    curl -fsSL "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/benjaminjonard/koillection/archive/refs/tags/${RELEASE}.zip")
 | 
					    msg_ok "Backup created"
 | 
				
			||||||
    $STD unzip "${RELEASE}.zip"
 | 
					    
 | 
				
			||||||
    mv "/opt/koillection-${RELEASE}" /opt/koillection
 | 
					    fetch_and_deploy_gh_release "koillection" "benjaminjonard/koillection"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
    cd /opt/koillection
 | 
					    cd /opt/koillection
 | 
				
			||||||
    cp -r /opt/koillection-backup/.env.local /opt/koillection
 | 
					    cp -r /opt/koillection-backup/.env.local /opt/koillection
 | 
				
			||||||
    cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
 | 
					    cp -r /opt/koillection-backup/public/uploads/. /opt/koillection/public/uploads/
 | 
				
			||||||
@@ -50,7 +51,6 @@ function update_script() {
 | 
				
			|||||||
    $STD yarn install
 | 
					    $STD yarn install
 | 
				
			||||||
    $STD yarn build
 | 
					    $STD yarn build
 | 
				
			||||||
    chown -R www-data:www-data /opt/koillection/public/uploads
 | 
					    chown -R www-data:www-data /opt/koillection/public/uploads
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
					    msg_ok "Updated $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Service"
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
@@ -58,9 +58,9 @@ function update_script() {
 | 
				
			|||||||
    msg_ok "Started Service"
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					    msg_info "Cleaning up"
 | 
				
			||||||
    rm -r "/opt/${RELEASE}.zip"
 | 
					 | 
				
			||||||
    rm -r /opt/koillection-backup
 | 
					    rm -r /opt/koillection-backup
 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					    msg_ok "Cleaned"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								ct/komga.sh
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								ct/komga.sh
									
									
									
									
									
								
							@@ -27,23 +27,21 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  msg_info "Updating ${APP}"
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ ! -f ~/.komga ]] || [[ "${RELEASE}" != "$(cat ~/.komga)" ]]; then
 | 
				
			||||||
    msg_info "Stopping ${APP}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
    systemctl stop komga
 | 
					    systemctl stop komga
 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
					    rm -f /opt/komga/komga.jar
 | 
				
			||||||
    curl -fsSL "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar" -o $(basename "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar")
 | 
					    USE_ORIGINAL_FILENAME="true" fetch_and_deploy_gh_release "komga-org" "gotson/komga" "singlefile" "latest" "/opt/komga" "komga*.jar"
 | 
				
			||||||
    rm -rf /opt/komga/komga.jar
 | 
					    mv /opt/komga/komga-*.jar /opt/komga/komga.jar
 | 
				
			||||||
    mv -f komga-${RELEASE}.jar /opt/komga/komga.jar
 | 
					 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
    systemctl start komga
 | 
					    systemctl start komga
 | 
				
			||||||
    msg_ok "Started ${APP}"
 | 
					    msg_ok "Started ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}."
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}."
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								ct/kubo.sh
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								ct/kubo.sh
									
									
									
									
									
								
							@@ -23,21 +23,24 @@ function update_script() {
 | 
				
			|||||||
  header_info
 | 
					  header_info
 | 
				
			||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
  if [[ ! -f /usr/local/kubo ]]; then
 | 
					  if [[ ! -f /usr/local/kubo/ipfs ]]; then
 | 
				
			||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://github.com/ipfs/kubo/releases/latest | grep "title>Release" | cut -d " " -f 4)
 | 
					
 | 
				
			||||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/ipfs/kubo/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
    msg_info "Updating $APP LXC"
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.kubo)" ]] || [[ ! -f ~/.kubo ]]; then
 | 
				
			||||||
    $STD apt-get update
 | 
					    msg_info "Stopping service"
 | 
				
			||||||
    $STD apt-get -y upgrade
 | 
					    systemctl stop ipfs
 | 
				
			||||||
    curl -fsSL "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-amd64.tar.gz" -o $(basename "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-amd64.tar.gz")
 | 
					    msg_ok "Stopped service"
 | 
				
			||||||
    tar -xzf "kubo_${RELEASE}_linux-amd64.tar.gz" -C /usr/local
 | 
					
 | 
				
			||||||
    systemctl restart ipfs.service
 | 
					    fetch_and_deploy_gh_release "kubo" "ipfs/kubo" "prebuild" "latest" "/usr/local/kubo" "kubo*linux-amd64.tar.gz"
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					
 | 
				
			||||||
    rm "kubo_${RELEASE}_linux-amd64.tar.gz"
 | 
					    msg_info "Starting service"
 | 
				
			||||||
    msg_ok "Updated $APP LXC"
 | 
					    systemctl start ipfs
 | 
				
			||||||
 | 
					    msg_ok "Service started"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Updated successfuly"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,16 +27,17 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/librespeed/speedtest-rust/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "v([^"]+).*/\1/')
 | 
					  
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/librespeed/speedtest-rust/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
				
			||||||
  if [[ "${RELEASE}" != "$(cat ~/.librespeed 2>/dev/null)" ]] || [[ ! -f ~/.librespeed ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.librespeed 2>/dev/null)" ]] || [[ ! -f ~/.librespeed ]]; then
 | 
				
			||||||
    msg_info "Stopping Services"
 | 
					    msg_info "Stopping Services"
 | 
				
			||||||
    systemctl stop librespeed-rs
 | 
					    systemctl stop librespeed_rs
 | 
				
			||||||
    msg_ok "Services Stopped"
 | 
					    msg_ok "Services Stopped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-x86_64-unknown-linux-gnu.deb"
 | 
					    fetch_and_deploy_gh_release "librespeed-rust" "librespeed/speedtest-rust" "binary" "latest" "/opt/librespeed-rust" "librespeed-rs-x86_64-unknown-linux-gnu.deb"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Service"
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
    systemctl start librespeed-rs
 | 
					    systemctl start librespeed_rs
 | 
				
			||||||
    msg_ok "Started Service"
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										29
									
								
								ct/lidarr.sh
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								ct/lidarr.sh
									
									
									
									
									
								
							@@ -29,19 +29,24 @@ function update_script() {
 | 
				
			|||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Updating $APP LXC"
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
				
			||||||
  temp_file="$(mktemp)"
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.lidarr)" ]] || [[ ! -f ~/.lidarr ]]; then
 | 
				
			||||||
  rm -rf /opt/Lidarr
 | 
					 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Lidarr/Lidarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					 | 
				
			||||||
  curl -fsSL "https://github.com/Lidarr/Lidarr/releases/download/v${RELEASE}/Lidarr.master.${RELEASE}.linux-core-x64.tar.gz" -o "$temp_file"
 | 
					 | 
				
			||||||
  $STD tar -xvzf "$temp_file"
 | 
					 | 
				
			||||||
  mv Lidarr /opt
 | 
					 | 
				
			||||||
  chmod 775 /opt/Lidarr
 | 
					 | 
				
			||||||
  msg_ok "Updated $APP LXC"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Cleaning up"
 | 
					    msg_info "Stopping service"
 | 
				
			||||||
  rm -rf "$temp_file"
 | 
					    systemctl stop lidarr
 | 
				
			||||||
  msg_ok "Cleaned up"
 | 
					    msg_ok "Service stopped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "lidarr" "Lidarr/Lidarr" "prebuild" "latest" "/opt/Lidarr" "Lidarr.master*linux-core-x64.tar.gz"
 | 
				
			||||||
 | 
					    chmod 775 /opt/Lidarr
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    msg_info "Starting service"
 | 
				
			||||||
 | 
					    systemctl start lidarr
 | 
				
			||||||
 | 
					    msg_ok "Service started"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Updated successfully"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  exit
 | 
					  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}"
 | 
				
			||||||
@@ -27,31 +27,33 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					  if ! command -v jq &>/dev/null; then
 | 
				
			||||||
 | 
					    $STD apt-get install -y jq
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/knadh/listmonk/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/knadh/listmonk/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.listmonk)" ]] || [[ ! -f ~/.listmonk ]]; then
 | 
				
			||||||
    msg_info "Stopping ${APP}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
    systemctl stop listmonk
 | 
					    systemctl stop listmonk
 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Backing up data"
 | 
				
			||||||
    cd /opt
 | 
					 | 
				
			||||||
    mv /opt/listmonk/ /opt/listmonk-backup
 | 
					    mv /opt/listmonk/ /opt/listmonk-backup
 | 
				
			||||||
    mkdir /opt/listmonk/
 | 
					    msg_ok "Backed up data"
 | 
				
			||||||
    curl -fsSL "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_amd64.tar.gz" -o $(basename "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_amd64.tar.gz")
 | 
					
 | 
				
			||||||
    tar -xzf "listmonk_${RELEASE}_linux_amd64.tar.gz" -C /opt/listmonk
 | 
					    fetch_and_deploy_gh_release "listmonk" "knadh/listmonk" "prebuild" "latest" "/opt/listmonk" "listmonk*linux_amd64.tar.gz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Configuring listmonk"
 | 
				
			||||||
    mv /opt/listmonk-backup/config.toml /opt/listmonk/config.toml
 | 
					    mv /opt/listmonk-backup/config.toml /opt/listmonk/config.toml
 | 
				
			||||||
    mv /opt/listmonk-backup/uploads /opt/listmonk/uploads
 | 
					    mv /opt/listmonk-backup/uploads /opt/listmonk/uploads
 | 
				
			||||||
    $STD /opt/listmonk/listmonk --upgrade --yes --config /opt/listmonk/config.toml
 | 
					    $STD /opt/listmonk/listmonk --upgrade --yes --config /opt/listmonk/config.toml
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					    msg_ok "Configured listmonk"
 | 
				
			||||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
    systemctl start listmonk
 | 
					    systemctl start listmonk
 | 
				
			||||||
    msg_ok "Started ${APP}"
 | 
					    msg_ok "Started ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					    msg_info "Cleaning up"
 | 
				
			||||||
    rm -rf "/opt/listmonk_${RELEASE}_linux_amd64.tar.gz"
 | 
					 | 
				
			||||||
    rm -rf /opt/listmonk-backup/
 | 
					    rm -rf /opt/listmonk-backup/
 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					    msg_ok "Cleaned"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,16 +27,17 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/hargata/lubelog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  if ! command -v jq &>/dev/null; then
 | 
				
			||||||
  RELEASE_TRIMMED=$(echo "${RELEASE}" | tr -d ".")
 | 
					    $STD apt-get install -y jq
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/hargata/lubelog/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
				
			||||||
 | 
					  if [[ ! -f ~/.lubelogger ]] || [[ "${RELEASE}" != "$(cat ~/.lubelogger)" ]]; then
 | 
				
			||||||
    msg_info "Stopping Service"
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
    systemctl stop lubelogger
 | 
					    systemctl stop lubelogger
 | 
				
			||||||
    msg_ok "Stopped Service"
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Backing up data"
 | 
				
			||||||
    cd /opt
 | 
					 | 
				
			||||||
    curl -fsSL "https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip" -o $(basename "https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip")
 | 
					 | 
				
			||||||
    mkdir -p /tmp/lubeloggerData/data
 | 
					    mkdir -p /tmp/lubeloggerData/data
 | 
				
			||||||
    cp /opt/lubelogger/appsettings.json /tmp/lubeloggerData/appsettings.json
 | 
					    cp /opt/lubelogger/appsettings.json /tmp/lubeloggerData/appsettings.json
 | 
				
			||||||
    cp -r /opt/lubelogger/data/ /tmp/lubeloggerData/
 | 
					    cp -r /opt/lubelogger/data/ /tmp/lubeloggerData/
 | 
				
			||||||
@@ -50,20 +51,23 @@ function update_script() {
 | 
				
			|||||||
    [[ -e /opt/lubelogger/wwwroot/temp ]] && cp -r /opt/lubelogger/wwwroot/temp /tmp/lubeloggerData/data/
 | 
					    [[ -e /opt/lubelogger/wwwroot/temp ]] && cp -r /opt/lubelogger/wwwroot/temp /tmp/lubeloggerData/data/
 | 
				
			||||||
    [[ -e /opt/lubelogger/log ]] && cp -r /opt/lubelogger/log /tmp/lubeloggerData/
 | 
					    [[ -e /opt/lubelogger/log ]] && cp -r /opt/lubelogger/log /tmp/lubeloggerData/
 | 
				
			||||||
    rm -rf /opt/lubelogger
 | 
					    rm -rf /opt/lubelogger
 | 
				
			||||||
    $STD unzip LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip -d lubelogger
 | 
					    msg_ok "Backed up data"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "lubelogger" "hargata/lubelog" "prebuild" "latest" "/opt/lubelogger" "LubeLogger*linux_x64.zip"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Configuring LubeLogger"
 | 
				
			||||||
    chmod 700 /opt/lubelogger/CarCareTracker
 | 
					    chmod 700 /opt/lubelogger/CarCareTracker
 | 
				
			||||||
    cp -rf /tmp/lubeloggerData/* /opt/lubelogger/
 | 
					    cp -rf /tmp/lubeloggerData/* /opt/lubelogger/
 | 
				
			||||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
					    msg_ok "Configured LubeLogger"
 | 
				
			||||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Service"
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
    systemctl start lubelogger
 | 
					    systemctl start lubelogger
 | 
				
			||||||
    msg_ok "Started Service"
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					    msg_info "Cleaning up"
 | 
				
			||||||
    rm -rf /opt/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
 | 
					 | 
				
			||||||
    rm -rf /tmp/lubeloggerData
 | 
					    rm -rf /tmp/lubeloggerData
 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					    msg_ok "Cleaned"
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,16 +27,17 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/MagicMirrorOrg/MagicMirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  if ! command -v jq &>/dev/null; then
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi
 | 
					    $STD apt-get install -y jq
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/MagicMirrorOrg/MagicMirror/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
				
			||||||
 | 
					  if [[ ! -f ~/.magicmirror ]] || [[ "${RELEASE}" != "$(cat ~/.magicmirror)" ]]; then
 | 
				
			||||||
    msg_info "Stopping Service"
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
    systemctl stop magicmirror
 | 
					    systemctl stop magicmirror
 | 
				
			||||||
    msg_ok "Stopped Service"
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Backing up data"
 | 
				
			||||||
    $STD apt-get update
 | 
					 | 
				
			||||||
    $STD apt-get upgrade -y
 | 
					 | 
				
			||||||
    rm -rf /opt/magicmirror-backup
 | 
					    rm -rf /opt/magicmirror-backup
 | 
				
			||||||
    mkdir /opt/magicmirror-backup
 | 
					    mkdir /opt/magicmirror-backup
 | 
				
			||||||
    cp /opt/magicmirror/config/config.js /opt/magicmirror-backup
 | 
					    cp /opt/magicmirror/config/config.js /opt/magicmirror-backup
 | 
				
			||||||
@@ -44,27 +45,24 @@ function update_script() {
 | 
				
			|||||||
      cp /opt/magicmirror/css/custom.css /opt/magicmirror-backup
 | 
					      cp /opt/magicmirror/css/custom.css /opt/magicmirror-backup
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    cp -r /opt/magicmirror/modules /opt/magicmirror-backup
 | 
					    cp -r /opt/magicmirror/modules /opt/magicmirror-backup
 | 
				
			||||||
    temp_file=$(mktemp)
 | 
					    msg_ok "Backed up data"
 | 
				
			||||||
curl -fsSL "https://github.com/MagicMirrorOrg/MagicMirror/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file""
 | 
					
 | 
				
			||||||
    tar -xzf "$temp_file"
 | 
					    fetch_and_deploy_gh_release "magicmirror" "MagicMirrorOrg/MagicMirror" "tarball"
 | 
				
			||||||
    rm -rf /opt/magicmirror
 | 
					
 | 
				
			||||||
    mv MagicMirror-${RELEASE} /opt/magicmirror
 | 
					    msg_info "Configuring MagicMirror"
 | 
				
			||||||
    cd /opt/magicmirror
 | 
					    cd /opt/magicmirror
 | 
				
			||||||
 | 
					    sed -i -E 's/("postinstall": )".*"/\1""/; s/("prepare": )".*"/\1""/' package.json
 | 
				
			||||||
    $STD npm run install-mm
 | 
					    $STD npm run install-mm
 | 
				
			||||||
    cp /opt/magicmirror-backup/config.js /opt/magicmirror/config/
 | 
					    cp /opt/magicmirror-backup/config.js /opt/magicmirror/config/
 | 
				
			||||||
    if [[ -f /opt/magicmirror-backup/custom.css ]]; then
 | 
					    if [[ -f /opt/magicmirror-backup/custom.css ]]; then
 | 
				
			||||||
      cp /opt/magicmirror-backup/custom.css /opt/magicmirror/css/
 | 
					      cp /opt/magicmirror-backup/custom.css /opt/magicmirror/css/
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
					    msg_ok "Configured MagicMirror"
 | 
				
			||||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Service"
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
    systemctl start magicmirror
 | 
					    systemctl start magicmirror
 | 
				
			||||||
    msg_ok "Started Service"
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					 | 
				
			||||||
    rm -f $temp_file
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
				
			||||||
@@ -79,4 +77,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,39 +28,33 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					  if ! command -v jq &>/dev/null; then
 | 
				
			||||||
 | 
					    $STD apt-get install -y jq
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/intri-in/manage-my-damn-life-nextjs/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/intri-in/manage-my-damn-life-nextjs/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
				
			||||||
  if [[ "${RELEASE}" != "$(cat /opt/mmdl_version.txt)" ]] || [[ ! -f /opt/mmdl_version.txt ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.mmdl)" ]] || [[ ! -f ~/.mmdl ]]; then
 | 
				
			||||||
    msg_info "Stopping $APP"
 | 
					    msg_info "Stopping service"
 | 
				
			||||||
    systemctl stop mmdl
 | 
					    systemctl stop mmdl
 | 
				
			||||||
    msg_ok "Stopped $APP"
 | 
					    msg_ok "Stopped service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Creating Backup"
 | 
					    msg_info "Creating Backup"
 | 
				
			||||||
    cp /opt/mmdl/.env /opt/mmdl.env
 | 
					    cp /opt/mmdl/.env /opt/mmdl.env
 | 
				
			||||||
    msg_ok "Backup Created"
 | 
					    msg_ok "Backup Created"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
					    fetch_and_deploy_gh_release "mmdl" "intri-in/manage-my-damn-life-nextjs" "tarball"
 | 
				
			||||||
    curl -fsSLO "https://github.com/intri-in/manage-my-damn-life-nextjs/archive/refs/tags/v${RELEASE}.zip"
 | 
					
 | 
				
			||||||
    rm -r /opt/mmdl
 | 
					    msg_info "Configuring ${APP}"
 | 
				
			||||||
    unzip -q v"$RELEASE".zip
 | 
					 | 
				
			||||||
    mv manage-my-damn-life-nextjs-"$RELEASE"/ /opt/mmdl
 | 
					 | 
				
			||||||
    mv /opt/mmdl.env /opt/mmdl/.env
 | 
					 | 
				
			||||||
    cd /opt/mmdl
 | 
					    cd /opt/mmdl
 | 
				
			||||||
    $STD npm install
 | 
					    $STD npm install
 | 
				
			||||||
    $STD npm run migrate
 | 
					    $STD npm run migrate
 | 
				
			||||||
    $STD npm run build
 | 
					    $STD npm run build
 | 
				
			||||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
					    msg_ok "Configured ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting $APP"
 | 
					    msg_info "Starting service"
 | 
				
			||||||
    systemctl start mmdl
 | 
					    systemctl start mmdl
 | 
				
			||||||
    msg_ok "Started $APP"
 | 
					    msg_ok "Started service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
    rm -f ~/v"$RELEASE".zip
 | 
					 | 
				
			||||||
    msg_ok "Cleanup Completed"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Last Action
 | 
					 | 
				
			||||||
    echo "$RELEASE" >/opt/mmdl_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Update Successful"
 | 
					    msg_ok "Update Successful"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,15 +20,34 @@ color
 | 
				
			|||||||
catch_errors
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function update_script() {
 | 
					function update_script() {
 | 
				
			||||||
    header_info
 | 
					  header_info
 | 
				
			||||||
    check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
    check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
    if [[ ! -d /opt/mediamtx/ ]]; then
 | 
					  if [[ ! -d /opt/mediamtx/ ]]; then
 | 
				
			||||||
        msg_error "No ${APP} Installation Found!"
 | 
					      msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					      exit
 | 
				
			||||||
    fi
 | 
					  fi
 | 
				
			||||||
    msg_error "Currently we don't provide an update function for this ${APP}."
 | 
					  if ! command -v jq &>/dev/null; then
 | 
				
			||||||
    exit
 | 
					    $STD apt-get install -y jq
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/bluenviron/mediamtx/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.mediamtx)" ]] || [[ ! -f ~/.mediamtx ]]; then
 | 
				
			||||||
 | 
					    msg_info "Stopping service"
 | 
				
			||||||
 | 
					    systemctl stop mediamtx
 | 
				
			||||||
 | 
					    msg_ok "Service stopped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "mediamtx" "bluenviron/mediamtx" "prebuild" "latest" "/opt/mediamtx" "mediamtx*linux_amd64.tar.gz"
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    msg_info "Starting service"
 | 
				
			||||||
 | 
					    systemctl start mediamtx
 | 
				
			||||||
 | 
					    msg_ok "Service started"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Updated successfully"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
@@ -36,4 +55,4 @@ build_container
 | 
				
			|||||||
description
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ function update_script() {
 | 
				
			|||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if [[ ! -f /opt/Meilisearch_version.txt ]]; then
 | 
					  if [[ ! -d /opt/meilisearch ]]; then
 | 
				
			||||||
    msg_error "No Meilisearch Installation Found!"
 | 
					    msg_error "No Meilisearch Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
@@ -38,13 +38,7 @@ function update_script() {
 | 
				
			|||||||
    systemctl stop meilisearch
 | 
					    systemctl stop meilisearch
 | 
				
			||||||
    msg_ok "Stopped Meilisearch"
 | 
					    msg_ok "Stopped Meilisearch"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating Meilisearch"
 | 
					    fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
 | 
				
			||||||
    tmp_file=$(mktemp)
 | 
					 | 
				
			||||||
    RELEASE=$(curl -s https://api.github.com/repos/meilisearch/meilisearch/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					 | 
				
			||||||
    curl -fsSL https://github.com/meilisearch/meilisearch/releases/latest/download/meilisearch.deb -o $tmp_file
 | 
					 | 
				
			||||||
    $STD dpkg -i $tmp_file
 | 
					 | 
				
			||||||
    echo "$RELEASE" >/opt/meilisearch_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated Meilisearch"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Meilisearch"
 | 
					    msg_info "Starting Meilisearch"
 | 
				
			||||||
    systemctl start meilisearch
 | 
					    systemctl start meilisearch
 | 
				
			||||||
@@ -53,7 +47,7 @@ function update_script() {
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if [ "$UPD" == "2" ]; then
 | 
					  if [ "$UPD" == "2" ]; then
 | 
				
			||||||
    if [[ ! -f /opt/Meilisearch-ui_version.txt ]]; then
 | 
					    if [[ ! -d /opt/meilisearch-ui ]]; then
 | 
				
			||||||
      msg_error "No Meilisearch-UI Installation Found!"
 | 
					      msg_error "No Meilisearch-UI Installation Found!"
 | 
				
			||||||
      exit
 | 
					      exit
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
@@ -61,22 +55,16 @@ function update_script() {
 | 
				
			|||||||
    systemctl stop meilisearch-ui
 | 
					    systemctl stop meilisearch-ui
 | 
				
			||||||
    msg_ok "Stopped Meilisearch-UI"
 | 
					    msg_ok "Stopped Meilisearch-UI"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating Meilisearch-UI"
 | 
					 | 
				
			||||||
    tmp_file=$(mktemp)
 | 
					 | 
				
			||||||
    tmp_dir=$(mktemp -d)
 | 
					 | 
				
			||||||
    RELEASE_UI=$(curl -s https://api.github.com/repos/riccox/meilisearch-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					 | 
				
			||||||
    cp /opt/meilisearch-ui/.env.local /tmp/.env.local.bak
 | 
					    cp /opt/meilisearch-ui/.env.local /tmp/.env.local.bak
 | 
				
			||||||
    rm -rf /opt/meilisearch-ui
 | 
					    rm -rf /opt/meilisearch-ui
 | 
				
			||||||
    mkdir -p /opt/meilisearch-ui
 | 
					    fetch_and_deploy_gh_release "meilisearch-ui" "riccox/meilisearch-ui" "tarball"
 | 
				
			||||||
    curl -fsSL "https://github.com/riccox/meilisearch-ui/archive/refs/tags/${RELEASE_UI}.zip" -o $tmp_file
 | 
					
 | 
				
			||||||
    $STD unzip "$tmp_file" -d "$tmp_dir"
 | 
					    msg_info "Configuring Meilisearch-UI"
 | 
				
			||||||
    mv "$tmp_dir"/*/* /opt/meilisearch-ui/
 | 
					 | 
				
			||||||
    cd /opt/meilisearch-ui
 | 
					    cd /opt/meilisearch-ui
 | 
				
			||||||
    sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
 | 
					    sed -i 's|const hash = execSync("git rev-parse HEAD").toString().trim();|const hash = "unknown";|' /opt/meilisearch-ui/vite.config.ts
 | 
				
			||||||
    mv /tmp/.env.local.bak /opt/meilisearch-ui/.env.local
 | 
					    mv /tmp/.env.local.bak /opt/meilisearch-ui/.env.local
 | 
				
			||||||
    $STD pnpm install
 | 
					    $STD pnpm install
 | 
				
			||||||
    echo "$RELEASE_UI" >/opt/meilisearch-ui_version.txt
 | 
					    msg_ok "Configured Meilisearch-UI"
 | 
				
			||||||
    msg_ok "Updated Meilisearch-UI"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Meilisearch-UI"
 | 
					    msg_info "Starting Meilisearch-UI"
 | 
				
			||||||
    systemctl start meilisearch-ui
 | 
					    systemctl start meilisearch-ui
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										43
									
								
								ct/memos.sh
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								ct/memos.sh
									
									
									
									
									
								
							@@ -7,9 +7,9 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
APP="Memos"
 | 
					APP="Memos"
 | 
				
			||||||
var_tags="${var_tags:-notes}"
 | 
					var_tags="${var_tags:-notes}"
 | 
				
			||||||
var_cpu="${var_cpu:-2}"
 | 
					var_cpu="${var_cpu:-1}"
 | 
				
			||||||
var_ram="${var_ram:-3072}"
 | 
					var_ram="${var_ram:-1024}"
 | 
				
			||||||
var_disk="${var_disk:-7}"
 | 
					var_disk="${var_disk:-3}"
 | 
				
			||||||
var_os="${var_os:-debian}"
 | 
					var_os="${var_os:-debian}"
 | 
				
			||||||
var_version="${var_version:-12}"
 | 
					var_version="${var_version:-12}"
 | 
				
			||||||
var_unprivileged="${var_unprivileged:-1}"
 | 
					var_unprivileged="${var_unprivileged:-1}"
 | 
				
			||||||
@@ -27,26 +27,23 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  msg_info "Updating $APP (Patience)"
 | 
					  
 | 
				
			||||||
  cd /opt/memos
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/usememos/memos/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  git reset --hard HEAD
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.memos 2>/dev/null)" ]] || [[ ! -f ~/.memos ]]; then
 | 
				
			||||||
  output=$(git pull --no-rebase)
 | 
					    msg_info "Stopping service"
 | 
				
			||||||
  if echo "$output" | grep -q "Already up to date."; then
 | 
					    systemctl stop memos
 | 
				
			||||||
    msg_ok "$APP is already up to date."
 | 
					    msg_ok "Service stopped"
 | 
				
			||||||
    exit
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "memos" "usememos/memos" "prebuild" "latest" "/opt/memos" "memos*linux_amd64.tar.gz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting service"
 | 
				
			||||||
 | 
					    systemctl start memos
 | 
				
			||||||
 | 
					    msg_ok "Service started"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Updated successfully"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  systemctl stop memos
 | 
					 | 
				
			||||||
  export NODE_OPTIONS="--max-old-space-size=2048"
 | 
					 | 
				
			||||||
  cd /opt/memos/web
 | 
					 | 
				
			||||||
  $STD pnpm i --frozen-lockfile
 | 
					 | 
				
			||||||
  $STD pnpm build
 | 
					 | 
				
			||||||
  cd /opt/memos
 | 
					 | 
				
			||||||
  mkdir -p /opt/memos/server/dist
 | 
					 | 
				
			||||||
  cp -r web/dist/* /opt/memos/server/dist/
 | 
					 | 
				
			||||||
  cp -r web/dist/* /opt/memos/server/router/frontend/dist/
 | 
					 | 
				
			||||||
  $STD go build -o /opt/memos/memos -tags=embed bin/memos/main.go
 | 
					 | 
				
			||||||
  systemctl start memos
 | 
					 | 
				
			||||||
  msg_ok "Updated $APP"
 | 
					 | 
				
			||||||
  exit
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -57,4 +54,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9030${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9030${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								ct/monica.sh
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								ct/monica.sh
									
									
									
									
									
								
							@@ -27,18 +27,20 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/monicahq/monica/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/monicahq/monica/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 ~/.monica ]] || [[ "${RELEASE}" != "$(cat ~/.monica)" ]]; then
 | 
				
			||||||
    msg_info "Stopping Service"
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
    systemctl stop apache2
 | 
					    systemctl stop apache2
 | 
				
			||||||
    msg_ok "Stopped Service"
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Creating backup"
 | 
				
			||||||
    cd /opt
 | 
					 | 
				
			||||||
    mv /opt/monica/ /opt/monica-backup
 | 
					    mv /opt/monica/ /opt/monica-backup
 | 
				
			||||||
    curl -fsSL "https://github.com/monicahq/monica/releases/download/v${RELEASE}/monica-v${RELEASE}.tar.bz2" -o $(basename "https://github.com/monicahq/monica/releases/download/v${RELEASE}/monica-v${RELEASE}.tar.bz2")
 | 
					    msg_ok "Backup created"
 | 
				
			||||||
    tar -xjf "monica-v${RELEASE}.tar.bz2"
 | 
					
 | 
				
			||||||
    mv "/opt/monica-v${RELEASE}" /opt/monica
 | 
					    fetch_and_deploy_gh_release "monica" "monicahq/monica" "prebuild" "latest" "/opt/monica" "monica-v*.tar.bz2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Configuring monica"    
 | 
				
			||||||
    cd /opt/monica/
 | 
					    cd /opt/monica/
 | 
				
			||||||
    cp -r /opt/monica-backup/.env /opt/monica
 | 
					    cp -r /opt/monica-backup/.env /opt/monica
 | 
				
			||||||
    cp -r /opt/monica-backup/storage/* /opt/monica/storage/
 | 
					    cp -r /opt/monica-backup/storage/* /opt/monica/storage/
 | 
				
			||||||
@@ -48,17 +50,16 @@ function update_script() {
 | 
				
			|||||||
    $STD php artisan monica:update --force
 | 
					    $STD php artisan monica:update --force
 | 
				
			||||||
    chown -R www-data:www-data /opt/monica
 | 
					    chown -R www-data:www-data /opt/monica
 | 
				
			||||||
    chmod -R 775 /opt/monica/storage
 | 
					    chmod -R 775 /opt/monica/storage
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					    msg_ok "Configured monica"
 | 
				
			||||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Service"
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
    systemctl start apache2
 | 
					    systemctl start apache2
 | 
				
			||||||
    msg_ok "Started Service"
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					    msg_info "Cleaning up"
 | 
				
			||||||
    rm -r "/opt/monica-v${RELEASE}.tar.bz2"
 | 
					 | 
				
			||||||
    rm -r /opt/monica-backup
 | 
					    rm -r /opt/monica-backup
 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					    msg_ok "Cleaned"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,31 +28,29 @@ function update_script() {
 | 
				
			|||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://github.com/gnmyt/myspeed/releases/latest | grep "title>Release" | cut -d " " -f 5)
 | 
					  RELEASE=$(curl -fsSL https://github.com/gnmyt/myspeed/releases/latest | grep "title>Release" | cut -d " " -f 5)
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ ! -f ~/.myspeed ]] || [[ "${RELEASE}" != "$(cat ~/.myspeed)" ]]; then
 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Stopping ${APP} Service"
 | 
					    msg_info "Stopping ${APP} Service"
 | 
				
			||||||
    systemctl stop myspeed
 | 
					    systemctl stop myspeed
 | 
				
			||||||
    msg_ok "Stopped ${APP} Service"
 | 
					    msg_ok "Stopped ${APP} Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
					    msg_info "Creating backup"
 | 
				
			||||||
    cd /opt
 | 
					    cd /opt
 | 
				
			||||||
    rm -rf myspeed_bak
 | 
					    rm -rf myspeed_bak
 | 
				
			||||||
    mv myspeed myspeed_bak
 | 
					    mv myspeed myspeed_bak
 | 
				
			||||||
    curl -fsSL "https://github.com/gnmyt/myspeed/releases/download/v$RELEASE/MySpeed-$RELEASE.zip" -o $(basename "https://github.com/gnmyt/myspeed/releases/download/v$RELEASE/MySpeed-$RELEASE.zip")
 | 
					    msg_ok "Backup created"
 | 
				
			||||||
    $STD unzip MySpeed-$RELEASE.zip -d myspeed
 | 
					
 | 
				
			||||||
    cd myspeed
 | 
					    fetch_and_deploy_gh_release "myspeed" "gnmyt/myspeed" "prebuild" "latest" "/opt/myspeed" "MySpeed-*.zip"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating ${APP} to ${RELEASE}"
 | 
				
			||||||
 | 
					    cd /opt/myspeed
 | 
				
			||||||
    $STD npm install
 | 
					    $STD npm install
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					    cp -r /opt/myspeed_bak/data/* /opt/myspeed/data/
 | 
				
			||||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
					    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP} Service"
 | 
					    msg_info "Starting ${APP} Service"
 | 
				
			||||||
    systemctl start myspeed
 | 
					    systemctl start myspeed
 | 
				
			||||||
    msg_ok "Started ${APP} Service"
 | 
					    msg_ok "Started ${APP} Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					 | 
				
			||||||
    rm -rf MySpeed-$RELEASE.zip
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully!\n"
 | 
					    msg_ok "Updated Successfully!\n"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								ct/n8n.sh
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								ct/n8n.sh
									
									
									
									
									
								
							@@ -34,6 +34,18 @@ function update_script() {
 | 
				
			|||||||
      echo "Installed NPM..."
 | 
					      echo "Installed NPM..."
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
  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"
 | 
					  msg_info "Updating ${APP} LXC"
 | 
				
			||||||
  $STD npm update -g n8n
 | 
					  $STD npm update -g n8n
 | 
				
			||||||
  systemctl restart n8n
 | 
					  systemctl restart n8n
 | 
				
			||||||
@@ -48,4 +60,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5678${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5678${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,27 +27,19 @@ function update_script() {
 | 
				
			|||||||
        msg_error "No ${APP} Installation Found!"
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					        exit
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk -F '"' '{print $4}')
 | 
					    
 | 
				
			||||||
    if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi
 | 
					    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 /opt/${APP}_version.txt)" ]]; then
 | 
					    if [[ "${RELEASE}" != "$(cat ~/.navidrome 2>/dev/null)" ]] || [[ ! -f ~/.navidrome ]]; then
 | 
				
			||||||
        msg_info "Stopping Services"
 | 
					        msg_info "Stopping Services"
 | 
				
			||||||
        systemctl stop navidrome
 | 
					        systemctl stop navidrome
 | 
				
			||||||
        msg_ok "Services Stopped"
 | 
					        msg_ok "Services Stopped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        msg_info "Updating ${APP} to ${RELEASE}"
 | 
					        fetch_and_deploy_gh_release "navidrome" "navidrome/navidrome" "binary"
 | 
				
			||||||
        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"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        msg_info "Starting Services"
 | 
					        msg_info "Starting Services"
 | 
				
			||||||
        systemctl start navidrome
 | 
					        systemctl start navidrome
 | 
				
			||||||
        msg_ok "Started Services"
 | 
					        msg_ok "Started Services"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
        rm -f "${TMP_DEB}"
 | 
					 | 
				
			||||||
        msg_ok "Cleaned"
 | 
					 | 
				
			||||||
        msg_ok "Updated Successfully"
 | 
					        msg_ok "Updated Successfully"
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										11
									
								
								ct/neo4j.sh
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								ct/neo4j.sh
									
									
									
									
									
								
							@@ -28,16 +28,7 @@ function update_script() {
 | 
				
			|||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  if ! dpkg -l | grep -q temurin-21-jre; then
 | 
					  if ! dpkg -l | grep -q temurin-21-jre; then
 | 
				
			||||||
    msg_info "Installing Adoptium JDK"
 | 
					    JAVA_VERSION="21" setup_java
 | 
				
			||||||
    $STD apt-get install -y \
 | 
					 | 
				
			||||||
      gnupg2 \
 | 
					 | 
				
			||||||
      lsb-release
 | 
					 | 
				
			||||||
    mkdir -p /etc/apt/keyrings
 | 
					 | 
				
			||||||
    curl -fsSL https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor >/etc/apt/trusted.gpg.d/adoptium.gpg
 | 
					 | 
				
			||||||
    echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" >/etc/apt/sources.list.d/adoptium.list
 | 
					 | 
				
			||||||
    $STD apt-get update
 | 
					 | 
				
			||||||
    $STD apt-get install -y temurin-21-jre
 | 
					 | 
				
			||||||
    msg_ok "Adoptium JDK installed"
 | 
					 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  msg_info "Updating ${APP}"
 | 
					  msg_info "Updating ${APP}"
 | 
				
			||||||
  $STD apt-get update
 | 
					  $STD apt-get update
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,15 +27,34 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if ! command -v pnpm &>/dev/null; then
 | 
					  if ! command -v pnpm &>/dev/null; then
 | 
				
			||||||
    msg_info "Installing pnpm"
 | 
					    msg_info "Installing pnpm"
 | 
				
			||||||
    #export NODE_OPTIONS=--openssl-legacy-provider
 | 
					    #export NODE_OPTIONS=--openssl-legacy-provider
 | 
				
			||||||
    $STD npm install -g pnpm@8.15
 | 
					    $STD npm install -g pnpm@8.15
 | 
				
			||||||
    msg_ok "Installed pnpm"
 | 
					    msg_ok "Installed pnpm"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
 | 
				
			||||||
    grep "tag_name" |
 | 
					    grep "tag_name" |
 | 
				
			||||||
    awk '{print substr($2, 3, length($2)-4) }')
 | 
					    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"
 | 
					  msg_info "Stopping Services"
 | 
				
			||||||
  systemctl stop openresty
 | 
					  systemctl stop openresty
 | 
				
			||||||
  systemctl stop npm
 | 
					  systemctl stop npm
 | 
				
			||||||
@@ -50,18 +69,11 @@ function update_script() {
 | 
				
			|||||||
    "$STD" /var/cache/nginx
 | 
					    "$STD" /var/cache/nginx
 | 
				
			||||||
  msg_ok "Cleaned Old Files"
 | 
					  msg_ok "Cleaned Old Files"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Downloading NPM v${RELEASE}"
 | 
					  msg_info "Setting up Environment"
 | 
				
			||||||
  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"
 | 
					 | 
				
			||||||
  ln -sf /usr/bin/python3 /usr/bin/python
 | 
					  ln -sf /usr/bin/python3 /usr/bin/python
 | 
				
			||||||
  ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
 | 
					  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/sbin/nginx /usr/sbin/nginx
 | 
				
			||||||
  ln -sf /usr/local/openresty/nginx/ /etc/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
 | 
					  sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
 | 
				
			||||||
  NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
 | 
					  NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
 | 
				
			||||||
  for NGINX_CONF in $NGINX_CONFS; do
 | 
					  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
 | 
					    $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
 | 
					  fi
 | 
				
			||||||
  mkdir -p /app/global /app/frontend/images
 | 
					  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 backend/* /app
 | 
				
			||||||
  cp -r global/* /app/global
 | 
					  cp -r global/* /app/global
 | 
				
			||||||
  $STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare
 | 
					  $STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare
 | 
				
			||||||
  msg_ok "Setup Enviroment"
 | 
					  msg_ok "Setup Environment"
 | 
				
			||||||
 | 
					 | 
				
			||||||
  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"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Initializing Backend"
 | 
					  msg_info "Initializing Backend"
 | 
				
			||||||
  $STD rm -rf /app/config/default.json
 | 
					  $STD rm -rf /app/config/default.json
 | 
				
			||||||
@@ -128,7 +133,7 @@ function update_script() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  cd /app
 | 
					  cd /app || exit
 | 
				
			||||||
  $STD pnpm install
 | 
					  $STD pnpm install
 | 
				
			||||||
  msg_ok "Initialized Backend"
 | 
					  msg_ok "Initialized Backend"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								ct/nocodb.sh
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								ct/nocodb.sh
									
									
									
									
									
								
							@@ -27,15 +27,24 @@ function update_script() {
 | 
				
			|||||||
        msg_error "No ${APP} Installation Found!"
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					        exit
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    msg_info "Updating ${APP}"
 | 
					
 | 
				
			||||||
    systemctl stop nocodb.service
 | 
					    RELEASE=$(curl -fsSL https://api.github.com/repos/nocodb/nocodb/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
    cd /opt/nocodb
 | 
					    if [[ ! -f ~/.nocodb ]] || [[ "${RELEASE}" != "$(cat ~/.nocodb)" ]]; then
 | 
				
			||||||
    rm -rf nocodb
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
    curl -fsSL http://get.nocodb.com/linux-x64 -o nocodb -L
 | 
					    systemctl stop nocodb
 | 
				
			||||||
    chmod +x nocodb
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
    systemctl start nocodb.service
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "nocodb" "nocodb/nocodb" "singlefile" "latest" "/opt/nocodb/" "Noco-linux-x64"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
 | 
					    systemctl start nocodb
 | 
				
			||||||
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
    exit
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
@@ -45,4 +54,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ function update_script() {
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/NodeBB/NodeBB/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/NodeBB/NodeBB/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 ~/.nodebb)" ]] || [[ ! -f ~/.nodebb ]]; then
 | 
				
			||||||
    msg_info "Stopping ${APP}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
    systemctl stop nodebb
 | 
					    systemctl stop nodebb
 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
@@ -40,13 +40,14 @@ function update_script() {
 | 
				
			|||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
    cd /opt/nodebb
 | 
					    cd /opt/nodebb
 | 
				
			||||||
    $STD ./nodebb upgrade
 | 
					    $STD ./nodebb upgrade
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					    echo "${RELEASE}" > ~/.nodebb
 | 
				
			||||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
					    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
    systemctl start nodebb
 | 
					    systemctl start nodebb
 | 
				
			||||||
    msg_ok "Started ${APP}"
 | 
					    msg_ok "Started ${APP}"
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Updated Successfully\n"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
@@ -60,4 +61,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4567${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4567${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,26 +30,18 @@ function update_script() {
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/oauth2-proxy/oauth2-proxy/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/oauth2-proxy/oauth2-proxy/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ ! -f ~/.oauth2-proxy ]] || [[ "${RELEASE}" != "$(cat ~/.oauth2-proxy)" ]]; then
 | 
				
			||||||
    msg_info "Stopping ${APP} services"
 | 
					    msg_info "Stopping ${APP} services"
 | 
				
			||||||
    systemctl stop oauth2-proxy
 | 
					    systemctl stop oauth2-proxy
 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					    msg_ok "Stopped ${APP} service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
					    fetch_and_deploy_gh_release "oauth2-proxy" "oauth2-proxy/oauth2-proxy" "prebuild" "latest" "/opt/oauth2-proxy" "oauth2-proxy*linux-amd64.tar.gz"
 | 
				
			||||||
    rm -f /opt/oauth2-proxy/oauth2-proxy
 | 
					
 | 
				
			||||||
    curl -fsSL "https://github.com/oauth2-proxy/oauth2-proxy/releases/download/v${RELEASE}/oauth2-proxy-v${RELEASE}.linux-amd64.tar.gz" -o /opt/oauth2-proxy.tar.gz
 | 
					    msg_info "Starting ${APP} service"
 | 
				
			||||||
    tar -xzf /opt/oauth2-proxy.tar.gz
 | 
					 | 
				
			||||||
    mv /opt/oauth2-proxy-v${RELEASE}.linux-amd64/oauth2-proxy /opt/oauth2-proxy
 | 
					 | 
				
			||||||
    systemctl start oauth2-proxy
 | 
					    systemctl start oauth2-proxy
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					    msg_ok "Started ${APP} service"
 | 
				
			||||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					    msg_ok "Updated successfully!\n"
 | 
				
			||||||
    rm -f "/opt/oauth2-proxy.tar.gz"
 | 
					 | 
				
			||||||
    rm -rf "/opt/oauth2-proxy-v${RELEASE}.linux-amd64"
 | 
					 | 
				
			||||||
    $STD apt-get -y autoremove
 | 
					 | 
				
			||||||
    $STD apt-get -y autoclean
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "${APP} is already up to date (${RELEASE})"
 | 
					    msg_ok "${APP} is already up to date (${RELEASE})"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										31
									
								
								ct/ombi.sh
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								ct/ombi.sh
									
									
									
									
									
								
							@@ -27,22 +27,29 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Ombi-app/Ombi/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
					
 | 
				
			||||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/Ombi-app/Ombi/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
    msg_info "Stopping ${APP}"
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.ombi)" ]] || [[ ! -f ~/.ombi ]]; then
 | 
				
			||||||
 | 
					    msg_info "Stopping ${APP} service"
 | 
				
			||||||
    systemctl stop ombi
 | 
					    systemctl stop ombi
 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					    msg_ok "Stopped ${APP} service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
					    msg_info "Creating backup"
 | 
				
			||||||
    curl -fsSL "https://github.com/Ombi-app/Ombi/releases/download/${RELEASE}/linux-x64.tar.gz" -o $(basename "https://github.com/Ombi-app/Ombi/releases/download/${RELEASE}/linux-x64.tar.gz")
 | 
					    [[ -f /opt/ombi/Ombi.db ]] && mv /opt/ombi/Ombi.db /opt
 | 
				
			||||||
    tar -xzf linux-x64.tar.gz -C /opt/ombi
 | 
					    [[ -f /opt/ombi/OmbiExternal.db ]] && mv /opt/ombi/OmbiExternal.db /opt
 | 
				
			||||||
    rm -rf linux-x64.tar.gz
 | 
					    [[ -f /opt/ombi/OmbiSettings.db ]] && mv /opt/ombi/OmbiSettings.db /opt
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					    msg_ok "Backup created"
 | 
				
			||||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    rm -rf /opt/ombi
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "ombi" "Ombi-app/Ombi" "prebuild" "latest" "/opt/ombi" "linux-x64.tar.gz"
 | 
				
			||||||
 | 
					    [[ -f /opt/Ombi.db ]] && mv /opt/Ombi.db /opt/ombi
 | 
				
			||||||
 | 
					    [[ -f /opt/OmbiExternal.db ]] && mv /opt/OmbiExternal.db /opt/ombi
 | 
				
			||||||
 | 
					    [[ -f /opt/OmbiSettings.db ]] && mv /opt/OmbiSettings.db /opt/ombi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting ${APP} service"
 | 
				
			||||||
    systemctl start ombi
 | 
					    systemctl start ombi
 | 
				
			||||||
    msg_ok "Started ${APP}"
 | 
					    msg_ok "Started ${APP} service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required.  ${APP} ia already at ${RELEASE}."
 | 
					    msg_ok "No update required.  ${APP} ia already at ${RELEASE}."
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,34 +27,27 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/thomiceli/opengist/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/thomiceli/opengist/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 ~/.opengist ]] || [[ "${RELEASE}" != "$(cat ~/.opengist)" ]]; then
 | 
				
			||||||
    msg_info "Stopping Service"
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
    systemctl stop opengist.service
 | 
					    systemctl stop opengist
 | 
				
			||||||
    msg_ok "Stopped Service"
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Creating backup"
 | 
				
			||||||
    $STD apt-get update
 | 
					 | 
				
			||||||
    $STD apt-get -y upgrade
 | 
					 | 
				
			||||||
    cd /opt
 | 
					 | 
				
			||||||
    mv /opt/opengist /opt/opengist-backup
 | 
					    mv /opt/opengist /opt/opengist-backup
 | 
				
			||||||
    curl -fsSL "https://github.com/thomiceli/opengist/releases/download/v${RELEASE}/opengist${RELEASE}-linux-amd64.tar.gz" -o $(basename "https://github.com/thomiceli/opengist/releases/download/v${RELEASE}/opengist${RELEASE}-linux-amd64.tar.gz")
 | 
					    msg_ok "Backup created"
 | 
				
			||||||
    tar -xzf opengist${RELEASE}-linux-amd64.tar.gz
 | 
					    
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "opengist" "thomiceli/opengist" "prebuild" "latest" "/opt/opengist" "opengist*linux-amd64.tar.gz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Configuring ${APP}"
 | 
				
			||||||
    mv /opt/opengist-backup/config.yml /opt/opengist/config.yml
 | 
					    mv /opt/opengist-backup/config.yml /opt/opengist/config.yml
 | 
				
			||||||
    chmod +x /opt/opengist/opengist
 | 
					    msg_ok "Configured ${APP}"
 | 
				
			||||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
					 | 
				
			||||||
    msg_ok "Updated ${APP} LXC"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Service"
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
    systemctl start opengist.service
 | 
					    systemctl start opengist
 | 
				
			||||||
    msg_ok "Started Service"
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					 | 
				
			||||||
    rm -rf /opt/opengist${RELEASE}-linux-amd64.tar.gz
 | 
					 | 
				
			||||||
    rm -rf /opt/opengist-backup
 | 
					 | 
				
			||||||
    $STD apt-get -y autoremove
 | 
					 | 
				
			||||||
    $STD apt-get -y autoclean
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,4 +42,4 @@ msg_ok "Completed Successfully!\n"
 | 
				
			|||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using one of the following URLs:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using one of the following URLs:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:8443${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:8443${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,7 +57,7 @@ function update_script() {
 | 
				
			|||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  systemctl stop open-webui.service
 | 
					  systemctl stop open-webui.service
 | 
				
			||||||
  $STD npm install
 | 
					  $STD npm install --force
 | 
				
			||||||
  export NODE_OPTIONS="--max-old-space-size=3584"
 | 
					  export NODE_OPTIONS="--max-old-space-size=3584"
 | 
				
			||||||
  $STD npm run build
 | 
					  $STD npm run build
 | 
				
			||||||
  cd ./backend
 | 
					  cd ./backend
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										58
									
								
								ct/ots.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								ct/ots.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: bvdberg01
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://github.com/Luzifer/ots
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="OTS"
 | 
				
			||||||
 | 
					var_tags="${var_tags:-secrets-sharer}"
 | 
				
			||||||
 | 
					var_cpu="${var_cpu:-1}"
 | 
				
			||||||
 | 
					var_ram="${var_ram:-512}"
 | 
				
			||||||
 | 
					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 /opt/ots ]]; then
 | 
				
			||||||
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    RELEASE=$(curl -fsSL https://api.github.com/repos/Luzifer/ots/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
 | 
					    if [[ "${RELEASE}" != "$(cat ~/.ots 2>/dev/null)" ]] || [[ ! -f ~/.ots ]]; then
 | 
				
			||||||
 | 
					        msg_info "Stopping ${APP} Service"
 | 
				
			||||||
 | 
					        systemctl stop ots
 | 
				
			||||||
 | 
					        systemctl stop nginx
 | 
				
			||||||
 | 
					        msg_ok "Stopped ${APP} Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        fetch_and_deploy_gh_release "ots" "Luzifer/ots" "prebuild" "latest" "/opt/ots" "ots_linux_amd64.tgz"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Stopping ${APP} Service"
 | 
				
			||||||
 | 
					        systemctl start ots
 | 
				
			||||||
 | 
					        systemctl start nginx
 | 
				
			||||||
 | 
					        msg_ok "Stopped ${APP} Service"
 | 
				
			||||||
 | 
					        msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start
 | 
				
			||||||
 | 
					build_container
 | 
				
			||||||
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
 | 
					echo -e "${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}https://${IP}${CL}"
 | 
				
			||||||
@@ -27,36 +27,32 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/outline/outline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/outline/outline/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 ~/.outline ]] || [[ "${RELEASE}" != "$(cat ~/.outline)" ]]; then
 | 
				
			||||||
    msg_info "Stopping Services"
 | 
					    msg_info "Stopping Services"
 | 
				
			||||||
    systemctl stop outline
 | 
					    systemctl stop outline
 | 
				
			||||||
    msg_ok "Services Stopped"
 | 
					    msg_ok "Services Stopped"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
					    msg_info "Creating backup"
 | 
				
			||||||
    temp_file=$(mktemp)
 | 
					 | 
				
			||||||
    cp /opt/outline/.env /opt
 | 
					    cp /opt/outline/.env /opt
 | 
				
			||||||
    rm -rf /opt/outline
 | 
					    msg_ok "Backup created"
 | 
				
			||||||
    curl -fsSL "https://github.com/outline/outline/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
					
 | 
				
			||||||
    tar zxf "$temp_file"
 | 
					    fetch_and_deploy_gh_release "outline" "outline/outline" "tarball"
 | 
				
			||||||
    mv outline-"${RELEASE}" /opt/outline
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating ${APP} to ${RELEASE}"
 | 
				
			||||||
    cd /opt/outline
 | 
					    cd /opt/outline
 | 
				
			||||||
    export NODE_ENV=development
 | 
					    export NODE_ENV=development
 | 
				
			||||||
    export NODE_OPTIONS="--max-old-space-size=3584"
 | 
					    export NODE_OPTIONS="--max-old-space-size=3584"
 | 
				
			||||||
    $STD yarn install --frozen-lockfile
 | 
					    $STD yarn install --frozen-lockfile
 | 
				
			||||||
    $STD yarn build
 | 
					    $STD yarn build
 | 
				
			||||||
    mv /opt/.env /opt/outline
 | 
					    mv /opt/.env /opt/outline
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated ${APP}"
 | 
					    msg_ok "Updated ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting Services"
 | 
					    msg_info "Starting Services"
 | 
				
			||||||
    systemctl start outline
 | 
					    systemctl start outline
 | 
				
			||||||
    msg_ok "Started Services"
 | 
					    msg_ok "Started Services"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
    rm -rf "$temp_file"
 | 
					 | 
				
			||||||
    rm -rf "$HOME"/outline-"${RELEASE}"
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,20 +27,35 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  msg_info "Updating $APP"
 | 
					  
 | 
				
			||||||
  systemctl stop overseerr
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/sct/overseerr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  cd /opt/overseerr
 | 
					  if [[ ! -f ~/.overseerr ]] || [[ "${RELEASE}" != "$(cat ~/.overseerr)" ]]; then
 | 
				
			||||||
  output=$(git pull)
 | 
					    msg_info "Stopping ${APP} service"
 | 
				
			||||||
  $STD git pull
 | 
					    systemctl stop overseerr
 | 
				
			||||||
  if echo "$output" | grep -q "Already up to date."; then
 | 
					    msg_ok "Service stopped"
 | 
				
			||||||
    msg_ok " $APP is already up to date."
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Creating backup"
 | 
				
			||||||
 | 
					    mv /opt/overseerr/config /opt/config_backup
 | 
				
			||||||
 | 
					    msg_ok "Backup created"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "overseerr" "sct/overseerr" "tarball"
 | 
				
			||||||
 | 
					    rm -rf /opt/overseerr/config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Configuring ${APP} (Patience)"
 | 
				
			||||||
 | 
					    cd /opt/overseerr
 | 
				
			||||||
 | 
					    $STD yarn install
 | 
				
			||||||
 | 
					    $STD yarn build
 | 
				
			||||||
 | 
					    mv /opt/config_backup /opt/overseerr/config
 | 
				
			||||||
 | 
					    msg_ok "Configured ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting ${APP} service"
 | 
				
			||||||
    systemctl start overseerr
 | 
					    systemctl start overseerr
 | 
				
			||||||
    exit
 | 
					    msg_ok "Started ${APP} service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Updated successfully!"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  $STD yarn install
 | 
					 | 
				
			||||||
  $STD yarn build
 | 
					 | 
				
			||||||
  systemctl start overseerr
 | 
					 | 
				
			||||||
  msg_ok "Updated $APP"
 | 
					 | 
				
			||||||
  exit
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -51,4 +66,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,10 +27,23 @@ function update_script() {
 | 
				
			|||||||
        msg_error "No ${APP} Installation Found!"
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					        exit
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    msg_info "Updating $APP LXC"
 | 
					
 | 
				
			||||||
    $STD apt-get update
 | 
					    RELEASE=$(curl -fsSL https://api.github.com/repos/owncast/owncast/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
    $STD apt-get -y upgrade
 | 
					    if [[ ! -f ~/.owncast ]] || [[ "${RELEASE}" != "$(cat ~/.owncast)" ]]; then
 | 
				
			||||||
    msg_ok "Updated $APP LXC"
 | 
					      msg_info "Stopping ${APP}"
 | 
				
			||||||
 | 
					      systemctl stop owncast
 | 
				
			||||||
 | 
					      msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      fetch_and_deploy_gh_release "owncast" "owncast/owncast" "prebuild" "latest" "/opt/owncast" "owncast*linux-64bit.zip"
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      msg_info "Starting ${APP}"
 | 
				
			||||||
 | 
					      systemctl start owncast
 | 
				
			||||||
 | 
					      msg_ok "Started ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      msg_ok "No update required. ${APP} is already at ${RELEASE}."
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,4 +54,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/admin${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/admin${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,13 +27,28 @@ function update_script() {
 | 
				
			|||||||
        msg_error "No ${APP} Installation Found!"
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					        exit
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    msg_info "Updating $APP"
 | 
					
 | 
				
			||||||
    systemctl stop pairdrop
 | 
					    RELEASE=$(curl -fsSL https://api.github.com/repos/schlagmichdoch/PairDrop/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
    cd /opt/pairdrop
 | 
					    if [[ ! -f ~/.pairdrop ]] || [[ "${RELEASE}" != "$(cat ~/.pairdrop)" ]]; then
 | 
				
			||||||
    git pull
 | 
					      msg_info "Stopping ${APP}"
 | 
				
			||||||
    npm install
 | 
					      systemctl stop pairdrop
 | 
				
			||||||
    systemctl start pairdrop
 | 
					      msg_ok "Stopped ${APP}"
 | 
				
			||||||
    msg_ok "Updated $APP"
 | 
					      
 | 
				
			||||||
 | 
					      fetch_and_deploy_gh_release "pairdrop" "schlagmichdoch/PairDrop" "tarball"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      msg_info "Configuring PairDrop"
 | 
				
			||||||
 | 
					      cd /opt/pairdrop
 | 
				
			||||||
 | 
					      $STD npm install
 | 
				
			||||||
 | 
					      msg_ok "Configured PairDrop"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      msg_info "Starting ${APP}"
 | 
				
			||||||
 | 
					      systemctl start pairdrop
 | 
				
			||||||
 | 
					      msg_ok "Started ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      msg_ok "No update required. ${APP} is already at ${RELEASE}."
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,4 +59,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,22 +27,35 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  msg_info "Stopping PhotoPrism"
 | 
					 | 
				
			||||||
  sudo systemctl stop photoprism
 | 
					 | 
				
			||||||
  msg_ok "Stopped PhotoPrism"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Updating PhotoPrism"
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/photoprism/photoprism/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
  $STD apt-get install -y libvips42
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.photoprism 2>/dev/null)" ]] || [[ ! -f ~/.photoprism ]]; then
 | 
				
			||||||
  curl -fsSL https://dl.photoprism.app/pkg/linux/amd64.tar.gz | tar -xzf - -C /opt/photoprism --strip-components=1
 | 
					    msg_info "Stopping PhotoPrism"
 | 
				
			||||||
  msg_ok "Updated PhotoPrism"
 | 
					    systemctl stop photoprism
 | 
				
			||||||
 | 
					    msg_ok "Stopped PhotoPrism"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Starting PhotoPrism"
 | 
					    fetch_and_deploy_gh_release "photoprism" "photoprism/photoprism" "prebuild" "latest" "/opt/photoprism" "*linux-amd64.tar.gz"
 | 
				
			||||||
  sudo systemctl start photoprism
 | 
					
 | 
				
			||||||
  msg_ok "Started PhotoPrism"
 | 
					    LIBHEIF_URL=$(curl -fsSL "https://dl.photoprism.app/dist/libheif/" | grep -oP "libheif-$(lsb_release -cs)-amd64-v[0-9\.]+\.tar\.gz" | sort -V | tail -n 1)
 | 
				
			||||||
  msg_ok "Update Successful"
 | 
					    if [[ "${LIBHEIF_URL}" != "$(cat ~/.photoprism_libheif 2>/dev/null)" ]] || [[ ! -f ~/.photoprism_libheif ]]; then
 | 
				
			||||||
 | 
					      msg_info "Updating PhotoPrism LibHeif"
 | 
				
			||||||
 | 
					      $STD apt-get install -y libvips42
 | 
				
			||||||
 | 
					      curl -fsSL "https://dl.photoprism.app/dist/libheif/$LIBHEIF_URL" -o /tmp/libheif.tar.gz
 | 
				
			||||||
 | 
					      tar -xzf /tmp/libheif.tar.gz -C /usr/local
 | 
				
			||||||
 | 
					      ldconfig
 | 
				
			||||||
 | 
					      echo "${LIBHEIF_URL}" >~/.photoprism_libheif
 | 
				
			||||||
 | 
					      msg_ok "Updated PhotoPrism LibHeif"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting PhotoPrism"
 | 
				
			||||||
 | 
					    systemctl start photoprism
 | 
				
			||||||
 | 
					    msg_ok "Started PhotoPrism"
 | 
				
			||||||
 | 
					    msg_ok "Update Successful"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  exit
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
build_container
 | 
					build_container
 | 
				
			||||||
description
 | 
					description
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										32
									
								
								ct/planka.sh
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								ct/planka.sh
									
									
									
									
									
								
							@@ -28,33 +28,33 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  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
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.planka 2>/dev/null)" ]] || [[ ! -f ~/.planka ]]; then
 | 
				
			||||||
    msg_info "Stopping $APP"
 | 
					    msg_info "Stopping $APP"
 | 
				
			||||||
    systemctl stop planka
 | 
					    systemctl stop planka
 | 
				
			||||||
    msg_ok "Stopped $APP"
 | 
					    msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
					    msg_info "Backing up data"
 | 
				
			||||||
    mkdir -p /opt/planka-backup
 | 
					    mkdir -p /opt/planka-backup/{favicons,user-avatars,background-images,attachments}
 | 
				
			||||||
    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
 | 
					 | 
				
			||||||
    mv /opt/planka/.env /opt/planka-backup
 | 
					    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/
 | 
					    [ -d /opt/planka/public/favicons ] && find /opt/planka/public/favicons -maxdepth 1 -type f -exec mv -t /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/
 | 
					    [ -d /opt/planka/public/user-avatars ] && find /opt/planka/public/user-avatars -maxdepth 1 -type f -exec mv -t /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/
 | 
					    [ -d /opt/planka/public/background-images ] && find /opt/planka/public/background-images -maxdepth 1 -type f -exec mv -t /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/private/attachments ] && find /opt/planka/private/attachments -maxdepth 1 -type f -exec mv -t /opt/planka-backup/attachments {} +
 | 
				
			||||||
    rm -rf /opt/planka
 | 
					    rm -rf /opt/planka
 | 
				
			||||||
 | 
					    msg_ok "Backed up data"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
 | 
					    fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
 | 
				
			||||||
    cd /opt/planka
 | 
					    cd /opt/planka
 | 
				
			||||||
    $STD npm install
 | 
					    $STD npm install
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    msg_info "Restoring data"
 | 
				
			||||||
    mv /opt/planka-backup/.env /opt/planka/
 | 
					    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/
 | 
					    [ -d /opt/planka-backup/favicons ] && find /opt/planka-backup/favicons -maxdepth 1 -type f -exec mv -t /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/
 | 
					    [ -d /opt/planka-backup/user-avatars ] && find /opt/planka-backup/user-avatars -maxdepth 1 -type f -exec mv -t /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/
 | 
					    [ -d /opt/planka-backup/background-images ] && find /opt/planka-backup/background-images -maxdepth 1 -type f -exec mv -t /opt/planka/public/background-images {} +
 | 
				
			||||||
    [ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/private/attachments/
 | 
					    [ -d /opt/planka-backup/attachments ] && find /opt/planka-backup/attachments -maxdepth 1 -type f -exec mv -t /opt/planka/private/attachments {} +
 | 
				
			||||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
					    msg_ok "Restored data"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting $APP"
 | 
					    msg_info "Starting $APP"
 | 
				
			||||||
    systemctl start planka
 | 
					    systemctl start planka
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,18 +27,26 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  msg_info "Stopping ${APP}"
 | 
					 | 
				
			||||||
  systemctl stop pocketbase
 | 
					 | 
				
			||||||
  msg_ok "Stopped ${APP}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Updating ${APP}"
 | 
					  RELEASE=$(curl -s https://api.github.com/repos/pocketbase/pocketbase/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
  /opt/pocketbase/pocketbase update
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.pocketbase 2>/dev/null)" ]] || [[ ! -f ~/.pocketbase ]]; then
 | 
				
			||||||
  msg_ok "Updated ${APP}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
 | 
					    systemctl stop pocketbase
 | 
				
			||||||
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  msg_info "Starting ${APP}"
 | 
					    msg_info "Updating ${APP}"
 | 
				
			||||||
  systemctl start pocketbase
 | 
					    /opt/pocketbase/pocketbase update
 | 
				
			||||||
  msg_ok "Started ${APP}"
 | 
					    echo "${RELEASE}" > ~/.pocketbase
 | 
				
			||||||
  msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
 | 
					    systemctl start pocketbase
 | 
				
			||||||
 | 
					    msg_ok "Started ${APP}"
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    msg_ok "Update Successful"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  exit
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,4 +57,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/_/${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/_/${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,9 +29,10 @@ function update_script() {
 | 
				
			|||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  [[ -f /opt/${APP}_version.txt ]] && mv /opt/${APP}_version.txt ~/.pocket-id
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/pocket-id/pocket-id/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/pocket-id/pocket-id/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 ~/.pocket-id)" ]] || [[ ! -f ~/.pocket-id ]]; then
 | 
				
			||||||
    if [[ "$(cat /opt/${APP}_version.txt)" < "1.0.0" ]]; then
 | 
					    if [[ "$(cat ~/.pocket-id)" < "1.0.0" ]]; then
 | 
				
			||||||
      msg_info "Migrating ${APP} to v${RELEASE}"
 | 
					      msg_info "Migrating ${APP} to v${RELEASE}"
 | 
				
			||||||
      systemctl -q disable --now pocketid-backend pocketid-frontend caddy
 | 
					      systemctl -q disable --now pocketid-backend pocketid-frontend caddy
 | 
				
			||||||
      mv /etc/caddy/Caddyfile ~/Caddyfile.bak
 | 
					      mv /etc/caddy/Caddyfile ~/Caddyfile.bak
 | 
				
			||||||
@@ -58,19 +59,19 @@ function update_script() {
 | 
				
			|||||||
      mv /opt/data /opt/pocket-id
 | 
					      mv /opt/data /opt/pocket-id
 | 
				
			||||||
      msg_ok "Migration complete. The reverse proxy port has been changed to 1411."
 | 
					      msg_ok "Migration complete. The reverse proxy port has been changed to 1411."
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
      msg_info "Updating $APP to v${RELEASE}"
 | 
					      msg_info "Stopping ${APP}"
 | 
				
			||||||
      systemctl stop pocketid
 | 
					      systemctl stop pocketid
 | 
				
			||||||
 | 
					      msg_ok "Stopped ${APP}"
 | 
				
			||||||
      cp /opt/pocket-id/.env /opt/env
 | 
					      cp /opt/pocket-id/.env /opt/env
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    curl -fsSL "https://github.com/pocket-id/pocket-id/releases/download/v${RELEASE}/pocket-id-linux-amd64" -o /opt/pocket-id/pocket-id
 | 
					
 | 
				
			||||||
    chmod u+x /opt/pocket-id/pocket-id
 | 
					    fetch_and_deploy_gh_release "pocket-id" "pocket-id/pocket-id" "singlefile" "latest" "/opt/pocket-id/" "pocket-id-linux-amd64"
 | 
				
			||||||
    mv /opt/env /opt/pocket-id/.env
 | 
					    mv /opt/env /opt/pocket-id/.env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting $APP"
 | 
					    msg_info "Starting $APP"
 | 
				
			||||||
    systemctl start pocketid
 | 
					    systemctl start pocketid
 | 
				
			||||||
    msg_ok "Started $APP"
 | 
					    msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Update Successful"
 | 
					    msg_ok "Update Successful"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,22 +27,25 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/PrivateBin/PrivateBin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/PrivateBin/PrivateBin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ ! -f ~/.privatebin ]] || [[ "${RELEASE}" != "$(cat ~/.privatebin)" ]]; then
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Creating backup"
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    cp -f /opt/privatebin/cfg/conf.php /tmp/privatebin_conf.bak
 | 
					    cp -f /opt/privatebin/cfg/conf.php /tmp/privatebin_conf.bak
 | 
				
			||||||
    curl -fsSL "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip")
 | 
					    msg_ok "Backup created"
 | 
				
			||||||
    $STD unzip ${RELEASE}.zip
 | 
					
 | 
				
			||||||
    rm -rf /opt/privatebin/*
 | 
					    rm -rf /opt/privatebin/*
 | 
				
			||||||
    mv PrivateBin-${RELEASE}/* /opt/privatebin/
 | 
					    fetch_and_deploy_gh_release "privatebin" "PrivateBin/PrivateBin" "tarball"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Configuring ${APP}"
 | 
				
			||||||
 | 
					    mkdir -p /opt/privatebin/data
 | 
				
			||||||
    mv /tmp/privatebin_conf.bak /opt/privatebin/cfg/conf.php
 | 
					    mv /tmp/privatebin_conf.bak /opt/privatebin/cfg/conf.php
 | 
				
			||||||
    chown -R www-data:www-data /opt/privatebin
 | 
					    chown -R www-data:www-data /opt/privatebin
 | 
				
			||||||
    chmod -R 0755 /opt/privatebin/data
 | 
					    chmod -R 0755 /opt/privatebin/data}
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    rm -rf ${RELEASE}.zip PrivateBin-${RELEASE}
 | 
					 | 
				
			||||||
    systemctl reload nginx php8.2-fpm
 | 
					    systemctl reload nginx php8.2-fpm
 | 
				
			||||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
					    msg_ok "Configured ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Successfully updated"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
				
			|||||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
# Author: vhsdream
 | 
					# Author: vhsdream
 | 
				
			||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
# Source: https://rxresu.me
 | 
					# Source: https://rxresume.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
APP="Reactive-Resume"
 | 
					APP="Reactive-Resume"
 | 
				
			||||||
var_tags="${var_tags:-documents}"
 | 
					var_tags="${var_tags:-documents}"
 | 
				
			||||||
@@ -20,80 +20,75 @@ color
 | 
				
			|||||||
catch_errors
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function update_script() {
 | 
					function update_script() {
 | 
				
			||||||
    header_info
 | 
					  header_info
 | 
				
			||||||
    check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
    check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then
 | 
					  if [[ ! -f /etc/systemd/system/Reactive-Resume.service ]]; then
 | 
				
			||||||
        msg_error "No ${APP} Installation Found!"
 | 
					    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
 | 
					 | 
				
			||||||
    exit
 | 
					    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
 | 
					start
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,6 +34,7 @@ function update_script() {
 | 
				
			|||||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
        exit
 | 
					        exit
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					    setup_uv
 | 
				
			||||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
					    msg_info "Updating $APP to ${RELEASE}"
 | 
				
			||||||
    systemctl stop sabnzbd
 | 
					    systemctl stop sabnzbd
 | 
				
			||||||
    cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
 | 
					    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}"
 | 
				
			||||||
@@ -28,34 +28,20 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  if dpkg -l | grep -q "openjdk-17-jre"; then
 | 
					 | 
				
			||||||
    $STD apt-get remove -y openjdk-17-jre
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
  JAVA_VERSION=21 setup_java
 | 
					 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
  if [[ "${RELEASE}" != "$(cat /opt/suwayomi-server_version.txt)" ]] || [[ ! -f /opt/suwayomi-server_version.txt ]]; then
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.suwayomi-server 2>/dev/null)" ]] || [[ ! -f ~/.suwayomi-server ]]; then
 | 
				
			||||||
    msg_info "Updating $APP"
 | 
					    JAVA_VERSION=21 setup_java
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Stopping $APP"
 | 
					    msg_info "Stopping $APP"
 | 
				
			||||||
    systemctl stop suwayomi-server
 | 
					    systemctl stop suwayomi-server
 | 
				
			||||||
    msg_ok "Stopped $APP"
 | 
					    msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
					    fetch_and_deploy_gh_release "suwayomi-server" "Suwayomi/Suwayomi-Server" "binary"
 | 
				
			||||||
    temp_file=$(mktemp)
 | 
					 | 
				
			||||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					 | 
				
			||||||
    curl -fsSL "https://github.com/Suwayomi/Suwayomi-Server/releases/download/${RELEASE}/Suwayomi-Server-${RELEASE}-debian-all.deb" -o "$temp_file"
 | 
					 | 
				
			||||||
    $STD dpkg -i "$temp_file"
 | 
					 | 
				
			||||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting $APP"
 | 
					    msg_info "Starting $APP"
 | 
				
			||||||
    systemctl start suwayomi-server
 | 
					    systemctl start suwayomi-server
 | 
				
			||||||
    msg_ok "Started $APP"
 | 
					    msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
    rm -f "$temp_file"
 | 
					 | 
				
			||||||
    msg_ok "Cleanup Completed"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    echo "${RELEASE}" >/opt/suwayomi-server_version.txt.txt
 | 
					 | 
				
			||||||
    msg_ok "Update Successful"
 | 
					    msg_ok "Update Successful"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,27 +27,27 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  if ! [[ $(dpkg -s python3-xmlsec 2>/dev/null) ]]; then
 | 
					  #if ! [[ $(dpkg -s python3-xmlsec 2>/dev/null) ]]; then
 | 
				
			||||||
    $STD apt-get update
 | 
					    #$STD apt-get update
 | 
				
			||||||
    $STD apt-get install -y python3-xmlsec
 | 
					    #$STD apt-get install -y python3-xmlsec
 | 
				
			||||||
  fi
 | 
					  #fi
 | 
				
			||||||
  if cd /opt/tandoor && git pull | grep -q 'Already up to date'; then
 | 
					  #if cd /opt/tandoor && git pull | grep -q 'Already up to date'; then
 | 
				
			||||||
    msg_ok "There is currently no update available."
 | 
					    msg_ok "There is currently no update available."
 | 
				
			||||||
  else
 | 
					  #else
 | 
				
			||||||
    msg_info "Updating ${APP} (Patience)"
 | 
					    #msg_info "Updating ${APP} (Patience)"
 | 
				
			||||||
    export $(cat /opt/tandoor/.env | grep "^[^#]" | xargs)
 | 
					    #export $(cat /opt/tandoor/.env | grep "^[^#]" | xargs)
 | 
				
			||||||
    cd /opt/tandoor/
 | 
					    #cd /opt/tandoor/
 | 
				
			||||||
    $STD pip3 install -r requirements.txt
 | 
					    #$STD pip3 install -r requirements.txt
 | 
				
			||||||
    $STD /usr/bin/python3 /opt/tandoor/manage.py migrate
 | 
					    #$STD /usr/bin/python3 /opt/tandoor/manage.py migrate
 | 
				
			||||||
    $STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic --no-input
 | 
					    #$STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic --no-input
 | 
				
			||||||
    $STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic_js_reverse
 | 
					    #$STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic_js_reverse
 | 
				
			||||||
    cd /opt/tandoor/vue
 | 
					    #cd /opt/tandoor/vue
 | 
				
			||||||
    $STD yarn install
 | 
					    #$STD yarn install
 | 
				
			||||||
    $STD yarn build
 | 
					    #$STD yarn build
 | 
				
			||||||
    cd /opt/tandoor
 | 
					    #cd /opt/tandoor
 | 
				
			||||||
    $STD python3 version.py
 | 
					    #$STD python3 version.py
 | 
				
			||||||
    systemctl restart gunicorn_tandoor
 | 
					    #systemctl restart gunicorn_tandoor
 | 
				
			||||||
    msg_ok "Updated ${APP}"
 | 
					    #msg_ok "Updated ${APP}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  exit
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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}"
 | 
				
			||||||
							
								
								
									
										72
									
								
								ct/tududi.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								ct/tududi.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					#!/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: vhsdream
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://tududi.com
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="Tududi"
 | 
				
			||||||
 | 
					var_tags="${var_tags:-todo-app}"
 | 
				
			||||||
 | 
					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/tududi ]]; then
 | 
				
			||||||
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/chrisvel/tududi/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.tududi 2>/dev/null)" ]] || [[ ! -f ~/.tududi ]]; then
 | 
				
			||||||
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
 | 
					    systemctl stop tududi
 | 
				
			||||||
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Remove and backup Files"
 | 
				
			||||||
 | 
					    cp /opt/tududi/backend/.env /opt/tududi.env
 | 
				
			||||||
 | 
					    rm -rf /opt/tududi/backend/dist
 | 
				
			||||||
 | 
					    msg_ok "Backup and removed Files"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "tududi" "chrisvel/tududi"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating ${APP}"
 | 
				
			||||||
 | 
					    cd /opt/tududi
 | 
				
			||||||
 | 
					    $STD npm install
 | 
				
			||||||
 | 
					    export NODE_ENV=production
 | 
				
			||||||
 | 
					    $STD npm run frontend:build
 | 
				
			||||||
 | 
					    mv ./dist ./backend
 | 
				
			||||||
 | 
					    mv ./public/locales ./backend/dist
 | 
				
			||||||
 | 
					    mv ./public/favicon.* ./backend/dist
 | 
				
			||||||
 | 
					    mv /opt/tududi.env /opt/tududi/.env
 | 
				
			||||||
 | 
					    msg_ok "Updated $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
 | 
					    systemctl start tududi
 | 
				
			||||||
 | 
					    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}http://${IP}:3002${CL}"
 | 
				
			||||||
@@ -27,31 +27,28 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  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"
 | 
					    msg_info "Stopping $APP"
 | 
				
			||||||
    systemctl stop victoriametrics
 | 
					    systemctl stop victoriametrics
 | 
				
			||||||
 | 
					    [[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl stop victoriametrics-logs
 | 
				
			||||||
    msg_ok "Stopped $APP"
 | 
					    msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "victoria-metrics-linux-amd64-v+([0-9.]).tar.gz"
 | 
				
			||||||
    temp_dir=$(mktemp -d)
 | 
					    fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "vmutils-linux-amd64-v+([0-9.]).tar.gz"
 | 
				
			||||||
    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")
 | 
					    if [[ -f /etc/systemd/system/victoriametrics-logs.service ]]; then
 | 
				
			||||||
    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")
 | 
					      fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
 | 
				
			||||||
    find /opt/victoriametrics -maxdepth 1 -type f -executable -delete
 | 
					      fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
 | 
				
			||||||
    tar -xf victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
 | 
					    fi
 | 
				
			||||||
    tar -xf vmutils-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
 | 
					 | 
				
			||||||
    chmod +x /opt/victoriametrics/*
 | 
					    chmod +x /opt/victoriametrics/*
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting $APP"
 | 
					    msg_info "Starting $APP"
 | 
				
			||||||
    systemctl start victoriametrics
 | 
					    systemctl start victoriametrics
 | 
				
			||||||
 | 
					    [[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl start victoriametrics-logs
 | 
				
			||||||
    msg_ok "Started $APP"
 | 
					    msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
    rm -rf $temp_dir
 | 
					 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,6 +41,9 @@ function update_script() {
 | 
				
			|||||||
    rm -rf /opt/wallos/db/wallos.empty.db
 | 
					    rm -rf /opt/wallos/db/wallos.empty.db
 | 
				
			||||||
    mv /opt/wallos.db /opt/wallos/db/wallos.db
 | 
					    mv /opt/wallos.db /opt/wallos/db/wallos.db
 | 
				
			||||||
    mv /opt/logos/* /opt/wallos/images/uploads/logos
 | 
					    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
 | 
					    chown -R www-data:www-data /opt/wallos
 | 
				
			||||||
    chmod -R 755 /opt/wallos
 | 
					    chmod -R 755 /opt/wallos
 | 
				
			||||||
    mkdir -p /var/log/cron
 | 
					    mkdir -p /var/log/cron
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,7 @@ var_disk="${var_disk:-4}"
 | 
				
			|||||||
var_os="${var_os:-debian}"
 | 
					var_os="${var_os:-debian}"
 | 
				
			||||||
var_version="${var_version:-12}"
 | 
					var_version="${var_version:-12}"
 | 
				
			||||||
var_unprivileged="${var_unprivileged:-1}"
 | 
					var_unprivileged="${var_unprivileged:-1}"
 | 
				
			||||||
 | 
					var_tun="${var_tun:-1}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
header_info "$APP"
 | 
					header_info "$APP"
 | 
				
			||||||
variables
 | 
					variables
 | 
				
			||||||
@@ -20,20 +21,20 @@ color
 | 
				
			|||||||
catch_errors
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function update_script() {
 | 
					function update_script() {
 | 
				
			||||||
    header_info
 | 
					  header_info
 | 
				
			||||||
    check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
    check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
    if [[ ! -d /etc/wireguard ]]; then
 | 
					  if [[ ! -d /etc/wireguard ]]; then
 | 
				
			||||||
        msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    apt-get update
 | 
					 | 
				
			||||||
    apt-get -y upgrade
 | 
					 | 
				
			||||||
    sleep 2
 | 
					 | 
				
			||||||
    cd /etc/wgdashboard/src
 | 
					 | 
				
			||||||
    ./wgd.sh update
 | 
					 | 
				
			||||||
    ./wgd.sh start
 | 
					 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  apt-get update
 | 
				
			||||||
 | 
					  apt-get -y upgrade
 | 
				
			||||||
 | 
					  sleep 2
 | 
				
			||||||
 | 
					  cd /etc/wgdashboard/src
 | 
				
			||||||
 | 
					  ./wgd.sh update
 | 
				
			||||||
 | 
					  ./wgd.sh start
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
@@ -43,4 +44,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} WGDashboard Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} WGDashboard Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:10086${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:10086${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,13 +45,13 @@ function update_script() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
					    msg_info "Updating $APP to v${RELEASE}"
 | 
				
			||||||
    cd /opt/wizarr
 | 
					    cd /opt/wizarr
 | 
				
			||||||
    uv -q sync --locked
 | 
					    /usr/local/bin/uv -q sync --locked
 | 
				
			||||||
    $STD uv -q run pybabel compile -d app/translations
 | 
					    $STD /usr/local/bin/uv -q run pybabel compile -d app/translations
 | 
				
			||||||
    $STD npm --prefix app/static install
 | 
					    $STD npm --prefix app/static install
 | 
				
			||||||
    $STD npm --prefix app/static run build:css
 | 
					    $STD npm --prefix app/static run build:css
 | 
				
			||||||
    mkdir -p ./.cache
 | 
					    mkdir -p ./.cache
 | 
				
			||||||
    $STD tar -xf "$BACKUP_FILE" --directory=/
 | 
					    $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_ok "Updated $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting $APP"
 | 
					    msg_info "Starting $APP"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -7749,9 +7749,9 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/form-data": {
 | 
					    "node_modules/form-data": {
 | 
				
			||||||
      "version": "4.0.3",
 | 
					      "version": "4.0.4",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
 | 
				
			||||||
      "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==",
 | 
					      "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,8 +9,8 @@
 | 
				
			|||||||
  "updateable": true,
 | 
					  "updateable": true,
 | 
				
			||||||
  "privileged": false,
 | 
					  "privileged": false,
 | 
				
			||||||
  "interface_port": 6060,
 | 
					  "interface_port": 6060,
 | 
				
			||||||
  "documentation": "https://github.com/adityachandelgit/BookLore",
 | 
					  "documentation": "https://booklore-app.github.io/booklore-docs/docs/getting-started",
 | 
				
			||||||
  "website": "https://github.com/adityachandelgit/BookLore",
 | 
					  "website": "https://github.com/booklore-app/booklore",
 | 
				
			||||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/booklore.webp",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/booklore.webp",
 | 
				
			||||||
  "config_path": "/opt/booklore_storage/.env",
 | 
					  "config_path": "/opt/booklore_storage/.env",
 | 
				
			||||||
  "description": "BookLore is a self-hosted digital library for managing and reading books, offering a beautiful interface and support for metadata management. Built with a modern tech stack, it provides support for importing, organizing, and reading EPUBs and PDFs, while also managing cover images and book metadata.",
 | 
					  "description": "BookLore is a self-hosted digital library for managing and reading books, offering a beautiful interface and support for metadata management. Built with a modern tech stack, it provides support for importing, organizing, and reading EPUBs and PDFs, while also managing cover images and book metadata.",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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,
 | 
					  "updateable": true,
 | 
				
			||||||
  "privileged": false,
 | 
					  "privileged": false,
 | 
				
			||||||
  "interface_port": 3012,
 | 
					  "interface_port": 3012,
 | 
				
			||||||
  "documentation": null,
 | 
					  "documentation": "https://github.com/jhuckaby/Cronicle/blob/master/README.md",
 | 
				
			||||||
  "website": "https://github.com/jhuckaby/Cronicle",
 | 
					  "website": "https://github.com/jhuckaby/Cronicle",
 | 
				
			||||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/chronicle.webp",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/chronicle.webp",
 | 
				
			||||||
  "config_path": "/opt/cronicle/conf/config.json",
 | 
					  "config_path": "/opt/cronicle/conf/config.json",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,7 @@
 | 
				
			|||||||
      "script": "ct/elementsynapse.sh",
 | 
					      "script": "ct/elementsynapse.sh",
 | 
				
			||||||
      "resources": {
 | 
					      "resources": {
 | 
				
			||||||
        "cpu": 1,
 | 
					        "cpu": 1,
 | 
				
			||||||
        "ram": 1024,
 | 
					        "ram": 2048,
 | 
				
			||||||
        "hdd": 4,
 | 
					        "hdd": 4,
 | 
				
			||||||
        "os": "debian",
 | 
					        "os": "debian",
 | 
				
			||||||
        "version": "12"
 | 
					        "version": "12"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@
 | 
				
			|||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "date_created": "2024-05-02",
 | 
					  "date_created": "2024-05-02",
 | 
				
			||||||
  "type": "ct",
 | 
					  "type": "ct",
 | 
				
			||||||
  "updateable": false,
 | 
					  "updateable": true,
 | 
				
			||||||
  "privileged": false,
 | 
					  "privileged": false,
 | 
				
			||||||
  "interface_port": 80,
 | 
					  "interface_port": 80,
 | 
				
			||||||
  "documentation": "https://gotify.net/docs/index",
 | 
					  "documentation": "https://gotify.net/docs/index",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,10 @@
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      "text": "Configuration settings: `/etc/headscale/config.yaml`",
 | 
					      "text": "Configuration settings: `/etc/headscale/config.yaml`",
 | 
				
			||||||
      "type": "info"
 | 
					      "type": "info"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "text": "Access headscale-admin UI via `http://<LXC-IP>/admin/`",
 | 
				
			||||||
 | 
					      "type": "info"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@
 | 
				
			|||||||
  "updateable": false,
 | 
					  "updateable": false,
 | 
				
			||||||
  "privileged": false,
 | 
					  "privileged": false,
 | 
				
			||||||
  "interface_port": 1883,
 | 
					  "interface_port": 1883,
 | 
				
			||||||
  "documentation": null,
 | 
					  "documentation": "https://github.com/hivemq/hivemq-community-edition/wiki",
 | 
				
			||||||
  "website": "https://www.hivemq.com/",
 | 
					  "website": "https://www.hivemq.com/",
 | 
				
			||||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/hivemq.webp",
 | 
					  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/hivemq.webp",
 | 
				
			||||||
  "config_path": "/opt/hivemq/conf/config.xml",
 | 
					  "config_path": "/opt/hivemq/conf/config.xml",
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user