mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			424 Commits
		
	
	
		
			2025-07-16
			...
			2025-08-08
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					030a977209 | ||
| 
						 | 
					b8176dc7b3 | ||
| 
						 | 
					cd0625cba6 | ||
| 
						 | 
					73e131ecf8 | ||
| 
						 | 
					a0d6082b95 | ||
| 
						 | 
					70ccaf6835 | ||
| 
						 | 
					05b58decc2 | ||
| 
						 | 
					ff1b7cc81d | ||
| 
						 | 
					a2bbc2174a | ||
| 
						 | 
					a8a44a4d51 | ||
| 
						 | 
					ed620e8258 | ||
| 
						 | 
					1fc667088c | ||
| 
						 | 
					d89055a5cd | ||
| 
						 | 
					4ecd019e15 | ||
| 
						 | 
					e3a31aa47e | ||
| 
						 | 
					ed936528d2 | ||
| 
						 | 
					6f24de7d63 | ||
| 
						 | 
					54de40ed53 | ||
| 
						 | 
					872cd289ff | ||
| 
						 | 
					9c37ac385c | ||
| 
						 | 
					575ad61c93 | ||
| 
						 | 
					1773cc5507 | ||
| 
						 | 
					11b19fdeab | ||
| 
						 | 
					5e6081fbea | ||
| 
						 | 
					e2a310dd3a | ||
| 
						 | 
					d934d1b51b | ||
| 
						 | 
					6e3c08142d | ||
| 
						 | 
					a41497f90a | ||
| 
						 | 
					c54025f8de | ||
| 
						 | 
					a1eb53841d | ||
| 
						 | 
					6c4c3ffa39 | ||
| 
						 | 
					78f695f397 | ||
| 
						 | 
					4b0d24ed2e | ||
| 
						 | 
					705d66e7c6 | ||
| 
						 | 
					c4703527dc | ||
| 
						 | 
					9b607c60b4 | ||
| 
						 | 
					4717852019 | ||
| 
						 | 
					ab9c57ccf9 | ||
| 
						 | 
					dce77d12c7 | ||
| 
						 | 
					1f35b649cc | ||
| 
						 | 
					5938a9aceb | ||
| 
						 | 
					3b76211c12 | ||
| 
						 | 
					7221a0759d | ||
| 
						 | 
					a750932b3a | ||
| 
						 | 
					a4de1efae8 | ||
| 
						 | 
					f7570cb40c | ||
| 
						 | 
					10471b88aa | ||
| 
						 | 
					04a83cce10 | ||
| 
						 | 
					f9e26f4f7c | ||
| 
						 | 
					ed6baa1158 | ||
| 
						 | 
					a7cc93af09 | ||
| 
						 | 
					a494ed5872 | ||
| 
						 | 
					ede517a560 | ||
| 
						 | 
					bd41b236df | ||
| 
						 | 
					229c7ce4b3 | ||
| 
						 | 
					cc8381d7f7 | ||
| 
						 | 
					dc5b9be9ae | ||
| 
						 | 
					993aff59d7 | ||
| 
						 | 
					f3844c664c | ||
| 
						 | 
					47b3f71992 | ||
| 
						 | 
					09c815e935 | ||
| 
						 | 
					f59d4960f1 | ||
| 
						 | 
					c53d1d004a | ||
| 
						 | 
					bbdda06297 | ||
| 
						 | 
					daab80aaf4 | ||
| 
						 | 
					9250f9fae9 | ||
| 
						 | 
					6fa371fffc | ||
| 
						 | 
					e85263078e | ||
| 
						 | 
					f9b0916885 | ||
| 
						 | 
					964e29cd9e | ||
| 
						 | 
					31932499a9 | ||
| 
						 | 
					b155881de9 | ||
| 
						 | 
					010435ecaf | ||
| 
						 | 
					0863d080a4 | ||
| 
						 | 
					99837db81a | ||
| 
						 | 
					b4df862579 | ||
| 
						 | 
					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 | 
							
								
								
									
										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
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										433
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										433
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,441 @@
 | 
				
			|||||||
