mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			453 Commits
		
	
	
		
			2025-06-28
			...
			2025-07-24
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					0484259f39 | ||
| 
						 | 
					cadd0a53bd | ||
| 
						 | 
					c82c185e4e | ||
| 
						 | 
					89b2b21761 | ||
| 
						 | 
					0a722a242f | ||
| 
						 | 
					01be7acf10 | ||
| 
						 | 
					2d66d09de2 | ||
| 
						 | 
					67069cfb21 | ||
| 
						 | 
					e78c590772 | ||
| 
						 | 
					d956763642 | ||
| 
						 | 
					af4aedf15a | ||
| 
						 | 
					e25f3dce52 | ||
| 
						 | 
					eda1b1aea8 | ||
| 
						 | 
					16e2d2206c | ||
| 
						 | 
					33a03f4b0e | ||
| 
						 | 
					5867ef3288 | ||
| 
						 | 
					8ef59b590a | ||
| 
						 | 
					72d6fb40dc | ||
| 
						 | 
					7e9d786202 | ||
| 
						 | 
					ed934a21ff | ||
| 
						 | 
					c9015cca20 | ||
| 
						 | 
					b52e958623 | ||
| 
						 | 
					1f51e96cb1 | ||
| 
						 | 
					de1a93bf6d | ||
| 
						 | 
					8bfb78e001 | ||
| 
						 | 
					4fa4ed35cc | ||
| 
						 | 
					4a050f3723 | ||
| 
						 | 
					9304835775 | ||
| 
						 | 
					a2fa104176 | ||
| 
						 | 
					3c0888abdd | ||
| 
						 | 
					d6af60f0c0 | ||
| 
						 | 
					0a83090ad2 | ||
| 
						 | 
					035419b4b9 | ||
| 
						 | 
					d19130d8f1 | ||
| 
						 | 
					b36f982fc2 | ||
| 
						 | 
					d67fa6cf38 | ||
| 
						 | 
					4201ab58ab | ||
| 
						 | 
					0f3b95b3ff | ||
| 
						 | 
					feea82e0ba | ||
| 
						 | 
					0e0c954f0c | ||
| 
						 | 
					6b74f6247f | ||
| 
						 | 
					4159ba3970 | ||
| 
						 | 
					a53daa3559 | ||
| 
						 | 
					4b3233d6a8 | ||
| 
						 | 
					ff51b1e5dc | ||
| 
						 | 
					1aab127bdf | ||
| 
						 | 
					baf7dff759 | ||
| 
						 | 
					b4ec04a54f | ||
| 
						 | 
					2ee8269684 | ||
| 
						 | 
					84860a9893 | ||
| 
						 | 
					ebb7da43c1 | ||
| 
						 | 
					44c584dced | ||
| 
						 | 
					2bede5256f | ||
| 
						 | 
					2848cf6d6b | ||
| 
						 | 
					bce076161e | ||
| 
						 | 
					040a15aa3e | ||
| 
						 | 
					5c0cffce6f | ||
| 
						 | 
					d552fb86c1 | ||
| 
						 | 
					42af89dd2d | ||
| 
						 | 
					003fc3c080 | ||
| 
						 | 
					a638dc8672 | ||
| 
						 | 
					d7668531e7 | ||
| 
						 | 
					30ca65e1d5 | ||
| 
						 | 
					ae84b7d281 | ||
| 
						 | 
					202eed7c13 | ||
| 
						 | 
					e194a36301 | ||
| 
						 | 
					7b93eed34a | ||
| 
						 | 
					5a3855566b | ||
| 
						 | 
					85595871df | ||
| 
						 | 
					901837b4ae | ||
| 
						 | 
					9f1273349f | ||
| 
						 | 
					e6756385ed | ||
| 
						 | 
					74be3e70b9 | ||
| 
						 | 
					9060e8f372 | ||
| 
						 | 
					2adcf04426 | ||
| 
						 | 
					88d58cd100 | ||
| 
						 | 
					1046ffb544 | ||
| 
						 | 
					a011b60a6e | ||
| 
						 | 
					be6ac828ca | ||
| 
						 | 
					a196541771 | ||
| 
						 | 
					ca7564d0e5 | ||
| 
						 | 
					ccdf6a4aec | ||
| 
						 | 
					c2c2e4030e | ||
| 
						 | 
					268d692281 | ||
| 
						 | 
					3547552c23 | ||
| 
						 | 
					3579c93d80 | ||
| 
						 | 
					65e0ed2976 | ||
| 
						 | 
					2bd9f4a7c6 | ||
| 
						 | 
					f56489cb07 | ||
| 
						 | 
					852bfbd71c | ||
| 
						 | 
					255bd7a803 | ||
| 
						 | 
					ffe774dc4c | ||
| 
						 | 
					2f08a8623b | ||
| 
						 | 
					1af6cc6b54 | ||
| 
						 | 
					0113c7e7fd | ||
| 
						 | 
					745533759a | ||
| 
						 | 
					c62b244569 | ||
| 
						 | 
					2600e84a14 | ||
| 
						 | 
					51faa3b03d | ||
| 
						 | 
					a5ed6c1af7 | ||
| 
						 | 
					05f552eca7 | ||
| 
						 | 
					da71a0fa01 | ||
| 
						 | 
					2a359b5d2d | ||
| 
						 | 
					a125d00cad | ||
| 
						 | 
					14f36819c2 | ||
| 
						 | 
					b4df44bc5c | ||
| 
						 | 
					53fa29e01f | ||
| 
						 | 
					33e19bc535 | ||
| 
						 | 
					52bc5f33e6 | ||
| 
						 | 
					51a6024a1b | ||
| 
						 | 
					49aa5ae552 | ||
| 
						 | 
					6dc91a2144 | ||
| 
						 | 
					03813ff991 | ||
| 
						 | 
					c0df5b79f5 | ||
| 
						 | 
					523b3e6a70 | ||
| 
						 | 
					4ce715acd4 | ||
| 
						 | 
					1ad394367e | ||
| 
						 | 
					0b0ae1a3bc | ||
| 
						 | 
					63c5912723 | ||
| 
						 | 
					dafb4af6a8 | ||
| 
						 | 
					88e3a334f7 | ||
| 
						 | 
					bbd600a348 | ||
| 
						 | 
					c90f800a69 | ||
| 
						 | 
					ca5f0629b0 | ||
| 
						 | 
					a7f67e5534 | ||
| 
						 | 
					03c4e54da6 | ||
| 
						 | 
					eb86d3e960 | ||
| 
						 | 
					968b7cdf43 | ||
| 
						 | 
					688d296d13 | ||
| 
						 | 
					0379223ead | ||
| 
						 | 
					7a0ca05153 | ||
| 
						 | 
					fb3bf03332 | ||
| 
						 | 
					6d312c9c8d | ||
| 
						 | 
					a2dde6594e | ||
| 
						 | 
					f7c9d77019 | ||
| 
						 | 
					8f4f2f4d92 | ||
| 
						 | 
					f15e4ea552 | ||
| 
						 | 
					1a90d90d5e | ||
| 
						 | 
					11f1e86500 | ||
| 
						 | 
					9d84657763 | ||
| 
						 | 
					31d57da5ab | ||
| 
						 | 
					7d223b984b | ||
| 
						 | 
					417c4e466c | ||
| 
						 | 
					b16fa8d34f | ||
| 
						 | 
					3a2f0bf2cc | ||
| 
						 | 
					a83b58f1df | ||
| 
						 | 
					e5e8b1e020 | ||
| 
						 | 
					3b3e62c4cf | ||
| 
						 | 
					478b65b2c2 | ||
| 
						 | 
					1982ca80d2 | ||
| 
						 | 
					b060de68c0 | ||
| 
						 | 
					a437a7896b | ||
| 
						 | 
					561a2f2712 | ||
| 
						 | 
					aa0a2e1654 | ||
| 
						 | 
					b34b4e09d8 | ||
| 
						 | 
					f48593ac81 | ||
| 
						 | 
					eba06a27f3 | ||
| 
						 | 
					ac1d7f8169 | ||
| 
						 | 
					595fb1ecd9 | ||
| 
						 | 
					207616ec66 | ||
| 
						 | 
					9297ee5e7b | ||
| 
						 | 
					3fc21c7705 | ||
| 
						 | 
					a514a7ff97 | ||
| 
						 | 
					591106adb4 | ||
| 
						 | 
					149b2f1602 | ||
| 
						 | 
					3aff85b730 | ||
| 
						 | 
					c116e773b3 | ||
| 
						 | 
					1e58019e2e | ||
| 
						 | 
					17e671cae9 | ||
| 
						 | 
					4d236e6382 | ||
| 
						 | 
					f4ac341c15 | ||
| 
						 | 
					20e9e9efe8 | ||
| 
						 | 
					ee5cd20915 | ||
| 
						 | 
					5dcd39231f | ||
| 
						 | 
					8f79823c95 | ||
| 
						 | 
					ba00a1d3f0 | ||
| 
						 | 
					599d65768e | ||
| 
						 | 
					471e2f758f | ||
| 
						 | 
					f3a4bd461d | ||
| 
						 | 
					b115fe9120 | ||
| 
						 | 
					f9429ecf5a | ||
| 
						 | 
					ebea43f299 | ||
| 
						 | 
					d693c9361b | ||
| 
						 | 
					3ca53067a7 | ||
| 
						 | 
					93e204850b | ||
| 
						 | 
					8595d48cec | ||
| 
						 | 
					6fcca2bfdb | ||
| 
						 | 
					295b419fbc | ||
| 
						 | 
					b9ac02e74f | ||
| 
						 | 
					66d2f96b16 | ||
| 
						 | 
					1a66ca2683 | ||
| 
						 | 
					b865be5e45 | ||
| 
						 | 
					edb8ee5980 | ||
| 
						 | 
					d30c0718da | ||
| 
						 | 
					90b6712453 | ||
| 
						 | 
					3140438b2f | ||
| 
						 | 
					bb00b9f545 | ||
| 
						 | 
					12b9e163bc | ||
| 
						 | 
					ee182fe867 | ||
| 
						 | 
					5c6573152d | ||
| 
						 | 
					1c05a843bb | ||
| 
						 | 
					ce5b17e210 | ||
| 
						 | 
					787d749340 | ||
| 
						 | 
					cd98fddc05 | ||
| 
						 | 
					043ca11732 | ||
| 
						 | 
					d596ced793 | ||
| 
						 | 
					4f08b4609b | ||
| 
						 | 
					2e4c185ee1 | ||
| 
						 | 
					64fac95a03 | ||
| 
						 | 
					786c9178f9 | ||
| 
						 | 
					7b380253ee | ||
| 
						 | 
					3914c0f7b9 | ||
| 
						 | 
					1a53b749da | ||
| 
						 | 
					f01046133e | ||
| 
						 | 
					e8aa450d06 | ||
| 
						 | 
					6acf854f3e | ||
| 
						 | 
					b565048985 | ||
| 
						 | 
					24eff9dbbd | ||
| 
						 | 
					24be3b43b1 | ||
| 
						 | 
					54d534a5d2 | ||
| 
						 | 
					5bad80e148 | ||
| 
						 | 
					89498f4205 | ||
| 
						 | 
					661a58ae29 | ||
| 
						 | 
					acc500fe9d | ||
| 
						 | 
					0a37d1b004 | ||
| 
						 | 
					8c09216691 | ||
| 
						 | 
					54cd7dd669 | ||
| 
						 | 
					2ff778db9a | ||
| 
						 | 
					5d1f0ab13e | ||
| 
						 | 
					b306a31235 | ||
| 
						 | 
					c8797ba135 | ||
| 
						 | 
					b9ec651a8b | ||
| 
						 | 
					475c666eb0 | ||
| 
						 | 
					8d419616a6 | ||
| 
						 | 
					d087719571 | ||
| 
						 | 
					df52a2d057 | ||
| 
						 | 
					4886196cfa | ||
| 
						 | 
					1f37fbb83e | ||
| 
						 | 
					387f2c7bd1 | ||
| 
						 | 
					0b949c8151 | ||
| 
						 | 
					fd248e072c | ||
| 
						 | 
					e58e50fc15 | ||
| 
						 | 
					5b869b61fc | ||
| 
						 | 
					0e2c793f92 | ||
| 
						 | 
					96a8f9df89 | ||
| 
						 | 
					4f569c67eb | ||
| 
						 | 
					e856b36306 | ||
| 
						 | 
					42e8623f39 | ||
| 
						 | 
					3b7036ae58 | ||
| 
						 | 
					4412b39d21 | ||
| 
						 | 
					0faf06f4e2 | ||
| 
						 | 
					0b300fb9ab | ||
| 
						 | 
					08b89eb285 | ||
| 
						 | 
					9cbcf4435a | ||
| 
						 | 
					e4252a58ee | ||
| 
						 | 
					08eb914e3c | ||
| 
						 | 
					000b7d4a85 | ||
| 
						 | 
					bb33002c2a | ||
| 
						 | 
					7bafa864d0 | ||
| 
						 | 
					396e0c6523 | ||
| 
						 | 
					1530e52108 | ||
| 
						 | 
					451f6aff8e | ||
| 
						 | 
					046acc75db | ||
| 
						 | 
					f40218aa07 | ||
| 
						 | 
					c5e831dadc | ||
| 
						 | 
					16786a8304 | ||
| 
						 | 
					fc728bcca7 | ||
| 
						 | 
					5516aa493d | ||
| 
						 | 
					54f2f98193 | ||
| 
						 | 
					137a41f67c | ||
| 
						 | 
					26365561dc | ||
| 
						 | 
					9dc0fc80b9 | ||
| 
						 | 
					722f7e14d7 | ||
| 
						 | 
					b2a8a9bd00 | ||
| 
						 | 
					12bd6754ab | ||
| 
						 | 
					74166f97f9 | ||
| 
						 | 
					b2bccd9501 | ||
| 
						 | 
					c567b75aa7 | ||
| 
						 | 
					2d77790b64 | ||
| 
						 | 
					37d466103d | ||
| 
						 | 
					d59aa0527a | ||
| 
						 | 
					9ddf10f82e | ||
| 
						 | 
					69d2835c73 | ||
| 
						 | 
					59f99a27d2 | ||
| 
						 | 
					372b52f64d | ||
| 
						 | 
					2586c9f385 | ||
| 
						 | 
					5c5d5d52ce | ||
| 
						 | 
					c2a7e990bd | ||
| 
						 | 
					3847442ca5 | ||
| 
						 | 
					6996111473 | ||
| 
						 | 
					3336f6a6f5 | ||
| 
						 | 
					be6a63cd03 | ||
| 
						 | 
					160846e98b | ||
| 
						 | 
					e63128625e | ||
| 
						 | 
					e58ad9237a | ||
| 
						 | 
					2ce64b5004 | ||
| 
						 | 
					9893379eef | ||
| 
						 | 
					9ae95d1eb5 | ||
| 
						 | 
					8a178b6f45 | ||
| 
						 | 
					f0b645c894 | ||
| 
						 | 
					2be5d83a6d | ||
| 
						 | 
					fafb7501c5 | ||
| 
						 | 
					4bac3063da | ||
| 
						 | 
					29d3015314 | ||
| 
						 | 
					4d2fcb2c66 | ||
| 
						 | 
					ca6b1a95dd | ||
| 
						 | 
					14cb9f097d | ||
| 
						 | 
					4d4726ccbe | ||
| 
						 | 
					3ce5893fe3 | ||
| 
						 | 
					993b01fa83 | ||
| 
						 | 
					5c4abb6d1d | ||
| 
						 | 
					06ec9593da | ||
| 
						 | 
					ace106051b | ||
| 
						 | 
					e2396f6667 | ||
| 
						 | 
					067b3c2f02 | ||
| 
						 | 
					73f1c261ab | ||
| 
						 | 
					2cbf0f744f | ||
| 
						 | 
					a6517f4d7e | ||
| 
						 | 
					e492a9b5d9 | ||
| 
						 | 
					5e7eb4ae3a | ||
| 
						 | 
					1a8a34b533 | ||
| 
						 | 
					c38b4c2ef3 | ||
| 
						 | 
					679699e6af | ||
| 
						 | 
					32a724ac8a | ||
| 
						 | 
					798a7b323e | ||
| 
						 | 
					f1eda9a270 | ||
| 
						 | 
					5eaee5054f | ||
| 
						 | 
					e140631760 | ||
| 
						 | 
					ae24b56c61 | ||
| 
						 | 
					cb7d58b9b0 | ||
| 
						 | 
					115b21f729 | ||
| 
						 | 
					9072459066 | ||
| 
						 | 
					c2f9737435 | ||
| 
						 | 
					e5bea1f49a | ||
| 
						 | 
					f7e9fbc473 | ||
| 
						 | 
					66a5730288 | ||
| 
						 | 
					1cefb1b842 | ||
| 
						 | 
					16ac51b551 | ||
| 
						 | 
					28ed2da95f | ||
| 
						 | 
					0c98308b60 | ||
| 
						 | 
					9128b9dd12 | ||
| 
						 | 
					301a23e5f4 | ||
| 
						 | 
					2b848ff1d8 | ||
| 
						 | 
					3d69931675 | ||
| 
						 | 
					3e504cf48f | ||
| 
						 | 
					d2cbfcd69a | ||
| 
						 | 
					ebfb6a4e34 | ||
| 
						 | 
					7403470bd7 | ||
| 
						 | 
					af9475d280 | ||
| 
						 | 
					8882a17b6f | ||
| 
						 | 
					32d6194ade | ||
| 
						 | 
					569089cb73 | ||
| 
						 | 
					f494e68016 | ||
| 
						 | 
					7561e26c0a | ||
| 
						 | 
					a95be13c95 | ||
| 
						 | 
					9ab50d4248 | ||
| 
						 | 
					f5be1d270a | ||
| 
						 | 
					524a2a422d | ||
| 
						 | 
					45fbc30cc5 | ||
| 
						 | 
					f8c1d7bde8 | ||
| 
						 | 
					9b8657fbb3 | ||
| 
						 | 
					f68f19aa3d | ||
| 
						 | 
					85758f8b91 | ||
| 
						 | 
					e981c42517 | ||
| 
						 | 
					7d6ac73153 | ||
| 
						 | 
					aad2dd6232 | ||
| 
						 | 
					cb24880115 | ||
| 
						 | 
					0e87c4fe34 | ||
| 
						 | 
					438eddbde1 | ||
| 
						 | 
					729895e2ed | ||
| 
						 | 
					3371529cce | ||
| 
						 | 
					1ac1aadbe3 | ||
| 
						 | 
					10127650fa | ||
| 
						 | 
					3533c896a3 | ||
| 
						 | 
					ee6f07b31a | ||
| 
						 | 
					5ac4818030 | ||
| 
						 | 
					c293b058c0 | ||
| 
						 | 
					cadeee4deb | ||
| 
						 | 
					f401c7cc4c | ||
| 
						 | 
					a3ea46701c | ||
| 
						 | 
					009178a3dc | ||
| 
						 | 
					38e8b70873 | ||
| 
						 | 
					31cda26096 | ||
| 
						 | 
					e16aac7a83 | ||
| 
						 | 
					2a52baf57e | ||
| 
						 | 
					28d3297d66 | ||
| 
						 | 
					4784d76d49 | ||
| 
						 | 
					8ef7efaf79 | ||
| 
						 | 
					736802af76 | ||
| 
						 | 
					8fee28b690 | ||
| 
						 | 
					c8682d5f81 | ||
| 
						 | 
					ef571559d6 | ||
| 
						 | 
					16c48fa41a | ||
| 
						 | 
					710c1fd58c | ||
| 
						 | 
					21f7276c4f | ||
| 
						 | 
					bf05f4be95 | ||
| 
						 | 
					be01124d1a | ||
| 
						 | 
					8a91b87f4c | ||
| 
						 | 
					020a4b3597 | ||
| 
						 | 
					f93c568758 | ||
| 
						 | 
					d9d4444f08 | ||
| 
						 | 
					400a82e2cc | ||
| 
						 | 
					35a0d14110 | ||
| 
						 | 
					a78dd20a2e | ||
| 
						 | 
					4af08a5c45 | ||
| 
						 | 
					2959d37b65 | ||
| 
						 | 
					3275136db7 | ||
| 
						 | 
					c4c974a01d | ||
| 
						 | 
					4fe05d09a2 | ||
| 
						 | 
					7b5dd6cd69 | ||
| 
						 | 
					28c779ef86 | ||
| 
						 | 
					8c1dac0583 | ||
| 
						 | 
					2db514f666 | ||
| 
						 | 
					0232dbd89d | ||
| 
						 | 
					70f43cb904 | ||
| 
						 | 
					05e06d0782 | ||
| 
						 | 
					89c39783b4 | ||
| 
						 | 
					3f3278b022 | ||
| 
						 | 
					bda9f482c1 | ||
| 
						 | 
					7292dbb8c6 | ||
| 
						 | 
					2bdf85db39 | ||
| 
						 | 
					546bff56fa | ||
| 
						 | 
					1896f2db0f | ||
| 
						 | 
					e47828f0a4 | ||
| 
						 | 
					c511f7d9e5 | ||
| 
						 | 
					a106e7e358 | ||
| 
						 | 
					254f2b894d | ||
| 
						 | 
					733251a0a2 | ||
| 
						 | 
					bcfa05db47 | ||
| 
						 | 
					5313f00edb | ||
| 
						 | 
					f83bfd1598 | ||
| 
						 | 
					fd27524479 | ||
| 
						 | 
					8155fea034 | ||
| 
						 | 
					c853054067 | ||
| 
						 | 
					a80ec39740 | ||
| 
						 | 
					bb33d00829 | ||
| 
						 | 
					be64a6700d | ||
| 
						 | 
					247bc549e8 | ||
| 
						 | 
					b26c5c9354 | ||
| 
						 | 
					5e5c79ef29 | ||
| 
						 | 
					4db81b8c41 | ||
| 
						 | 
					0b97f26b13 | ||
| 
						 | 
					f2a21617f7 | ||
| 
						 | 
					ed618b7144 | ||
| 
						 | 
					1ec71332bf | ||
| 
						 | 
					5696dffd02 | ||
| 
						 | 
					1e93f131d2 | ||
| 
						 | 
					022f88c30a | ||
| 
						 | 
					b661f3cbcc | ||
| 
						 | 
					9b97e4974a | ||
| 
						 | 
					e2b36b540f | ||
| 
						 | 
					983a09c5db | ||
| 
						 | 
					f605085021 | 
							
								
								
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							@@ -26,6 +26,7 @@ SECURITY.md linguist-documentation
 | 
			
		||||
# ---------------------------------------
 | 
			
		||||
# Exclude generated/config files
 | 
			
		||||
*.json linguist-generated
 | 
			
		||||