> [!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-09
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-08-08
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🆕 New Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - Palmr ([#6642](https://github.com/community-scripts/ProxmoxVE/pull/6642))
 | 
				
			||||||
 | 
					- HortusFox ([#6641](https://github.com/community-scripts/ProxmoxVE/pull/6641))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Unifi: Update libssl dependency [@tremor021](https://github.com/tremor021) ([#6680](https://github.com/community-scripts/ProxmoxVE/pull/6680))
 | 
				
			||||||
 | 
					    - HomeBox: Fix checking for existing install [@tremor021](https://github.com/tremor021) ([#6677](https://github.com/community-scripts/ProxmoxVE/pull/6677))
 | 
				
			||||||
 | 
					    - Immich: unpin libvips revision [@vhsdream](https://github.com/vhsdream) ([#6669](https://github.com/community-scripts/ProxmoxVE/pull/6669))
 | 
				
			||||||
 | 
					    - Meilisearch: fix wrong path switch [@MickLesk](https://github.com/MickLesk) ([#6668](https://github.com/community-scripts/ProxmoxVE/pull/6668))
 | 
				
			||||||
 | 
					    - MariaDB: fix "feedback" (statistical informations) whiptail  [@MickLesk](https://github.com/MickLesk) ([#6657](https://github.com/community-scripts/ProxmoxVE/pull/6657))
 | 
				
			||||||
 | 
					    - Karakeep: workaround/fix for #6593 [@vhsdream](https://github.com/vhsdream) ([#6648](https://github.com/community-scripts/ProxmoxVE/pull/6648))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Feature: FSTrim (Filesystem Trim) - Log / LVM Check / ZFS [@MickLesk](https://github.com/MickLesk) ([#6660](https://github.com/community-scripts/ProxmoxVE/pull/6660))
 | 
				
			||||||
 | 
					    - IP Tag: Allow installation on PVE 9.x [@webhdx](https://github.com/webhdx) ([#6679](https://github.com/community-scripts/ProxmoxVE/pull/6679))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: Alpine IT-Tools [@tremor021](https://github.com/tremor021) ([#6579](https://github.com/community-scripts/ProxmoxVE/pull/6579))
 | 
				
			||||||
 | 
					    - Refactor: ArchiveBox [@MickLesk](https://github.com/MickLesk) ([#6670](https://github.com/community-scripts/ProxmoxVE/pull/6670))
 | 
				
			||||||
 | 
					    - Refactor: Bazarr [@MickLesk](https://github.com/MickLesk) ([#6663](https://github.com/community-scripts/ProxmoxVE/pull/6663))
 | 
				
			||||||
 | 
					    - Refactor: Kometa [@MickLesk](https://github.com/MickLesk) ([#6673](https://github.com/community-scripts/ProxmoxVE/pull/6673))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-08-07
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Commafeed: Fix Backup Handling while Update [@MickLesk](https://github.com/MickLesk) ([#6629](https://github.com/community-scripts/ProxmoxVE/pull/6629))
 | 
				
			||||||
 | 
					    - VictoriaMetrics: Fix release fetching [@tremor021](https://github.com/tremor021) ([#6632](https://github.com/community-scripts/ProxmoxVE/pull/6632))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Feature: Post-PVE-Script (PVE9 Support + some Features) [@MickLesk](https://github.com/MickLesk) ([#6626](https://github.com/community-scripts/ProxmoxVE/pull/6626))
 | 
				
			||||||
 | 
					    - Feature: Clean-LXC now supports Alpine based containers [@MickLesk](https://github.com/MickLesk) ([#6628](https://github.com/community-scripts/ProxmoxVE/pull/6628))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: Tandoor v2  [@MickLesk](https://github.com/MickLesk) ([#6635](https://github.com/community-scripts/ProxmoxVE/pull/6635))
 | 
				
			||||||
 | 
					    - Refactor: Paymenter [@tremor021](https://github.com/tremor021) ([#6589](https://github.com/community-scripts/ProxmoxVE/pull/6589))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-08-06
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🐞 Bug Fixes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - [core] better y/N handling for ressource check [@MickLesk](https://github.com/MickLesk) ([#6608](https://github.com/community-scripts/ProxmoxVE/pull/6608))
 | 
				
			||||||
 | 
					    - fix: update Pulse scripts for v4 Go rewrite support [@rcourtman](https://github.com/rcourtman) ([#6574](https://github.com/community-scripts/ProxmoxVE/pull/6574))
 | 
				
			||||||
 | 
					    - OpenProject: Fix missing apt update [@tremor021](https://github.com/tremor021) ([#6598](https://github.com/community-scripts/ProxmoxVE/pull/6598))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - PVE9: Remove Beta Whiptail / add correct version check [@MickLesk](https://github.com/MickLesk) ([#6599](https://github.com/community-scripts/ProxmoxVE/pull/6599))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-08-05
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### ✨ New Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - NIC offloading: e1000 support [@rcastley](https://github.com/rcastley) ([#6575](https://github.com/community-scripts/ProxmoxVE/pull/6575))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 💥 Breaking Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Temporary Remove: SearXNG [@MickLesk](https://github.com/MickLesk) ([#6578](https://github.com/community-scripts/ProxmoxVE/pull/6578))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - #### 🔧 Refactor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - Refactor: Prometheus Alertmanager [@tremor021](https://github.com/tremor021) ([#6577](https://github.com/community-scripts/ProxmoxVE/pull/6577))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 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
 | 
					## 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
 | 
					### 🚀 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"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,16 +27,15 @@ function update_script() {
 | 
				
			|||||||
    exit 1
 | 
					    exit 1
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/sharevb/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
 | 
				
			||||||
  if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then
 | 
					  if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then
 | 
				
			||||||
    DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip"
 | 
					 | 
				
			||||||
    msg_info "Updating ${APP} LXC"
 | 
					    msg_info "Updating ${APP} LXC"
 | 
				
			||||||
    curl -fsSL -o it-tools.zip "$DOWNLOAD_URL"
 | 
					    curl -fsSL "https://github.com/sharevb/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip" -o it-tools.zip
 | 
				
			||||||
    mkdir -p /usr/share/nginx/html
 | 
					    mkdir -p /usr/share/nginx/html
 | 
				
			||||||
    rm -rf /usr/share/nginx/html/*
 | 
					    rm -rf /usr/share/nginx/html/*
 | 
				
			||||||
    $STD unzip it-tools.zip -d /tmp/it-tools
 | 
					    $STD unzip it-tools.zip -d /tmp
 | 
				
			||||||
    cp -r /tmp/it-tools/dist/* /usr/share/nginx/html
 | 
					    cp -r /tmp/dist/* /usr/share/nginx/html
 | 
				
			||||||
    rm -rf /tmp/it-tools
 | 
					    rm -rf /tmp/dist
 | 
				
			||||||
    rm -f it-tools.zip
 | 
					    rm -f it-tools.zip
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,29 +20,38 @@ 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/archivebox ]]; then
 | 
					  if [[ ! -d /opt/archivebox ]]; then
 | 
				
			||||||
        msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    msg_info "Stopping ${APP}"
 | 
					 | 
				
			||||||
    systemctl stop archivebox
 | 
					 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Updating ${APP}"
 | 
					 | 
				
			||||||
    cd /opt/archivebox/data
 | 
					 | 
				
			||||||
    pip install --upgrade --ignore-installed archivebox
 | 
					 | 
				
			||||||
    sudo -u archivebox archivebox init
 | 
					 | 
				
			||||||
    msg_ok "Updated ${APP}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					 | 
				
			||||||
    systemctl start archivebox
 | 
					 | 
				
			||||||
    msg_ok "Started ${APP}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  NODE_VERSION="22" setup_nodejs
 | 
				
			||||||
 | 
					  PYTHON_VERSION="3.13" setup_uv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  msg_info "Stopping ArchiveBox"
 | 
				
			||||||
 | 
					  systemctl stop archivebox
 | 
				
			||||||
 | 
					  msg_ok "Stopped ArchiveBox"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  msg_info "Upgrading Playwright"
 | 
				
			||||||
 | 
					  $STD uv pip install playwright --system
 | 
				
			||||||
 | 
					  $STD playwright install-deps chromium
 | 
				
			||||||
 | 
					  msg_ok "Upgraded Playwright"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  msg_info "Updating ArchiveBox"
 | 
				
			||||||
 | 
					  cd /opt/archivebox/data
 | 
				
			||||||
 | 
					  uv --system pip install --upgrade --ignore-installed archivebox
 | 
				
			||||||
 | 
					  sudo -u archivebox archivebox init
 | 
				
			||||||
 | 
					  msg_ok "Updated ArchiveBox"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  msg_info "Starting ArchiveBox"
 | 
				
			||||||
 | 
					  systemctl start archivebox
 | 
				
			||||||
 | 
					  msg_ok "Started ArchiveBox"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
@@ -52,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}:8000/admin/login${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000/admin/login${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										42
									
								
								ct/bazarr.sh
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								ct/bazarr.sh
									
									
									
									
									
								
							@@ -20,20 +20,36 @@ 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 /var/lib/bazarr/ ]]; then
 | 
					  if [[ ! -d /var/lib/bazarr/ ]]; then
 | 
				
			||||||
        msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    msg_info "Updating $APP LXC"
 | 
					 | 
				
			||||||
    $STD apt-get update
 | 
					 | 
				
			||||||
    $STD apt-get -y upgrade
 | 
					 | 
				
			||||||
    msg_ok "Updated $APP LXC"
 | 
					 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
}
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ! command -v jq &>/dev/null; then
 | 
				
			||||||
 | 
					    $STD apt-get install -y jq
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/morpheus65535/bazarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.bazarr 2>/dev/null)" ]] || [[ ! -f ~/.bazarr ]]; then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PYTHON_VERSION="3.13" setup_uv
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Setup Bazarr"
 | 
				
			||||||
 | 
					    mkdir -p /var/lib/bazarr/
 | 
				
			||||||
 | 
					    chmod 775 /opt/bazarr /var/lib/bazarr/
 | 
				
			||||||
 | 
					    $STD uv pip install -r /opt/bazarr/requirements.txt --system
 | 
				
			||||||
 | 
					    msg_ok "Setup Bazarr"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Update Successful"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
build_container
 | 
					build_container
 | 
				
			||||||
description
 | 
					description
 | 
				
			||||||
@@ -41,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}:6767${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6767${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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" "latest" "/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}"
 | 
				
			||||||
@@ -40,16 +40,20 @@ function update_script() {
 | 
				
			|||||||
      $STD apt-get install -y rsync
 | 
					      $STD apt-get install -y rsync
 | 
				
			||||||
      msg_ok "Installed Dependencies"
 | 
					      msg_ok "Installed Dependencies"
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then
 | 
					    if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then
 | 
				
			||||||
 | 
					      msg_info "Backing up existing data"
 | 
				
			||||||
      mv /opt/commafeed/data /opt/data.bak
 | 
					      mv /opt/commafeed/data /opt/data.bak
 | 
				
			||||||
 | 
					      msg_ok "Backed up existing data"
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip"
 | 
					    fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip"
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
					    if [ -d /opt/data.bak ] && [ "$(ls -A /opt/data.bak)" ]; then
 | 
				
			||||||
    if [ -d /opt/commafeed/data.bak ] && [ "$(ls -A /opt/commafeed/data.bak)" ]; then
 | 
					      msg_info "Restoring data"
 | 
				
			||||||
      mv /opt/commafeed/data.bak /opt/commafeed/data
 | 
					      mv /opt/data.bak /opt/commafeed/data
 | 
				
			||||||
 | 
					      msg_ok "Restored data"
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
    systemctl start commafeed
 | 
					    systemctl start commafeed
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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 @@
 | 
				
			|||||||
 | 
					   ________                __                  
 | 
				
			||||||
 | 
					  / ____/ /___  __  ______/ /_______ _   _____ 
 | 
				
			||||||
 | 
					 / /   / / __ \/ / / / __  / ___/ _ \ | / / _ \
 | 
				
			||||||
 | 
					/ /___/ / /_/ / /_/ / /_/ / /  /  __/ |/ /  __/
 | 
				
			||||||
 | 
					\____/_/\____/\__,_/\__,_/_/   \___/|___/\___/ 
 | 
				
			||||||
 | 
					                                               
 | 
				
			||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
    __  __                        ___              _      __              __        ______              
 | 
					 | 
				
			||||||
   / / / /___  ____ ___  ___     /   |  __________(_)____/ /_____ _____  / /_      / ____/___  ________ 
 | 
					 | 
				
			||||||
  / /_/ / __ \/ __ `__ \/ _ \   / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ /   / __ \/ ___/ _ \
 | 
					 | 
				
			||||||
 / __  / /_/ / / / / / /  __/  / ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / /  /  __/
 | 
					 | 
				
			||||||
/_/ /_/\____/_/ /_/ /_/\___/  /_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/      \____/\____/_/   \___/ 
 | 
					 | 
				
			||||||
                                                                                                        
 | 
					 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/hortusfox
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/hortusfox
									
									
									
									
									
										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/palmr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/palmr
									
									
									
									
									
										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.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,165 +0,0 @@
 | 
				
			|||||||
#!/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: tteck (tteckster) | Co-Author: MickLesk (CanbiZ)
 | 
					 | 
				
			||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
					 | 
				
			||||||
# Source: https://www.home-assistant.io/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
APP="Home Assistant-Core"
 | 
					 | 
				
			||||||
var_tags="${var_tags:-automation;smarthome}"
 | 
					 | 
				
			||||||
var_cpu="${var_cpu:-2}"
 | 
					 | 
				
			||||||
var_ram="${var_ram:-2048}"
 | 
					 | 
				
			||||||
var_disk="${var_disk:-10}"
 | 
					 | 
				
			||||||
var_os="${var_os:-ubuntu}"
 | 
					 | 
				
			||||||
var_version="${var_version:-24.10}"
 | 
					 | 
				
			||||||
var_unprivileged="${var_unprivileged:-1}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
header_info "$APP"
 | 
					 | 
				
			||||||
variables
 | 
					 | 
				
			||||||
color
 | 
					 | 
				
			||||||
catch_errors
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function update_script() {
 | 
					 | 
				
			||||||
  header_info
 | 
					 | 
				
			||||||
  if ! lsb_release -d | grep -q "Ubuntu 24.10"; then
 | 
					 | 
				
			||||||
    msg_error "Wrong OS detected. This script only supports Ubuntu 24.10."
 | 
					 | 
				
			||||||
    msg_error "Read Guide: https://github.com/community-scripts/ProxmoxVE/discussions/1549"
 | 
					 | 
				
			||||||
    exit 1
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
  check_container_storage
 | 
					 | 
				
			||||||
  check_container_resources
 | 
					 | 
				
			||||||
  if [[ ! -d /srv/homeassistant ]]; then
 | 
					 | 
				
			||||||
    msg_error "No ${APP} Installation Found!"
 | 
					 | 
				
			||||||
    exit 1
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
  setup_uv
 | 
					 | 
				
			||||||
  IP=$(hostname -I | awk '{print $1}')
 | 
					 | 
				
			||||||
  UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
 | 
					 | 
				
			||||||
    "1" "Update Core" ON \
 | 
					 | 
				
			||||||
    "2" "Install HACS" OFF \
 | 
					 | 
				
			||||||
    "3" "Install FileBrowser" OFF \
 | 
					 | 
				
			||||||
    3>&1 1>&2 2>&3)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if [ "$UPD" == "1" ]; then
 | 
					 | 
				
			||||||
    if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SELECT BRANCH" --yesno "Use Beta Branch?" 10 58); then
 | 
					 | 
				
			||||||
      clear
 | 
					 | 
				
			||||||
      header_info
 | 
					 | 
				
			||||||
      echo -e "${GN}Updating to Beta Version${CL}"
 | 
					 | 
				
			||||||
      BR="--pre"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      clear
 | 
					 | 
				
			||||||
      header_info
 | 
					 | 
				
			||||||
      echo -e "${GN}Updating to Stable Version${CL}"
 | 
					 | 
				
			||||||
      BR=""
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Stopping Home Assistant"
 | 
					 | 
				
			||||||
    systemctl stop homeassistant
 | 
					 | 
				
			||||||
    msg_ok "Stopped Home Assistant"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [[ -d /srv/homeassistant/bin ]]; then
 | 
					 | 
				
			||||||
      msg_info "Migrating to .venv-based structure"
 | 
					 | 
				
			||||||
      $STD source /srv/homeassistant/bin/activate
 | 
					 | 
				
			||||||
      PY_VER=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
 | 
					 | 
				
			||||||
      $STD deactivate
 | 
					 | 
				
			||||||
      mv /srv/homeassistant "/srv/homeassistant_backup_$PY_VER"
 | 
					 | 
				
			||||||
      mkdir -p /srv/homeassistant
 | 
					 | 
				
			||||||
      cd /srv/homeassistant
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      $STD uv python install 3.13
 | 
					 | 
				
			||||||
      UV_PYTHON=$(uv python list | awk '/3\.13\.[0-9]+.*\/root\/.local/ {print $2; exit}')
 | 
					 | 
				
			||||||
      if [[ -z "$UV_PYTHON" ]]; then
 | 
					 | 
				
			||||||
        msg_error "No local Python 3.13 found via uv"
 | 
					 | 
				
			||||||
        exit 1
 | 
					 | 
				
			||||||
      fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      $STD uv venv .venv --python "$UV_PYTHON"
 | 
					 | 
				
			||||||
      $STD source .venv/bin/activate
 | 
					 | 
				
			||||||
      $STD uv pip install homeassistant mysqlclient psycopg2-binary isal webrtcvad wheel
 | 
					 | 
				
			||||||
      mkdir -p /root/.homeassistant
 | 
					 | 
				
			||||||
      msg_ok "Migration complete"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      source /srv/homeassistant/.venv/bin/activate
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Updating Home Assistant"
 | 
					 | 
				
			||||||
    $STD uv pip install $BR --upgrade homeassistant
 | 
					 | 
				
			||||||
    msg_ok "Updated Home Assistant"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Starting Home Assistant"
 | 
					 | 
				
			||||||
    if [[ -f /etc/systemd/system/homeassistant.service ]] && grep -q "/srv/homeassistant/bin/python3" /etc/systemd/system/homeassistant.service; then
 | 
					 | 
				
			||||||
      sed -i 's|ExecStart=/srv/homeassistant/bin/python3|ExecStart=/srv/homeassistant/.venv/bin/python3|' /etc/systemd/system/homeassistant.service
 | 
					 | 
				
			||||||
      sed -i 's|PATH=/srv/homeassistant/bin|PATH=/srv/homeassistant/.venv/bin|' /etc/systemd/system/homeassistant.service
 | 
					 | 
				
			||||||
      $STD systemctl daemon-reload
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    systemctl start homeassistant
 | 
					 | 
				
			||||||
    sleep 5
 | 
					 | 
				
			||||||
    msg_ok "Started Home Assistant"
 | 
					 | 
				
			||||||
    msg_ok "Update Successful"
 | 
					 | 
				
			||||||
    echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
 | 
					 | 
				
			||||||
    exit
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if [ "$UPD" == "2" ]; then
 | 
					 | 
				
			||||||
    msg_info "Installing Home Assistant Community Store (HACS)"
 | 
					 | 
				
			||||||
    $STD apt update
 | 
					 | 
				
			||||||
    cd /root/.homeassistant
 | 
					 | 
				
			||||||
    $STD bash <(curl -fsSL https://get.hacs.xyz)
 | 
					 | 
				
			||||||
    msg_ok "Installed Home Assistant Community Store (HACS)"
 | 
					 | 
				
			||||||
    echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
 | 
					 | 
				
			||||||
    exit
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if [ "$UPD" == "3" ]; then
 | 
					 | 
				
			||||||
    set +Eeuo pipefail
 | 
					 | 
				
			||||||
    read -r -p "${TAB3}Would you like to use No Authentication? <y/N> " prompt
 | 
					 | 
				
			||||||
    msg_info "Installing FileBrowser"
 | 
					 | 
				
			||||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
 | 
					 | 
				
			||||||
    $STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
 | 
					 | 
				
			||||||
      $STD filebrowser config init -a '0.0.0.0'
 | 
					 | 
				
			||||||
      $STD filebrowser config set -a '0.0.0.0'
 | 
					 | 
				
			||||||
      $STD filebrowser config set --auth.method=noauth
 | 
					 | 
				
			||||||
      $STD filebrowser users add ID 1 --perm.admin
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      $STD filebrowser config init -a '0.0.0.0'
 | 
					 | 
				
			||||||
      $STD filebrowser config set -a '0.0.0.0'
 | 
					 | 
				
			||||||
      $STD filebrowser users add admin helper-scripts.com --perm.admin
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    msg_ok "Installed FileBrowser"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Creating Service"
 | 
					 | 
				
			||||||
    cat <<EOF >/etc/systemd/system/filebrowser.service
 | 
					 | 
				
			||||||
[Unit]
 | 
					 | 
				
			||||||
Description=Filebrowser
 | 
					 | 
				
			||||||
After=network-online.target
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[Service]
 | 
					 | 
				
			||||||
User=root
 | 
					 | 
				
			||||||
WorkingDirectory=/root/
 | 
					 | 
				
			||||||
ExecStart=/usr/local/bin/filebrowser -r /root/.homeassistant
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[Install]
 | 
					 | 
				
			||||||
WantedBy=default.target
 | 
					 | 
				
			||||||
EOF
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    systemctl enable --now -q filebrowser.service
 | 
					 | 
				
			||||||
    msg_ok "Created Service"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_ok "Completed Successfully!\n"
 | 
					 | 
				
			||||||
    echo -e "FileBrowser should be reachable by going to the following URL.
 | 
					 | 
				
			||||||
         ${BL}http://$IP:8080${CL}   admin|helper-scripts.com\n"
 | 
					 | 
				
			||||||
    exit
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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}:8123${CL}"
 | 
					 | 
				
			||||||
@@ -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 [[ ! -f /etc/systemd/system/homebox.service ]]; 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..."
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										73
									
								
								ct/hortusfox.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								ct/hortusfox.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: MickLesk (CanbiZ)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://github.com/danielbrendel/hortusfox-web
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="HortusFox"
 | 
				
			||||||
 | 
					var_tags="${var_tags:-plants}"
 | 
				
			||||||
 | 
					var_cpu="${var_cpu:-2}"
 | 
				
			||||||
 | 
					var_ram="${var_ram:-2048}"
 | 
				
			||||||
 | 
					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 [[ ! -d /opt/hortusfox ]]; then
 | 
				
			||||||
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/danielbrendel/hortusfox-web/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
				
			||||||
 | 
					  if [[ ! -f ~/.hortusfox ]] || [[ "${RELEASE}" != "$(cat ~/.hortusfox)" ]]; then
 | 
				
			||||||
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
 | 
					    systemctl stop apache2
 | 
				
			||||||
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Backing up current HortusFox installation"
 | 
				
			||||||
 | 
					    cd /opt
 | 
				
			||||||
 | 
					    mv /opt/hortusfox/ /opt/hortusfox-backup
 | 
				
			||||||
 | 
					    msg_ok "Backed up current HortusFox installation"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "hortusfox" "danielbrendel/hortusfox-web"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating HortusFox"
 | 
				
			||||||
 | 
					    cd /opt/hortusfox
 | 
				
			||||||
 | 
					    mv /opt/hortusfox-backup/.env /opt/hortusfox/.env
 | 
				
			||||||
 | 
					    $STD composer install --no-dev --optimize-autoloader
 | 
				
			||||||
 | 
					    $STD php asatru migrate --no-interaction
 | 
				
			||||||
 | 
					    $STD php asatru plants:attributes
 | 
				
			||||||
 | 
					    $STD php asatru calendar:classes
 | 
				
			||||||
 | 
					    msg_ok "Updated HortusFox"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
 | 
					    systemctl start apache2
 | 
				
			||||||
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Cleaning up"
 | 
				
			||||||
 | 
					    rm -r /opt/hortusfox-backup
 | 
				
			||||||
 | 
					    msg_ok "Cleaned"
 | 
				
			||||||
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start
 | 
				
			||||||
 | 
					build_container
 | 
				
			||||||
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
 | 
					echo -e "${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}"
 | 
				
			||||||
							
								
								
									
										36
									
								
								ct/immich.sh
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								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,14 +308,14 @@ 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
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function compile_libvips() {
 | 
					function compile_libvips() {
 | 
				
			||||||
  SOURCE=$SOURCE_DIR/libvips
 | 
					  SOURCE=$SOURCE_DIR/libvips
 | 
				
			||||||
  # : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
 | 
					  : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
 | 
				
			||||||
  : "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
 | 
					 | 
				
			||||||
  if [[ "${update:-}" ]] || [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
					  if [[ "${update:-}" ]] || [[ "$LIBVIPS_REVISION" != "$(grep 'libvips' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
				
			||||||
    msg_info "Recompiling libvips"
 | 
					    msg_info "Recompiling libvips"
 | 
				
			||||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
					    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
				
			||||||
@@ -307,6 +328,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}"
 | 
				
			||||||
@@ -36,11 +36,11 @@ function update_script() {
 | 
				
			|||||||
  msg_info "Stopping Services"
 | 
					  msg_info "Stopping Services"
 | 
				
			||||||
  systemctl stop karakeep-web karakeep-workers karakeep-browser
 | 
					  systemctl stop karakeep-web karakeep-workers karakeep-browser
 | 
				
			||||||
  msg_ok "Stopped Services"
 | 
					  msg_ok "Stopped Services"
 | 
				
			||||||
  
 | 
					
 | 
				
			||||||
  msg_info "Updating yt-dlp"
 | 
					  msg_info "Updating yt-dlp"
 | 
				
			||||||
  $STD yt-dlp --update-to nightly
 | 
					  $STD yt-dlp --update-to nightly
 | 
				
			||||||
  msg_ok "Updated yt-dlp"
 | 
					  msg_ok "Updated yt-dlp"
 | 
				
			||||||
  
 | 
					
 | 
				
			||||||
  msg_info "Prepare update"
 | 
					  msg_info "Prepare update"
 | 
				
			||||||
  if [[ -f /opt/${APP}_version.txt && "$(cat /opt/${APP}_version.txt)" < "0.23.0" ]]; then
 | 
					  if [[ -f /opt/${APP}_version.txt && "$(cat /opt/${APP}_version.txt)" < "0.23.0" ]]; then
 | 
				
			||||||
    $STD apt-get install -y graphicsmagick ghostscript
 | 
					    $STD apt-get install -y graphicsmagick ghostscript
 | 
				
			||||||
@@ -51,15 +51,20 @@ function update_script() {
 | 
				
			|||||||
  fi
 | 
					  fi
 | 
				
			||||||
  rm -rf /opt/karakeep
 | 
					  rm -rf /opt/karakeep
 | 
				
			||||||
  msg_ok "Update prepared"
 | 
					  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"
 | 
					  fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep"
 | 
				
			||||||
  if command -v corepack; then
 | 
					  if command -v corepack >/dev/null; then
 | 
				
			||||||
    $STD corepack disable
 | 
					    $STD corepack disable
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
 | 
					  MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
 | 
				
			||||||
  NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
 | 
					  NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
 | 
				
			||||||
  
 | 
					
 | 
				
			||||||
  msg_info "Updating ${APP} to v${RELEASE}"
 | 
					  msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
 | 
					  corepack enable
 | 
				
			||||||
  export PUPPETEER_SKIP_DOWNLOAD="true"
 | 
					  export PUPPETEER_SKIP_DOWNLOAD="true"
 | 
				
			||||||
  export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
 | 
					  export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
 | 
				
			||||||
  export NEXT_TELEMETRY_DISABLED=1
 | 
					  export NEXT_TELEMETRY_DISABLED=1
 | 
				
			||||||
@@ -69,10 +74,12 @@ function update_script() {
 | 
				
			|||||||
  $STD pnpm build
 | 
					  $STD pnpm build
 | 
				
			||||||
  cd /opt/karakeep/apps/workers
 | 
					  cd /opt/karakeep/apps/workers
 | 
				
			||||||
  $STD pnpm install --frozen-lockfile
 | 
					  $STD pnpm install --frozen-lockfile
 | 
				
			||||||
 | 
					  $STD pnpm build
 | 
				
			||||||
  cd /opt/karakeep/apps/cli
 | 
					  cd /opt/karakeep/apps/cli
 | 
				
			||||||
  $STD pnpm install --frozen-lockfile
 | 
					  $STD pnpm install --frozen-lockfile
 | 
				
			||||||
  $STD pnpm build
 | 
					  $STD pnpm build
 | 
				
			||||||
  export DATA_DIR=/opt/karakeep_data
 | 
					  DATA_DIR="$(sed -n '/^DATA_DIR/p' /etc/karakeep/karakeep.env | awk -F= '{print $2}' | tr -d '="=')"
 | 
				
			||||||
 | 
					  export DATA_DIR="${DATA_DIR:-/opt/karakeep_data}"
 | 
				
			||||||
  cd /opt/karakeep/packages/db
 | 
					  cd /opt/karakeep/packages/db
 | 
				
			||||||
  $STD pnpm migrate
 | 
					  $STD pnpm migrate
 | 
				
			||||||
  $STD pnpm store prune
 | 
					  $STD pnpm store prune
 | 
				
			||||||
@@ -82,7 +89,7 @@ function update_script() {
 | 
				
			|||||||
  msg_info "Starting Services"
 | 
					  msg_info "Starting Services"
 | 
				
			||||||
  systemctl start karakeep-browser karakeep-workers karakeep-web
 | 
					  systemctl start karakeep-browser karakeep-workers karakeep-web
 | 
				
			||||||
  msg_ok "Started Services"
 | 
					  msg_ok "Started Services"
 | 
				
			||||||
  
 | 
					
 | 
				
			||||||
  msg_info "Cleaning up"
 | 
					  msg_info "Cleaning up"
 | 
				
			||||||
  $STD apt-get autoremove -y
 | 
					  $STD apt-get autoremove -y
 | 
				
			||||||
  $STD apt-get autoclean -y
 | 
					  $STD apt-get autoclean -y
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										83
									
								
								ct/kometa.sh
									
									
									
									
									
								
							
							
						
						
									
										83
									
								
								ct/kometa.sh
									
									
									
									
									
								
							@@ -20,51 +20,46 @@ color
 | 
				
			|||||||
catch_errors
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function update_script() {
 | 
					function update_script() {
 | 
				
			||||||
    header_info
 | 
					  header_info
 | 
				
			||||||
    check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
    check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if [[ ! -f "/opt/kometa/kometa.py" ]]; then
 | 
					  if [[ ! -d "/opt/kometa" ]]; then
 | 
				
			||||||
        msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					 | 
				
			||||||
    if [[ "${RELEASE}" != "$(cat /opt/kometa_version.txt)" ]] || [[ ! -f /opt/kometa_version.txt ]]; then
 | 
					 | 
				
			||||||
        msg_info "Updating $APP"
 | 
					 | 
				
			||||||
        msg_info "Stopping $APP"
 | 
					 | 
				
			||||||
        systemctl stop kometa
 | 
					 | 
				
			||||||
        msg_ok "Stopped $APP"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        msg_info "Updating $APP to ${RELEASE}"
 | 
					 | 
				
			||||||
        cd /tmp
 | 
					 | 
				
			||||||
        temp_file=$(mktemp)
 | 
					 | 
				
			||||||
        RELEASE=$(curl -fsSL https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					 | 
				
			||||||
curl -fsSL "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file""
 | 
					 | 
				
			||||||
        tar -xzf "$temp_file"
 | 
					 | 
				
			||||||
        cp /opt/kometa/config/config.yml /opt
 | 
					 | 
				
			||||||
        rm -rf /opt/kometa
 | 
					 | 
				
			||||||
        mv Kometa-${RELEASE} /opt/kometa
 | 
					 | 
				
			||||||
        cd /opt/kometa
 | 
					 | 
				
			||||||
        rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
					 | 
				
			||||||
        $STD pip install -r requirements.txt --ignore-installed
 | 
					 | 
				
			||||||
        mkdir -p config/assets
 | 
					 | 
				
			||||||
        cp /opt/config.yml config/config.yml
 | 
					 | 
				
			||||||
        echo "${RELEASE}" >/opt/kometa_version.txt
 | 
					 | 
				
			||||||
        msg_ok "Updated $APP to ${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        msg_info "Starting $APP"
 | 
					 | 
				
			||||||
        systemctl start kometa
 | 
					 | 
				
			||||||
        msg_ok "Started $APP"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        msg_info "Cleaning Up"
 | 
					 | 
				
			||||||
        rm -f $temp_file
 | 
					 | 
				
			||||||
        msg_ok "Cleanup Completed"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        msg_ok "Update Successful"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  if ! command -v jq &>/dev/null; then
 | 
				
			||||||
 | 
					    $STD apt-get install -y jq
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | jq -r '.tag_name | sub("^v";"")')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.kometa 2>/dev/null)" ]] || [[ ! -f ~/.kometa ]]; then
 | 
				
			||||||
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
 | 
					    systemctl stop kometa
 | 
				
			||||||
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Backing up data"
 | 
				
			||||||
 | 
					    cp /opt/kometa/config/config.yml /opt
 | 
				
			||||||
 | 
					    msg_ok "Backup completed"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PYTHON_VERSION="3.12" setup_uv
 | 
				
			||||||
 | 
					    $STD uv python update-shell
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating Kometa"
 | 
				
			||||||
 | 
					    $STD uv pip install -r requirements.txt --system
 | 
				
			||||||
 | 
					    mkdir -p config/assets
 | 
				
			||||||
 | 
					    cp /opt/config.yml config/config.yml
 | 
				
			||||||
 | 
					    msg_ok "Updated Kometa"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
 | 
					    systemctl start kometa
 | 
				
			||||||
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					    msg_ok "Update Successful"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
@@ -74,4 +69,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 the LXC at following IP address:${CL}"
 | 
					echo -e "${INFO}${YW} Access the LXC at following IP address:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}${IP}${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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,10 +24,6 @@ function update_script() {
 | 
				
			|||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if [[ ! -f /opt/Meilisearch_version.txt ]]; then
 | 
					 | 
				
			||||||
    msg_error "No Meilisearch Installation Found!"
 | 
					 | 
				
			||||||
    exit
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
  UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Meilisearch Update" --radiolist --cancel-button Exit-Script "Spacebar = Select" 10 58 2 \
 | 
					  UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Meilisearch Update" --radiolist --cancel-button Exit-Script "Spacebar = Select" 10 58 2 \
 | 
				
			||||||
    "1" "Update Meilisearch" ON \
 | 
					    "1" "Update Meilisearch" ON \
 | 
				
			||||||
    "2" "Update Meilisearch-UI" OFF \
 | 
					    "2" "Update Meilisearch-UI" OFF \
 | 
				
			||||||
@@ -38,13 +34,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 +43,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 +51,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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,6 +46,8 @@ function update_script() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  msg_info "Building Frontend"
 | 
					  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
 | 
					    cd ./frontend || exit
 | 
				
			||||||
    $STD pnpm install
 | 
					    $STD pnpm install
 | 
				
			||||||
    $STD pnpm upgrade
 | 
					    $STD pnpm upgrade
 | 
				
			||||||
@@ -72,8 +74,6 @@ function update_script() {
 | 
				
			|||||||
  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
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										80
									
								
								ct/palmr.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								ct/palmr.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
				
			|||||||
 | 
					#!/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: vhsdream
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://github.com/kyantech/Palmr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="Palmr"
 | 
				
			||||||
 | 
					var_tags="${var_tags:-files}"
 | 
				
			||||||
 | 
					var_cpu="${var_cpu:-4}"
 | 
				
			||||||
 | 
					var_ram="${var_ram:-4096}"
 | 
				
			||||||
 | 
					var_disk="${var_disk:-6}"
 | 
				
			||||||
 | 
					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/palmr_data ]]; then
 | 
				
			||||||
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/kyantech/palmr/releases/latest | jq '.tag_name' | sed 's/^v//')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.palmr 2>/dev/null)" ]] || [[ ! -f ~/.palmr ]]; then
 | 
				
			||||||
 | 
					    msg_info "Stopping Services"
 | 
				
			||||||
 | 
					    systemctl stop palmr-frontend palmr-backend
 | 
				
			||||||
 | 
					    msg_ok "Stopped Services"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cp /opt/palmr/apps/server/.env /opt/palmr.env
 | 
				
			||||||
 | 
					    rm -rf /opt/palmr
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
 | 
				
			||||||
 | 
					    NODE_VERSION="20" NODE_MODULE="$PNPM" setup_nodejs
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    msg_info "Updating ${APP}"
 | 
				
			||||||
 | 
					    cd /opt/palmr/apps/server
 | 
				
			||||||
 | 
					    mv /opt/palmr.env /opt/palmr/apps/server/.env
 | 
				
			||||||
 | 
					    $STD pnpm install
 | 
				
			||||||
 | 
					    $STD pnpm dlx prisma generate
 | 
				
			||||||
 | 
					    $STD pnpm dlx prisma migrate deploy
 | 
				
			||||||
 | 
					    $STD pnpm dlx prisma db push
 | 
				
			||||||
 | 
					    $STD pnpm build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cd /opt/palmr/apps/web
 | 
				
			||||||
 | 
					    export NODE_ENV=production
 | 
				
			||||||
 | 
					    export NEXT_TELEMETRY_DISABLED=1
 | 
				
			||||||
 | 
					    mv ./.env.example ./.env
 | 
				
			||||||
 | 
					    $STD pnpm install
 | 
				
			||||||
 | 
					    $STD pnpm build
 | 
				
			||||||
 | 
					    chown -R palmr:palmr /opt/palmr_data /opt/palmr
 | 
				
			||||||
 | 
					    msg_ok "Updated $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting Services"
 | 
				
			||||||
 | 
					    systemctl start palmr-backend palmr-frontend
 | 
				
			||||||
 | 
					    msg_ok "Started Services"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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}:3000${CL}"
 | 
				
			||||||
@@ -23,32 +23,25 @@ function update_script() {
 | 
				
			|||||||
  header_info
 | 
					  header_info
 | 
				
			||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					 | 
				
			||||||
  if [[ ! -d /opt/paymenter ]]; then
 | 
					  if [[ ! -d /opt/paymenter ]]; then
 | 
				
			||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
 | 
					  CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
 | 
				
			||||||
  if [[ "$CURRENT_PHP" != "8.3" ]]; then
 | 
					  if [[ "$CURRENT_PHP" != "8.3" ]]; then
 | 
				
			||||||
    msg_info "Migrating PHP $CURRENT_PHP to 8.3"
 | 
					    PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="common,mysql,fpm,redis" setup_php
 | 
				
			||||||
    $STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
					    setup_composer
 | 
				
			||||||
    $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
					 | 
				
			||||||
    $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
 | 
					 | 
				
			||||||
    $STD apt-get update
 | 
					 | 
				
			||||||
    $STD apt-get remove -y php"${CURRENT_PHP//./}"*
 | 
					 | 
				
			||||||
    $STD apt-get install -y \
 | 
					 | 
				
			||||||
      php8.3 \
 | 
					 | 
				
			||||||
      php8.3-{common,cli,gd,mysql,mbstring,bcmath,xml,curl,zip,intl,redis,fpm}
 | 
					 | 
				
			||||||
    sed -i 's|php8\.2-fpm\.sock|php8.3-fpm.sock|g' /etc/nginx/sites-available/paymenter.conf
 | 
					    sed -i 's|php8\.2-fpm\.sock|php8.3-fpm.sock|g' /etc/nginx/sites-available/paymenter.conf
 | 
				
			||||||
    $STD systemctl reload nginx
 | 
					    $STD systemctl reload nginx
 | 
				
			||||||
    msg_ok "Migrated PHP $CURRENT_PHP to 8.3"
 | 
					 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/paymenter/paymenter/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
 | 
					
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/paymenter/paymenter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					  if [[ ! -f ~/.paymenter ]] || [[ "${RELEASE}" != "$(cat ~/.paymenter)" ]]; then
 | 
				
			||||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
					    msg_info "Updating ${APP} to ${RELEASE}"
 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    cd /opt/paymenter
 | 
					    cd /opt/paymenter
 | 
				
			||||||
    $STD php artisan p:upgrade --no-interaction
 | 
					    $STD php artisan p:upgrade --no-interaction
 | 
				
			||||||
 | 
					    echo "${RELEASE}" >~/.paymenter
 | 
				
			||||||
    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,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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,24 +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/prometheus/alertmanager/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/prometheus/alertmanager/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 ~/.alertmanager ]] || [[ "${RELEASE}" != "$(cat ~/.alertmanager)" ]]; then
 | 
				
			||||||
    msg_info "Stopping ${APP}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
    systemctl stop prometheus-alertmanager
 | 
					    systemctl stop prometheus-alertmanager
 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    fetch_and_deploy_gh_release "alertmanager" "prometheus/alertmanager" "prebuild" "latest" "/usr/local/bin/" "alertmanager*linux-amd64.tar.gz"
 | 
				
			||||||
    cd /opt
 | 
					 | 
				
			||||||
    curl -fsSL "https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz" -o $(basename "https://github.com/prometheus/alertmanager/releases/download/v${RELEASE}/alertmanager-${RELEASE}.linux-amd64.tar.gz")
 | 
					 | 
				
			||||||
    tar -xf alertmanager-${RELEASE}.linux-amd64.tar.gz
 | 
					 | 
				
			||||||
    cp -rf alertmanager-${RELEASE}.linux-amd64/alertmanager alertmanager-${RELEASE}.linux-amd64/amtool /usr/local/bin/
 | 
					 | 
				
			||||||
    rm -rf alertmanager-${RELEASE}.linux-amd64 alertmanager-${RELEASE}.linux-amd64.tar.gz
 | 
					 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
    systemctl start prometheus-alertmanager
 | 
					    systemctl start prometheus-alertmanager
 | 
				
			||||||
    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 v${RELEASE}"
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										36
									
								
								ct/pulse.sh
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								ct/pulse.sh
									
									
									
									
									
								
							@@ -23,42 +23,34 @@ function update_script() {
 | 
				
			|||||||
  header_info
 | 
					  header_info
 | 
				
			||||||
  check_container_storage
 | 
					  check_container_storage
 | 
				
			||||||
  check_container_resources
 | 
					  check_container_resources
 | 
				
			||||||
  if [[ -d /opt/pulse-monitor ]]; then
 | 
					 | 
				
			||||||
  msg_error "An old installation was detected. Please recreate the LXC from scratch (https://github.com/community-scripts/ProxmoxVE/pull/4848)"
 | 
					 | 
				
			||||||
  exit 1
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
  if [[ ! -d /opt/pulse ]]; then
 | 
					  if [[ ! -d /opt/pulse ]]; 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/rcourtman/Pulse/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 ~/.pulse ]]; then
 | 
				
			||||||
 | 
					    msg_error "Old Installation Found! Please recreate the container due big changes in the software."
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/rcourtman/Pulse/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
				
			||||||
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.pulse 2>/dev/null)" ]] || [[ ! -f ~/.pulse ]]; then
 | 
				
			||||||
    msg_info "Stopping ${APP}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
    systemctl stop pulse
 | 
					    systemctl stop pulse
 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating Pulse"
 | 
					    fetch_and_deploy_gh_release "pulse" "rcourtman/Pulse" "prebuild" "latest" "/opt/pulse" "*-linux-amd64.tar.gz"
 | 
				
			||||||
    temp_file=$(mktemp)
 | 
					    chown -R pulse:pulse /etc/pulse /opt/pulse
 | 
				
			||||||
    mkdir -p /opt/pulse
 | 
					 | 
				
			||||||
    rm -rf /opt/pulse/*
 | 
					 | 
				
			||||||
    curl -fsSL "https://github.com/rcourtman/Pulse/releases/download/v${RELEASE}/pulse-v${RELEASE}.tar.gz" -o "$temp_file"
 | 
					 | 
				
			||||||
    tar zxf "$temp_file" --strip-components=1 -C /opt/pulse
 | 
					 | 
				
			||||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
					 | 
				
			||||||
    msg_ok "Updated Pulse to ${RELEASE}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Setting permissions for /opt/pulse..."
 | 
					 | 
				
			||||||
    chown -R pulse:pulse "/opt/pulse"
 | 
					 | 
				
			||||||
    find "/opt/pulse" -type d -exec chmod 755 {} \;
 | 
					 | 
				
			||||||
    find "/opt/pulse" -type f -exec chmod 644 {} \;
 | 
					 | 
				
			||||||
    msg_ok "Set permissions."
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
    systemctl start pulse
 | 
					    systemctl start pulse
 | 
				
			||||||
    msg_ok "Started ${APP}"
 | 
					    msg_ok "Started ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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 v${RELEASE}"
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  exit  
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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}"
 | 
				
			||||||
@@ -27,10 +27,11 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  sed -i 's/^\([[:space:]]*limiter:\)[[:space:]]*true/\1 false/' /etc/searxng/settings.yml
 | 
					  msg_ok "There is currently no update available."
 | 
				
			||||||
  if cd /usr/local/searxng/searxng-src && git pull | grep -q 'Already up to date'; then
 | 
					  # sed -i 's/^\([[:space:]]*limiter:\)[[:space:]]*true/\1 false/' /etc/searxng/settings.yml
 | 
				
			||||||
    msg_ok "There is currently no update available."
 | 
					  # if cd /usr/local/searxng/searxng-src && git pull | grep -q 'Already up to date'; then
 | 
				
			||||||
  fi
 | 
					  #   msg_ok "There is currently no update available."
 | 
				
			||||||
 | 
					  # fi
 | 
				
			||||||
  exit
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
#!/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 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://tandoor.dev/
 | 
					# Source: https://tandoor.dev/
 | 
				
			||||||
@@ -27,27 +27,57 @@ 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
 | 
					
 | 
				
			||||||
    $STD apt-get update
 | 
					  if [[ ! -f ~/.tandoor ]]; then
 | 
				
			||||||
    $STD apt-get install -y python3-xmlsec
 | 
					    msg_error "v1 Installation found, please export your data and create an new LXC."
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  if cd /opt/tandoor && git pull | grep -q 'Already up to date'; then
 | 
					
 | 
				
			||||||
    msg_ok "There is currently no update available."
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/TandoorRecipes/recipes/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
				
			||||||
  else
 | 
					  if [[ "${RELEASE}" != "$(cat ~/.tandoor 2>/dev/null)" ]] || [[ ! -f ~/.tandoor ]]; then
 | 
				
			||||||
    msg_info "Updating ${APP} (Patience)"
 | 
					    msg_info "Stopping $APP"
 | 
				
			||||||
    export $(cat /opt/tandoor/.env | grep "^[^#]" | xargs)
 | 
					    systemctl stop tandoor
 | 
				
			||||||
    cd /opt/tandoor/
 | 
					    msg_ok "Stopped $APP"
 | 
				
			||||||
    $STD pip3 install -r requirements.txt
 | 
					
 | 
				
			||||||
    $STD /usr/bin/python3 /opt/tandoor/manage.py migrate
 | 
					    msg_info "Creating Backup"
 | 
				
			||||||
    $STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic --no-input
 | 
					    mv /opt/tandoor /opt/tandoor.bak
 | 
				
			||||||
    $STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic_js_reverse
 | 
					    msg_ok "Backup Created"
 | 
				
			||||||
    cd /opt/tandoor/vue
 | 
					
 | 
				
			||||||
 | 
					    NODE_VERSION="20" NODE_MODULE="yarn" setup_nodejs
 | 
				
			||||||
 | 
					    PYTHON_VERSION="3.13" setup_uv
 | 
				
			||||||
 | 
					    fetch_and_deploy_gh_release "tandoor" "TandoorRecipes/recipes" "tarball" "latest" "/opt/tandoor"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating $APP to ${RELEASE}"
 | 
				
			||||||
 | 
					    cp -r /opt/tandoor.bak/{config,api,mediafiles,staticfiles} /opt/tandoor/
 | 
				
			||||||
 | 
					    mv /opt/.env /opt/tandoor/.env
 | 
				
			||||||
 | 
					    cd /opt/tandoor
 | 
				
			||||||
 | 
					    $STD uv venv .venv --python=python3
 | 
				
			||||||
 | 
					    $STD uv pip install -r requirements.txt --python .venv/bin/python
 | 
				
			||||||
 | 
					    cd /opt/tandoor/vue3
 | 
				
			||||||
    $STD yarn install
 | 
					    $STD yarn install
 | 
				
			||||||
    $STD yarn build
 | 
					    $STD yarn build
 | 
				
			||||||
 | 
					    TANDOOR_VERSION="$(curl -fsSL https://api.github.com/repos/TandoorRecipes/recipes/releases/latest | jq -r .tag_name)"
 | 
				
			||||||
 | 
					    cat <<EOF >/opt/tandoor/cookbook/version_info.py
 | 
				
			||||||
 | 
					TANDOOR_VERSION = "$TANDOOR_VERSION"
 | 
				
			||||||
 | 
					TANDOOR_REF = "bare-metal"
 | 
				
			||||||
 | 
					VERSION_INFO = []
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
    cd /opt/tandoor
 | 
					    cd /opt/tandoor
 | 
				
			||||||
    $STD python3 version.py
 | 
					    $STD /opt/tandoor/.venv/bin/python manage.py migrate
 | 
				
			||||||
    systemctl restart gunicorn_tandoor
 | 
					    $STD /opt/tandoor/.venv/bin/python manage.py collectstatic --no-input
 | 
				
			||||||
    msg_ok "Updated ${APP}"
 | 
					    msg_ok "Updated $APP to ${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting $APP"
 | 
				
			||||||
 | 
					    systemctl start tandoor
 | 
				
			||||||
 | 
					    systemctl reload nginx
 | 
				
			||||||
 | 
					    msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Cleaning Up"
 | 
				
			||||||
 | 
					    rm -rf /opt/tandoor.bak
 | 
				
			||||||
 | 
					    msg_ok "Cleanup Completed"
 | 
				
			||||||
 | 
					    msg_ok "Update Successful"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
  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}"
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user