frontend/public/json/*.json linguist-generated=false
 | 
			
		||||
*.lock linguist-generated
 | 
			
		||||
*.yml linguist-generated
 | 
			
		||||
*.yaml linguist-generated
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										42
									
								
								.github/autolabeler-config.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								.github/autolabeler-config.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -4,6 +4,7 @@
 | 
			
		||||
      "fileStatus": "added",
 | 
			
		||||
      "includeGlobs": [
 | 
			
		||||
        "ct/**",
 | 
			
		||||
        "tools/**",
 | 
			
		||||
        "install/**",
 | 
			
		||||
        "misc/**",
 | 
			
		||||
        "turnkey/**",
 | 
			
		||||
@@ -17,16 +18,13 @@
 | 
			
		||||
      "fileStatus": "modified",
 | 
			
		||||
      "includeGlobs": [
 | 
			
		||||
        "ct/**",
 | 
			
		||||
        "tools/**",
 | 
			
		||||
        "install/**",
 | 
			
		||||
        "misc/**",
 | 
			
		||||
        "turnkey/**",
 | 
			
		||||
        "vm/**"
 | 
			
		||||
      ],
 | 
			
		||||
      "excludeGlobs": [
 | 
			
		||||
        "misc/build.func",
 | 
			
		||||
        "misc/install.func",
 | 
			
		||||
        "misc/api.func"
 | 
			
		||||
      ]
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "delete script": [
 | 
			
		||||
@@ -34,6 +32,7 @@
 | 
			
		||||
      "fileStatus": "removed",
 | 
			
		||||
      "includeGlobs": [
 | 
			
		||||
        "ct/**",
 | 
			
		||||
        "tools/**",
 | 
			
		||||
        "install/**",
 | 
			
		||||
        "misc/**",
 | 
			
		||||
        "turnkey/**",
 | 
			
		||||
@@ -46,11 +45,7 @@
 | 
			
		||||
    {
 | 
			
		||||
      "fileStatus": null,
 | 
			
		||||
      "includeGlobs": [
 | 
			
		||||
        "*.md",
 | 
			
		||||
        ".github/**",
 | 
			
		||||
        "misc/*.func",
 | 
			
		||||
        "misc/create_lxc.sh",
 | 
			
		||||
        "api/**"
 | 
			
		||||
        "*.md"
 | 
			
		||||
      ],
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
@@ -62,7 +57,9 @@
 | 
			
		||||
        "misc/*.func",
 | 
			
		||||
        "misc/create_lxc.sh"
 | 
			
		||||
      ],
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
      "excludeGlobs": [
 | 
			
		||||
        "misc/api.func"
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "website": [
 | 
			
		||||
@@ -71,7 +68,9 @@
 | 
			
		||||
      "includeGlobs": [
 | 
			
		||||
        "frontend/**"
 | 
			
		||||
      ],
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
      "excludeGlobs": [
 | 
			
		||||
        "frontend/public/json/**"
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "api": [
 | 
			
		||||
@@ -102,22 +101,29 @@
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "high risk": [
 | 
			
		||||
  "addon": [
 | 
			
		||||
    {
 | 
			
		||||
      "fileStatus": null,
 | 
			
		||||
      "includeGlobs": [
 | 
			
		||||
        "misc/build.func",
 | 
			
		||||
        "misc/install.func",
 | 
			
		||||
        "misc/create_lxc.sh"
 | 
			
		||||
        "tools/addon/**"
 | 
			
		||||
      ],
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "documentation": [
 | 
			
		||||
  "pve-tool": [
 | 
			
		||||
    {
 | 
			
		||||
      "fileStatus": null,
 | 
			
		||||
      "includeGlobs": [
 | 
			
		||||
        "*.md"
 | 
			
		||||
        "tools/pve/**"
 | 
			
		||||
      ],
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "vm": [
 | 
			
		||||
    {
 | 
			
		||||
      "fileStatus": null,
 | 
			
		||||
      "includeGlobs": [
 | 
			
		||||
        "vm/**"
 | 
			
		||||
      ],
 | 
			
		||||
      "excludeGlobs": []
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										120
									
								
								.github/changelog-pr-config.json
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										120
									
								
								.github/changelog-pr-config.json
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,112 +1,148 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "title": "🆕 New Scripts",
 | 
			
		||||
    "labels": ["new script"]
 | 
			
		||||
    "labels": [
 | 
			
		||||
      "new script"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "title": "🚀 Updated Scripts",
 | 
			
		||||
    "labels": ["update script"],
 | 
			
		||||
    "labels": [
 | 
			
		||||
      "update script"
 | 
			
		||||
    ],
 | 
			
		||||
    "subCategories": [
 | 
			
		||||
      {
 | 
			
		||||
        "title": "🐞 Bug Fixes",
 | 
			
		||||
        "labels": ["bugfix"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "bugfix"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title": "✨ New Features",
 | 
			
		||||
        "labels": ["feature"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "feature"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title": "💥 Breaking Changes",
 | 
			
		||||
        "labels": ["breaking change"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "breaking change"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title": "🔧 Refactor",
 | 
			
		||||
        "labels": ["refactor"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "refactor"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "title": "🧰 Maintenance",
 | 
			
		||||
    "labels": ["maintenance"],
 | 
			
		||||
    "labels": [
 | 
			
		||||
      "maintenance"
 | 
			
		||||
    ],
 | 
			
		||||
    "subCategories": [
 | 
			
		||||
      {
 | 
			
		||||
        "title": "🐞 Bug Fixes",
 | 
			
		||||
        "labels": ["bugfix"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "bugfix"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title": "✨ New Features",
 | 
			
		||||
        "labels": ["feature"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "feature"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title": "💥 Breaking Changes",
 | 
			
		||||
        "labels": ["breaking change"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "breaking change"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title": "📡 API",
 | 
			
		||||
        "labels": ["api"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "api"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title": "💾 Core",
 | 
			
		||||
        "labels": ["core"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "core"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title": "📂 Github",
 | 
			
		||||
        "labels": ["github"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "github"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title" :"📝 Documentation",
 | 
			
		||||
        "labels": ["documentation"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "title": "📝 Documentation",
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "maintenance"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title" :"🔧 Refactor",
 | 
			
		||||
        "labels": ["refactor"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "title": "🔧 Refactor",
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "refactor"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "title": "🌐 Website",
 | 
			
		||||
    "labels": ["website"],
 | 
			
		||||
    "labels": [
 | 
			
		||||
      "website"
 | 
			
		||||
    ],
 | 
			
		||||
    "subCategories": [
 | 
			
		||||
      {
 | 
			
		||||
        "title": "🐞 Bug Fixes",
 | 
			
		||||
        "labels": ["bugfix"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "bugfix"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title": "✨ New Features",
 | 
			
		||||
        "labels": ["feature"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "feature"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title": "💥 Breaking Changes",
 | 
			
		||||
        "labels": ["breaking change"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "breaking change"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        "title": "📝 Script Information",
 | 
			
		||||
        "labels": ["json"],
 | 
			
		||||
        "notes" : []
 | 
			
		||||
        "labels": [
 | 
			
		||||
          "json"
 | 
			
		||||
        ],
 | 
			
		||||
        "notes": []
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "title": "❔ Unlabelled",
 | 
			
		||||
    "labels": []
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "title": "💥 Breaking Changes",
 | 
			
		||||
    "labels": ["breaking change"]
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/auto-update-app-headers.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/auto-update-app-headers.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -11,7 +11,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  update-app-files:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								.github/workflows/autolabeler.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,6 +1,7 @@
 | 
			
		||||
name: Auto Label Pull Requests
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  workflow_dispatch:
 | 
			
		||||
  pull_request_target:
 | 
			
		||||
    branches: ["main"]
 | 
			
		||||
    types: [opened, synchronize, reopened, edited]
 | 
			
		||||
@@ -8,7 +9,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  autolabeler:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
    env:
 | 
			
		||||
@@ -33,7 +34,7 @@ jobs:
 | 
			
		||||
            const autolabelerConfig = JSON.parse(fileContent);
 | 
			
		||||
 | 
			
		||||
            const prNumber = context.payload.pull_request.number;
 | 
			
		||||
            const prBody = context.payload.pull_request.body.toLowerCase();
 | 
			
		||||
            const prBody = context.payload.pull_request.body || "";
 | 
			
		||||
 | 
			
		||||
            let labelsToAdd = new Set();
 | 
			
		||||
 | 
			
		||||
@@ -44,50 +45,66 @@ jobs:
 | 
			
		||||
            });
 | 
			
		||||
            const prFiles = prListFilesResponse.data;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
          
 | 
			
		||||
            // Apply labels based on file changes
 | 
			
		||||
            for (const [label, rules] of Object.entries(autolabelerConfig)) {
 | 
			
		||||
              const shouldAddLabel = prFiles.some((prFile) => {
 | 
			
		||||
                return rules.some((rule) => {
 | 
			
		||||
                  const isFileStatusMatch = rule.fileStatus ? rule.fileStatus === prFile.status : true;
 | 
			
		||||
                  const isIncludeGlobMatch = rule.includeGlobs.some((glob) => minimatch(prFile.filename, glob));
 | 
			
		||||
                  const isExcludeGlobMatch = rule.excludeGlobs.some((glob) => minimatch(prFile.filename, glob));
 | 
			
		||||
 | 
			
		||||
                  return isFileStatusMatch && isIncludeGlobMatch && !isExcludeGlobMatch;
 | 
			
		||||
                });
 | 
			
		||||
              });
 | 
			
		||||
 | 
			
		||||
              if (shouldAddLabel) {
 | 
			
		||||
                labelsToAdd.add(label);
 | 
			
		||||
                if (label === "update script") {
 | 
			
		||||
                  for (const prFile of prFiles) {
 | 
			
		||||
                    const filename = prFile.filename;
 | 
			
		||||
                    if (filename.startsWith("vm/")) labelsToAdd.add("vm");
 | 
			
		||||
                    if (filename.startsWith("tools/addon/")) labelsToAdd.add("addon");
 | 
			
		||||
                    if (filename.startsWith("tools/pve/")) labelsToAdd.add("pve-tool");
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
            //if two labels or more are added, return
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (labelsToAdd.size < 2) {
 | 
			
		||||
              const templateLabelMappings = {
 | 
			
		||||
                "🐞 **Bug fix**": "bugfix",
 | 
			
		||||
                "✨ **New feature**": "feature",
 | 
			
		||||
                "💥 **Breaking change**": "breaking change",
 | 
			
		||||
                "🆕 **New script**": "new script",
 | 
			
		||||
                "🌍 **Website update**": "website", // handled special
 | 
			
		||||
                "🔧 **Refactoring / Code Cleanup**": "refactor",
 | 
			
		||||
                "📝 **Documentation update**": "documentation" // mapped to maintenance
 | 
			
		||||
              };
 | 
			
		||||
 | 
			
		||||
              for (const [checkbox, label] of Object.entries(templateLabelMappings)) {
 | 
			
		||||
                const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
 | 
			
		||||
                const regex = new RegExp(`- \\[(x|X)\\]\\s*.*${escapedCheckbox}`, "i");
 | 
			
		||||
                const match = prBody.match(regex);              
 | 
			
		||||
                if (match) {
 | 
			
		||||
                  console.log(`Match: ${match}`);
 | 
			
		||||
                const escapedCheckbox = checkbox.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
 | 
			
		||||
                const regex = new RegExp(`- \\[(x|X)\\]\\s*${escapedCheckbox}`, "i");
 | 
			
		||||
 | 
			
		||||
                if (regex.test(prBody)) {
 | 
			
		||||
                  if (label === "website") {
 | 
			
		||||
                    const hasJson = prFiles.some((f) => f.filename.startsWith("frontend/public/json/"));
 | 
			
		||||
                    const hasUpdateScript = labelsToAdd.has("update script");
 | 
			
		||||
                    const hasContentLabel = ["bugfix", "feature", "refactor"].some((l) => labelsToAdd.has(l));
 | 
			
		||||
 | 
			
		||||
                    if (!(hasUpdateScript && hasContentLabel)) {
 | 
			
		||||
                      labelsToAdd.add(hasJson ? "json" : "website");
 | 
			
		||||
                    }
 | 
			
		||||
                  } else if (label === "documentation") {
 | 
			
		||||
                    labelsToAdd.add("maintenance");
 | 
			
		||||
                  } else {
 | 
			
		||||
                    labelsToAdd.add(label);
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
            console.log(`Labels to add: ${Array.from(labelsToAdd).join(", ")}`);
 | 
			
		||||
            }
 | 
			
		||||
            if (labelsToAdd.size === 0) {
 | 
			
		||||
              labelsToAdd.add("needs triage");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (labelsToAdd.size > 0) {
 | 
			
		||||
              console.log(`Adding labels ${Array.from(labelsToAdd).join(", ")} to PR ${prNumber}`);
 | 
			
		||||
              await github.rest.issues.addLabels({
 | 
			
		||||
                owner: context.repo.owner,
 | 
			
		||||
                repo: context.repo.repo,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								.github/workflows/changelog-pr.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/changelog-pr.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -8,7 +8,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  update-changelog-pull-request:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    env:
 | 
			
		||||
      CONFIG_PATH: .github/changelog-pr-config.json
 | 
			
		||||
      BRANCH_NAME: github-action-update-changelog
 | 
			
		||||
@@ -80,7 +80,7 @@ jobs:
 | 
			
		||||
                    { title: "💥 Breaking Changes", labels: ["breaking change"], notes: [] },
 | 
			
		||||
                    { title: "📡 API", labels: ["api"], notes: [] },
 | 
			
		||||
                    { title: "Github", labels: ["github"], notes: [] },
 | 
			
		||||
                    { title: "📝 Documentation", labels: ["documentation"], notes: [] },
 | 
			
		||||
                    { title: "📝 Documentation", labels: ["maintenance"], notes: [] },
 | 
			
		||||
                    { title: "🔧 Refactor", labels: ["refactor"], notes: [] }
 | 
			
		||||
                  ] :
 | 
			
		||||
                  obj.labels.includes("website") ? [
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/close-discussion.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/close-discussion.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -12,7 +12,7 @@ permissions:
 | 
			
		||||
jobs:
 | 
			
		||||
  close-discussion:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Repository
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/crawl-versions.yaml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/crawl-versions.yaml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -13,7 +13,7 @@ permissions:
 | 
			
		||||
jobs:
 | 
			
		||||
  crawl-versions:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout Repository
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/delete-json-branch.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/delete-json-branch.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -10,7 +10,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  delete_branch:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout the code
 | 
			
		||||
        uses: actions/checkout@v3
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										83
									
								
								.github/workflows/frontend-cicd.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										83
									
								
								.github/workflows/frontend-cicd.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -24,12 +24,87 @@ concurrency:
 | 
			
		||||
  cancel-in-progress: false
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  build:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
  test-json-files:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    defaults:
 | 
			
		||||
      run:
 | 
			
		||||
        working-directory: frontend  # Set default working directory for all run steps
 | 
			
		||||
        working-directory: frontend
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout repository
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 | 
			
		||||
      - name: Setup Python
 | 
			
		||||
        uses: actions/setup-python@v4
 | 
			
		||||
        with:
 | 
			
		||||
          python-version: "3.x"
 | 
			
		||||
 | 
			
		||||
      - name: Test JSON files
 | 
			
		||||
        run: |
 | 
			
		||||
          python3 << 'EOF'
 | 
			
		||||
          import json
 | 
			
		||||
          import glob
 | 
			
		||||
          import os
 | 
			
		||||
          import sys
 | 
			
		||||
 | 
			
		||||
          def test_json_files():
 | 
			
		||||
              # Change to the correct directory
 | 
			
		||||
              json_dir = "public/json"
 | 
			
		||||
              if not os.path.exists(json_dir):
 | 
			
		||||
                  print(f"❌ Directory not found: {json_dir}")
 | 
			
		||||
                  return False
 | 
			
		||||
              
 | 
			
		||||
              # Find all JSON files
 | 
			
		||||
              pattern = os.path.join(json_dir, "*.json")
 | 
			
		||||
              json_files = glob.glob(pattern)
 | 
			
		||||
              
 | 
			
		||||
              if not json_files:
 | 
			
		||||
                  print(f"⚠️  No JSON files found in {json_dir}")
 | 
			
		||||
                  return True
 | 
			
		||||
              
 | 
			
		||||
              print(f"Testing {len(json_files)} JSON files for valid syntax...")
 | 
			
		||||
              
 | 
			
		||||
              invalid_files = []
 | 
			
		||||
              
 | 
			
		||||
              for file_path in json_files:
 | 
			
		||||
                  try:
 | 
			
		||||
                      with open(file_path, 'r', encoding='utf-8') as f:
 | 
			
		||||
                          json.load(f)
 | 
			
		||||
                      print(f"✅ Valid JSON: {file_path}")
 | 
			
		||||
                  except json.JSONDecodeError as e:
 | 
			
		||||
                      print(f"❌ Invalid JSON syntax in: {file_path}")
 | 
			
		||||
                      print(f"   Error: {e}")
 | 
			
		||||
                      invalid_files.append(file_path)
 | 
			
		||||
                  except Exception as e:
 | 
			
		||||
                      print(f"⚠️  Error reading: {file_path}")
 | 
			
		||||
                      print(f"   Error: {e}")
 | 
			
		||||
                      invalid_files.append(file_path)
 | 
			
		||||
              
 | 
			
		||||
              print("\n=== JSON Validation Summary ===")
 | 
			
		||||
              print(f"Total files tested: {len(json_files)}")
 | 
			
		||||
              print(f"Valid files: {len(json_files) - len(invalid_files)}")
 | 
			
		||||
              print(f"Invalid files: {len(invalid_files)}")
 | 
			
		||||
              
 | 
			
		||||
              if invalid_files:
 | 
			
		||||
                  print("\n❌ Found invalid JSON file(s):")
 | 
			
		||||
                  for file_path in invalid_files:
 | 
			
		||||
                      print(f"  - {file_path}")
 | 
			
		||||
                  return False
 | 
			
		||||
              else:
 | 
			
		||||
                  print("\n✅ All JSON files have valid syntax!")
 | 
			
		||||
                  return True
 | 
			
		||||
 | 
			
		||||
          if __name__ == "__main__":
 | 
			
		||||
              success = test_json_files()
 | 
			
		||||
              sys.exit(0 if success else 1)
 | 
			
		||||
          EOF
 | 
			
		||||
  
 | 
			
		||||
  build:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    needs: test-json-files
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    defaults:
 | 
			
		||||
      run:
 | 
			
		||||
        working-directory: frontend
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@v4
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/github-release.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/github-release.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -8,7 +8,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  create-daily-release:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
    steps:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/update-json-date.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/update-json-date.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -11,7 +11,7 @@ on:
 | 
			
		||||
jobs:
 | 
			
		||||
  update-app-files:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    permissions:
 | 
			
		||||
      contents: write
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/workflows/validate-filenames.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/validate-filenames.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -11,7 +11,7 @@ jobs:
 | 
			
		||||
  check-files:
 | 
			
		||||
    if: github.repository == 'community-scripts/ProxmoxVE'
 | 
			
		||||
    name: Check changed files
 | 
			
		||||
    runs-on: runner-cluster-htl-set
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    permissions:
 | 
			
		||||
      pull-requests: write
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										481
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										481
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,12 +10,489 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
 | 
			
		||||
## 2025-07-25
 | 
			
		||||
 | 
			
		||||
## 2025-07-24
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Alpine TeamSpeak Server [@tremor021](https://github.com/tremor021) ([#6201](https://github.com/community-scripts/ProxmoxVE/pull/6201))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Immich: Pin Version to v1.135.3 [@MickLesk](https://github.com/MickLesk) ([#6212](https://github.com/community-scripts/ProxmoxVE/pull/6212))
 | 
			
		||||
    - Habitica: force npm to 10 [@MickLesk](https://github.com/MickLesk) ([#6192](https://github.com/community-scripts/ProxmoxVE/pull/6192))
 | 
			
		||||
    - sabnzbd: add uv setup in update [@MickLesk](https://github.com/MickLesk) ([#6191](https://github.com/community-scripts/ProxmoxVE/pull/6191))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - SnipeIT - Update dependencies  [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#6217](https://github.com/community-scripts/ProxmoxVE/pull/6217))
 | 
			
		||||
    - Refactor: VictoriaMetrics [@tremor021](https://github.com/tremor021) ([#6210](https://github.com/community-scripts/ProxmoxVE/pull/6210))
 | 
			
		||||
    - Headscale: Add headscale-admin UI as option [@tremor021](https://github.com/tremor021) ([#6205](https://github.com/community-scripts/ProxmoxVE/pull/6205))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Gokapi [@tremor021](https://github.com/tremor021) ([#6197](https://github.com/community-scripts/ProxmoxVE/pull/6197))
 | 
			
		||||
    - Refactor: duplicati [@tremor021](https://github.com/tremor021) ([#6202](https://github.com/community-scripts/ProxmoxVE/pull/6202))
 | 
			
		||||
    - Refactor: go2rtc [@tremor021](https://github.com/tremor021) ([#6198](https://github.com/community-scripts/ProxmoxVE/pull/6198))
 | 
			
		||||
    - Refactor: Headscale [@tremor021](https://github.com/tremor021) ([#6180](https://github.com/community-scripts/ProxmoxVE/pull/6180))
 | 
			
		||||
 | 
			
		||||
## 2025-07-23
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - documenso: remove customerId by creating initial user [@MickLesk](https://github.com/MickLesk) ([#6171](https://github.com/community-scripts/ProxmoxVE/pull/6171))
 | 
			
		||||
 | 
			
		||||
## 2025-07-22
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Salt ([#6116](https://github.com/community-scripts/ProxmoxVE/pull/6116))
 | 
			
		||||
- LinkStack ([#6137](https://github.com/community-scripts/ProxmoxVE/pull/6137))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - tools.func - fix typo for target_file [@tjcomserv](https://github.com/tjcomserv) ([#6156](https://github.com/community-scripts/ProxmoxVE/pull/6156))
 | 
			
		||||
    - fix(nginxproxymanager.sh): Set the version number before build. [@JMarcosHP](https://github.com/JMarcosHP) ([#6139](https://github.com/community-scripts/ProxmoxVE/pull/6139))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Fixed the previous fix of the anti-nag hook and propagated fixes everywhere [@imcrazytwkr](https://github.com/imcrazytwkr) ([#6162](https://github.com/community-scripts/ProxmoxVE/pull/6162))
 | 
			
		||||
    - [core]: Improved LXC Container Startup Handling [@MickLesk](https://github.com/MickLesk) ([#6142](https://github.com/community-scripts/ProxmoxVE/pull/6142))
 | 
			
		||||
    - wallos: add cron in installer for yearly cost [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6133](https://github.com/community-scripts/ProxmoxVE/pull/6133))
 | 
			
		||||
 | 
			
		||||
  - #### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
    - gitea-mirror: add: migration to 3.0 [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6138](https://github.com/community-scripts/ProxmoxVE/pull/6138))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - [core]: tools.func: increase setup_php function [@MickLesk](https://github.com/MickLesk) ([#6141](https://github.com/community-scripts/ProxmoxVE/pull/6141))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - Bump form-data from 4.0.3 to 4.0.4 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#6150](https://github.com/community-scripts/ProxmoxVE/pull/6150))
 | 
			
		||||
 | 
			
		||||
## 2025-07-21
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Teamspeak-Server ([#6121](https://github.com/community-scripts/ProxmoxVE/pull/6121))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - pve-post-installer: remove Nag-File if already exist [@luckman212](https://github.com/luckman212) ([#6098](https://github.com/community-scripts/ProxmoxVE/pull/6098))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - firefly: fix permissions at update [@MickLesk](https://github.com/MickLesk) ([#6119](https://github.com/community-scripts/ProxmoxVE/pull/6119))
 | 
			
		||||
    - nginxproxymanager: remove injected footer link (tteck) [@MickLesk](https://github.com/MickLesk) ([#6117](https://github.com/community-scripts/ProxmoxVE/pull/6117))
 | 
			
		||||
 | 
			
		||||
## 2025-07-20
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Fix OpenWebUI install/update scripts [@karamanliev](https://github.com/karamanliev) ([#6093](https://github.com/community-scripts/ProxmoxVE/pull/6093))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - karakeep: add DB_WAL_MODE; suppress test output [@vhsdream](https://github.com/vhsdream) ([#6101](https://github.com/community-scripts/ProxmoxVE/pull/6101))
 | 
			
		||||
 | 
			
		||||
## 2025-07-19
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Fixed nag script on ProxMox 8.4.5 [@imcrazytwkr](https://github.com/imcrazytwkr) ([#6084](https://github.com/community-scripts/ProxmoxVE/pull/6084))
 | 
			
		||||
 | 
			
		||||
## 2025-07-18
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - AdventureLog: add backup folder before update [@MickLesk](https://github.com/MickLesk) ([#6066](https://github.com/community-scripts/ProxmoxVE/pull/6066))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Bar-Assistant: add Cocktail database [@MickLesk](https://github.com/MickLesk) ([#6068](https://github.com/community-scripts/ProxmoxVE/pull/6068))
 | 
			
		||||
    - ErsatzTV: use project prebuild ffmpeg version [@MickLesk](https://github.com/MickLesk) ([#6067](https://github.com/community-scripts/ProxmoxVE/pull/6067))
 | 
			
		||||
 | 
			
		||||
## 2025-07-17
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Cloudreve ([#6044](https://github.com/community-scripts/ProxmoxVE/pull/6044))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - config-file: set GATE [@ahmaddxb](https://github.com/ahmaddxb) ([#6042](https://github.com/community-scripts/ProxmoxVE/pull/6042))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - add "setup_composer" in update_script (baikal, bar-assistant, firefly) [@MickLesk](https://github.com/MickLesk) ([#6047](https://github.com/community-scripts/ProxmoxVE/pull/6047))
 | 
			
		||||
    - PLANKA: Fix update procedure [@tremor021](https://github.com/tremor021) ([#6031](https://github.com/community-scripts/ProxmoxVE/pull/6031))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Reactive Resume: switch source to community-maintained fork [@vhsdream](https://github.com/vhsdream) ([#6051](https://github.com/community-scripts/ProxmoxVE/pull/6051))
 | 
			
		||||
 | 
			
		||||
## 2025-07-16
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - homepage.sh: resolves #6028 [@vhsdream](https://github.com/vhsdream) ([#6032](https://github.com/community-scripts/ProxmoxVE/pull/6032))
 | 
			
		||||
    - karakeep-install: Disable Playwright browser download, remove MCP build [@vhsdream](https://github.com/vhsdream) ([#5833](https://github.com/community-scripts/ProxmoxVE/pull/5833))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - chore: reorganize nginxproxymanager update script [@Kirbo](https://github.com/Kirbo) ([#5971](https://github.com/community-scripts/ProxmoxVE/pull/5971))
 | 
			
		||||
 | 
			
		||||
## 2025-07-15
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - checkmk: change password crawling based on there docs [@MickLesk](https://github.com/MickLesk) ([#6001](https://github.com/community-scripts/ProxmoxVE/pull/6001))
 | 
			
		||||
    - Whiptail: Improve Dialogue to work with ESC [@MickLesk](https://github.com/MickLesk) ([#6003](https://github.com/community-scripts/ProxmoxVE/pull/6003))
 | 
			
		||||
    - 2FAuth: Improve Update-Check [@MickLesk](https://github.com/MickLesk) ([#5998](https://github.com/community-scripts/ProxmoxVE/pull/5998))
 | 
			
		||||
 | 
			
		||||
  - #### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
    - EMQX: Purge Old Install (remove acl.conf too!) [@MickLesk](https://github.com/MickLesk) ([#5999](https://github.com/community-scripts/ProxmoxVE/pull/5999))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: PeaNUT [@MickLesk](https://github.com/MickLesk) ([#6002](https://github.com/community-scripts/ProxmoxVE/pull/6002))
 | 
			
		||||
 | 
			
		||||
## 2025-07-14
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Bar Assistant ([#5977](https://github.com/community-scripts/ProxmoxVE/pull/5977))
 | 
			
		||||
- Mealie ([#5968](https://github.com/community-scripts/ProxmoxVE/pull/5968))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Config-File: Some Addons, Bugfixes...  [@MickLesk](https://github.com/MickLesk) ([#5978](https://github.com/community-scripts/ProxmoxVE/pull/5978))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - add --break-system-packages certbot-dns-cloudflare to the nginxproxym… [@tug-benson](https://github.com/tug-benson) ([#5957](https://github.com/community-scripts/ProxmoxVE/pull/5957))
 | 
			
		||||
    - Dashy: remove unbound variable (RELEASE) [@MickLesk](https://github.com/MickLesk) ([#5974](https://github.com/community-scripts/ProxmoxVE/pull/5974))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Update nic-offloading-fix: add Intel as search Text  [@calvin-li-developer](https://github.com/calvin-li-developer) ([#5954](https://github.com/community-scripts/ProxmoxVE/pull/5954))
 | 
			
		||||
 | 
			
		||||
## 2025-07-12
 | 
			
		||||
 | 
			
		||||
## 2025-07-11
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - immich: hotfix #5921 [@vhsdream](https://github.com/vhsdream) ([#5938](https://github.com/community-scripts/ProxmoxVE/pull/5938))
 | 
			
		||||
    - bookstack: add setup_composer in update [@MickLesk](https://github.com/MickLesk) ([#5935](https://github.com/community-scripts/ProxmoxVE/pull/5935))
 | 
			
		||||
    - Quickfix: Immich: revert install sequence [@vhsdream](https://github.com/vhsdream) ([#5932](https://github.com/community-scripts/ProxmoxVE/pull/5932))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Refactor & Function Bump: Docker [@MickLesk](https://github.com/MickLesk) ([#5889](https://github.com/community-scripts/ProxmoxVE/pull/5889))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Immich: handle custom library dependency updates; other fixes [@vhsdream](https://github.com/vhsdream) ([#5896](https://github.com/community-scripts/ProxmoxVE/pull/5896))
 | 
			
		||||
 | 
			
		||||
## 2025-07-10
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Refactor: Habitica [@MickLesk](https://github.com/MickLesk) ([#5911](https://github.com/community-scripts/ProxmoxVE/pull/5911))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - core: fix breaking re-download of lxc containers  [@MickLesk](https://github.com/MickLesk) ([#5906](https://github.com/community-scripts/ProxmoxVE/pull/5906))
 | 
			
		||||
    - PLANKA: Fix paths to application directory [@tremor021](https://github.com/tremor021) ([#5900](https://github.com/community-scripts/ProxmoxVE/pull/5900))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: EMQX + Update-Function + Improved NodeJS Crawling [@MickLesk](https://github.com/MickLesk) ([#5907](https://github.com/community-scripts/ProxmoxVE/pull/5907))
 | 
			
		||||
 | 
			
		||||
## 2025-07-09
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Omada Update: add missing exit  [@MickLesk](https://github.com/MickLesk) ([#5894](https://github.com/community-scripts/ProxmoxVE/pull/5894))
 | 
			
		||||
    - FreshRSS: fix needed php modules [@MickLesk](https://github.com/MickLesk) ([#5886](https://github.com/community-scripts/ProxmoxVE/pull/5886))
 | 
			
		||||
    - core: Fix VAAPI passthrough for unprivileged LXC containers via devX  [@MickLesk](https://github.com/MickLesk) ([#5875](https://github.com/community-scripts/ProxmoxVE/pull/5875))
 | 
			
		||||
    - tools.func: fix an bug while php libapache2-mod breaks [@MickLesk](https://github.com/MickLesk) ([#5857](https://github.com/community-scripts/ProxmoxVE/pull/5857))
 | 
			
		||||
    - BabyBuddy: fix path issues for update [@MickLesk](https://github.com/MickLesk) ([#5856](https://github.com/community-scripts/ProxmoxVE/pull/5856))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - tools.func: strip leading folders for prebuild assets [@MickLesk](https://github.com/MickLesk) ([#5865](https://github.com/community-scripts/ProxmoxVE/pull/5865))
 | 
			
		||||
 | 
			
		||||
  - #### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
    - Refactor: Stirling-PDF [@MickLesk](https://github.com/MickLesk) ([#5872](https://github.com/community-scripts/ProxmoxVE/pull/5872))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: EMQX [@tremor021](https://github.com/tremor021) ([#5840](https://github.com/community-scripts/ProxmoxVE/pull/5840))
 | 
			
		||||
    - Refactor: Excalidraw [@tremor021](https://github.com/tremor021) ([#5841](https://github.com/community-scripts/ProxmoxVE/pull/5841))
 | 
			
		||||
    - Refactor: Firefly [@tremor021](https://github.com/tremor021) ([#5844](https://github.com/community-scripts/ProxmoxVE/pull/5844))
 | 
			
		||||
    - Refactor: gatus [@tremor021](https://github.com/tremor021) ([#5849](https://github.com/community-scripts/ProxmoxVE/pull/5849))
 | 
			
		||||
    - Refactor: FreshRSS [@tremor021](https://github.com/tremor021) ([#5847](https://github.com/community-scripts/ProxmoxVE/pull/5847))
 | 
			
		||||
    - Refactor: Fluid-Calendar [@tremor021](https://github.com/tremor021) ([#5846](https://github.com/community-scripts/ProxmoxVE/pull/5846))
 | 
			
		||||
    - Refactor: Commafeed [@tremor021](https://github.com/tremor021) ([#5802](https://github.com/community-scripts/ProxmoxVE/pull/5802))
 | 
			
		||||
    - Refactor: FlareSolverr [@tremor021](https://github.com/tremor021) ([#5845](https://github.com/community-scripts/ProxmoxVE/pull/5845))
 | 
			
		||||
    - Refactor: Glance [@tremor021](https://github.com/tremor021) ([#5874](https://github.com/community-scripts/ProxmoxVE/pull/5874))
 | 
			
		||||
    - Refactor: Gitea [@tremor021](https://github.com/tremor021) ([#5876](https://github.com/community-scripts/ProxmoxVE/pull/5876))
 | 
			
		||||
    - Refactor: Ghost (use now MySQL)  [@MickLesk](https://github.com/MickLesk) ([#5871](https://github.com/community-scripts/ProxmoxVE/pull/5871))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
  - #### 📂 Github
 | 
			
		||||
 | 
			
		||||
    - Github: AutoLabler | ChangeLog (Refactor) [@MickLesk](https://github.com/MickLesk) ([#5868](https://github.com/community-scripts/ProxmoxVE/pull/5868))
 | 
			
		||||
 | 
			
		||||
## 2025-07-08
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Refactor: Emby [@tremor021](https://github.com/tremor021) ([#5839](https://github.com/community-scripts/ProxmoxVE/pull/5839))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Ollama: fix update script [@lucacome](https://github.com/lucacome) ([#5819](https://github.com/community-scripts/ProxmoxVE/pull/5819))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - tools.func: add ffmpeg + minor improvement [@MickLesk](https://github.com/MickLesk) ([#5834](https://github.com/community-scripts/ProxmoxVE/pull/5834))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: ErsatzTV [@MickLesk](https://github.com/MickLesk) ([#5835](https://github.com/community-scripts/ProxmoxVE/pull/5835))
 | 
			
		||||
 | 
			
		||||
## 2025-07-07
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Fix/stirling pdf script [@JcMinarro](https://github.com/JcMinarro) ([#5803](https://github.com/community-scripts/ProxmoxVE/pull/5803))
 | 
			
		||||
    - gitea-mirror: update repo-url [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5794](https://github.com/community-scripts/ProxmoxVE/pull/5794))
 | 
			
		||||
    - Fix unbound var in pulse.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5807](https://github.com/community-scripts/ProxmoxVE/pull/5807))
 | 
			
		||||
    - Bookstack: Fix PHP Issue & Bump to PHP 8.3 [@MickLesk](https://github.com/MickLesk) ([#5779](https://github.com/community-scripts/ProxmoxVE/pull/5779))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Refactor: Threadfin (+ updatable) [@MickLesk](https://github.com/MickLesk) ([#5783](https://github.com/community-scripts/ProxmoxVE/pull/5783))
 | 
			
		||||
    - tools.func: better handling when unpacking tarfiles in prebuild mode [@MickLesk](https://github.com/MickLesk) ([#5781](https://github.com/community-scripts/ProxmoxVE/pull/5781))
 | 
			
		||||
    - tools.func: add AVX check for MongoDB [@MickLesk](https://github.com/MickLesk) ([#5780](https://github.com/community-scripts/ProxmoxVE/pull/5780))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Docmost [@tremor021](https://github.com/tremor021) ([#5806](https://github.com/community-scripts/ProxmoxVE/pull/5806))
 | 
			
		||||
    - Refactor: Baby Buddy [@tremor021](https://github.com/tremor021) ([#5769](https://github.com/community-scripts/ProxmoxVE/pull/5769))
 | 
			
		||||
    - Refactor: Changed the way we install BunkerWeb by leveraging the brand new install-bunkerweb.sh [@TheophileDiot](https://github.com/TheophileDiot) ([#5707](https://github.com/community-scripts/ProxmoxVE/pull/5707))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - PBS: add hint for advanced installs [@MickLesk](https://github.com/MickLesk) ([#5788](https://github.com/community-scripts/ProxmoxVE/pull/5788))
 | 
			
		||||
    - EMQX: Add warning to website [@tremor021](https://github.com/tremor021) ([#5770](https://github.com/community-scripts/ProxmoxVE/pull/5770))
 | 
			
		||||
 | 
			
		||||
## 2025-07-06
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Refactor: Barcodebuddy [@tremor021](https://github.com/tremor021) ([#5735](https://github.com/community-scripts/ProxmoxVE/pull/5735))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Fix update script for Mafl: ensure directory is removed recursively [@jonalbr](https://github.com/jonalbr) ([#5759](https://github.com/community-scripts/ProxmoxVE/pull/5759))
 | 
			
		||||
    - BookStack: Typo fix [@tremor021](https://github.com/tremor021) ([#5746](https://github.com/community-scripts/ProxmoxVE/pull/5746))
 | 
			
		||||
    - Resolves incorrect URL at end of Pocket ID script [@johnsturgeon](https://github.com/johnsturgeon) ([#5743](https://github.com/community-scripts/ProxmoxVE/pull/5743))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - [Feature] Add option to expose Docker via TCP port (alpine docker) [@oformaniuk](https://github.com/oformaniuk) ([#5716](https://github.com/community-scripts/ProxmoxVE/pull/5716))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Bitmagnet [@tremor021](https://github.com/tremor021) ([#5733](https://github.com/community-scripts/ProxmoxVE/pull/5733))
 | 
			
		||||
    - Refactor: Baikal [@tremor021](https://github.com/tremor021) ([#5736](https://github.com/community-scripts/ProxmoxVE/pull/5736))
 | 
			
		||||
 | 
			
		||||
## 2025-07-05
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: BookStack [@tremor021](https://github.com/tremor021) ([#5732](https://github.com/community-scripts/ProxmoxVE/pull/5732))
 | 
			
		||||
    - Refactor: Authelia [@tremor021](https://github.com/tremor021) ([#5722](https://github.com/community-scripts/ProxmoxVE/pull/5722))
 | 
			
		||||
    - Refactor: Dashy [@tremor021](https://github.com/tremor021) ([#5723](https://github.com/community-scripts/ProxmoxVE/pull/5723))
 | 
			
		||||
    - Refactor: CryptPad [@tremor021](https://github.com/tremor021) ([#5724](https://github.com/community-scripts/ProxmoxVE/pull/5724))
 | 
			
		||||
    - Refactor: ByteStash [@tremor021](https://github.com/tremor021) ([#5725](https://github.com/community-scripts/ProxmoxVE/pull/5725))
 | 
			
		||||
    - Refactor: AgentDVR [@tremor021](https://github.com/tremor021) ([#5726](https://github.com/community-scripts/ProxmoxVE/pull/5726))
 | 
			
		||||
 | 
			
		||||
## 2025-07-04
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Refactor: Mafl [@tremor021](https://github.com/tremor021) ([#5702](https://github.com/community-scripts/ProxmoxVE/pull/5702))
 | 
			
		||||
    - Outline: Fix sed command for v0.85.0 [@tremor021](https://github.com/tremor021) ([#5688](https://github.com/community-scripts/ProxmoxVE/pull/5688))
 | 
			
		||||
    - Komodo: Update Script to use FerretDB / remove psql & sqlite options [@MickLesk](https://github.com/MickLesk) ([#5690](https://github.com/community-scripts/ProxmoxVE/pull/5690))
 | 
			
		||||
    - ESPHome: Fix Linking issue to prevent version mismatch [@MickLesk](https://github.com/MickLesk) ([#5685](https://github.com/community-scripts/ProxmoxVE/pull/5685))
 | 
			
		||||
    - Cloudflare-DDNS: fix unvisible read command at install [@MickLesk](https://github.com/MickLesk) ([#5682](https://github.com/community-scripts/ProxmoxVE/pull/5682))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Core layer refactor: centralized error traps and msg_* consistency [@MickLesk](https://github.com/MickLesk) ([#5705](https://github.com/community-scripts/ProxmoxVE/pull/5705))
 | 
			
		||||
 | 
			
		||||
  - #### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
    - Update Iptag [@DesertGamer](https://github.com/DesertGamer) ([#5677](https://github.com/community-scripts/ProxmoxVE/pull/5677))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - MySQL phpMyAdmin Access Information [@austinpilz](https://github.com/austinpilz) ([#5679](https://github.com/community-scripts/ProxmoxVE/pull/5679))
 | 
			
		||||
 | 
			
		||||
## 2025-07-03
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Zipline: Fix typo in uploads directory path [@tremor021](https://github.com/tremor021) ([#5662](https://github.com/community-scripts/ProxmoxVE/pull/5662))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Improve asset matching in fetch_and_deploy_gh_release for prebuild and singlefile modes [@MickLesk](https://github.com/MickLesk) ([#5669](https://github.com/community-scripts/ProxmoxVE/pull/5669))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Trilium [@MickLesk](https://github.com/MickLesk) ([#5665](https://github.com/community-scripts/ProxmoxVE/pull/5665))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Bump Icons to selfhst repo | switch svg to webp [@MickLesk](https://github.com/MickLesk) ([#5659](https://github.com/community-scripts/ProxmoxVE/pull/5659))
 | 
			
		||||
 | 
			
		||||
## 2025-07-02
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Changedetection: Base64 encode the launch options [@tremor021](https://github.com/tremor021) ([#5640](https://github.com/community-scripts/ProxmoxVE/pull/5640))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor & Bump to Node24: Zigbee2MQTT [@MickLesk](https://github.com/MickLesk) ([#5638](https://github.com/community-scripts/ProxmoxVE/pull/5638))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 💥 Breaking Changes
 | 
			
		||||
 | 
			
		||||
    - Remove: Pingvin-Share [@MickLesk](https://github.com/MickLesk) ([#5635](https://github.com/community-scripts/ProxmoxVE/pull/5635))
 | 
			
		||||
    - Remove: Readarr [@MickLesk](https://github.com/MickLesk) ([#5636](https://github.com/community-scripts/ProxmoxVE/pull/5636))
 | 
			
		||||
 | 
			
		||||
## 2025-07-01
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Librespeed Rust ([#5614](https://github.com/community-scripts/ProxmoxVE/pull/5614))
 | 
			
		||||
- ITSM-NG ([#5615](https://github.com/community-scripts/ProxmoxVE/pull/5615))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Open WebUI: Fix Ollama update procedure [@tremor021](https://github.com/tremor021) ([#5601](https://github.com/community-scripts/ProxmoxVE/pull/5601))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - [tools]: increase fetch_and_deploy with dns pre check [@MickLesk](https://github.com/MickLesk) ([#5608](https://github.com/community-scripts/ProxmoxVE/pull/5608))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Jellyfin GPU Passthrough NVIDIA Note [@austinpilz](https://github.com/austinpilz) ([#5625](https://github.com/community-scripts/ProxmoxVE/pull/5625))
 | 
			
		||||
 | 
			
		||||
## 2025-06-30
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Alpine Syncthing [@MickLesk](https://github.com/MickLesk) ([#5586](https://github.com/community-scripts/ProxmoxVE/pull/5586))
 | 
			
		||||
- Kapowarr ([#5584](https://github.com/community-scripts/ProxmoxVE/pull/5584))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Fixing Cloudflare DDNS - lack of resources [@meszolym](https://github.com/meszolym) ([#5600](https://github.com/community-scripts/ProxmoxVE/pull/5600))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Immich: make changes to automatically enable QuickSync [@vhsdream](https://github.com/vhsdream) ([#5560](https://github.com/community-scripts/ProxmoxVE/pull/5560))
 | 
			
		||||
    - Apache Guacamole: Install auth-jdbc component that matches release version [@tremor021](https://github.com/tremor021) ([#5563](https://github.com/community-scripts/ProxmoxVE/pull/5563))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - tools.func: optimize binary installs with fetch_and_deploy helper [@MickLesk](https://github.com/MickLesk) ([#5588](https://github.com/community-scripts/ProxmoxVE/pull/5588))
 | 
			
		||||
    - [core]: add ipv6 configuration support [@MickLesk](https://github.com/MickLesk) ([#5575](https://github.com/community-scripts/ProxmoxVE/pull/5575))
 | 
			
		||||
 | 
			
		||||
## 2025-06-29
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Linkwarden: Add backing up of data folder to the update function [@tremor021](https://github.com/tremor021) ([#5548](https://github.com/community-scripts/ProxmoxVE/pull/5548))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Add cron-job api-key env variable to homarr script [@Meierschlumpf](https://github.com/Meierschlumpf) ([#5204](https://github.com/community-scripts/ProxmoxVE/pull/5204))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Documentation
 | 
			
		||||
 | 
			
		||||
    - update readme with valid discord link. other one expired [@BramSuurdje](https://github.com/BramSuurdje) ([#5567](https://github.com/community-scripts/ProxmoxVE/pull/5567))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - Update script-item.tsx [@ape364](https://github.com/ape364) ([#5549](https://github.com/community-scripts/ProxmoxVE/pull/5549))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - fix bug in tooltip that would always render 'updateable' [@BramSuurdje](https://github.com/BramSuurdje) ([#5552](https://github.com/community-scripts/ProxmoxVE/pull/5552))
 | 
			
		||||
 | 
			
		||||
## 2025-06-28
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<div align="center">
 | 
			
		||||
  <p align="center">
 | 
			
		||||
    <a href="#">
 | 
			
		||||
      <img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo.png" height="100px" />
 | 
			
		||||
      <img src="https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/images/logo-81x112.png" height="100px" />
 | 
			
		||||
    </a>
 | 
			
		||||
  </p>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -13,7 +13,7 @@
 | 
			
		||||
    <a href="https://helper-scripts.com">
 | 
			
		||||
      <img src="https://img.shields.io/badge/Website-4c9b3f?style=for-the-badge&logo=github&logoColor=white" alt="Website" />
 | 
			
		||||
    </a>
 | 
			
		||||
    <a href="https://discord.gg/jsYVk5JBxq">
 | 
			
		||||
    <a href="https://discord.gg/3AnUqsXnmK">
 | 
			
		||||
      <img src="https://img.shields.io/badge/Discord-7289da?style=for-the-badge&logo=discord&logoColor=white" alt="Discord" />
 | 
			
		||||
    </a> 
 | 
			
		||||
    <a href="https://ko-fi.com/community_scripts">
 | 
			
		||||
@@ -82,7 +82,7 @@ We appreciate any contributions to the project—whether it's bug reports, featu
 | 
			
		||||
 | 
			
		||||
Join our community for support:
 | 
			
		||||
 | 
			
		||||
- **Discord**: Join our [Proxmox Helper Scripts Discord server](https://discord.gg/jsYVk5JBxq) for real-time support.
 | 
			
		||||
- **Discord**: Join our [Proxmox Helper Scripts Discord server](https://discord.gg/3AnUqsXnmK) for real-time support.
 | 
			
		||||
- **GitHub Discussions**: [Ask questions or report issues](https://github.com/community-scripts/ProxmoxVE/discussions).
 | 
			
		||||
 | 
			
		||||
## 🤝 Report a Bug or Feature Request
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								ct/2fauth.sh
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								ct/2fauth.sh
									
									
									
									
									
								
							@@ -28,8 +28,11 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null || cat /opt/2fauth_version.txt 2>/dev/null)" ]]; then
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.2fauth 2>/dev/null)" ]] || [[ ! -f ~/.2fauth ]]; then
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
@@ -45,10 +48,11 @@ function update_script() {
 | 
			
		||||
      $STD apt-get install -y \
 | 
			
		||||
        lsb-release \
 | 
			
		||||
        gnupg2
 | 
			
		||||
      PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" setup_php
 | 
			
		||||
      PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,mysql,cli" PHP_FPM="YES" setup_php
 | 
			
		||||
      sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
 | 
			
		||||
    fi
 | 
			
		||||
    fetch_and_deploy_gh_release "2fauth" "Bubka/2FAuth"
 | 
			
		||||
    setup_composer
 | 
			
		||||
    mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
 | 
			
		||||
    mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
 | 
			
		||||
    cd "/opt/2fauth" || return
 | 
			
		||||
 
 | 
			
		||||
@@ -35,26 +35,29 @@ function update_script() {
 | 
			
		||||
    systemctl stop adventurelog-frontend
 | 
			
		||||
    msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backup Old Installation"
 | 
			
		||||
    mkdir -p /opt/adventurelog-backup
 | 
			
		||||
    cp /opt/adventurelog/backend/server/.env /opt/adventurelog-backup/backend/server/.env
 | 
			
		||||
    cp -r /opt/adventurelog/backend/server/media /opt/adventurelog-backup/backend/server/media
 | 
			
		||||
    cp /opt/adventurelog/frontend/.env /opt/adventurelog-backup/frontend/.env
 | 
			
		||||
    msg_ok "Backup done"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
 | 
			
		||||
    PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    # Backend Migration
 | 
			
		||||
    cp /opt/adventurelog-backup/backend/server/.env /opt/adventurelog/backend/server/.env
 | 
			
		||||
    cp -r /opt/adventurelog-backup/backend/server/media /opt/adventurelog/backend/server/media
 | 
			
		||||
 | 
			
		||||
    cd /opt/adventurelog/backend/server
 | 
			
		||||
    if [[ ! -x .venv/bin/python ]]; then
 | 
			
		||||
      $STD uv venv .venv
 | 
			
		||||
      $STD .venv/bin/python -m ensurepip --upgrade
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    $STD .venv/bin/python -m pip install --upgrade pip
 | 
			
		||||
    $STD .venv/bin/python -m pip install -r requirements.txt
 | 
			
		||||
    $STD .venv/bin/python -m manage collectstatic --noinput
 | 
			
		||||
    $STD .venv/bin/python -m manage migrate
 | 
			
		||||
    
 | 
			
		||||
    # Frontend Migration
 | 
			
		||||
    cp /opt/adventurelog-backup/frontend/.env /opt/adventurelog/frontend/.env
 | 
			
		||||
    cd /opt/adventurelog/frontend
 | 
			
		||||
    $STD pnpm i
 | 
			
		||||
@@ -68,7 +71,6 @@ function update_script() {
 | 
			
		||||
    msg_ok "Services Started"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf /opt/v${RELEASE}.zip
 | 
			
		||||
    rm -rf /opt/adventurelog-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,15 @@ function update_script() {
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
 | 
			
		||||
 | 
			
		||||
  if [[ "$COMPOSE_BASENAME" == "sqlite.compose.yaml" || "$COMPOSE_BASENAME" == "postgres.compose.yaml" ]]; then
 | 
			
		||||
    msg_error "❌ Detected outdated Komodo setup using SQLite or PostgreSQL (FerretDB v1)."
 | 
			
		||||
    echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}"
 | 
			
		||||
    echo -e "${YW}Please follow the migration guide:${CL}"
 | 
			
		||||
    echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
 | 
			
		||||
  cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
 | 
			
		||||
    msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								ct/alpine-syncthing.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								ct/alpine-syncthing.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
#!/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://syncthing.net/
 | 
			
		||||
 | 
			
		||||
APP="Alpine-Syncthing"
 | 
			
		||||
var_tags="${var_tags:-alpine;networking}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-256}"
 | 
			
		||||
var_disk="${var_disk:-1}"
 | 
			
		||||
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() {
 | 
			
		||||
  msg_info "Updating Alpine Packages"
 | 
			
		||||
  $STD apk -U upgrade
 | 
			
		||||
  msg_ok "Updated Alpine Packages"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating Syncthing"
 | 
			
		||||
  $STD apk upgrade syncthing
 | 
			
		||||
  msg_ok "Updated Syncthing"
 | 
			
		||||
 | 
			
		||||
  msg_info "Restarting Syncthing"
 | 
			
		||||
  $STD rc-service syncthing restart
 | 
			
		||||
  msg_ok "Restarted Syncthing"
 | 
			
		||||
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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}:8384${CL}"
 | 
			
		||||
							
								
								
									
										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
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://teamspeak.com/en/downloads/#server | sed -n '/teamspeak3-server_linux_amd64-/ { s/.*teamspeak3-server_linux_amd64-\([0-9]\+\.[0-9]\+\.[0-9]\+\).*/\1/p; q }')
 | 
			
		||||
 | 
			
		||||
  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}"
 | 
			
		||||
@@ -31,16 +31,16 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/authelia/authelia/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(/usr/bin/authelia -v | awk '{print substr($3, 2, length($2)) }')" ]]; then
 | 
			
		||||
        msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
        curl -fsSL "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb" -o $(basename "https://github.com/authelia/authelia/releases/download/${RELEASE}/authelia_${RELEASE}_amd64.deb")
 | 
			
		||||
        $STD dpkg -i "authelia_${RELEASE}_amd64.deb"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "authelia" "authelia/authelia" "binary"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
        rm -f "authelia_${RELEASE}_amd64.deb"
 | 
			
		||||
    $STD apt-get -y autoremove
 | 
			
		||||
    $STD apt-get -y autoclean
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/babybuddy/babybuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/babybuddy_version.txt)" ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.babybuddy 2>/dev/null)" ]] || [[ ! -f ~/.babybuddy ]]; then
 | 
			
		||||
    setup_uv
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
@@ -38,21 +38,18 @@ function update_script() {
 | 
			
		||||
    msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning old files"
 | 
			
		||||
    cp babybuddy/settings/production.py /tmp/production.py.bak
 | 
			
		||||
    cp /opt/babybuddy/babybuddy/settings/production.py /tmp/production.py.bak
 | 
			
		||||
    find . -mindepth 1 -maxdepth 1 ! -name '.venv' -exec rm -rf {} +
 | 
			
		||||
    msg_ok "Cleaned old files"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "babybuddy" "babybuddy/babybuddy"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/babybuddy/babybuddy/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
    cd /opt/babybuddy
 | 
			
		||||
    tar zxf "$temp_file" --strip-components=1 -C /opt/babybuddy
 | 
			
		||||
    mv /tmp/production.py.bak babybuddy/settings/production.py
 | 
			
		||||
    cd /opt/babybuddy
 | 
			
		||||
    mv /tmp/production.py.bak /opt/babybuddy/babybuddy/settings/production.py
 | 
			
		||||
    source .venv/bin/activate
 | 
			
		||||
    $STD uv pip install -r requirements.txt
 | 
			
		||||
    $STD python manage.py migrate
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Fixing permissions"
 | 
			
		||||
@@ -66,9 +63,6 @@ function update_script() {
 | 
			
		||||
    systemctl start nginx
 | 
			
		||||
    msg_ok "Services Started"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -f "$temp_file"
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								ct/baikal.sh
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								ct/baikal.sh
									
									
									
									
									
								
							@@ -23,34 +23,38 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/baikal ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/sabre-io/Baikal/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 [[ "${RELEASE}" != "$(cat ~/.baikal 2>/dev/null)" ]] || [[ ! -f ~/.baikal ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    curl -fsSL "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip" -o $(basename "https://github.com/sabre-io/baikal/releases/download/${RELEASE}/baikal-${RELEASE}.zip")
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    mv /opt/baikal /opt/baikal-backup
 | 
			
		||||
    $STD unzip -o "baikal-${RELEASE}.zip"
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "baikal" "sabre-io/Baikal"
 | 
			
		||||
    setup_composer
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring Baikal"
 | 
			
		||||
    cp -r /opt/baikal-backup/config/baikal.yaml /opt/baikal/config/
 | 
			
		||||
    cp -r /opt/baikal-backup/Specific/ /opt/baikal/
 | 
			
		||||
    chown -R www-data:www-data /opt/baikal/
 | 
			
		||||
    chmod -R 755 /opt/baikal/
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
    cd /opt/baikal
 | 
			
		||||
    $STD composer install
 | 
			
		||||
    msg_ok "Configured Baikal"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf "/opt/baikal-${RELEASE}.zip"
 | 
			
		||||
    rm -rf /opt/baikal-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										129
									
								
								ct/bar-assistant.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								ct/bar-assistant.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: bvdberg01 | CanbiZ
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/karlomikus/bar-assistant
 | 
			
		||||
# Source: https://github.com/karlomikus/vue-salt-rim
 | 
			
		||||
# Source: https://www.meilisearch.com/
 | 
			
		||||
 | 
			
		||||
APP="Bar-Assistant"
 | 
			
		||||
var_tags="${var_tags:-cocktails;drinks}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/bar-assistant ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE_MEILISEARCH=$(curl -fsSL https://api.github.com/repos/meilisearch/meilisearch/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
  RELEASE_BARASSISTANT=$(curl -fsSL https://api.github.com/repos/karlomikus/bar-assistant/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
  RELEASE_SALTRIM=$(curl -fsSL https://api.github.com/repos/karlomikus/vue-salt-rim/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE_BARASSISTANT}" != "$(cat ~/.bar-assistant 2>/dev/null)" ]] || [[ ! -f ~/.bar-assistant ]]; then
 | 
			
		||||
    msg_info "Stopping nginx"
 | 
			
		||||
    systemctl stop nginx
 | 
			
		||||
    msg_ok "Stopped nginx"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up Bar Assistant"
 | 
			
		||||
    mv /opt/bar-assistant /opt/bar-assistant-backup
 | 
			
		||||
    msg_ok "Backed up Bar Assistant"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "bar-assistant" "karlomikus/bar-assistant" "tarball" "latest" "/opt/bar-assistant"
 | 
			
		||||
    setup_composer
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE_BARASSISTANT}"
 | 
			
		||||
    cp -r /opt/bar-assistant-backup/.env /opt/bar-assistant/.env
 | 
			
		||||
    cp -r /opt/bar-assistant-backup/storage/bar-assistant /opt/bar-assistant/storage/bar-assistant
 | 
			
		||||
    cd /opt/bar-assistant
 | 
			
		||||
    $STD composer install --no-interaction
 | 
			
		||||
    $STD php artisan migrate --force
 | 
			
		||||
    $STD php artisan storage:link
 | 
			
		||||
    $STD php artisan bar:setup-meilisearch
 | 
			
		||||
    $STD php artisan scout:sync-index-settings
 | 
			
		||||
    $STD php artisan config:cache
 | 
			
		||||
    $STD php artisan route:cache
 | 
			
		||||
    $STD php artisan event:cache
 | 
			
		||||
    chown -R www-data:www-data /opt/bar-assistant
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE_BARASSISTANT}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting nginx"
 | 
			
		||||
    systemctl start nginx
 | 
			
		||||
    msg_ok "Started nginx"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/bar-assistant-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE_BARASSISTANT}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE_SALTRIM}" != "$(cat ~/.vue-salt-rim 2>/dev/null)" ]] || [[ ! -f ~/.vue-salt-rim ]]; then
 | 
			
		||||
    msg_info "Backing up Vue Salt Rim"
 | 
			
		||||
    mv /opt/vue-salt-rim /opt/vue-salt-rim-backup
 | 
			
		||||
    msg_ok "Backed up Vue Salt Rim"
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping nginx"
 | 
			
		||||
    systemctl stop nginx
 | 
			
		||||
    msg_ok "Stopped nginx"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "vue-salt-rim" "karlomikus/vue-salt-rim" "tarball" "latest" "/opt/vue-salt-rim"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Salt Rim to ${RELEASE_SALTRIM}"
 | 
			
		||||
    cp /opt/vue-salt-rim-backup/public/config.js /opt/vue-salt-rim/public/config.js
 | 
			
		||||
    cd /opt/vue-salt-rim
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE_SALTRIM}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting nginx"
 | 
			
		||||
    systemctl start nginx
 | 
			
		||||
    msg_ok "Started nginx"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/vue-salt-rim-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Salt Rim is already at ${RELEASE_SALTRIM}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE_MEILISEARCH}" != "$(cat ~/.meilisearch 2>/dev/null)" ]] || [[ ! -f ~/.meilisearch ]]; then
 | 
			
		||||
    msg_info "Stopping Meilisearch"
 | 
			
		||||
    systemctl stop meilisearch
 | 
			
		||||
    msg_ok "Stopped Meilisearch"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Meilisearch"
 | 
			
		||||
    systemctl start meilisearch
 | 
			
		||||
    msg_ok "Started Meilisearch"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Meilisearch"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Meilisearch is already at ${RELEASE_MEILISEARCH}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
@@ -23,27 +23,28 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/barcodebuddy ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/barcodebuddy/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 ~/.barcodebuddy 2>/dev/null)" ]] || [[ ! -f ~/.barcodebuddy ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    systemctl stop barcodebuddy
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    mv /opt/barcodebuddy/ /opt/barcodebuddy-backup
 | 
			
		||||
    curl -fsSL "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip")
 | 
			
		||||
    $STD unzip "v${RELEASE}.zip"
 | 
			
		||||
    mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "barcodebuddy" "Forceu/barcodebuddy"
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring ${APP}"
 | 
			
		||||
    cp -r /opt/barcodebuddy-backup/data/. /opt/barcodebuddy/data
 | 
			
		||||
    chown -R www-data:www-data /opt/barcodebuddy/data
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
    msg_ok "Configured ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
@@ -51,7 +52,6 @@ function update_script() {
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -r "/opt/v${RELEASE}.zip"
 | 
			
		||||
    rm -r /opt/barcodebuddy-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
 
 | 
			
		||||
@@ -28,12 +28,12 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/bitmagnet-io/bitmagnet/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 ~/.bitmagnet 2>/dev/null)" ]] || [[ ! -f ~/.bitmagnet ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop bitmagnet-web
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up database"
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    rm -f /tmp/backup.sql
 | 
			
		||||
    $STD sudo -u postgres pg_dump \
 | 
			
		||||
      --column-inserts \
 | 
			
		||||
@@ -56,31 +56,26 @@ function update_script() {
 | 
			
		||||
      bitmagnet \
 | 
			
		||||
      >/tmp/backup.sql
 | 
			
		||||
    mv /tmp/backup.sql /opt/
 | 
			
		||||
    msg_ok "Database backed up"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    [ -f /opt/bitmagnet/.env ] && cp /opt/bitmagnet/.env /opt/
 | 
			
		||||
    [ -f /opt/bitmagnet/config.yml ] && cp /opt/bitmagnet/config.yml /opt/
 | 
			
		||||
    rm -rf /opt/bitmagnet/*
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/bitmagnet-io/bitmagnet/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar zxf "$temp_file" --strip-components=1 -C /opt/bitmagnet
 | 
			
		||||
    msg_ok "Data backed up"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/bitmagnet
 | 
			
		||||
    fetch_and_deploy_gh_release "bitmagnet" "bitmagnet-io/bitmagnet"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt/bitmagnet
 | 
			
		||||
    VREL=v$RELEASE
 | 
			
		||||
    $STD go build -ldflags "-s -w -X github.com/bitmagnet-io/bitmagnet/internal/version.GitTag=$VREL"
 | 
			
		||||
    chmod +x bitmagnet
 | 
			
		||||
    [ -f "/opt/.env" ] && cp "/opt/.env" /opt/bitmagnet/
 | 
			
		||||
    [ -f "/opt/config.yml" ] && cp "/opt/config.yml" /opt/bitmagnet/
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start bitmagnet-web
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -f "$temp_file"
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -23,25 +23,33 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/bookstack ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/BookStackApp/BookStack/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 ~/.bookstack 2>/dev/null)" ]] || [[ ! -f ~/.bookstack ]]; then
 | 
			
		||||
    msg_info "Stopping Apache2"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    mv /opt/bookstack /opt/bookstack-backup
 | 
			
		||||
    curl -fsSL "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip" -o "/opt/BookStack-${RELEASE}.zip"
 | 
			
		||||
    $STD unzip "/opt/BookStack-${RELEASE}.zip" -d /opt
 | 
			
		||||
    mv "/opt/BookStack-${RELEASE}" /opt/bookstack
 | 
			
		||||
    msg_ok "Backup finished"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "bookstack" "BookStackApp/BookStack"
 | 
			
		||||
    PHP_MODULE="ldap,tidy,bz2,mysqli" PHP_FPM="YES" PHP_APACHE="YES" PHP_VERSION="8.3" setup_php
 | 
			
		||||
    setup_composer
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring backup"
 | 
			
		||||
    cp /opt/bookstack-backup/.env /opt/bookstack/.env
 | 
			
		||||
    [[ -d /opt/bookstack-backup/public/uploads ]] && cp -a /opt/bookstack-backup/public/uploads/. /opt/bookstack/public/uploads/
 | 
			
		||||
    [[ -d /opt/bookstack-backup/storage/uploads ]] && cp -a /opt/bookstack-backup/storage/uploads/. /opt/bookstack/storage/uploads/
 | 
			
		||||
    [[ -d /opt/bookstack-backup/themes ]] && cp -a /opt/bookstack-backup/themes/. /opt/bookstack/themes/
 | 
			
		||||
    msg_ok "Backup restored"
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring BookStack"
 | 
			
		||||
    cd /opt/bookstack
 | 
			
		||||
    export COMPOSER_ALLOW_SUPERUSER=1
 | 
			
		||||
    $STD composer install --no-dev
 | 
			
		||||
@@ -51,7 +59,7 @@ function update_script() {
 | 
			
		||||
    chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
 | 
			
		||||
    chmod -R 640 /opt/bookstack/.env
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
    msg_ok "Configured BookStack"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Apache2"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
@@ -59,7 +67,6 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf /opt/bookstack-backup
 | 
			
		||||
    rm -rf "/opt/BookStack-${RELEASE}.zip"
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
 
 | 
			
		||||
@@ -37,8 +37,8 @@ Pin: version ${RELEASE}
 | 
			
		||||
Pin-Priority: 1001
 | 
			
		||||
EOF
 | 
			
		||||
    apt-get update
 | 
			
		||||
    apt-get install -y nginx=1.26.3*
 | 
			
		||||
    apt-get install -y bunkerweb=${RELEASE}
 | 
			
		||||
    apt-mark unhold bunkerweb nginx
 | 
			
		||||
    apt-get install -y --allow-downgrades bunkerweb=${RELEASE}
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -23,39 +23,39 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/bytestash ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/jordan-dalby/ByteStash/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 ~/.bytestash 2>/dev/null)" ]] || [[ ! -f ~/.bytestash ]]; then
 | 
			
		||||
 | 
			
		||||
    read -rp "${TAB3}Did you make a backup via application WebUI? (y/n): " backuped
 | 
			
		||||
    if [[ "$backuped" =~ ^[Yy]$ ]]; then
 | 
			
		||||
      msg_info "Stopping Services"
 | 
			
		||||
      systemctl stop bytestash-backend
 | 
			
		||||
      systemctl stop bytestash-frontend
 | 
			
		||||
      msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
        temp_file=$(mktemp)
 | 
			
		||||
curl -fsSL "https://github.com/jordan-dalby/ByteStash/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
        tar zxf $temp_file
 | 
			
		||||
        rm -rf /opt/bytestash/server/node_modules
 | 
			
		||||
        rm -rf /opt/bytestash/client/node_modules
 | 
			
		||||
        cp -rf ByteStash-${RELEASE}/* /opt/bytestash
 | 
			
		||||
      rm -rf /opt/bytestash
 | 
			
		||||
      fetch_and_deploy_gh_release "bytestash" "jordan-dalby/ByteStash"
 | 
			
		||||
 | 
			
		||||
      msg_info "Configuring ByteStash"
 | 
			
		||||
      cd /opt/bytestash/server
 | 
			
		||||
      $STD npm install
 | 
			
		||||
      cd /opt/bytestash/client
 | 
			
		||||
      $STD npm install
 | 
			
		||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
      msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
      msg_info "Starting Services"
 | 
			
		||||
      systemctl start bytestash-backend
 | 
			
		||||
      systemctl start bytestash-frontend
 | 
			
		||||
      msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -f $temp_file
 | 
			
		||||
        msg_ok "Cleaned"
 | 
			
		||||
    else
 | 
			
		||||
      msg_error "PLEASE MAKE A BACKUP FIRST!"
 | 
			
		||||
      exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -7,8 +7,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
 | 
			
		||||
APP="Cloudflare-DDNS"
 | 
			
		||||
var_tags="${var_tags:-network}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-3}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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}"
 | 
			
		||||
@@ -23,12 +23,13 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/commafeed ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.commafeed 2>/dev/null)" ]] || [[ ! -f ~/.commafeed ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop commafeed
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
@@ -39,13 +40,15 @@ function update_script() {
 | 
			
		||||
      $STD apt-get install -y rsync
 | 
			
		||||
      msg_ok "Installed Dependencies"
 | 
			
		||||
    fi
 | 
			
		||||
    if [ -d /opt/commafeed/data ] && [ "$(ls -A /opt/commafeed/data)" ]; then
 | 
			
		||||
      mv /opt/commafeed/data /opt/data.bak
 | 
			
		||||
    fi
 | 
			
		||||
    fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip"
 | 
			
		||||
    
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    curl -fsSL "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip" -o $(basename "https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip")
 | 
			
		||||
    $STD unzip commafeed-"${RELEASE}"-h2-jvm.zip
 | 
			
		||||
    rsync -a --exclude 'data/' commafeed-"${RELEASE}"-h2/ /opt/commafeed/
 | 
			
		||||
    rm -rf commafeed-"${RELEASE}"-h2 commafeed-"${RELEASE}"-h2-jvm.zip
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    if [ -d /opt/commafeed/data.bak ] && [ "$(ls -A /opt/commafeed/data.bak)" ]; then
 | 
			
		||||
      mv /opt/commafeed/data.bak /opt/commafeed/data
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
 
 | 
			
		||||
@@ -29,29 +29,27 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/cryptpad/cryptpad/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.cryptpad 2>/dev/null)" ]] || [[ ! -f ~/.cryptpad ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop cryptpad
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up configuration"
 | 
			
		||||
    [ -f /opt/cryptpad/config/config.js ] && mv /opt/cryptpad/config/config.js /opt/
 | 
			
		||||
    msg_ok "Backed up configuration"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "cryptpad" "cryptpad/cryptpad"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
        temp_dir=$(mktemp -d)
 | 
			
		||||
        cp -f /opt/cryptpad/config/config.js /opt/config.js
 | 
			
		||||
        curl -fsSL "https://github.com/cryptpad/cryptpad/archive/refs/tags/${RELEASE}.tar.gz" -o "$temp_dir/cryptpad-${RELEASE}.tar.gz"
 | 
			
		||||
        cd "$temp_dir"
 | 
			
		||||
        tar zxf "cryptpad-${RELEASE}.tar.gz"
 | 
			
		||||
        cp -rf "cryptpad-${RELEASE}"/* /opt/cryptpad
 | 
			
		||||
    cd /opt/cryptpad
 | 
			
		||||
    $STD npm ci
 | 
			
		||||
    $STD npm run install:components
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
        cp -f /opt/config.js /opt/cryptpad/config/config.js
 | 
			
		||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf $temp_dir
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
    msg_info "Restoring configuration"
 | 
			
		||||
    mv /opt/config.js /opt/cryptpad/config/
 | 
			
		||||
    msg_ok "Configuration restored"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start cryptpad
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								ct/dashy.sh
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								ct/dashy.sh
									
									
									
									
									
								
							@@ -29,7 +29,7 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.dashy 2>/dev/null)" ]] || [[ ! -f ~/.dashy ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop dashy
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
@@ -43,14 +43,13 @@ function update_script() {
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Backed up conf.yml"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    rm -rf /opt/dashy
 | 
			
		||||
    mkdir -p /opt/dashy
 | 
			
		||||
    curl -fsSL "https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz" | tar -xz -C /opt/dashy --strip-components=1
 | 
			
		||||
    fetch_and_deploy_gh_release "dashy" "Lissy93/dashy"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cd /opt/dashy
 | 
			
		||||
    npm install
 | 
			
		||||
    npm run build
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring conf.yml"
 | 
			
		||||
@@ -65,6 +64,7 @@ function update_script() {
 | 
			
		||||
    msg_info "Starting Dashy"
 | 
			
		||||
    systemctl start dashy
 | 
			
		||||
    msg_ok "Started Dashy"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										62
									
								
								ct/docker.sh
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								ct/docker.sh
									
									
									
									
									
								
							@@ -23,14 +23,64 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
    if [[ ! -d /var ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
 | 
			
		||||
  get_latest_release() {
 | 
			
		||||
    curl -fsSL https://api.github.com/repos/"$1"/releases/latest | grep '"tag_name":' | cut -d'"' -f4
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating base system"
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated ${APP} LXC"
 | 
			
		||||
  msg_ok "Base system updated"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating Docker Engine"
 | 
			
		||||
  $STD apt-get install --only-upgrade -y docker-ce docker-ce-cli containerd.io
 | 
			
		||||
  msg_ok "Docker Engine updated"
 | 
			
		||||
 | 
			
		||||
  if [[ -f /usr/local/lib/docker/cli-plugins/docker-compose ]]; then
 | 
			
		||||
    COMPOSE_BIN="/usr/local/lib/docker/cli-plugins/docker-compose"
 | 
			
		||||
    COMPOSE_NEW_VERSION=$(get_latest_release "docker/compose")
 | 
			
		||||
    msg_info "Updating Docker Compose to $COMPOSE_NEW_VERSION"
 | 
			
		||||
    curl -fsSL "https://github.com/docker/compose/releases/download/${COMPOSE_NEW_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
 | 
			
		||||
      -o "$COMPOSE_BIN"
 | 
			
		||||
    chmod +x "$COMPOSE_BIN"
 | 
			
		||||
    msg_ok "Docker Compose updated"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if docker ps -a --format '{{.Names}}' | grep -q '^portainer$'; then
 | 
			
		||||
    msg_info "Updating Portainer"
 | 
			
		||||
    $STD docker pull portainer/portainer-ce:latest
 | 
			
		||||
    $STD docker stop portainer && docker rm portainer
 | 
			
		||||
    $STD docker volume create portainer_data >/dev/null 2>&1
 | 
			
		||||
    $STD docker run -d \
 | 
			
		||||
      -p 8000:8000 \
 | 
			
		||||
      -p 9443:9443 \
 | 
			
		||||
      --name=portainer \
 | 
			
		||||
      --restart=always \
 | 
			
		||||
      -v /var/run/docker.sock:/var/run/docker.sock \
 | 
			
		||||
      -v portainer_data:/data \
 | 
			
		||||
      portainer/portainer-ce:latest
 | 
			
		||||
    msg_ok "Updated Portainer"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if docker ps -a --format '{{.Names}}' | grep -q '^portainer_agent$'; then
 | 
			
		||||
    msg_info "Updating Portainer Agent"
 | 
			
		||||
    $STD docker pull portainer/agent:latest
 | 
			
		||||
    $STD docker stop portainer_agent && docker rm portainer_agent
 | 
			
		||||
    $STD docker run -d \
 | 
			
		||||
      -p 9001:9001 \
 | 
			
		||||
      --name=portainer_agent \
 | 
			
		||||
      --restart=always \
 | 
			
		||||
      -v /var/run/docker.sock:/var/run/docker.sock \
 | 
			
		||||
      -v /var/lib/docker/volumes:/var/lib/docker/volumes \
 | 
			
		||||
      portainer/agent
 | 
			
		||||
    msg_ok "Updated Portainer Agent"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Cleaning up"
 | 
			
		||||
  $STD apt-get -y autoremove
 | 
			
		||||
  $STD apt-get -y autoclean
 | 
			
		||||
  msg_ok "Cleanup complete"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -27,48 +27,35 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! command -v node >/dev/null || [[ "$(/usr/bin/env node -v | grep -oP '^v\K[0-9]+')" != "22" ]]; then
 | 
			
		||||
    msg_info "Installing Node.js 22"
 | 
			
		||||
    $STD apt-get purge -y nodejs
 | 
			
		||||
    rm -f /etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
    rm -f /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
    mkdir -p /etc/apt/keyrings
 | 
			
		||||
    curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
			
		||||
    echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install -y nodejs
 | 
			
		||||
    $STD npm install -g pnpm@10.4.0
 | 
			
		||||
    msg_ok "Node.js 22 installed"
 | 
			
		||||
    NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/docmost/docmost/main/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
 | 
			
		||||
  fi
 | 
			
		||||
  export NODE_OPTIONS="--max_old_space_size=4096"
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/docmost/docmost/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 ~/.docmost 2>/dev/null)" ]] || [[ ! -f ~/.docmost ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop docmost
 | 
			
		||||
    msg_ok "${APP} Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    cp /opt/docmost/.env /opt/
 | 
			
		||||
    cp -r /opt/docmost/data /opt/
 | 
			
		||||
    rm -rf /opt/docmost
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/docmost/docmost/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar -xzf "$temp_file"
 | 
			
		||||
    mv docmost-${RELEASE} /opt/docmost
 | 
			
		||||
    msg_ok "Data backed up"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "docmost" "docmost/docmost"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt/docmost
 | 
			
		||||
    mv /opt/.env /opt/docmost/.env
 | 
			
		||||
    mv /opt/data /opt/docmost/data
 | 
			
		||||
    $STD pnpm install --force
 | 
			
		||||
    $STD pnpm build
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start docmost
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f ${temp_file}
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,25 +27,19 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/duplicati/duplicati/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat ~/.duplicati)" ]] || [[ ! -f ~/.duplicati ]]; then
 | 
			
		||||
        msg_info "Stopping $APP"
 | 
			
		||||
        systemctl stop duplicati
 | 
			
		||||
        msg_ok "Stopped $APP"
 | 
			
		||||
        msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
        curl -fsSL "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb" -o $(basename "https://github.com/duplicati/duplicati/releases/download/v${RELEASE}/duplicati-${RELEASE}-linux-x64-gui.deb")
 | 
			
		||||
        $STD dpkg -i duplicati-${RELEASE}-linux-x64-gui.deb
 | 
			
		||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
        msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
        
 | 
			
		||||
        fetch_and_deploy_gh_release "duplicati" "duplicati/duplicati" "binary" "latest" "/opt/duplicati" "linux-x64-gui.deb"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting $APP"
 | 
			
		||||
        systemctl start duplicati
 | 
			
		||||
        msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf ~/duplicati-${RELEASE}-linux-x64-gui.deb
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
        msg_ok "Update Successful"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								ct/emby.sh
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								ct/emby.sh
									
									
									
									
									
								
							@@ -23,26 +23,26 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/emby-server ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  LATEST=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.emby 2>/dev/null)" ]] || [[ ! -f ~/.emby ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop emby-server
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP}"
 | 
			
		||||
  $STD curl -fsSL "https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb" -o "emby-server-deb_${LATEST}_amd64.deb"
 | 
			
		||||
  $STD dpkg -i "emby-server-deb_${LATEST}_amd64.deb"
 | 
			
		||||
  rm "emby-server-deb_${LATEST}_amd64.deb"
 | 
			
		||||
  msg_ok "Updated ${APP}"
 | 
			
		||||
    fetch_and_deploy_gh_release "emby" "MediaBrowser/Emby.Releases" "binary"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start emby-server
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										39
									
								
								ct/emqx.sh
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								ct/emqx.sh
									
									
									
									
									
								
							@@ -23,14 +23,39 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
    if [[ ! -d /var ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://www.emqx.com/en/downloads/enterprise | grep -oP '/en/downloads/enterprise/v\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n1)
 | 
			
		||||
  if [[ "$RELEASE" != "$(cat ~/.emqx 2>/dev/null)" ]] || [[ ! -f ~/.emqx ]]; then
 | 
			
		||||
    msg_info "Stopping EMQX"
 | 
			
		||||
    systemctl stop emqx
 | 
			
		||||
    msg_ok "Stopped EMQX"
 | 
			
		||||
 | 
			
		||||
    msg_info "Removing old EMQX"
 | 
			
		||||
    $STD apt-get remove --purge -y emqx
 | 
			
		||||
    msg_ok "Removed old EMQX"
 | 
			
		||||
 | 
			
		||||
    msg_info "Downloading EMQX v${RELEASE}"
 | 
			
		||||
    DEB_FILE="/tmp/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
 | 
			
		||||
    curl -fsSL -o "$DEB_FILE" "https://www.emqx.com/en/downloads/enterprise/v${RELEASE}/emqx-enterprise-${RELEASE}-debian12-amd64.deb"
 | 
			
		||||
    msg_ok "Downloaded EMQX"
 | 
			
		||||
 | 
			
		||||
    msg_info "Installing EMQX"
 | 
			
		||||
    $STD apt-get install -y "$DEB_FILE"
 | 
			
		||||
    msg_ok "Installed EMQX v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting EMQX"
 | 
			
		||||
    systemctl start emqx
 | 
			
		||||
    echo "$RELEASE" >~/.emqx
 | 
			
		||||
    msg_ok "Started EMQX"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f "$DEB_FILE"
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. EMQX is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
 | 
			
		||||
APP="ErsatzTV"
 | 
			
		||||
var_tags="${var_tags:-iptv}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
@@ -26,36 +26,47 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt && $(echo "x.x.x" >/opt/${APP}_version.txt) || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\Kv\K[^"]+' | head -n1)
 | 
			
		||||
  RELEASE_FFMPEG=$(curl -fsSL https://api.github.com/repos/ErsatzTV/ErsatzTV-ffmpeg/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.ersatztv 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv ]]; then
 | 
			
		||||
    msg_info "Stopping ErsatzTV"
 | 
			
		||||
    systemctl stop ersatzTV
 | 
			
		||||
    msg_ok "Stopped ErsatzTV"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ErsatzTV"
 | 
			
		||||
    cp -R /opt/ErsatzTV/ ErsatzTV-backup
 | 
			
		||||
    rm ErsatzTV-backup/ErsatzTV
 | 
			
		||||
    rm -rf /opt/ErsatzTV
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-x64.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar -xzf "$temp_file"
 | 
			
		||||
    mv ErsatzTV-${RELEASE}-linux-x64 /opt/ErsatzTV
 | 
			
		||||
    cp -R ErsatzTV-backup/* /opt/ErsatzTV/
 | 
			
		||||
    rm -rf ErsatzTV-backup
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ErsatzTV"
 | 
			
		||||
    fetch_and_deploy_gh_release "ersatztv" "ErsatzTV/ErsatzTV" "prebuild" "latest" "/opt/ErsatzTV" "*linux-x64.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ErsatzTV"
 | 
			
		||||
    systemctl start ersatzTV
 | 
			
		||||
    msg_ok "Started ErsatzTV"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f ${temp_file}
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "${RELEASE_FFMPEG}" != "$(cat ~/.ersatztv-ffmpeg 2>/dev/null)" ]] || [[ ! -f ~/.ersatztv-ffmpeg ]]; then
 | 
			
		||||
    msg_info "Stopping ErsatzTV"
 | 
			
		||||
    systemctl stop ersatzTV
 | 
			
		||||
    msg_ok "Stopped ErsatzTV"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "ersatztv-ffmpeg" "ErsatzTV/ErsatzTV-ffmpeg" "prebuild" "latest" "/opt/ErsatzTV-ffmpeg" "*-linux64-gpl-7.1.tar.xz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Set ErsatzTV-ffmpeg links"
 | 
			
		||||
    chmod +x /opt/ErsatzTV-ffmpeg/bin/*
 | 
			
		||||
    ln -sf /opt/ErsatzTV-ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg
 | 
			
		||||
    ln -sf /opt/ErsatzTV-ffmpeg/bin/ffplay /usr/local/bin/ffplay
 | 
			
		||||
    ln -sf /opt/ErsatzTV-ffmpeg/bin/ffprobe /usr/local/bin/ffprobe
 | 
			
		||||
    msg_ok "ffmpeg links set"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ErsatzTV"
 | 
			
		||||
    systemctl start ersatzTV
 | 
			
		||||
    msg_ok "Started ErsatzTV"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ErsatzTV-ffmpeg is already at ${RELEASE_FFMPEG}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -73,6 +73,11 @@ EOF
 | 
			
		||||
    msg_ok "Updated systemd service"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Linking esphome to /usr/local/bin"
 | 
			
		||||
  rm -f /usr/local/bin/esphome
 | 
			
		||||
  ln -s /opt/esphome/.venv/bin/esphome /usr/local/bin/esphome
 | 
			
		||||
  msg_ok "Linked esphome binary"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting ${APP}"
 | 
			
		||||
  systemctl start esphomeDashboard
 | 
			
		||||
  msg_ok "Started ${APP}"
 | 
			
		||||
 
 | 
			
		||||
@@ -28,20 +28,16 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/excalidraw_version.txt)" ]] || [[ ! -f /opt/excalidraw_version.txt ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.excalidraw 2>/dev/null)" ]] || [[ ! -f ~/.excalidraw ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop excalidraw
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    cd /tmp
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar xzf $temp_file
 | 
			
		||||
    rm -rf /opt/excalidraw
 | 
			
		||||
    mv excalidraw-${RELEASE} /opt/excalidraw
 | 
			
		||||
    fetch_and_deploy_gh_release "excalidraw" "excalidraw/excalidraw"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    cd /opt/excalidraw
 | 
			
		||||
    $STD yarn
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
@@ -50,11 +46,6 @@ function update_script() {
 | 
			
		||||
    systemctl start excalidraw
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf $temp_file
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
    echo "${RELEASE}" >/opt/excalidraw_version.txt
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -29,37 +29,41 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/firefly-iii/firefly-iii/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 ~/.firefly 2>/dev/null)" ]] || [[ ! -f ~/.firefly ]]; then
 | 
			
		||||
    msg_info "Stopping Apache2"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    msg_ok "Stopped Apache2"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    cp /opt/firefly/.env /opt/.env
 | 
			
		||||
    cp -r /opt/firefly/storage /opt/storage
 | 
			
		||||
    cd /opt
 | 
			
		||||
    curl -fsSL "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" -o $(basename "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz")
 | 
			
		||||
    tar -xzf FireflyIII-v${RELEASE}.tar.gz -C /opt/firefly --exclude='storage'
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "firefly" "firefly-iii/firefly-iii" "prebuild" "latest" "/opt/firefly" "FireflyIII-*.zip"
 | 
			
		||||
    setup_composer
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    rm -rf /opt/firefly/storage
 | 
			
		||||
    cp /opt/.env /opt/firefly/.env
 | 
			
		||||
    cp -r /opt/storage /opt/firefly/storage
 | 
			
		||||
    cd /opt/firefly
 | 
			
		||||
    
 | 
			
		||||
    chown -R www-data:www-data /opt/firefly
 | 
			
		||||
    chmod -R 775 /opt/firefly/storage
 | 
			
		||||
    find /opt/firefly/storage -type d -exec chmod 775 {} \;
 | 
			
		||||
    find /opt/firefly/storage -type f -exec chmod 664 {} \;
 | 
			
		||||
    mkdir -p /opt/firefly/storage/framework/{cache/data,sessions,views}
 | 
			
		||||
    $STD sudo -u www-data php /opt/firefly/artisan cache:clear
 | 
			
		||||
 | 
			
		||||
    $STD php artisan migrate --seed --force
 | 
			
		||||
    $STD php artisan cache:clear
 | 
			
		||||
    $STD php artisan view:clear
 | 
			
		||||
    $STD php artisan firefly-iii:upgrade-database
 | 
			
		||||
    $STD php artisan firefly-iii:laravel-passport-keys
 | 
			
		||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Apache2"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
    msg_ok "Started Apache2"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/FireflyIII-v${RELEASE}.tar.gz
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
			
		||||
 
 | 
			
		||||
@@ -23,20 +23,23 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /etc/systemd/system/flaresolverr.service ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://github.com/FlareSolverr/FlareSolverr/releases/latest | grep "title>Release" | cut -d " " -f 4)
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/FlareSolverr/FlareSolverr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.flaresolverr 2>/dev/null)" ]] || [[ ! -f ~/.flaresolverr ]]; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop flaresolverr
 | 
			
		||||
    curl -fsSL "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz" -o $(basename "https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz")
 | 
			
		||||
    tar -xzf flaresolverr_linux_x64.tar.gz -C /opt
 | 
			
		||||
    rm flaresolverr_linux_x64.tar.gz
 | 
			
		||||
    msg_ok "Stopped service"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/flaresolverr
 | 
			
		||||
    fetch_and_deploy_gh_release "flaresolverr" "FlareSolverr/FlareSolverr" "prebuild" "latest" "/opt/flaresolverr" "flaresolverr_linux_x64.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl start flaresolverr
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
    msg_ok "Started service"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -28,20 +28,17 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/dotnetfactory/fluid-calendar/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 ~/.fluid-calendar 2>/dev/null)" ]] || [[ ! -f ~/.fluid-calendar ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
        systemctl stop fluid-calendar.service
 | 
			
		||||
    systemctl stop fluid-calendar
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    cp /opt/fluid-calendar/.env /opt/fluid.env
 | 
			
		||||
    rm -rf /opt/fluid-calendar
 | 
			
		||||
        tmp_file=$(mktemp)
 | 
			
		||||
        curl -fsSL "https://github.com/dotnetfactory/fluid-calendar/archive/refs/tags/v${RELEASE}.zip" -o "$tmp_file"
 | 
			
		||||
        $STD unzip $tmp_file
 | 
			
		||||
        mv ${APP}-${RELEASE}/ /opt/fluid-calendar
 | 
			
		||||
    fetch_and_deploy_gh_release "fluid-calendar" "dotnetfactory/fluid-calendar"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    mv /opt/fluid.env /opt/fluid-calendar/.env
 | 
			
		||||
    cd /opt/fluid-calendar
 | 
			
		||||
    export NEXT_TELEMETRY_DISABLED=1
 | 
			
		||||
@@ -52,14 +49,9 @@ function update_script() {
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
        systemctl start fluid-calendar.service
 | 
			
		||||
    systemctl start fluid-calendar
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf $tmp_file
 | 
			
		||||
        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}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								ct/gatus.sh
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								ct/gatus.sh
									
									
									
									
									
								
							@@ -29,35 +29,29 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/TwiN/gatus/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 ~/.gatus 2>/dev/null)" ]] || [[ ! -f ~/.gatus ]]; then
 | 
			
		||||
    msg_info "Updating $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop gatus
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    mv /opt/gatus/config/config.yaml /opt
 | 
			
		||||
    rm -rf /opt/gatus/*
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/TwiN/gatus/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar zxf "$temp_file" --strip-components=1 -C /opt/gatus
 | 
			
		||||
    rm -rf /opt/gatus
 | 
			
		||||
    fetch_and_deploy_gh_release "gatus" "TwiN/gatus"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    cd /opt/gatus
 | 
			
		||||
    $STD go mod tidy
 | 
			
		||||
    CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o gatus .
 | 
			
		||||
    setcap CAP_NET_RAW+ep gatus
 | 
			
		||||
    mv /opt/config.yaml config
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start gatus
 | 
			
		||||
    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 v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -23,8 +23,13 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
 | 
			
		||||
  if ! dpkg-query -W -f='${Status}' mariadb-server 2>/dev/null | grep -q "install ok installed"; then
 | 
			
		||||
    setup_mysql
 | 
			
		||||
  fi
 | 
			
		||||
  NODE_VERSION="22" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} LXC"
 | 
			
		||||
  if command -v ghost &>/dev/null; then
 | 
			
		||||
    current_version=$(ghost version | grep 'Ghost-CLI version' | awk '{print $3}')
 | 
			
		||||
    latest_version=$(npm show ghost-cli version)
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: CrazyWolf13
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/arunavo4/gitea-mirror
 | 
			
		||||
# Source: https://github.com/RayLabsHQ/gitea-mirror
 | 
			
		||||
 | 
			
		||||
APP="gitea-mirror"
 | 
			
		||||
var_tags="${var_tags:-mirror;gitea}"
 | 
			
		||||
@@ -28,7 +28,27 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/arunavo4/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
 | 
			
		||||
  APP_VERSION=$(grep -o '"version": *"[^"]*"' /opt/gitea-mirror/package.json | cut -d'"' -f4)
 | 
			
		||||
  if [[ $APP_VERSION =~ ^2\. ]]; then
 | 
			
		||||
    if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️  VERSION 2.x DETECTED" --yesno \
 | 
			
		||||
      "WARNING: Version $APP_VERSION detected!\n\nUpdating from version 2.x will CLEAR ALL CONFIGURATION.\n\nThis includes:\n• API tokens\n• User settings\n• Repository configurations\n• All custom settings\n\nDo you want to continue with the update process?" 15 70 --defaultno
 | 
			
		||||
    then
 | 
			
		||||
      exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if ! whiptail --backtitle "Gitea Mirror Update" --title "⚠️  FINAL CONFIRMATION" --yesno \
 | 
			
		||||
        "FINAL WARNING: This update WILL clear all configuration!\n\nBEFORE PROCEEDING, please:\n\n• Copy API tokens to a safe location\n• Backup any custom configurations\n• Note down repository settings\n\nThis action CANNOT be undone!" 18 70 --defaultno 
 | 
			
		||||
    then
 | 
			
		||||
        whiptail --backtitle "Gitea Mirror Update" --title "Update Cancelled" --msgbox "Update process cancelled. Please backup your configuration before proceeding." 8 60
 | 
			
		||||
        exit 0
 | 
			
		||||
    fi
 | 
			
		||||
    whiptail --backtitle "Gitea Mirror Update" --title "Proceeding with Update" --msgbox \
 | 
			
		||||
        "Proceeding with version $APP_VERSION update.\n\nAll configuration will be cleared as warned." 8 50
 | 
			
		||||
    rm -rf /opt/gitea-mirror
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/RayLabsHQ/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.${APP} 2>/dev/null || cat /opt/${APP}_version.txt 2>/dev/null)" ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
@@ -48,7 +68,7 @@ function update_script() {
 | 
			
		||||
    msg_ok "Installed Bun"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/gitea-mirror
 | 
			
		||||
    fetch_and_deploy_gh_release "gitea-mirror" "arunavo4/gitea-mirror"
 | 
			
		||||
    fetch_and_deploy_gh_release "gitea-mirror" "RayLabsHQ/gitea-mirror"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating and rebuilding ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt/gitea-mirror
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								ct/gitea.sh
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								ct/gitea.sh
									
									
									
									
									
								
							@@ -23,20 +23,29 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /usr/local/bin/gitea ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://github.com/go-gitea/gitea/releases/latest | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
 | 
			
		||||
   msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
   FILENAME="gitea-$RELEASE-linux-amd64"
 | 
			
		||||
   curl -fsSL "https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64" -o $FILENAME
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.gitea 2>/dev/null)" ]] || [[ ! -f ~/.gitea ]]; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop gitea
 | 
			
		||||
    msg_ok "Service stopped"
 | 
			
		||||
 | 
			
		||||
    rm -rf /usr/local/bin/gitea
 | 
			
		||||
   mv $FILENAME /usr/local/bin/gitea
 | 
			
		||||
    fetch_and_deploy_gh_release "gitea" "go-gitea/gitea" "singlefile" "latest" "/usr/local/bin" "gitea-*-linux-amd64"
 | 
			
		||||
    chmod +x /usr/local/bin/gitea
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl start gitea
 | 
			
		||||
   msg_ok "Updated $APP Successfully"
 | 
			
		||||
    msg_ok "Started service"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								ct/glance.sh
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								ct/glance.sh
									
									
									
									
									
								
							@@ -28,28 +28,19 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/glanceapp/glance/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.glance 2>/dev/null)" ]] || [[ ! -f ~/.glance ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop glance
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    curl -fsSL "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz" -o $(basename "https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz")
 | 
			
		||||
    rm -rf /opt/glance/glance
 | 
			
		||||
    tar -xzf glance-linux-amd64.tar.gz -C /opt/glance
 | 
			
		||||
    echo "${RELEASE}" >"/opt/${APP}_version.txt"
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
    rm -f /opt/glance/glance
 | 
			
		||||
    fetch_and_deploy_gh_release "glance" "glanceapp/glance" "prebuild" "latest" "/opt/glance" "glance-linux-amd64.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start glance
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/glance-linux-amd64.tar.gz
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								ct/go2rtc.sh
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								ct/go2rtc.sh
									
									
									
									
									
								
							@@ -27,14 +27,23 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating $APP"
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/AlexxIT/go2rtc/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.go2rtc 2>/dev/null)" ]] || [[ ! -f ~/.go2rtc ]]; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop go2rtc
 | 
			
		||||
  cd /opt/go2rtc
 | 
			
		||||
  rm go2rtc_linux_amd64
 | 
			
		||||
  curl -fsSL "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64" -o $(basename "https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64")
 | 
			
		||||
  chmod +x go2rtc_linux_amd64
 | 
			
		||||
    msg_ok "Stopped service"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "go2rtc" "AlexxIT/go2rtc" "singlefile" "latest" "/opt/go2rtc" "go2rtc_linux_amd64"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl start go2rtc
 | 
			
		||||
  msg_ok "Updated $APP"
 | 
			
		||||
    msg_ok "Started service"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								ct/gokapi.sh
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								ct/gokapi.sh
									
									
									
									
									
								
							@@ -27,7 +27,26 @@ function update_script() {
 | 
			
		||||
      msg_error "No ${APP} Installation Found!"
 | 
			
		||||
      exit
 | 
			
		||||
   fi
 | 
			
		||||
   msg_error "Currently we don't provide an update function for this ${APP}."
 | 
			
		||||
   if [[ -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
      mv /opt/${APP}_version ~/.gokapi
 | 
			
		||||
   fi
 | 
			
		||||
 | 
			
		||||
   RELEASE=$(curl -fsSL https://api.github.com/repos/Forceu/Gokapi/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
   if [[ "${RELEASE}" != "$(cat ~/.gokapi 2>/dev/null)" ]] || [[ ! -f ~/.gokapi ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop gokapi
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "gokapi" "Forceu/Gokapi" "prebuild" "latest" "/opt/gokapi" "gokapi-linux_amd64.zip"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start gokapi
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,35 +28,48 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  NODE_VERSION="20" NODE_MODULE="gulp-cli,mocha" setup_nodejs
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/HabitRPG/habitica/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 ~/.habitica 2>/dev/null)" ]] || [[ ! -f ~/.habitica ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop habitica-mongodb
 | 
			
		||||
    systemctl stop habitica
 | 
			
		||||
    systemctl stop habitica-client
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Save configuration"
 | 
			
		||||
    if [[ -f /opt/habitica/config.json ]]; then
 | 
			
		||||
      cp /opt/habitica/config.json ~/config.json
 | 
			
		||||
      msg_ok "Saved configuration"
 | 
			
		||||
    else
 | 
			
		||||
      msg_warn "No configuration file found, skipping save"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "habitica" "HabitRPG/habitica" "tarball" "latest" "/opt/habitica"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
        temp_file=$(mktemp)
 | 
			
		||||
curl -fsSL "https://github.com/HabitRPG/habitica/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
        tar zxf $temp_file
 | 
			
		||||
        cp -rf habitica-${RELEASE}/* /opt/habitica
 | 
			
		||||
    cd /opt/habitica
 | 
			
		||||
    $STD npm i
 | 
			
		||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    $STD npm run postinstall
 | 
			
		||||
    $STD npm run client:build
 | 
			
		||||
    $STD gulp build:prod
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring configuration"
 | 
			
		||||
    if [[ -f ~/config.json ]]; then
 | 
			
		||||
      cp ~/config.json /opt/habitica/config.json
 | 
			
		||||
      msg_ok "Restored configuration"
 | 
			
		||||
    else
 | 
			
		||||
      msg_warn "No configuration file found to restore"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start habitica-mongodb
 | 
			
		||||
    systemctl start habitica
 | 
			
		||||
    systemctl start habitica-client
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -f $temp_file
 | 
			
		||||
        rm -rf ~/habitica-${RELEASE}
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
@@ -71,4 +84,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/alpine-syncthing
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/alpine-syncthing
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ___    __      _                 _____                  __  __    _            
 | 
			
		||||
   /   |  / /___  (_)___  ___       / ___/__  ______  _____/ /_/ /_  (_)___  ____ _
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______\__ \/ / / / __ \/ ___/ __/ __ \/ / __ \/ __ `/
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/__/ / /_/ / / / / /__/ /_/ / / / / / / / /_/ / 
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/     /____/\__, /_/ /_/\___/\__/_/ /_/_/_/ /_/\__, /  
 | 
			
		||||
        /_/                            /____/                             /____/   
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/alpine-teamspeak-server
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/alpine-teamspeak-server
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ___    __      _                ______                    _____                  __        _____                          
 | 
			
		||||
   /   |  / /___  (_)___  ___      /_  __/__  ____ _____ ___ / ___/____  ___  ____ _/ /__     / ___/___  ______   _____  _____
 | 
			
		||||
  / /| | / / __ \/ / __ \/ _ \______/ / / _ \/ __ `/ __ `__ \\__ \/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
			
		||||
 / ___ |/ / /_/ / / / / /  __/_____/ / /  __/ /_/ / / / / / /__/ / /_/ /  __/ /_/ / ,< /_____/__/ /  __/ /   | |/ /  __/ /    
 | 
			
		||||
/_/  |_/_/ .___/_/_/ /_/\___/     /_/  \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_|     /____/\___/_/    |___/\___/_/     
 | 
			
		||||
        /_/                                                    /_/                                                            
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/bar-assistant
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/bar-assistant
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____                   ___              _      __              __ 
 | 
			
		||||
   / __ )____ ______      /   |  __________(_)____/ /_____ _____  / /_
 | 
			
		||||
  / __  / __ `/ ___/_____/ /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/
 | 
			
		||||
 / /_/ / /_/ / /  /_____/ ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_  
 | 
			
		||||
/_____/\__,_/_/        /_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/  
 | 
			
		||||
                                                                      
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/cloudreve
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/cloudreve
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   ________                __                  
 | 
			
		||||
  / ____/ /___  __  ______/ /_______ _   _____ 
 | 
			
		||||
 / /   / / __ \/ / / / __  / ___/ _ \ | / / _ \
 | 
			
		||||
/ /___/ / /_/ / /_/ / /_/ / /  /  __/ |/ /  __/
 | 
			
		||||
\____/_/\____/\__,_/\__,_/_/   \___/|___/\___/ 
 | 
			
		||||
                                               
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/itsm-ng
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/itsm-ng
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    _______________ __  ___      _   ________
 | 
			
		||||
   /  _/_  __/ ___//  |/  /     / | / / ____/
 | 
			
		||||
   / /  / /  \__ \/ /|_/ /_____/  |/ / / __  
 | 
			
		||||
 _/ /  / /  ___/ / /  / /_____/ /|  / /_/ /  
 | 
			
		||||
/___/ /_/  /____/_/  /_/     /_/ |_/\____/   
 | 
			
		||||
                                             
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/kapowarr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/kapowarr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __ __                                         
 | 
			
		||||
   / //_/___ _____  ____ _      ______ ___________
 | 
			
		||||
  / ,< / __ `/ __ \/ __ \ | /| / / __ `/ ___/ ___/
 | 
			
		||||
 / /| / /_/ / /_/ / /_/ / |/ |/ / /_/ / /  / /    
 | 
			
		||||
/_/ |_\__,_/ .___/\____/|__/|__/\__,_/_/  /_/     
 | 
			
		||||
          /_/                                     
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/librespeed-rust
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/librespeed-rust
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __    _ __                                       __      ____             __ 
 | 
			
		||||
   / /   (_) /_  ________  _________  ___  ___  ____/ /     / __ \__  _______/ /_
 | 
			
		||||
  / /   / / __ \/ ___/ _ \/ ___/ __ \/ _ \/ _ \/ __  /_____/ /_/ / / / / ___/ __/
 | 
			
		||||
 / /___/ / /_/ / /  /  __(__  ) /_/ /  __/  __/ /_/ /_____/ _, _/ /_/ (__  ) /_  
 | 
			
		||||
/_____/_/_.___/_/   \___/____/ .___/\___/\___/\__,_/     /_/ |_|\__,_/____/\__/  
 | 
			
		||||
                            /_/                                                  
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/linkstack
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/linkstack
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __    _       __   _____ __             __  
 | 
			
		||||
   / /   (_)___  / /__/ ___// /_____ ______/ /__
 | 
			
		||||
  / /   / / __ \/ //_/\__ \/ __/ __ `/ ___/ //_/
 | 
			
		||||
 / /___/ / / / / ,<  ___/ / /_/ /_/ / /__/ ,<   
 | 
			
		||||
/_____/_/_/ /_/_/|_|/____/\__/\__,_/\___/_/|_|  
 | 
			
		||||
                                                
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/mealie
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/mealie
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __  ___           ___    
 | 
			
		||||
   /  |/  /__  ____ _/ (_)__ 
 | 
			
		||||
  / /|_/ / _ \/ __ `/ / / _ \
 | 
			
		||||
 / /  / /  __/ /_/ / / /  __/
 | 
			
		||||
/_/  /_/\___/\__,_/_/_/\___/ 
 | 
			
		||||
                             
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/salt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/salt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   _____       ____ 
 | 
			
		||||
  / ___/____ _/ / /_
 | 
			
		||||
  \__ \/ __ `/ / __/
 | 
			
		||||
 ___/ / /_/ / / /_  
 | 
			
		||||
/____/\__,_/_/\__/  
 | 
			
		||||
                    
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/teamspeak-server
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/teamspeak-server
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
  ______                                           __        _____                          
 | 
			
		||||
 /_  __/__  ____ _____ ___  _________  ___  ____ _/ /__     / ___/___  ______   _____  _____
 | 
			
		||||
  / / / _ \/ __ `/ __ `__ \/ ___/ __ \/ _ \/ __ `/ //_/_____\__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
			
		||||
 / / /  __/ /_/ / / / / / (__  ) /_/ /  __/ /_/ / ,< /_____/__/ /  __/ /   | |/ /  __/ /    
 | 
			
		||||
/_/  \___/\__,_/_/ /_/ /_/____/ .___/\___/\__,_/_/|_|     /____/\___/_/    |___/\___/_/     
 | 
			
		||||
                             /_/                                                            
 | 
			
		||||
@@ -27,18 +27,18 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
    mv /opt/"${APP}_version.txt" ~/.headscale
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.headscale 2>/dev/null)" ]] || [[ ! -f ~/.headscale ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop headscale
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    curl -fsSL "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb")
 | 
			
		||||
    dpkg -i headscale_${RELEASE}_linux_amd64.deb
 | 
			
		||||
    rm headscale_${RELEASE}_linux_amd64.deb
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
    fetch_and_deploy_gh_release "headscale" "juanfont/headscale" "binary"
 | 
			
		||||
    fetch_and_deploy_gh_release "headscale-admin" "GoodiesHQ/headscale-admin" "prebuild" "latest" "/opt/headscale-admin" "admin.zip"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    # Temporary fix until headscale project resolves service getting disabled on updates.
 | 
			
		||||
 
 | 
			
		||||
@@ -48,6 +48,7 @@ source /opt/homarr/.env
 | 
			
		||||
set +a
 | 
			
		||||
export DB_DIALECT='sqlite'
 | 
			
		||||
export AUTH_SECRET=$(openssl rand -base64 32)
 | 
			
		||||
export CRON_JOB_API_KEY=$(openssl rand -base64 32)
 | 
			
		||||
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
 | 
			
		||||
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
 | 
			
		||||
  dirname=$(basename "$dir")
 | 
			
		||||
@@ -114,6 +115,7 @@ source /opt/homarr/.env
 | 
			
		||||
set +a
 | 
			
		||||
export DB_DIALECT='sqlite'
 | 
			
		||||
export AUTH_SECRET=$(openssl rand -base64 32)
 | 
			
		||||
export CRON_JOB_API_KEY=$(openssl rand -base64 32)
 | 
			
		||||
node /opt/homarr_db/migrations/$DB_DIALECT/migrate.cjs /opt/homarr_db/migrations/$DB_DIALECT
 | 
			
		||||
for dir in $(find /opt/homarr_db/migrations/migrations -mindepth 1 -maxdepth 1 -type d); do
 | 
			
		||||
  dirname=$(basename "$dir")
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ function update_script() {
 | 
			
		||||
    rm -rf homepage-${RELEASE}
 | 
			
		||||
    cd /opt/homepage
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    $STD npx --yes update-browserslist-db@latest
 | 
			
		||||
    $STD pnpm update --no-save caniuse-lite
 | 
			
		||||
    export NEXT_PUBLIC_VERSION="v$RELEASE"
 | 
			
		||||
    export NEXT_PUBLIC_REVISION="source"
 | 
			
		||||
    export NEXT_PUBLIC_BUILDTIME=$(curl -fsSL https://api.github.com/repos/gethomepage/homepage/releases/latest | jq -r '.published_at')
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										277
									
								
								ct/immich.sh
									
									
									
									
									
								
							
							
						
						
									
										277
									
								
								ct/immich.sh
									
									
									
									
									
								
							@@ -51,136 +51,15 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ -f ~/.immich_library_revisions ]]; then
 | 
			
		||||
    libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
 | 
			
		||||
    readarray -d '' NEW_REVISIONS < <(for library in "${libraries[@]}"; do
 | 
			
		||||
      echo "$library: $(curl -fsSL https://raw.githubusercontent.com/immich-app/base-images/refs/heads/main/server/sources/"$library".json | jq -cr '.revision' -)"
 | 
			
		||||
    done)
 | 
			
		||||
    UPDATED_REVISIONS="$(comm -13 <(sort ~/.immich_library_revisions) <(echo -n "${NEW_REVISIONS[@]}" | sort))"
 | 
			
		||||
    if [[ "$UPDATED_REVISIONS" ]]; then
 | 
			
		||||
      readarray -t NAMES < <(echo "$UPDATED_REVISIONS" | awk -F ':' '{print $1}')
 | 
			
		||||
      rm -rf "$SOURCE_DIR"
 | 
			
		||||
      mkdir -p "$SOURCE_DIR"
 | 
			
		||||
    cd "$BASE_DIR"
 | 
			
		||||
    $STD git pull
 | 
			
		||||
      cd "$STAGING_DIR"
 | 
			
		||||
      for name in "${NAMES[@]}"; do
 | 
			
		||||
        if [[ "$name" == "libjxl" ]]; then
 | 
			
		||||
          msg_info "Recompiling libjxl"
 | 
			
		||||
          SOURCE=${SOURCE_DIR}/libjxl
 | 
			
		||||
          JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
 | 
			
		||||
          JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
 | 
			
		||||
          : "${LIBJXL_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libjxl.json)}"
 | 
			
		||||
          $STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
 | 
			
		||||
          cd "$SOURCE"
 | 
			
		||||
          $STD git reset --hard "$LIBJXL_REVISION"
 | 
			
		||||
          $STD git submodule update --init --recursive --depth 1 --recommend-shallow
 | 
			
		||||
          $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
 | 
			
		||||
          $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
 | 
			
		||||
          mkdir build
 | 
			
		||||
          cd build
 | 
			
		||||
          $STD cmake \
 | 
			
		||||
            -DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
            -DBUILD_TESTING=OFF \
 | 
			
		||||
            -DJPEGXL_ENABLE_DOXYGEN=OFF \
 | 
			
		||||
            -DJPEGXL_ENABLE_MANPAGES=OFF \
 | 
			
		||||
            -DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \
 | 
			
		||||
            -DJPEGXL_ENABLE_BENCHMARK=OFF \
 | 
			
		||||
            -DJPEGXL_ENABLE_EXAMPLES=OFF \
 | 
			
		||||
            -DJPEGXL_FORCE_SYSTEM_BROTLI=ON \
 | 
			
		||||
            -DJPEGXL_FORCE_SYSTEM_HWY=ON \
 | 
			
		||||
            -DJPEGXL_ENABLE_JPEGLI=ON \
 | 
			
		||||
            -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \
 | 
			
		||||
            -DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \
 | 
			
		||||
            -DJPEGXL_ENABLE_PLUGINS=ON \
 | 
			
		||||
            -DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \
 | 
			
		||||
            -DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \
 | 
			
		||||
            -DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \
 | 
			
		||||
            ..
 | 
			
		||||
          $STD cmake --build . -- -j"$(nproc)"
 | 
			
		||||
          $STD cmake --install .
 | 
			
		||||
          ldconfig /usr/local/lib
 | 
			
		||||
          $STD make clean
 | 
			
		||||
          cd "$STAGING_DIR"
 | 
			
		||||
          rm -rf "$SOURCE"/{build,third_party}
 | 
			
		||||
          msg_ok "Recompiled libjxl"
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ "$name" == "libheif" ]]; then
 | 
			
		||||
          msg_info "Recompiling libheif"
 | 
			
		||||
          SOURCE=${SOURCE_DIR}/libheif
 | 
			
		||||
          : "${LIBHEIF_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libheif.json)}"
 | 
			
		||||
          $STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
 | 
			
		||||
          cd "$SOURCE"
 | 
			
		||||
          $STD git reset --hard "$LIBHEIF_REVISION"
 | 
			
		||||
          mkdir build
 | 
			
		||||
          cd build
 | 
			
		||||
          $STD cmake --preset=release-noplugins \
 | 
			
		||||
            -DWITH_DAV1D=ON \
 | 
			
		||||
            -DENABLE_PARALLEL_TILE_DECODING=ON \
 | 
			
		||||
            -DWITH_LIBSHARPYUV=ON \
 | 
			
		||||
            -DWITH_LIBDE265=ON \
 | 
			
		||||
            -DWITH_AOM_DECODER=OFF \
 | 
			
		||||
            -DWITH_AOM_ENCODER=OFF \
 | 
			
		||||
            -DWITH_X265=OFF \
 | 
			
		||||
            -DWITH_EXAMPLES=OFF \
 | 
			
		||||
            ..
 | 
			
		||||
          $STD make install -j "$(nproc)"
 | 
			
		||||
          ldconfig /usr/local/lib
 | 
			
		||||
          $STD make clean
 | 
			
		||||
          cd "$STAGING_DIR"
 | 
			
		||||
          rm -rf "$SOURCE"/build
 | 
			
		||||
          msg_ok "Recompiled libheif"
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ "$name" == "libraw" ]]; then
 | 
			
		||||
          msg_info "Recompiling libraw"
 | 
			
		||||
          SOURCE=${SOURCE_DIR}/libraw
 | 
			
		||||
          : "${LIBRAW_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libraw.json)}"
 | 
			
		||||
          $STD git clone https://github.com/libraw/libraw.git "$SOURCE"
 | 
			
		||||
          cd "$SOURCE"
 | 
			
		||||
          $STD git reset --hard "$LIBRAW_REVISION"
 | 
			
		||||
          $STD autoreconf --install
 | 
			
		||||
          $STD ./configure
 | 
			
		||||
          $STD make -j"$(nproc)"
 | 
			
		||||
          $STD make install
 | 
			
		||||
          ldconfig /usr/local/lib
 | 
			
		||||
          $STD make clean
 | 
			
		||||
          cd "$STAGING_DIR"
 | 
			
		||||
          msg_ok "Recompiled libraw"
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ "$name" == "imagemagick" ]]; then
 | 
			
		||||
          msg_info "Recompiling ImageMagick"
 | 
			
		||||
          SOURCE=$SOURCE_DIR/imagemagick
 | 
			
		||||
          : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/imagemagick.json)}"
 | 
			
		||||
          $STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
 | 
			
		||||
          cd "$SOURCE"
 | 
			
		||||
          $STD git reset --hard "$IMAGEMAGICK_REVISION"
 | 
			
		||||
          $STD ./configure --with-modules
 | 
			
		||||
          $STD make -j"$(nproc)"
 | 
			
		||||
          $STD make install
 | 
			
		||||
          ldconfig /usr/local/lib
 | 
			
		||||
          $STD make clean
 | 
			
		||||
          cd "$STAGING_DIR"
 | 
			
		||||
          msg_ok "Recompiled ImageMagick"
 | 
			
		||||
        fi
 | 
			
		||||
        if [[ "$name" == "libvips" ]]; then
 | 
			
		||||
          msg_info "Recompiling libvips"
 | 
			
		||||
          SOURCE=$SOURCE_DIR/libvips
 | 
			
		||||
          : "${LIBVIPS_REVISION:=$(jq -cr '.revision' $BASE_DIR/server/sources/libvips.json)}"
 | 
			
		||||
          $STD git clone https://github.com/libvips/libvips.git "$SOURCE"
 | 
			
		||||
          cd "$SOURCE"
 | 
			
		||||
          $STD git reset --hard "$LIBVIPS_REVISION"
 | 
			
		||||
          $STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
 | 
			
		||||
          cd build
 | 
			
		||||
          $STD ninja install
 | 
			
		||||
          ldconfig /usr/local/lib
 | 
			
		||||
          cd "$STAGING_DIR"
 | 
			
		||||
          rm -rf "$SOURCE"/build
 | 
			
		||||
          msg_ok "Recompiled libvips"
 | 
			
		||||
        fi
 | 
			
		||||
    for library in "${libraries[@]}"; do
 | 
			
		||||
      compile_"$library"
 | 
			
		||||
    done
 | 
			
		||||
      echo -n "${NEW_REVISIONS[@]}" >~/.immich_library_revisions
 | 
			
		||||
      msg_ok "Image-processing libraries compiled"
 | 
			
		||||
    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.135.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
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
    exit
 | 
			
		||||
@@ -224,7 +103,7 @@ function update_script() {
 | 
			
		||||
  mkdir -p "$ML_DIR"
 | 
			
		||||
  rm -rf "$SRC_DIR"
 | 
			
		||||
 | 
			
		||||
  fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "latest" "$SRC_DIR"
 | 
			
		||||
  fetch_and_deploy_gh_release "immich" "immich-app/immich" "tarball" "v1.135.3" "$SRC_DIR"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} web and microservices"
 | 
			
		||||
  cd "$SRC_DIR"/server
 | 
			
		||||
@@ -245,6 +124,10 @@ function update_script() {
 | 
			
		||||
  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 LICENSE "$APP_DIR"
 | 
			
		||||
  cd "$APP_DIR"
 | 
			
		||||
  export SHARP_FORCE_GLOBAL_LIBVIPS=true
 | 
			
		||||
  $STD npm install sharp
 | 
			
		||||
  rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
 | 
			
		||||
  msg_ok "Updated ${APP} web and microservices"
 | 
			
		||||
 | 
			
		||||
  cd "$SRC_DIR"/machine-learning
 | 
			
		||||
@@ -276,8 +159,6 @@ function update_script() {
 | 
			
		||||
  ln -s "$GEO_DIR" "$APP_DIR"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating Immich CLI"
 | 
			
		||||
  $STD npm install --build-from-source sharp
 | 
			
		||||
  rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
 | 
			
		||||
  $STD npm i -g @immich/cli
 | 
			
		||||
  msg_ok "Updated Immich CLI"
 | 
			
		||||
 | 
			
		||||
@@ -293,6 +174,144 @@ function update_script() {
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function compile_libjxl() {
 | 
			
		||||
  SOURCE=${SOURCE_DIR}/libjxl
 | 
			
		||||
  JPEGLI_LIBJPEG_LIBRARY_SOVERSION="62"
 | 
			
		||||
  JPEGLI_LIBJPEG_LIBRARY_VERSION="62.3.0"
 | 
			
		||||
  : "${LIBJXL_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libjxl.json)}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBJXL_REVISION" != "$(grep 'libjxl' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libjxl"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/libjxl/libjxl.git "$SOURCE"
 | 
			
		||||
    cd "$SOURCE"
 | 
			
		||||
    $STD git reset --hard "$LIBJXL_REVISION"
 | 
			
		||||
    $STD git submodule update --init --recursive --depth 1 --recommend-shallow
 | 
			
		||||
    $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-empty-dht-marker.patch
 | 
			
		||||
    $STD git apply "$BASE_DIR"/server/sources/libjxl-patches/jpegli-icc-warning.patch
 | 
			
		||||
    mkdir build
 | 
			
		||||
    cd build
 | 
			
		||||
    $STD cmake \
 | 
			
		||||
      -DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
      -DBUILD_TESTING=OFF \
 | 
			
		||||
      -DJPEGXL_ENABLE_DOXYGEN=OFF \
 | 
			
		||||
      -DJPEGXL_ENABLE_MANPAGES=OFF \
 | 
			
		||||
      -DJPEGXL_ENABLE_PLUGIN_GIMP210=OFF \
 | 
			
		||||
      -DJPEGXL_ENABLE_BENCHMARK=OFF \
 | 
			
		||||
      -DJPEGXL_ENABLE_EXAMPLES=OFF \
 | 
			
		||||
      -DJPEGXL_FORCE_SYSTEM_BROTLI=ON \
 | 
			
		||||
      -DJPEGXL_FORCE_SYSTEM_HWY=ON \
 | 
			
		||||
      -DJPEGXL_ENABLE_JPEGLI=ON \
 | 
			
		||||
      -DJPEGXL_ENABLE_JPEGLI_LIBJPEG=ON \
 | 
			
		||||
      -DJPEGXL_INSTALL_JPEGLI_LIBJPEG=ON \
 | 
			
		||||
      -DJPEGXL_ENABLE_PLUGINS=ON \
 | 
			
		||||
      -DJPEGLI_LIBJPEG_LIBRARY_SOVERSION="$JPEGLI_LIBJPEG_LIBRARY_SOVERSION" \
 | 
			
		||||
      -DJPEGLI_LIBJPEG_LIBRARY_VERSION="$JPEGLI_LIBJPEG_LIBRARY_VERSION" \
 | 
			
		||||
      -DLIBJPEG_TURBO_VERSION_NUMBER=2001005 \
 | 
			
		||||
      ..
 | 
			
		||||
    $STD cmake --build . -- -j"$(nproc)"
 | 
			
		||||
    $STD cmake --install .
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    rm -rf "$SOURCE"/{build,third_party}
 | 
			
		||||
    msg_ok "Recompiled libjxl"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function compile_libheif() {
 | 
			
		||||
  SOURCE=${SOURCE_DIR}/libheif
 | 
			
		||||
  if ! dpkg -l | grep -q libaom; then
 | 
			
		||||
    $STD apt-get install -y libaom-dev
 | 
			
		||||
    local update="required"
 | 
			
		||||
  fi
 | 
			
		||||
  : "${LIBHEIF_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libheif.json)}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBHEIF_REVISION" != "$(grep 'libheif' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libheif"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/strukturag/libheif.git "$SOURCE"
 | 
			
		||||
    cd "$SOURCE"
 | 
			
		||||
    $STD git reset --hard "$LIBHEIF_REVISION"
 | 
			
		||||
    mkdir build
 | 
			
		||||
    cd build
 | 
			
		||||
    $STD cmake --preset=release-noplugins \
 | 
			
		||||
      -DWITH_DAV1D=ON \
 | 
			
		||||
      -DENABLE_PARALLEL_TILE_DECODING=ON \
 | 
			
		||||
      -DWITH_LIBSHARPYUV=ON \
 | 
			
		||||
      -DWITH_LIBDE265=ON \
 | 
			
		||||
      -DWITH_AOM_DECODER=OFF \
 | 
			
		||||
      -DWITH_AOM_ENCODER=ON \
 | 
			
		||||
      -DWITH_X265=OFF \
 | 
			
		||||
      -DWITH_EXAMPLES=OFF \
 | 
			
		||||
      ..
 | 
			
		||||
    $STD make install -j "$(nproc)"
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    rm -rf "$SOURCE"/build
 | 
			
		||||
    msg_ok "Recompiled libheif"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function compile_libraw() {
 | 
			
		||||
  SOURCE=${SOURCE_DIR}/libraw
 | 
			
		||||
  local update
 | 
			
		||||
  : "${LIBRAW_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libraw.json)}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$LIBRAW_REVISION" != "$(grep 'libraw' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling libraw"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/libraw/libraw.git "$SOURCE"
 | 
			
		||||
    cd "$SOURCE"
 | 
			
		||||
    $STD git reset --hard "$LIBRAW_REVISION"
 | 
			
		||||
    $STD autoreconf --install
 | 
			
		||||
    $STD ./configure
 | 
			
		||||
    $STD make -j"$(nproc)"
 | 
			
		||||
    $STD make install
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    msg_ok "Recompiled libraw"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function compile_imagemagick() {
 | 
			
		||||
  SOURCE=$SOURCE_DIR/imagemagick
 | 
			
		||||
  : "${IMAGEMAGICK_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/imagemagick.json)}"
 | 
			
		||||
  if [[ "${update:-}" ]] || [[ "$IMAGEMAGICK_REVISION" != "$(grep 'imagemagick' ~/.immich_library_revisions | awk '{print $2}')" ]]; then
 | 
			
		||||
    msg_info "Recompiling ImageMagick"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/ImageMagick/ImageMagick.git "$SOURCE"
 | 
			
		||||
    cd "$SOURCE"
 | 
			
		||||
    $STD git reset --hard "$IMAGEMAGICK_REVISION"
 | 
			
		||||
    $STD ./configure --with-modules
 | 
			
		||||
    $STD make -j"$(nproc)"
 | 
			
		||||
    $STD make install
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    $STD make clean
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    msg_ok "Recompiled ImageMagick"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function compile_libvips() {
 | 
			
		||||
  SOURCE=$SOURCE_DIR/libvips
 | 
			
		||||
  # : "${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
 | 
			
		||||
    msg_info "Recompiling libvips"
 | 
			
		||||
    if [[ -d "$SOURCE" ]]; then rm -rf "$SOURCE"; fi
 | 
			
		||||
    $STD git clone https://github.com/libvips/libvips.git "$SOURCE"
 | 
			
		||||
    cd "$SOURCE"
 | 
			
		||||
    $STD git reset --hard "$LIBVIPS_REVISION"
 | 
			
		||||
    $STD meson setup build --buildtype=release --libdir=lib -Dintrospection=disabled -Dtiff=disabled
 | 
			
		||||
    cd build
 | 
			
		||||
    $STD ninja install
 | 
			
		||||
    ldconfig /usr/local/lib
 | 
			
		||||
    cd "$STAGING_DIR"
 | 
			
		||||
    rm -rf "$SOURCE"/build
 | 
			
		||||
    msg_ok "Recompiled libvips"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										47
									
								
								ct/itsm-ng.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								ct/itsm-ng.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
#!/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: Florianb63
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://itsm-ng.com/
 | 
			
		||||
 | 
			
		||||
APP="ITSM-NG"
 | 
			
		||||
var_tags="${var_tags:-asset-management;foss}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /etc/itsm-ng/config_db.php ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} LXC"
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get -y upgrade
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
 | 
			
		||||
  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}"
 | 
			
		||||
							
								
								
									
										66
									
								
								ct/kapowarr.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								ct/kapowarr.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
#!/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: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/Casvt/Kapowarr
 | 
			
		||||
 | 
			
		||||
APP="Kapowarr"
 | 
			
		||||
var_tags="${var_tags:-Arr}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-256}"
 | 
			
		||||
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 [[ ! -f /etc/systemd/system/kapowarr.service ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/Casvt/Kapowarr/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat $HOME/.kapowarr)" ]] || [[ ! -f $HOME/.kapowarr ]]; then
 | 
			
		||||
    setup_uv 
 | 
			
		||||
    
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop kapowarr
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    mv /opt/kapowarr/db /opt/
 | 
			
		||||
    msg_ok "Backup Created"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "kapowarr" "Casvt/Kapowarr"
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    mv /opt/db /opt/kapowarr
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start kapowarr
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  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}http://${IP}:5656${CL}"
 | 
			
		||||
@@ -27,31 +27,43 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/karakeep-app/karakeep/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  PREV_RELEASE=$(cat /opt/${APP}_version.txt)
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then
 | 
			
		||||
  if [[ -f ~/.karakeep && "$RELEASE" == "$(cat ~/.karakeep)" ]]; then
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Stopping Services"
 | 
			
		||||
  systemctl stop karakeep-web karakeep-workers karakeep-browser
 | 
			
		||||
  msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating yt-dlp"
 | 
			
		||||
  $STD yt-dlp --update-to nightly
 | 
			
		||||
  msg_ok "Updated yt-dlp"
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    if [[ $(corepack -v) < "0.31.0" ]]; then
 | 
			
		||||
      $STD npm install -g corepack@0.31.0
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ "${PREV_RELEASE}" < 0.23.0 ]]; then
 | 
			
		||||
 | 
			
		||||
  msg_info "Prepare update"
 | 
			
		||||
  if [[ -f /opt/${APP}_version.txt && "$(cat /opt/${APP}_version.txt)" < "0.23.0" ]]; then
 | 
			
		||||
    $STD apt-get install -y graphicsmagick ghostscript
 | 
			
		||||
  fi
 | 
			
		||||
    cd /opt
 | 
			
		||||
  if [[ -f /opt/karakeep/.env ]] && [[ ! -f /etc/karakeep/karakeep.env ]]; then
 | 
			
		||||
    mkdir -p /etc/karakeep
 | 
			
		||||
    mv /opt/karakeep/.env /etc/karakeep/karakeep.env
 | 
			
		||||
  fi
 | 
			
		||||
  rm -rf /opt/karakeep
 | 
			
		||||
    curl -fsSL "https://github.com/karakeep-app/karakeep/archive/refs/tags/v${RELEASE}.zip" -o "v${RELEASE}.zip"
 | 
			
		||||
    $STD unzip "v${RELEASE}.zip"
 | 
			
		||||
    mv karakeep-"${RELEASE}" /opt/karakeep
 | 
			
		||||
  msg_ok "Update prepared"
 | 
			
		||||
 | 
			
		||||
  fetch_and_deploy_gh_release "karakeep" "karakeep-app/karakeep"
 | 
			
		||||
  if command -v corepack >/dev/null; then
 | 
			
		||||
    $STD corepack disable
 | 
			
		||||
  fi
 | 
			
		||||
  MODULE_VERSION="$(jq -r '.packageManager | split("@")[1]' /opt/karakeep/package.json)"
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="pnpm@${MODULE_VERSION}" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
  export PUPPETEER_SKIP_DOWNLOAD="true"
 | 
			
		||||
  export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD="true"
 | 
			
		||||
  export NEXT_TELEMETRY_DISABLED=1
 | 
			
		||||
  export CI="true"
 | 
			
		||||
  cd /opt/karakeep/apps/web
 | 
			
		||||
  $STD pnpm install --frozen-lockfile
 | 
			
		||||
  $STD pnpm build
 | 
			
		||||
@@ -60,26 +72,22 @@ function update_script() {
 | 
			
		||||
  cd /opt/karakeep/apps/cli
 | 
			
		||||
  $STD pnpm install --frozen-lockfile
 | 
			
		||||
  $STD pnpm build
 | 
			
		||||
    cd /opt/karakeep/apps/mcp
 | 
			
		||||
    $STD pnpm install --frozen-lockfile
 | 
			
		||||
    $STD pnpm build
 | 
			
		||||
  export DATA_DIR=/opt/karakeep_data
 | 
			
		||||
  cd /opt/karakeep/packages/db
 | 
			
		||||
  $STD pnpm migrate
 | 
			
		||||
    sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env
 | 
			
		||||
  $STD pnpm store prune
 | 
			
		||||
  sed -i "s/^SERVER_VERSION=.*$/SERVER_VERSION=${RELEASE}/" /etc/karakeep/karakeep.env
 | 
			
		||||
  msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting Services"
 | 
			
		||||
  systemctl start karakeep-browser karakeep-workers karakeep-web
 | 
			
		||||
  msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
  msg_info "Cleaning up"
 | 
			
		||||
    rm -R /opt/v"${RELEASE}".zip
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
  $STD apt-get autoremove -y
 | 
			
		||||
  $STD apt-get autoclean -y
 | 
			
		||||
  msg_ok "Cleaned"
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required.  ${APP} is already at ${RELEASE}."
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,15 @@ function update_script() {
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  COMPOSE_BASENAME=$(basename "$COMPOSE_FILE")
 | 
			
		||||
 | 
			
		||||
  if [[ "$COMPOSE_BASENAME" == "sqlite.compose.yaml" || "$COMPOSE_BASENAME" == "postgres.compose.yaml" ]]; then
 | 
			
		||||
    msg_error "❌ Detected outdated Komodo setup using SQLite or PostgreSQL (FerretDB v1)."
 | 
			
		||||
    echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}"
 | 
			
		||||
    echo -e "${YW}Please follow the migration guide:${CL}"
 | 
			
		||||
    echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)"
 | 
			
		||||
  cp "$COMPOSE_FILE" "$BACKUP_FILE" || {
 | 
			
		||||
    msg_error "Failed to create backup of ${COMPOSE_BASENAME}!"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										54
									
								
								ct/librespeed-rust.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								ct/librespeed-rust.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
#!/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: Joseph Stubberfield (stubbers)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/librespeed/speedtest-rust
 | 
			
		||||
 | 
			
		||||
APP="Librespeed-Rust"
 | 
			
		||||
var_tags="${var_tags:-network}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /var/lib/librespeed-rs ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/librespeed/speedtest-rust/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "v([^"]+).*/\1/')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.librespeed 2>/dev/null)" ]] || [[ ! -f ~/.librespeed ]]; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop librespeed-rs
 | 
			
		||||
    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"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start librespeed-rs
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
  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}:8080${CL}"
 | 
			
		||||
							
								
								
									
										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}"
 | 
			
		||||
@@ -37,6 +37,7 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    mv /opt/linkwarden/.env /opt/.env
 | 
			
		||||
    [ -d /opt/linkwarden/data ] && mv /opt/linkwarden/data /opt/data.bak
 | 
			
		||||
    rm -rf /opt/linkwarden
 | 
			
		||||
    fetch_and_deploy_gh_release "linkwarden" "linkwarden/linkwarden"
 | 
			
		||||
    cd /opt/linkwarden
 | 
			
		||||
@@ -47,6 +48,7 @@ function update_script() {
 | 
			
		||||
    $STD yarn prisma:generate
 | 
			
		||||
    $STD yarn web:build
 | 
			
		||||
    $STD yarn prisma:deploy
 | 
			
		||||
    [ -d /opt/data.bak ] && mv /opt/data.bak /opt/linkwarden/data
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								ct/mafl.sh
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								ct/mafl.sh
									
									
									
									
									
								
							@@ -27,18 +27,31 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  msg_info "Updating Mafl to v${RELEASE} (Patience)"
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.mafl 2>/dev/null)" ]] || [[ ! -f ~/.mafl ]]; then
 | 
			
		||||
    msg_info "Stopping Mafl service"
 | 
			
		||||
    systemctl stop mafl
 | 
			
		||||
  curl -fsSL "https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/hywax/mafl/archive/refs/tags/v${RELEASE}.tar.gz")
 | 
			
		||||
  tar -xzf v${RELEASE}.tar.gz
 | 
			
		||||
  cp -r mafl-${RELEASE}/* /opt/mafl/
 | 
			
		||||
  rm -rf mafl-${RELEASE}
 | 
			
		||||
    msg_ok "Service stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Performing backup"
 | 
			
		||||
    mkdir -p /opt/mafl-backup/data
 | 
			
		||||
    mv /opt/mafl/data /opt/mafl-backup/data
 | 
			
		||||
    rm -rf /opt/mafl
 | 
			
		||||
    msg_ok "Backup complete"
 | 
			
		||||
    
 | 
			
		||||
    fetch_and_deploy_gh_release "mafl" "hywax/mafl"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Mafl to v${RELEASE}"
 | 
			
		||||
    cd /opt/mafl
 | 
			
		||||
    yarn install
 | 
			
		||||
    yarn build
 | 
			
		||||
    mv /opt/mafl-backup/data /opt/mafl/data
 | 
			
		||||
    systemctl start mafl
 | 
			
		||||
    msg_ok "Updated Mafl to v${RELEASE}"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										97
									
								
								ct/mealie.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								ct/mealie.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://mealie.io
 | 
			
		||||
 | 
			
		||||
APP="Mealie"
 | 
			
		||||
var_tags="${var_tags:-recipes}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/mealie ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/mealie-recipes/mealie/releases/latest | jq -r '.tag_name | sub("^v"; "")')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.mealie 2>/dev/null)" ]] || [[ ! -f ~/.mealie ]]; then
 | 
			
		||||
 | 
			
		||||
    PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
    NODE_MODULE="yarn" NODE_VERSION="20" setup_nodejs
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop mealie
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up .env and start.sh"
 | 
			
		||||
    cp -f /opt/mealie/mealie.env /opt/mealie/mealie.env.bak
 | 
			
		||||
    cp -f /opt/mealie/start.sh /opt/mealie/start.sh.bak
 | 
			
		||||
    msg_ok "Backup completed"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "mealie" "mealie-recipes/mealie" "tarball" "latest" "/opt/mealie"
 | 
			
		||||
 | 
			
		||||
    msg_info "Rebuilding Frontend"
 | 
			
		||||
    export NUXT_TELEMETRY_DISABLED=1
 | 
			
		||||
    cd /opt/mealie/frontend
 | 
			
		||||
    $STD yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false --network-timeout 1000000
 | 
			
		||||
    $STD yarn generate
 | 
			
		||||
    cp -r /opt/mealie/frontend/dist /opt/mealie/mealie/frontend
 | 
			
		||||
    msg_ok "Frontend rebuilt"
 | 
			
		||||
 | 
			
		||||
    msg_info "Rebuilding Backend Environment"
 | 
			
		||||
    cd /opt/mealie
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/poetry self add "poetry-plugin-export>=1.9"
 | 
			
		||||
    MEALIE_VERSION=$(/opt/mealie/.venv/bin/poetry version --short)
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/poetry build --output dist
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/poetry export --only=main --extras=pgsql --output=dist/requirements.txt
 | 
			
		||||
    echo "mealie[pgsql]==$MEALIE_VERSION \\" >>dist/requirements.txt
 | 
			
		||||
    /opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.whl | tail -n1 | tr -d '\n' >>dist/requirements.txt
 | 
			
		||||
    echo " \\" >>dist/requirements.txt
 | 
			
		||||
    /opt/mealie/.venv/bin/poetry run pip hash dist/mealie-$MEALIE_VERSION*.tar.gz | tail -n1 >>dist/requirements.txt
 | 
			
		||||
    msg_ok "Backend prepared"
 | 
			
		||||
 | 
			
		||||
    msg_info "Finalize Installation"
 | 
			
		||||
    $STD /opt/mealie/.venv/bin/uv pip install --require-hashes -r /opt/mealie/dist/requirements.txt --find-links dist
 | 
			
		||||
    msg_ok "Mealie installed"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring Configuration"
 | 
			
		||||
    mv -f /opt/mealie/mealie.env.bak /opt/mealie/mealie.env
 | 
			
		||||
    mv -f /opt/mealie/start.sh.bak /opt/mealie/start.sh
 | 
			
		||||
    chmod +x /opt/mealie/start.sh
 | 
			
		||||
    msg_ok "Configuration restored"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start mealie
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update to $RELEASE Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
 | 
			
		||||
@@ -27,15 +27,34 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if ! command -v pnpm &>/dev/null; then
 | 
			
		||||
    msg_info "Installing pnpm"
 | 
			
		||||
    #export NODE_OPTIONS=--openssl-legacy-provider
 | 
			
		||||
    $STD npm install -g pnpm@8.15
 | 
			
		||||
    msg_ok "Installed pnpm"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
 | 
			
		||||
    grep "tag_name" |
 | 
			
		||||
    awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
 | 
			
		||||
  msg_info "Downloading NPM v${RELEASE}"
 | 
			
		||||
  curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
 | 
			
		||||
  cd nginx-proxy-manager-"${RELEASE}" || exit
 | 
			
		||||
  msg_ok "Downloaded NPM v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Building Frontend"
 | 
			
		||||
  (
 | 
			
		||||
    sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
 | 
			
		||||
    sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
 | 
			
		||||
    cd ./frontend || exit
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    $STD pnpm upgrade
 | 
			
		||||
    $STD pnpm run build
 | 
			
		||||
  )
 | 
			
		||||
  msg_ok "Built Frontend"
 | 
			
		||||
 | 
			
		||||
  msg_info "Stopping Services"
 | 
			
		||||
  systemctl stop openresty
 | 
			
		||||
  systemctl stop npm
 | 
			
		||||
@@ -50,18 +69,11 @@ function update_script() {
 | 
			
		||||
    "$STD" /var/cache/nginx
 | 
			
		||||
  msg_ok "Cleaned Old Files"
 | 
			
		||||
 | 
			
		||||
  msg_info "Downloading NPM v${RELEASE}"
 | 
			
		||||
  curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
 | 
			
		||||
  cd nginx-proxy-manager-"${RELEASE}"
 | 
			
		||||
  msg_ok "Downloaded NPM v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Setting up Enviroment"
 | 
			
		||||
  msg_info "Setting up Environment"
 | 
			
		||||
  ln -sf /usr/bin/python3 /usr/bin/python
 | 
			
		||||
  ln -sf /usr/bin/certbot /opt/certbot/bin/certbot
 | 
			
		||||
  ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
 | 
			
		||||
  ln -sf /usr/local/openresty/nginx/ /etc/nginx
 | 
			
		||||
  sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
 | 
			
		||||
  sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
 | 
			
		||||
  sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
 | 
			
		||||
  NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
 | 
			
		||||
  for NGINX_CONF in $NGINX_CONFS; do
 | 
			
		||||
@@ -97,19 +109,12 @@ function update_script() {
 | 
			
		||||
    $STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem
 | 
			
		||||
  fi
 | 
			
		||||
  mkdir -p /app/global /app/frontend/images
 | 
			
		||||
  cp -r frontend/dist/* /app/frontend
 | 
			
		||||
  cp -r frontend/app-images/* /app/frontend/images
 | 
			
		||||
  cp -r backend/* /app
 | 
			
		||||
  cp -r global/* /app/global
 | 
			
		||||
  $STD python3 -m pip install --no-cache-dir certbot-dns-cloudflare
 | 
			
		||||
  msg_ok "Setup Enviroment"
 | 
			
		||||
 | 
			
		||||
  msg_info "Building Frontend"
 | 
			
		||||
  cd ./frontend
 | 
			
		||||
  $STD pnpm install
 | 
			
		||||
  $STD pnpm upgrade
 | 
			
		||||
  $STD pnpm run build
 | 
			
		||||
  cp -r dist/* /app/frontend
 | 
			
		||||
  cp -r app-images/* /app/frontend/images
 | 
			
		||||
  msg_ok "Built Frontend"
 | 
			
		||||
  $STD python3 -m pip install --no-cache-dir --break-system-packages certbot-dns-cloudflare
 | 
			
		||||
  msg_ok "Setup Environment"
 | 
			
		||||
 | 
			
		||||
  msg_info "Initializing Backend"
 | 
			
		||||
  $STD rm -rf /app/config/default.json
 | 
			
		||||
@@ -128,7 +133,7 @@ function update_script() {
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
  fi
 | 
			
		||||
  cd /app
 | 
			
		||||
  cd /app || exit
 | 
			
		||||
  $STD pnpm install
 | 
			
		||||
  msg_ok "Initialized Backend"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -40,6 +40,7 @@ function update_script() {
 | 
			
		||||
    msg_info "Updating Ollama to ${RELEASE}"
 | 
			
		||||
    rm -rf /usr/local/lib/ollama
 | 
			
		||||
    rm -rf /usr/local/bin/ollama
 | 
			
		||||
    mkdir -p /usr/local/lib/ollama
 | 
			
		||||
    tar -xzf "${TMP_TAR}" -C /usr/local/lib/ollama
 | 
			
		||||
    ln -sf /usr/local/lib/ollama/bin/ollama /usr/local/bin/ollama
 | 
			
		||||
    echo "${RELEASE}" >/opt/Ollama_version.txt
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,7 @@ function update_script() {
 | 
			
		||||
  $STD dpkg -i "$OMADA_PKG"
 | 
			
		||||
  rm -f "$OMADA_PKG"
 | 
			
		||||
  msg_ok "Updated Omada Controller"
 | 
			
		||||
  exit 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -30,11 +30,11 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
  if [ -x "/usr/bin/ollama" ]; then
 | 
			
		||||
    msg_info "Updating Ollama"
 | 
			
		||||
    rm -rf /usr/lib/ollama
 | 
			
		||||
    rm -rf /usr/bin/ollama
 | 
			
		||||
    OLLAMA_VERSION=$(ollama -v | awk '{print $NF}')
 | 
			
		||||
    RELEASE=$(curl -s https://api.github.com/repos/ollama/ollama/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
			
		||||
    if [ "$OLLAMA_VERSION" != "$RELEASE" ]; then
 | 
			
		||||
      rm -rf /usr/lib/ollama
 | 
			
		||||
      rm -rf /usr/bin/ollama
 | 
			
		||||
      curl -fsSLO https://ollama.com/download/ollama-linux-amd64.tgz
 | 
			
		||||
      tar -C /usr -xzf ollama-linux-amd64.tgz
 | 
			
		||||
      rm -rf ollama-linux-amd64.tgz
 | 
			
		||||
@@ -57,7 +57,7 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  systemctl stop open-webui.service
 | 
			
		||||
  $STD npm install
 | 
			
		||||
  $STD npm install --force
 | 
			
		||||
  export NODE_OPTIONS="--max-old-space-size=3584"
 | 
			
		||||
  $STD npm run build
 | 
			
		||||
  cd ./backend
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								ct/peanut.sh
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								ct/peanut.sh
									
									
									
									
									
								
							@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
APP="PeaNUT"
 | 
			
		||||
var_tags="${var_tags:-network;ups;}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-3072}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-7}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
@@ -27,22 +27,31 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.peanut 2>/dev/null)" ]] || [[ ! -f ~/.peanut ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop peanut
 | 
			
		||||
    curl -fsSL "https://api.github.com/repos/Brandawg93/PeaNUT/tarball/${RELEASE}" -o "peanut.tar.gz"
 | 
			
		||||
    tar -xzf peanut.tar.gz -C /opt/peanut --strip-components=1
 | 
			
		||||
    rm peanut.tar.gz
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "peanut" "Brandawg93/PeaNUT" "tarball" "latest" "/opt/peanut"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    cd /opt/peanut
 | 
			
		||||
    $STD pnpm i
 | 
			
		||||
    $STD pnpm run build
 | 
			
		||||
    $STD pnpm run build:local
 | 
			
		||||
    cp -r .next/static .next/standalone/.next/
 | 
			
		||||
    mkdir -p /opt/peanut/.next/standalone/config
 | 
			
		||||
    ln -sf /etc/peanut/settings.yml /opt/peanut/.next/standalone/config/settings.yml
 | 
			
		||||
    systemctl start peanut
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start peanut
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								ct/planka.sh
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								ct/planka.sh
									
									
									
									
									
								
							@@ -28,33 +28,33 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/plankanban/planka/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/plankanban/planka/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.planka 2>/dev/null)" ]] || [[ ! -f ~/.planka ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop planka
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    mkdir -p /opt/planka-backup
 | 
			
		||||
    mkdir -p /opt/planka-backup/favicons
 | 
			
		||||
    mkdir -p /opt/planka-backup/user-avatars
 | 
			
		||||
    mkdir -p /opt/planka-backup/background-images
 | 
			
		||||
    mkdir -p /opt/planka-backup/attachments
 | 
			
		||||
    mv /opt/planka/planka/.env /opt/planka-backup
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/planka/public/favicons 2>/dev/null)" ] && mv /opt/planka/planka/public/favicons/* /opt/planka-backup/favicons/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/planka/public/user-avatars 2>/dev/null)" ] && mv /opt/planka/planka/public/user-avatars/* /opt/planka-backup/user-avatars/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/planka/public/background-images 2>/dev/null)" ] && mv /opt/planka/planka/public/background-images/* /opt/planka-backup/background-images/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka/planka/private/attachments 2>/dev/null)" ] && mv /opt/planka/planka/private/attachments/* /opt/planka-backup/attachments/
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    mkdir -p /opt/planka-backup/{favicons,user-avatars,background-images,attachments}
 | 
			
		||||
    mv /opt/planka/.env /opt/planka-backup
 | 
			
		||||
    [ -d /opt/planka/public/favicons ] && find /opt/planka/public/favicons -maxdepth 1 -type f -exec mv -t /opt/planka-backup/favicons {} +
 | 
			
		||||
    [ -d /opt/planka/public/user-avatars ] && find /opt/planka/public/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka-backup/user-avatars {} +
 | 
			
		||||
    [ -d /opt/planka/public/background-images ] && find /opt/planka/public/background-images -maxdepth 1 -type f -exec mv -t /opt/planka-backup/background-images {} +
 | 
			
		||||
    [ -d /opt/planka/private/attachments ] && find /opt/planka/private/attachments -maxdepth 1 -type f -exec mv -t /opt/planka-backup/attachments {} +
 | 
			
		||||
    rm -rf /opt/planka
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "planka" "plankanban/planka" "prebuild" "latest" "/opt/planka" "planka-prebuild.zip"
 | 
			
		||||
    cd /opt/planka/planka
 | 
			
		||||
    cd /opt/planka
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    mv /opt/planka-backup/.env /opt/planka/planka/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/favicons 2>/dev/null)" ] && mv /opt/planka-backup/favicons/* /opt/planka/planka/public/favicons/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/user-avatars 2>/dev/null)" ] && mv /opt/planka-backup/user-avatars/* /opt/planka/planka/public/user-avatars/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/background-images 2>/dev/null)" ] && mv /opt/planka-backup/background-images/* /opt/planka/planka/public/background-images/
 | 
			
		||||
    [ -n "$(ls -A /opt/planka-backup/attachments 2>/dev/null)" ] && mv /opt/planka-backup/attachments/* /opt/planka/planka/private/attachments/
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
    
 | 
			
		||||
    msg_info "Restoring data"
 | 
			
		||||
    mv /opt/planka-backup/.env /opt/planka/
 | 
			
		||||
    [ -d /opt/planka-backup/favicons ] && find /opt/planka-backup/favicons -maxdepth 1 -type f -exec mv -t /opt/planka/public/favicons {} +
 | 
			
		||||
    [ -d /opt/planka-backup/user-avatars ] && find /opt/planka-backup/user-avatars -maxdepth 1 -type f -exec mv -t /opt/planka/public/user-avatars {} +
 | 
			
		||||
    [ -d /opt/planka-backup/background-images ] && find /opt/planka-backup/background-images -maxdepth 1 -type f -exec mv -t /opt/planka/public/background-images {} +
 | 
			
		||||
    [ -d /opt/planka-backup/attachments ] && find /opt/planka-backup/attachments -maxdepth 1 -type f -exec mv -t /opt/planka/private/attachments {} +
 | 
			
		||||
    msg_ok "Restored data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start planka
 | 
			
		||||
 
 | 
			
		||||
@@ -86,4 +86,4 @@ msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Configure your reverse proxy to point to:${BGN} ${IP}:1411${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}https://{PUBLIC_URL}/login/setup${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}https://{PUBLIC_URL}/setup${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -58,6 +58,7 @@ function update_script() {
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}."
 | 
			
		||||
  fi
 | 
			
		||||
  exit  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@ function update_script() {
 | 
			
		||||
    touch /opt/${APP}_version.txt
 | 
			
		||||
    mkdir -p $HOME/.config/qBittorrent/
 | 
			
		||||
    mkdir -p /opt/qbittorrent/
 | 
			
		||||
    mv /.config/qBittorrent $HOME/.config/
 | 
			
		||||
    [ -d "/.config/qBittorrent" ] && mv /.config/qBittorrent "$HOME/.config/"
 | 
			
		||||
    $STD apt-get remove --purge -y qbittorrent-nox
 | 
			
		||||
    sed -i 's@ExecStart=/usr/bin/qbittorrent-nox@ExecStart=/opt/qbittorrent/qbittorrent-nox@g' /etc/systemd/system/qbittorrent-nox.service
 | 
			
		||||
    systemctl daemon-reload
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://rxresu.me
 | 
			
		||||
# Source: https://rxresume.org
 | 
			
		||||
 | 
			
		||||
APP="Reactive-Resume"
 | 
			
		||||
var_tags="${var_tags:-documents}"
 | 
			
		||||
@@ -25,23 +25,20 @@ function update_script() {
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  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
 | 
			
		||||
  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}"
 | 
			
		||||
        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}
 | 
			
		||||
    cd /opt/"$APP"
 | 
			
		||||
    export PUPPETEER_SKIP_DOWNLOAD="true"
 | 
			
		||||
    export NEXT_TELEMETRY_DISABLED=1
 | 
			
		||||
    export CI="true"
 | 
			
		||||
@@ -49,7 +46,7 @@ function update_script() {
 | 
			
		||||
    $STD pnpm install --frozen-lockfile
 | 
			
		||||
    $STD pnpm run build
 | 
			
		||||
    $STD pnpm run prisma:generate
 | 
			
		||||
        mv /opt/rxresume.env /opt/${APP}/.env
 | 
			
		||||
    mv /opt/rxresume.env /opt/"$APP"/.env
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Minio"
 | 
			
		||||
@@ -62,12 +59,12 @@ function update_script() {
 | 
			
		||||
    msg_info "Updating Browserless (Patience)"
 | 
			
		||||
    systemctl stop browserless
 | 
			
		||||
    cp /opt/browserless/.env /opt/browserless.env
 | 
			
		||||
        rm -rf browserless
 | 
			
		||||
    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
 | 
			
		||||
    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}
 | 
			
		||||
@@ -84,14 +81,12 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f /tmp/minio.deb
 | 
			
		||||
        rm -f $brwsr_tmp
 | 
			
		||||
        rm -f $res_tmp
 | 
			
		||||
    rm -f "$brwsr_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}"
 | 
			
		||||
    msg_ok "No update required. $APP is already at v{$RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -34,6 +34,7 @@ function update_script() {
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    setup_uv
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    systemctl stop sabnzbd
 | 
			
		||||
    cp -r /opt/sabnzbd /opt/sabnzbd_backup_$(date +%s)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										50
									
								
								ct/salt.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								ct/salt.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: bvdberg01
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/saltstack/salt
 | 
			
		||||
 | 
			
		||||
APP="Salt"
 | 
			
		||||
var_tags="${var_tags:-automations}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-3}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /etc/salt ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/saltstack/salt/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
			
		||||
  if [[ ! -f /~.salt ]] || [[ "${RELEASE}" != "$(cat /~.salt)" ]]; then
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    sed -i "s/^\(Pin: version \).*/\1${RELEASE}/" /etc/apt/preferences.d/salt-pin-1001
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get upgrade -y
 | 
			
		||||
    echo "${RELEASE}" >/~.salt
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "${APP} is already up to date (${RELEASE})"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
@@ -27,29 +27,41 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating ${APP}"
 | 
			
		||||
  systemctl stop stirlingpdf
 | 
			
		||||
  if [[ -n $(dpkg -l | grep -w ocrmypdf) ]] && [[ -z $(dpkg -l | grep -w qpdf) ]]; then
 | 
			
		||||
    $STD apt-get remove -y ocrmypdf
 | 
			
		||||
    $STD apt-get install -y qpdf
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.stirling-pdf 2>/dev/null)" ]] || [[ ! -f ~/.stirling-pdf ]]; then
 | 
			
		||||
    if [[ ! -f /etc/systemd/system/unoserver.service ]]; then
 | 
			
		||||
      msg_custom "⚠️ " "\e[33m" "Legacy installation detected – please recreate the container using the latest install script."
 | 
			
		||||
      exit 0
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
    JAVA_VERSION="21" setup_java
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop stirlingpdf libreoffice-listener unoserver
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
    if [[ -f ~/.Stirling-PDF-login ]]; then
 | 
			
		||||
      USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF-with-login.jar"
 | 
			
		||||
      mv /opt/Stirling-PDF/Stirling-PDF-with-login.jar /opt/Stirling-PDF/Stirling-PDF.jar
 | 
			
		||||
    else
 | 
			
		||||
      USE_ORIGINAL_FILENAME=true fetch_and_deploy_gh_release "stirling-pdf" "Stirling-Tools/Stirling-PDF" "singlefile" "latest" "/opt/Stirling-PDF" "Stirling-PDF.jar"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    msg_info "Refreshing Font Cache"
 | 
			
		||||
    $STD fc-cache -fv
 | 
			
		||||
    msg_ok "Font Cache Updated"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start stirlingpdf libreoffice-listener unoserver
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  curl -fsSL "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz" -o $(basename "https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz")
 | 
			
		||||
  tar -xzf v$RELEASE.tar.gz
 | 
			
		||||
  cd Stirling-PDF-$RELEASE
 | 
			
		||||
  chmod +x ./gradlew
 | 
			
		||||
  $STD ./gradlew build
 | 
			
		||||
  rm -rf /opt/Stirling-PDF/Stirling-PDF-*.jar
 | 
			
		||||
  cp -r ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/
 | 
			
		||||
  cp -r scripts /opt/Stirling-PDF/
 | 
			
		||||
  cd ~
 | 
			
		||||
  rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz
 | 
			
		||||
  ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
 | 
			
		||||
  systemctl start stirlingpdf
 | 
			
		||||
  msg_ok "Updated ${APP} to v$RELEASE"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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}"
 | 
			
		||||
@@ -27,12 +27,24 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating $APP"
 | 
			
		||||
  systemctl stop threadfin.service
 | 
			
		||||
  curl -fsSL "https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_amd64" -o "/opt/threadfin/threadfin"
 | 
			
		||||
  chmod +x /opt/threadfin/threadfin
 | 
			
		||||
  systemctl start threadfin.service
 | 
			
		||||
  msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/threadfin/threadfin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.threadfin_version 2>/dev/null)" ]] || [[ ! -f ~/.threadfin_version ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop threadfin
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "threadfin" "threadfin/threadfin" "singlefile" "latest" "/opt/threadfin" "Threadfin_linux_amd64"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start threadfin
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Copyright (c) 2021-2025 tteck
 | 
			
		||||
# Author: tteck (tteckster)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://triliumnext.github.io/Docs/
 | 
			
		||||
# Source: https://github.com/TriliumNext/Trilium
 | 
			
		||||
 | 
			
		||||
APP="Trilium"
 | 
			
		||||
var_tags="${var_tags:-notes}"
 | 
			
		||||
@@ -27,9 +27,8 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt; fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
 if [[ "v${RELEASE}" != "$(cat /opt/${APP}_version.txt 2>/dev/null)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/TriliumNext/Trilium/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.Trilium 2>/dev/null)" ]] || [[ ! -f ~/.Trilium ]]; then
 | 
			
		||||
 | 
			
		||||
    if [[ -d /opt/trilium/db ]]; then
 | 
			
		||||
      DB_PATH="/opt/trilium/db"
 | 
			
		||||
@@ -47,24 +46,20 @@ function update_script() {
 | 
			
		||||
    sleep 1
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating to ${RELEASE}"
 | 
			
		||||
    msg_info "Backing up Database"
 | 
			
		||||
    mkdir -p /opt/trilium_backup
 | 
			
		||||
    cp -r "${DB_PATH}" /opt/trilium_backup/
 | 
			
		||||
    rm -rf /opt/trilium
 | 
			
		||||
  cd /tmp
 | 
			
		||||
  curl -fsSL "https://github.com/TriliumNext/trilium/releases/download/v${RELEASE}/TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz" -o "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz"
 | 
			
		||||
  tar -xf "TriliumNextNotes-Server-v${RELEASE}-linux-x64.tar.xz"
 | 
			
		||||
  mv "TriliumNextNotes-Server-${RELEASE}-linux-x64" /opt/trilium
 | 
			
		||||
    msg_ok "Backed up Database"
 | 
			
		||||
 | 
			
		||||
  # Restore database
 | 
			
		||||
    fetch_and_deploy_gh_release "Trilium" "TriliumNext/Trilium" "prebuild" "latest" "/opt/trilium" "TriliumNotes-Server-*linux-x64.tar.xz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring Database"
 | 
			
		||||
    mkdir -p "$(dirname "${DB_RESTORE_PATH}")"
 | 
			
		||||
    cp -r /opt/trilium_backup/$(basename "${DB_PATH}") "${DB_RESTORE_PATH}"
 | 
			
		||||
 | 
			
		||||
  echo "v${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
  msg_ok "Updated to ${RELEASE}"
 | 
			
		||||
    msg_ok "Restored Database"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
  rm -rf "/tmp/TriliumNextNotes-Server-${RELEASE}-linux-x64.tar.xz"
 | 
			
		||||
    rm -rf /opt/trilium_backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
@@ -73,11 +68,11 @@ function update_script() {
 | 
			
		||||
    sleep 1
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
else
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
exit
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -27,31 +27,25 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ ! -f ~/.victoriametrics ]] || [[ "${RELEASE}" != "$(cat ~/.victoriametrics)" ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop victoriametrics
 | 
			
		||||
    [[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl stop victoriametrics-logs
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    temp_dir=$(mktemp -d)
 | 
			
		||||
    cd $temp_dir
 | 
			
		||||
    curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/victoria-metrics-linux-amd64-v${RELEASE}.tar.gz")
 | 
			
		||||
    curl -fsSL "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz" -o $(basename "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${RELEASE}/vmutils-linux-amd64-v${RELEASE}.tar.gz")
 | 
			
		||||
    find /opt/victoriametrics -maxdepth 1 -type f -executable -delete
 | 
			
		||||
    tar -xf victoria-metrics-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
 | 
			
		||||
    tar -xf vmutils-linux-amd64-v${RELEASE}.tar.gz -C /opt/victoriametrics
 | 
			
		||||
    fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "victoria-metrics-linux-amd64-v+([0-9.]).tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "vmutils-linux-amd64-v+([0-9.]).tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
 | 
			
		||||
    fetch_and_deploy_gh_release "vlutils" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "vlutils-linux-amd64*.tar.gz"
 | 
			
		||||
    chmod +x /opt/victoriametrics/*
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start victoriametrics
 | 
			
		||||
    [[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl start victoriametrics-logs
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf $temp_dir
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -41,6 +41,9 @@ function update_script() {
 | 
			
		||||
    rm -rf /opt/wallos/db/wallos.empty.db
 | 
			
		||||
    mv /opt/wallos.db /opt/wallos/db/wallos.db
 | 
			
		||||
    mv /opt/logos/* /opt/wallos/images/uploads/logos
 | 
			
		||||
    if ! grep -q "storetotalyearlycost.php" /opt/wallos.cron; then
 | 
			
		||||
      echo "30 1 * * 1 php /opt/wallos/endpoints/cronjobs/storetotalyearlycost.php >> /var/log/cron/storetotalyearlycost.log 2>&1" >> /opt/wallos.cron
 | 
			
		||||
    fi
 | 
			
		||||
    chown -R www-data:www-data /opt/wallos
 | 
			
		||||
    chmod -R 755 /opt/wallos
 | 
			
		||||
    mkdir -p /var/log/cron
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ APP="Zigbee2MQTT"
 | 
			
		||||
var_tags="${var_tags:-smarthome;zigbee;mqtt}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-0}"
 | 
			
		||||
@@ -27,16 +27,28 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ -f ~/.zigbee2mqtt ]]; then
 | 
			
		||||
    CURRENT="$(cat ~/.zigbee2mqtt)"
 | 
			
		||||
  elif [[ -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
    CURRENT="$(cat /opt/${APP}_version.txt)"
 | 
			
		||||
    rm -f /opt/${APP}_version.txt
 | 
			
		||||
  else
 | 
			
		||||
    CURRENT=""
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Koenkk/zigbee2mqtt/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 [[ "$RELEASE" != "$CURRENT" ]]; then
 | 
			
		||||
    if ! command -v jq &>/dev/null; then
 | 
			
		||||
      $STD apt-get update
 | 
			
		||||
      $STD apt-get install -y jq
 | 
			
		||||
    fi
 | 
			
		||||
    NODE_VERSION=24 NODE_MODULE="pnpm@$(curl -fsSL https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop zigbee2mqtt
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating pnpm"
 | 
			
		||||
    $STD npm install -g pnpm@10.4.1
 | 
			
		||||
    msg_ok "Updated pnpm"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    rm -rf /opt/${APP}_backup*.tar.gz
 | 
			
		||||
    mkdir -p /opt/z2m_backup
 | 
			
		||||
@@ -44,12 +56,9 @@ function update_script() {
 | 
			
		||||
    mv /opt/zigbee2mqtt/data /opt/z2m_backup
 | 
			
		||||
    msg_ok "Backup Created"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt" "tarball" "latest" "/opt/zigbee2mqtt"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    curl -fsSL "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip")
 | 
			
		||||
    $STD unzip ${RELEASE}.zip
 | 
			
		||||
    rm -rf /opt/zigbee2mqtt
 | 
			
		||||
    mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt
 | 
			
		||||
    rm -rf /opt/zigbee2mqtt/data
 | 
			
		||||
    mv /opt/z2m_backup/data /opt/zigbee2mqtt
 | 
			
		||||
    cd /opt/zigbee2mqtt
 | 
			
		||||
@@ -63,9 +72,7 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/z2m_backup
 | 
			
		||||
    rm -rf /opt/${RELEASE}.zip
 | 
			
		||||
    msg_ok "Cleaned up"
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}."
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -40,9 +40,9 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cp /opt/zipline/.env /opt/
 | 
			
		||||
    mkdir -p /opt/zipline-upload
 | 
			
		||||
    if [ -d /opt/zipline/upload ] && [ "$(ls -A /opt/zipline/upload)" ]; then
 | 
			
		||||
      cp -R /opt/zipline/upload/* /opt/zipline-upload/
 | 
			
		||||
    mkdir -p /opt/zipline-uploads
 | 
			
		||||
    if [ -d /opt/zipline/uploads ] && [ "$(ls -A /opt/zipline/uploads)" ]; then
 | 
			
		||||
      cp -R /opt/zipline/uploads/* /opt/zipline-uploads/
 | 
			
		||||
    fi
 | 
			
		||||
    curl -fsSL "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip")
 | 
			
		||||
    $STD unzip v"${RELEASE}".zip
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -7749,9 +7749,9 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/form-data": {
 | 
			
		||||
      "version": "4.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==",
 | 
			
		||||
      "version": "4.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
 | 
			
		||||
      "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/proxmox.svg",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
 | 
			
		||||
  "config_path": "/opt/iptag/iptag.conf",
 | 
			
		||||
  "description": "This script automatically adds IP address as tags to LXC containers or VM's using a systemd service. The service also updates the tags if a LXC/VM IP address is changed.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
@@ -37,12 +37,16 @@
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Configuration: `nano /opt/iptag/iptag.conf`. iptag.service must be restarted after change.",
 | 
			
		||||
      "text": "Configuration: `nano /opt/iptag/iptag.conf`. iptag Service must be restarted after change. See here for full documentation: `https://github.com/community-scripts/ProxmoxVE/discussions/5790`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "You can execute the ip tool manually with `iptag-run`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
  "interface_port": 80,
 | 
			
		||||
  "documentation": "https://docs.baby-buddy.net/",
 | 
			
		||||
  "website": "https://github.com/babybuddy/babybuddy",
 | 
			
		||||
  "logo": "https://raw.githubusercontent.com/selfhst/icons/refs/heads/main/svg/baby-buddy.svg",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/baby-buddy.webp",
 | 
			
		||||
  "config_path": "/opt/babybuddy/babybuddy/settings/production.py",
 | 
			
		||||
  "description": "Baby Buddy is an open-source web application designed to assist caregivers in tracking various aspects of a baby's daily routine, including sleep, feedings, diaper changes, tummy time, and more. By recording this data, caregivers can better understand and anticipate their baby's needs, reducing guesswork in daily care. The application offers a user-friendly dashboard for data entry and visualization, supports multiple users, and provides features like timers and reminders. Additionally, Baby Buddy can be integrated with platforms like Home Assistant and Grafana for enhanced functionality.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user