mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			283 Commits
		
	
	
		
			2025-08-05
			...
			2025-08-20
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					bf99523a94 | ||
| 
						 | 
					c1b3321801 | ||
| 
						 | 
					beb9189c72 | ||
| 
						 | 
					186c82d156 | ||
| 
						 | 
					9d431458ca | ||
| 
						 | 
					9c86eea347 | ||
| 
						 | 
					e20af295f0 | ||
| 
						 | 
					68832d71fa | ||
| 
						 | 
					2e13483f19 | ||
| 
						 | 
					c7643ae88c | ||
| 
						 | 
					f16f7a130a | ||
| 
						 | 
					94a8fe7132 | ||
| 
						 | 
					059d297305 | ||
| 
						 | 
					2bd2a763a1 | ||
| 
						 | 
					452ba92a6f | ||
| 
						 | 
					d27a875987 | ||
| 
						 | 
					14418411f6 | ||
| 
						 | 
					f13c8ff3ce | ||
| 
						 | 
					28dc145811 | ||
| 
						 | 
					170543bb66 | ||
| 
						 | 
					c783024ef0 | ||
| 
						 | 
					19403a627b | ||
| 
						 | 
					cc08395a1d | ||
| 
						 | 
					d5093a3d9d | ||
| 
						 | 
					52c4f3e0c2 | ||
| 
						 | 
					76a4ec9e06 | ||
| 
						 | 
					bebf6f65aa | ||
| 
						 | 
					34582c4dc4 | ||
| 
						 | 
					4495878c4f | ||
| 
						 | 
					3c33e8b826 | ||
| 
						 | 
					be6cc7ddbb | ||
| 
						 | 
					615049ce5c | ||
| 
						 | 
					f9e5c46b21 | ||
| 
						 | 
					913102d66f | ||
| 
						 | 
					07628f3b76 | ||
| 
						 | 
					291d364158 | ||
| 
						 | 
					98c4a2ccae | ||
| 
						 | 
					c60098d8eb | ||
| 
						 | 
					7df1dbaf17 | ||
| 
						 | 
					304c90a1af | ||
| 
						 | 
					01fe1b1f62 | ||
| 
						 | 
					fd85e71fcf | ||
| 
						 | 
					66c03ce1b4 | ||
| 
						 | 
					067f9eb209 | ||
| 
						 | 
					cd3dbc864f | ||
| 
						 | 
					f42f06343d | ||
| 
						 | 
					e46648ecdc | ||
| 
						 | 
					206751f517 | ||
| 
						 | 
					6a06afcbb9 | ||
| 
						 | 
					bd3e93215b | ||
| 
						 | 
					94b9aa4025 | ||
| 
						 | 
					36523dfd33 | ||
| 
						 | 
					618fa65bc2 | ||
| 
						 | 
					1dd417fdaa | ||
| 
						 | 
					4480a70ceb | ||
| 
						 | 
					5d423888d9 | ||
| 
						 | 
					81876d6992 | ||
| 
						 | 
					b777d74dce | ||
| 
						 | 
					c904da6b94 | ||
| 
						 | 
					4591b58e66 | ||
| 
						 | 
					8f7cd0bff9 | ||
| 
						 | 
					60318fd77b | ||
| 
						 | 
					50c41cec72 | ||
| 
						 | 
					ef2e9803d0 | ||
| 
						 | 
					e428a05b45 | ||
| 
						 | 
					37e5f7272e | ||
| 
						 | 
					5560c4eb12 | ||
| 
						 | 
					be6e2e3cb1 | ||
| 
						 | 
					7086a15321 | ||
| 
						 | 
					23f29b14fe | ||
| 
						 | 
					9aafb65a98 | ||
| 
						 | 
					296f4577d0 | ||
| 
						 | 
					1ea1429874 | ||
| 
						 | 
					3f70f92fbb | ||
| 
						 | 
					23c6994835 | ||
| 
						 | 
					70cd362d3e | ||
| 
						 | 
					aed25098e5 | ||
| 
						 | 
					a79392149e | ||
| 
						 | 
					f32647a3d3 | ||
| 
						 | 
					bb3c77f1b6 | ||
| 
						 | 
					66a582dd09 | ||
| 
						 | 
					06eb76c5d9 | ||
| 
						 | 
					a37f921aff | ||
| 
						 | 
					5c7e221efa | ||
| 
						 | 
					7e00889967 | ||
| 
						 | 
					f1d855e331 | ||
| 
						 | 
					a33bbd603d | ||
| 
						 | 
					472ad02d44 | ||
| 
						 | 
					aed2fbc4b1 | ||
| 
						 | 
					dabb49d7eb | ||
| 
						 | 
					61b7b96780 | ||
| 
						 | 
					a72885b4c1 | ||
| 
						 | 
					58fe2df6b4 | ||
| 
						 | 
					5c8bd4b124 | ||
| 
						 | 
					b6d7ad7c38 | ||
| 
						 | 
					dd4d518052 | ||
| 
						 | 
					a99650f969 | ||
| 
						 | 
					842d73de82 | ||
| 
						 | 
					65f731d88b | ||
| 
						 | 
					363685d3d3 | ||
| 
						 | 
					ff77960aa6 | ||
| 
						 | 
					8d4a81d28e | ||
| 
						 | 
					faf10a9d5b | ||
| 
						 | 
					1b931becaa | ||
| 
						 | 
					905198116d | ||
| 
						 | 
					8d65b4624f | ||
| 
						 | 
					4e17190721 | ||
| 
						 | 
					9337e2de3c | ||
| 
						 | 
					c7a7ea763b | ||
| 
						 | 
					ce71992dd6 | ||
| 
						 | 
					f68b80fe4a | ||
| 
						 | 
					79adb4ef9b | ||
| 
						 | 
					8dda5ac31f | ||
| 
						 | 
					7d901bc594 | ||
| 
						 | 
					b6dce8cff1 | ||
| 
						 | 
					1b43202a79 | ||
| 
						 | 
					66687c0d21 | ||
| 
						 | 
					39b9cfcffc | ||
| 
						 | 
					24f4d2f488 | ||
| 
						 | 
					ee74400626 | ||
| 
						 | 
					032709e107 | ||
| 
						 | 
					65d60fbf1e | ||
| 
						 | 
					c7b80448dc | ||
| 
						 | 
					d7a60f6027 | ||
| 
						 | 
					241ae98c0b | ||
| 
						 | 
					63f24a8e61 | ||
| 
						 | 
					1cb87c4087 | ||
| 
						 | 
					5c22f9775e | ||
| 
						 | 
					a403da9f47 | ||
| 
						 | 
					4ce7335482 | ||
| 
						 | 
					bc52b1a7d7 | ||
| 
						 | 
					1c5ff8b26a | ||
| 
						 | 
					967b2a313f | ||
| 
						 | 
					50410acf8d | ||
| 
						 | 
					ab07afb7bd | ||
| 
						 | 
					eee083c7e0 | ||
| 
						 | 
					31ef36d744 | ||
| 
						 | 
					13afa93ddf | ||
| 
						 | 
					7c631eec00 | ||
| 
						 | 
					82d1a872c7 | ||
| 
						 | 
					0c23782485 | ||
| 
						 | 
					ef7c774a24 | ||
| 
						 | 
					c12ec76181 | ||
| 
						 | 
					a805e40b04 | ||
| 
						 | 
					727b713893 | ||
| 
						 | 
					5cedb8469e | ||
| 
						 | 
					c612a4daa8 | ||
| 
						 | 
					87b7166924 | ||
| 
						 | 
					9b9faf7a53 | ||
| 
						 | 
					51a1d3c0ef | ||
| 
						 | 
					8b1c2d6e68 | ||
| 
						 | 
					21c2ef2915 | ||
| 
						 | 
					6796e609d0 | ||
| 
						 | 
					723ac08abb | ||
| 
						 | 
					35c4c363a0 | ||
| 
						 | 
					32f99aee54 | ||
| 
						 | 
					1803ea0323 | ||
| 
						 | 
					fcf14a93c2 | ||
| 
						 | 
					549e1ee01e | ||
| 
						 | 
					c4b7966303 | ||
| 
						 | 
					2ed4d91f3c | ||
| 
						 | 
					6a5685505a | ||
| 
						 | 
					7cc1eaa259 | ||
| 
						 | 
					0db53c98e0 | ||
| 
						 | 
					0faf32c4d0 | ||
| 
						 | 
					5c564b4bd1 | ||
| 
						 | 
					5b81fc1aaa | ||
| 
						 | 
					047c7fe53c | ||
| 
						 | 
					c759269f0a | ||
| 
						 | 
					7540314f53 | ||
| 
						 | 
					8d73af0106 | ||
| 
						 | 
					f1cdef1f9b | ||
| 
						 | 
					79f3662636 | ||
| 
						 | 
					c43e5318ae | ||
| 
						 | 
					7e32903f10 | ||
| 
						 | 
					ba5c318276 | ||
| 
						 | 
					634fcb5abb | ||
| 
						 | 
					5d29a4f11c | ||
| 
						 | 
					cf62139e07 | ||
| 
						 | 
					716f1f05ec | ||
| 
						 | 
					47d773d088 | ||
| 
						 | 
					f9eb0cfa40 | ||
| 
						 | 
					2b164f8281 | ||
| 
						 | 
					6937ca1c67 | ||
| 
						 | 
					af6c1ae680 | ||
| 
						 | 
					75335f3362 | ||
| 
						 | 
					d0dfe1f3a6 | ||
| 
						 | 
					0ebc6b94ab | ||
| 
						 | 
					bf110c1814 | ||
| 
						 | 
					0d7de4f292 | ||
| 
						 | 
					f7ca7b28df | ||
| 
						 | 
					27b79a23b6 | ||
| 
						 | 
					49fbe38981 | ||
| 
						 | 
					0cd7985f8a | ||
| 
						 | 
					428fae66c3 | ||
| 
						 | 
					18c57600c6 | ||
| 
						 | 
					68d2d3c52c | ||
| 
						 | 
					76f9232c3a | ||
| 
						 | 
					4258d44a7d | ||
| 
						 | 
					c60f04e229 | ||
| 
						 | 
					6b93869e52 | ||
| 
						 | 
					c3cfdc1efa | ||
| 
						 | 
					33678fde1b | ||
| 
						 | 
					3dfdfeb2fa | ||
| 
						 | 
					305d3603ef | ||
| 
						 | 
					00138323b9 | ||
| 
						 | 
					1d50632019 | ||
| 
						 | 
					8883ba6b60 | ||
| 
						 | 
					7b06f611ad | ||
| 
						 | 
					412919670c | ||
| 
						 | 
					77ac07efd7 | ||
| 
						 | 
					55def0d441 | ||
| 
						 | 
					70a01abbd8 | ||
| 
						 | 
					d5b0209453 | ||
| 
						 | 
					755da8bdc3 | ||
| 
						 | 
					9228cd06e3 | ||
| 
						 | 
					49579e8558 | ||
| 
						 | 
					030a977209 | ||
| 
						 | 
					b8176dc7b3 | ||
| 
						 | 
					cd0625cba6 | ||
| 
						 | 
					73e131ecf8 | ||
| 
						 | 
					a0d6082b95 | ||
| 
						 | 
					70ccaf6835 | ||
| 
						 | 
					05b58decc2 | ||
| 
						 | 
					ff1b7cc81d | ||
| 
						 | 
					a2bbc2174a | ||
| 
						 | 
					a8a44a4d51 | ||
| 
						 | 
					ed620e8258 | ||
| 
						 | 
					1fc667088c | ||
| 
						 | 
					d89055a5cd | ||
| 
						 | 
					4ecd019e15 | ||
| 
						 | 
					e3a31aa47e | ||
| 
						 | 
					ed936528d2 | ||
| 
						 | 
					6f24de7d63 | ||
| 
						 | 
					54de40ed53 | ||
| 
						 | 
					872cd289ff | ||
| 
						 | 
					9c37ac385c | ||
| 
						 | 
					575ad61c93 | ||
| 
						 | 
					1773cc5507 | ||
| 
						 | 
					11b19fdeab | ||
| 
						 | 
					5e6081fbea | ||
| 
						 | 
					e2a310dd3a | ||
| 
						 | 
					d934d1b51b | ||
| 
						 | 
					6e3c08142d | ||
| 
						 | 
					a41497f90a | ||
| 
						 | 
					c54025f8de | ||
| 
						 | 
					a1eb53841d | ||
| 
						 | 
					6c4c3ffa39 | ||
| 
						 | 
					78f695f397 | ||
| 
						 | 
					4b0d24ed2e | ||
| 
						 | 
					705d66e7c6 | ||
| 
						 | 
					c4703527dc | ||
| 
						 | 
					9b607c60b4 | ||
| 
						 | 
					4717852019 | ||
| 
						 | 
					ab9c57ccf9 | ||
| 
						 | 
					dce77d12c7 | ||
| 
						 | 
					1f35b649cc | ||
| 
						 | 
					5938a9aceb | ||
| 
						 | 
					3b76211c12 | ||
| 
						 | 
					7221a0759d | ||
| 
						 | 
					a750932b3a | ||
| 
						 | 
					a4de1efae8 | ||
| 
						 | 
					f7570cb40c | ||
| 
						 | 
					10471b88aa | ||
| 
						 | 
					04a83cce10 | ||
| 
						 | 
					f9e26f4f7c | ||
| 
						 | 
					ed6baa1158 | ||
| 
						 | 
					a7cc93af09 | ||
| 
						 | 
					a494ed5872 | ||
| 
						 | 
					ede517a560 | ||
| 
						 | 
					bd41b236df | ||
| 
						 | 
					229c7ce4b3 | ||
| 
						 | 
					cc8381d7f7 | ||
| 
						 | 
					dc5b9be9ae | ||
| 
						 | 
					993aff59d7 | ||
| 
						 | 
					f3844c664c | ||
| 
						 | 
					47b3f71992 | ||
| 
						 | 
					09c815e935 | ||
| 
						 | 
					f59d4960f1 | ||
| 
						 | 
					c53d1d004a | ||
| 
						 | 
					bbdda06297 | ||
| 
						 | 
					daab80aaf4 | ||
| 
						 | 
					9250f9fae9 | 
							
								
								
									
										282
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										282
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,8 +10,290 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-08-21
 | 
			
		||||
 | 
			
		||||
## 2025-08-20
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Post-Install, change pve-test for trixie [@MickLesk](https://github.com/MickLesk) ([#7031](https://github.com/community-scripts/ProxmoxVE/pull/7031))
 | 
			
		||||
    - Immich: fix small issue with immich-admin "start" script [@vhsdream](https://github.com/vhsdream) ([#7035](https://github.com/community-scripts/ProxmoxVE/pull/7035))
 | 
			
		||||
    - WasteBin: Small fixes [@tremor021](https://github.com/tremor021) ([#7018](https://github.com/community-scripts/ProxmoxVE/pull/7018))
 | 
			
		||||
    - Komga: Fix update [@tremor021](https://github.com/tremor021) ([#7027](https://github.com/community-scripts/ProxmoxVE/pull/7027))
 | 
			
		||||
    - Barcode Buddy: Fix missing dependency [@tremor021](https://github.com/tremor021) ([#7020](https://github.com/community-scripts/ProxmoxVE/pull/7020))
 | 
			
		||||
    - PBS: ifupdown2 reload [@MickLesk](https://github.com/MickLesk) ([#7013](https://github.com/community-scripts/ProxmoxVE/pull/7013))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Feature: Netdata support PVE9 (Debian 13 Trixie) [@MickLesk](https://github.com/MickLesk) ([#7012](https://github.com/community-scripts/ProxmoxVE/pull/7012))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: RustDesk Server [@tremor021](https://github.com/tremor021) ([#7008](https://github.com/community-scripts/ProxmoxVE/pull/7008))
 | 
			
		||||
    - ghost: fix: verbose [@CrazyWolf13](https://github.com/CrazyWolf13) ([#7023](https://github.com/community-scripts/ProxmoxVE/pull/7023))
 | 
			
		||||
    - Refactor: Paperless-ngx [@MickLesk](https://github.com/MickLesk) ([#6938](https://github.com/community-scripts/ProxmoxVE/pull/6938))
 | 
			
		||||
 | 
			
		||||
## 2025-08-19
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Debian 13 VM [@MickLesk](https://github.com/MickLesk) ([#6970](https://github.com/community-scripts/ProxmoxVE/pull/6970))
 | 
			
		||||
- Swizzin ([#6962](https://github.com/community-scripts/ProxmoxVE/pull/6962))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - [core]: create_lxc - fix offline issue with alpine packages [@MickLesk](https://github.com/MickLesk) ([#6994](https://github.com/community-scripts/ProxmoxVE/pull/6994))
 | 
			
		||||
    - OpenObserve: Fix release fetching [@tremor021](https://github.com/tremor021) ([#6961](https://github.com/community-scripts/ProxmoxVE/pull/6961))
 | 
			
		||||
    - Update hev-socks5-server-install.sh [@iAzamat2](https://github.com/iAzamat2) ([#6953](https://github.com/community-scripts/ProxmoxVE/pull/6953))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Refactor: Glances (+ Feature Bump) [@MickLesk](https://github.com/MickLesk) ([#6976](https://github.com/community-scripts/ProxmoxVE/pull/6976))
 | 
			
		||||
    - [core]: add new features to create_lxc [@MickLesk](https://github.com/MickLesk) ([#6979](https://github.com/community-scripts/ProxmoxVE/pull/6979))
 | 
			
		||||
    - [core]: extend setup_uv to work with alpine [@MickLesk](https://github.com/MickLesk) ([#6978](https://github.com/community-scripts/ProxmoxVE/pull/6978))
 | 
			
		||||
    - Immich: Bump version to 1.138.1 [@vhsdream](https://github.com/vhsdream) ([#6984](https://github.com/community-scripts/ProxmoxVE/pull/6984))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Tdarr [@MickLesk](https://github.com/MickLesk) ([#6969](https://github.com/community-scripts/ProxmoxVE/pull/6969))
 | 
			
		||||
    - Refactor: The Lounge [@tremor021](https://github.com/tremor021) ([#6958](https://github.com/community-scripts/ProxmoxVE/pull/6958))
 | 
			
		||||
    - Refactor: TeddyCloud [@tremor021](https://github.com/tremor021) ([#6963](https://github.com/community-scripts/ProxmoxVE/pull/6963))
 | 
			
		||||
    - Refactor: Technitium DNS [@tremor021](https://github.com/tremor021) ([#6968](https://github.com/community-scripts/ProxmoxVE/pull/6968))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - [web]: update logos from reactive-resume & slskd [@MickLesk](https://github.com/MickLesk) ([#6990](https://github.com/community-scripts/ProxmoxVE/pull/6990))
 | 
			
		||||
 | 
			
		||||
## 2025-08-18
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - CopyParty [@MickLesk](https://github.com/MickLesk) ([#6929](https://github.com/community-scripts/ProxmoxVE/pull/6929))
 | 
			
		||||
- Twingate-Connector ([#6921](https://github.com/community-scripts/ProxmoxVE/pull/6921))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Keycloak: fix update function [@MickLesk](https://github.com/MickLesk) ([#6943](https://github.com/community-scripts/ProxmoxVE/pull/6943))
 | 
			
		||||
    - Immich: add message to indicate image-processing library update check [@vhsdream](https://github.com/vhsdream) ([#6935](https://github.com/community-scripts/ProxmoxVE/pull/6935))
 | 
			
		||||
    - fix(uptimekuma): unbound env variable [@vidonnus](https://github.com/vidonnus) ([#6922](https://github.com/community-scripts/ProxmoxVE/pull/6922))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Traefik [@tremor021](https://github.com/tremor021) ([#6940](https://github.com/community-scripts/ProxmoxVE/pull/6940))
 | 
			
		||||
    - Refactor: Traccar [@tremor021](https://github.com/tremor021) ([#6942](https://github.com/community-scripts/ProxmoxVE/pull/6942))
 | 
			
		||||
    - Refactor: Umami [@tremor021](https://github.com/tremor021) ([#6939](https://github.com/community-scripts/ProxmoxVE/pull/6939))
 | 
			
		||||
    - Refactor: GoMFT [@tremor021](https://github.com/tremor021) ([#6916](https://github.com/community-scripts/ProxmoxVE/pull/6916))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - OpenWRT: add info for VLAN-aware in frontend [@MickLesk](https://github.com/MickLesk) ([#6944](https://github.com/community-scripts/ProxmoxVE/pull/6944))
 | 
			
		||||
 | 
			
		||||
## 2025-08-17
 | 
			
		||||
 | 
			
		||||
## 2025-08-16
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Wireguard: Fix WGDashboard not updating [@tremor021](https://github.com/tremor021) ([#6898](https://github.com/community-scripts/ProxmoxVE/pull/6898))
 | 
			
		||||
    - Tandoor Images Fix [@WarLord185](https://github.com/WarLord185) ([#6892](https://github.com/community-scripts/ProxmoxVE/pull/6892))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Uptime Kuma [@tremor021](https://github.com/tremor021) ([#6902](https://github.com/community-scripts/ProxmoxVE/pull/6902))
 | 
			
		||||
    - Refactor: Wallos [@tremor021](https://github.com/tremor021) ([#6900](https://github.com/community-scripts/ProxmoxVE/pull/6900))
 | 
			
		||||
 | 
			
		||||
## 2025-08-15
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Immich: pin Vectorchord release; adjust extension update commands [@vhsdream](https://github.com/vhsdream) ([#6878](https://github.com/community-scripts/ProxmoxVE/pull/6878))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Bump Immich to v1.138.0 [@vhsdream](https://github.com/vhsdream) ([#6813](https://github.com/community-scripts/ProxmoxVE/pull/6813))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Wavelog [@tremor021](https://github.com/tremor021) ([#6869](https://github.com/community-scripts/ProxmoxVE/pull/6869))
 | 
			
		||||
    - Refactor: WatchYourLAN [@tremor021](https://github.com/tremor021) ([#6871](https://github.com/community-scripts/ProxmoxVE/pull/6871))
 | 
			
		||||
    - Refactor: Watcharr [@tremor021](https://github.com/tremor021) ([#6872](https://github.com/community-scripts/ProxmoxVE/pull/6872))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Add missing default user & pass for RabbitMQ [@hbenyoussef](https://github.com/hbenyoussef) ([#6883](https://github.com/community-scripts/ProxmoxVE/pull/6883))
 | 
			
		||||
 | 
			
		||||
## 2025-08-14
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Bugfix Searxng Redis replaced with Valkey in installscript  [@elvito](https://github.com/elvito) ([#6831](https://github.com/community-scripts/ProxmoxVE/pull/6831))
 | 
			
		||||
    - Spoolman: Use environment variables to control host and port [@tremor021](https://github.com/tremor021) ([#6825](https://github.com/community-scripts/ProxmoxVE/pull/6825))
 | 
			
		||||
    - Pulse: v4.3.2+ [@vhsdream](https://github.com/vhsdream) ([#6859](https://github.com/community-scripts/ProxmoxVE/pull/6859))
 | 
			
		||||
    - rustdeskserver: fix API version file [@steadfasterX](https://github.com/steadfasterX) ([#6847](https://github.com/community-scripts/ProxmoxVE/pull/6847))
 | 
			
		||||
    - Immich: quickfix #6836 [@vhsdream](https://github.com/vhsdream) ([#6848](https://github.com/community-scripts/ProxmoxVE/pull/6848))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: WikiJS [@tremor021](https://github.com/tremor021) ([#6840](https://github.com/community-scripts/ProxmoxVE/pull/6840))
 | 
			
		||||
    - Refactor: Zoraxy [@tremor021](https://github.com/tremor021) ([#6823](https://github.com/community-scripts/ProxmoxVE/pull/6823))
 | 
			
		||||
    - Refactor: Zitadel [@tremor021](https://github.com/tremor021) ([#6826](https://github.com/community-scripts/ProxmoxVE/pull/6826))
 | 
			
		||||
    - Refactor: WordPress [@tremor021](https://github.com/tremor021) ([#6837](https://github.com/community-scripts/ProxmoxVE/pull/6837))
 | 
			
		||||
    - Refactor: WireGuard [@tremor021](https://github.com/tremor021) ([#6839](https://github.com/community-scripts/ProxmoxVE/pull/6839))
 | 
			
		||||
    - Refactor: yt-dlp-webui [@tremor021](https://github.com/tremor021) ([#6832](https://github.com/community-scripts/ProxmoxVE/pull/6832))
 | 
			
		||||
    - Refactor: Zipline [@tremor021](https://github.com/tremor021) ([#6829](https://github.com/community-scripts/ProxmoxVE/pull/6829))
 | 
			
		||||
    - Refactor: Zot-Registry [@tremor021](https://github.com/tremor021) ([#6822](https://github.com/community-scripts/ProxmoxVE/pull/6822))
 | 
			
		||||
    - Refactor: Zwave-JS-UI [@tremor021](https://github.com/tremor021) ([#6820](https://github.com/community-scripts/ProxmoxVE/pull/6820))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
  - #### 📂 Github
 | 
			
		||||
 | 
			
		||||
    - ProxmoxVE svg logo [@LuisPalacios](https://github.com/LuisPalacios) ([#6846](https://github.com/community-scripts/ProxmoxVE/pull/6846))
 | 
			
		||||
 | 
			
		||||
## 2025-08-13
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - emby: fix update output [@MickLesk](https://github.com/MickLesk) ([#6791](https://github.com/community-scripts/ProxmoxVE/pull/6791))
 | 
			
		||||
    - archivebox: fix wrong formatted uv command [@MickLesk](https://github.com/MickLesk) ([#6794](https://github.com/community-scripts/ProxmoxVE/pull/6794))
 | 
			
		||||
    - Outline: Fixes for install and update procedures [@tremor021](https://github.com/tremor021) ([#6806](https://github.com/community-scripts/ProxmoxVE/pull/6806))
 | 
			
		||||
    - Palmr: fix release version parsing // increase RAM [@vhsdream](https://github.com/vhsdream) ([#6800](https://github.com/community-scripts/ProxmoxVE/pull/6800))
 | 
			
		||||
    - myspeed: fix update process if no data exist [@MickLesk](https://github.com/MickLesk) ([#6795](https://github.com/community-scripts/ProxmoxVE/pull/6795))
 | 
			
		||||
    - crafty-controller: fix update output [@MickLesk](https://github.com/MickLesk) ([#6793](https://github.com/community-scripts/ProxmoxVE/pull/6793))
 | 
			
		||||
    - GLPI: Fix timezone command [@tremor021](https://github.com/tremor021) ([#6783](https://github.com/community-scripts/ProxmoxVE/pull/6783))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Docker LXC: Add Portainer info [@tremor021](https://github.com/tremor021) ([#6803](https://github.com/community-scripts/ProxmoxVE/pull/6803))
 | 
			
		||||
    - AgentDVR: Added update function [@tremor021](https://github.com/tremor021) ([#6804](https://github.com/community-scripts/ProxmoxVE/pull/6804))
 | 
			
		||||
 | 
			
		||||
## 2025-08-12
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Pulse: binary path changed AGAIN; other fixes [@vhsdream](https://github.com/vhsdream) ([#6770](https://github.com/community-scripts/ProxmoxVE/pull/6770))
 | 
			
		||||
    - fix alpine syncthing config not being created [@GamerHun1238](https://github.com/GamerHun1238) ([#6773](https://github.com/community-scripts/ProxmoxVE/pull/6773))
 | 
			
		||||
    - change owner of hortusfox directory [@snow2k9](https://github.com/snow2k9) ([#6763](https://github.com/community-scripts/ProxmoxVE/pull/6763))
 | 
			
		||||
 | 
			
		||||
## 2025-08-11
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Reactive Resume: use new release parsing; other fixes [@vhsdream](https://github.com/vhsdream) ([#6744](https://github.com/community-scripts/ProxmoxVE/pull/6744))
 | 
			
		||||
 | 
			
		||||
## 2025-08-10
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Fix/thinpool detection as it allows to delete active thinpool with different name than "data" [@onethree7](https://github.com/onethree7) ([#6730](https://github.com/community-scripts/ProxmoxVE/pull/6730))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Pulse: fix binary path [@vhsdream](https://github.com/vhsdream) ([#6740](https://github.com/community-scripts/ProxmoxVE/pull/6740))
 | 
			
		||||
    - Karakeep: chromium fix [@vhsdream](https://github.com/vhsdream) ([#6729](https://github.com/community-scripts/ProxmoxVE/pull/6729))
 | 
			
		||||
 | 
			
		||||
## 2025-08-09
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Paperless-AI: increase HDD Space to 20G [@MickLesk](https://github.com/MickLesk) ([#6716](https://github.com/community-scripts/ProxmoxVE/pull/6716))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - vaultwarden: increase disk space [@CrazyWolf13](https://github.com/CrazyWolf13) ([#6712](https://github.com/community-scripts/ProxmoxVE/pull/6712))
 | 
			
		||||
    - Fix: Bazarr requirements.txt file not parse-able by UV [@Xerovoxx98](https://github.com/Xerovoxx98) ([#6701](https://github.com/community-scripts/ProxmoxVE/pull/6701))
 | 
			
		||||
    - Improve backup of adventurelog folder [@ThomasDetemmerman](https://github.com/ThomasDetemmerman) ([#6653](https://github.com/community-scripts/ProxmoxVE/pull/6653))
 | 
			
		||||
    - HomeBox: Fixes for update procedure [@tremor021](https://github.com/tremor021) ([#6702](https://github.com/community-scripts/ProxmoxVE/pull/6702))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Tianji [@MickLesk](https://github.com/MickLesk) ([#6662](https://github.com/community-scripts/ProxmoxVE/pull/6662))
 | 
			
		||||
 | 
			
		||||
## 2025-08-08
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Palmr ([#6642](https://github.com/community-scripts/ProxmoxVE/pull/6642))
 | 
			
		||||
- HortusFox ([#6641](https://github.com/community-scripts/ProxmoxVE/pull/6641))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Unifi: Update libssl dependency [@tremor021](https://github.com/tremor021) ([#6680](https://github.com/community-scripts/ProxmoxVE/pull/6680))
 | 
			
		||||
    - HomeBox: Fix checking for existing install [@tremor021](https://github.com/tremor021) ([#6677](https://github.com/community-scripts/ProxmoxVE/pull/6677))
 | 
			
		||||
    - Immich: unpin libvips revision [@vhsdream](https://github.com/vhsdream) ([#6669](https://github.com/community-scripts/ProxmoxVE/pull/6669))
 | 
			
		||||
    - Meilisearch: fix wrong path switch [@MickLesk](https://github.com/MickLesk) ([#6668](https://github.com/community-scripts/ProxmoxVE/pull/6668))
 | 
			
		||||
    - MariaDB: fix "feedback" (statistical informations) whiptail  [@MickLesk](https://github.com/MickLesk) ([#6657](https://github.com/community-scripts/ProxmoxVE/pull/6657))
 | 
			
		||||
    - Karakeep: workaround/fix for #6593 [@vhsdream](https://github.com/vhsdream) ([#6648](https://github.com/community-scripts/ProxmoxVE/pull/6648))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Feature: FSTrim (Filesystem Trim) - Log / LVM Check / ZFS [@MickLesk](https://github.com/MickLesk) ([#6660](https://github.com/community-scripts/ProxmoxVE/pull/6660))
 | 
			
		||||
    - IP Tag: Allow installation on PVE 9.x [@webhdx](https://github.com/webhdx) ([#6679](https://github.com/community-scripts/ProxmoxVE/pull/6679))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Alpine IT-Tools [@tremor021](https://github.com/tremor021) ([#6579](https://github.com/community-scripts/ProxmoxVE/pull/6579))
 | 
			
		||||
    - Refactor: ArchiveBox [@MickLesk](https://github.com/MickLesk) ([#6670](https://github.com/community-scripts/ProxmoxVE/pull/6670))
 | 
			
		||||
    - Refactor: Bazarr [@MickLesk](https://github.com/MickLesk) ([#6663](https://github.com/community-scripts/ProxmoxVE/pull/6663))
 | 
			
		||||
    - Refactor: Kometa [@MickLesk](https://github.com/MickLesk) ([#6673](https://github.com/community-scripts/ProxmoxVE/pull/6673))
 | 
			
		||||
 | 
			
		||||
## 2025-08-07
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Commafeed: Fix Backup Handling while Update [@MickLesk](https://github.com/MickLesk) ([#6629](https://github.com/community-scripts/ProxmoxVE/pull/6629))
 | 
			
		||||
    - VictoriaMetrics: Fix release fetching [@tremor021](https://github.com/tremor021) ([#6632](https://github.com/community-scripts/ProxmoxVE/pull/6632))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Feature: Post-PVE-Script (PVE9 Support + some Features) [@MickLesk](https://github.com/MickLesk) ([#6626](https://github.com/community-scripts/ProxmoxVE/pull/6626))
 | 
			
		||||
    - Feature: Clean-LXC now supports Alpine based containers [@MickLesk](https://github.com/MickLesk) ([#6628](https://github.com/community-scripts/ProxmoxVE/pull/6628))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Tandoor v2  [@MickLesk](https://github.com/MickLesk) ([#6635](https://github.com/community-scripts/ProxmoxVE/pull/6635))
 | 
			
		||||
    - Refactor: Paymenter [@tremor021](https://github.com/tremor021) ([#6589](https://github.com/community-scripts/ProxmoxVE/pull/6589))
 | 
			
		||||
 | 
			
		||||
## 2025-08-06
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - [core] better y/N handling for ressource check [@MickLesk](https://github.com/MickLesk) ([#6608](https://github.com/community-scripts/ProxmoxVE/pull/6608))
 | 
			
		||||
    - fix: update Pulse scripts for v4 Go rewrite support [@rcourtman](https://github.com/rcourtman) ([#6574](https://github.com/community-scripts/ProxmoxVE/pull/6574))
 | 
			
		||||
    - OpenProject: Fix missing apt update [@tremor021](https://github.com/tremor021) ([#6598](https://github.com/community-scripts/ProxmoxVE/pull/6598))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - PVE9: Remove Beta Whiptail / add correct version check [@MickLesk](https://github.com/MickLesk) ([#6599](https://github.com/community-scripts/ProxmoxVE/pull/6599))
 | 
			
		||||
 | 
			
		||||
## 2025-08-05
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -36,10 +36,7 @@ function update_script() {
 | 
			
		||||
    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
 | 
			
		||||
    cp -r /opt/adventurelog /opt/adventurelog-backup
 | 
			
		||||
    msg_ok "Backup done"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "adventurelog" "seanmorley15/adventurelog"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,30 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_error "Currently we don't provide an update function for this ${APP}."
 | 
			
		||||
  
 | 
			
		||||
  RELEASE=$(curl -fsSL "https://www.ispyconnect.com/api/Agent/DownloadLocation4?platform=Linux64&fromVersion=0" | grep -o 'https://.*\.zip')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.agentdvr 2>/dev/null)" ]] || [[ ! -f ~/.agentdvr ]]; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop AgentDVR
 | 
			
		||||
    msg_ok "Service stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP"
 | 
			
		||||
    cd /opt/agentdvr/agent
 | 
			
		||||
    curl -fsSL "$RELEASE" -o $(basename "$RELEASE")
 | 
			
		||||
    $STD unzip -o Agent_Linux64*.zip
 | 
			
		||||
    chmod +x ./Agent
 | 
			
		||||
    echo $RELEASE > ~/.agentdvr
 | 
			
		||||
    rm -rf Agent_Linux64*.zip
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl start AgentDVR
 | 
			
		||||
    msg_ok "Service started"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated $APP successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -27,16 +27,15 @@ function update_script() {
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/CorentinTh/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/sharevb/it-tools/releases/latest | grep '"tag_name":' | cut -d '"' -f4)
 | 
			
		||||
  if [ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ] || [ ! -f /opt/${APP}_version.txt ]; then
 | 
			
		||||
    DOWNLOAD_URL="https://github.com/CorentinTh/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip"
 | 
			
		||||
    msg_info "Updating ${APP} LXC"
 | 
			
		||||
    curl -fsSL -o it-tools.zip "$DOWNLOAD_URL"
 | 
			
		||||
    curl -fsSL "https://github.com/sharevb/it-tools/releases/download/${RELEASE}/it-tools-${RELEASE#v}.zip" -o it-tools.zip
 | 
			
		||||
    mkdir -p /usr/share/nginx/html
 | 
			
		||||
    rm -rf /usr/share/nginx/html/*
 | 
			
		||||
    $STD unzip it-tools.zip -d /tmp/it-tools
 | 
			
		||||
    cp -r /tmp/it-tools/dist/* /usr/share/nginx/html
 | 
			
		||||
    rm -rf /tmp/it-tools
 | 
			
		||||
    $STD unzip it-tools.zip -d /tmp
 | 
			
		||||
    cp -r /tmp/dist/* /usr/share/nginx/html
 | 
			
		||||
    rm -rf /tmp/dist
 | 
			
		||||
    rm -f it-tools.zip
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
 
 | 
			
		||||
@@ -20,29 +20,38 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /opt/archivebox ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop archivebox
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    cd /opt/archivebox/data
 | 
			
		||||
    pip install --upgrade --ignore-installed archivebox
 | 
			
		||||
    sudo -u archivebox archivebox init
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start archivebox
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/archivebox ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  NODE_VERSION="22" setup_nodejs
 | 
			
		||||
  PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
 | 
			
		||||
  msg_info "Stopping ArchiveBox"
 | 
			
		||||
  systemctl stop archivebox
 | 
			
		||||
  msg_ok "Stopped ArchiveBox"
 | 
			
		||||
 | 
			
		||||
  msg_info "Upgrading Playwright"
 | 
			
		||||
  $STD uv pip install playwright --system
 | 
			
		||||
  $STD playwright install-deps chromium
 | 
			
		||||
  msg_ok "Upgraded Playwright"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ArchiveBox"
 | 
			
		||||
  cd /opt/archivebox/data
 | 
			
		||||
  $STD uv pip install --system --upgrade --no-reinstall archivebox
 | 
			
		||||
  sudo -u archivebox archivebox init
 | 
			
		||||
  msg_ok "Updated ArchiveBox"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting ArchiveBox"
 | 
			
		||||
  systemctl start archivebox
 | 
			
		||||
  msg_ok "Started ArchiveBox"
 | 
			
		||||
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -52,4 +61,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}:8000/admin/login${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000/admin/login${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								ct/bazarr.sh
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								ct/bazarr.sh
									
									
									
									
									
								
							@@ -20,20 +20,37 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var/lib/bazarr/ ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /var/lib/bazarr/ ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/morpheus65535/bazarr/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.bazarr 2>/dev/null)" ]] || [[ ! -f ~/.bazarr ]]; then
 | 
			
		||||
 | 
			
		||||
    PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
    fetch_and_deploy_gh_release "bazarr" "morpheus65535/bazarr" "prebuild" "latest" "/opt/bazarr" "bazarr.zip"
 | 
			
		||||
 | 
			
		||||
    msg_info "Setup Bazarr"
 | 
			
		||||
    mkdir -p /var/lib/bazarr/
 | 
			
		||||
    chmod 775 /opt/bazarr /var/lib/bazarr/
 | 
			
		||||
    sed -i.bak 's/--only-binary=Pillow//g' /opt/bazarr/requirements.txt
 | 
			
		||||
    $STD uv pip install -r /opt/bazarr/requirements.txt --system
 | 
			
		||||
    msg_ok "Setup Bazarr"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
@@ -41,4 +58,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}:6767${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6767${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ function update_script() {
 | 
			
		||||
        systemctl stop cleanuparr
 | 
			
		||||
        msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
        fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "$RELEASE" "/opt/cleanuparr" "*linux-amd64.zip"
 | 
			
		||||
        fetch_and_deploy_gh_release "Cleanuparr" "Cleanuparr/Cleanuparr" "prebuild" "latest" "/opt/cleanuparr" "*linux-amd64.zip"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting ${APP}"
 | 
			
		||||
        systemctl start cleanuparr
 | 
			
		||||
 
 | 
			
		||||
@@ -40,16 +40,20 @@ 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
 | 
			
		||||
      msg_info "Backing up existing data"
 | 
			
		||||
      mv /opt/commafeed/data /opt/data.bak
 | 
			
		||||
      msg_ok "Backed up existing data"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "commafeed" "Athou/commafeed" "prebuild" "latest" "/opt/commafeed" "commafeed-*-h2-jvm.zip"
 | 
			
		||||
    
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    if [ -d /opt/commafeed/data.bak ] && [ "$(ls -A /opt/commafeed/data.bak)" ]; then
 | 
			
		||||
      mv /opt/commafeed/data.bak /opt/commafeed/data
 | 
			
		||||
 | 
			
		||||
    if [ -d /opt/data.bak ] && [ "$(ls -A /opt/data.bak)" ]; then
 | 
			
		||||
      msg_info "Restoring data"
 | 
			
		||||
      mv /opt/data.bak /opt/commafeed/data
 | 
			
		||||
      msg_ok "Restored data"
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start commafeed
 | 
			
		||||
 
 | 
			
		||||
@@ -68,10 +68,10 @@ function update_script() {
 | 
			
		||||
    msg_ok "Started Crafty-Controller"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    exit
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. Crafty-Controller is already at v${RELEASE}."
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -90,3 +90,5 @@ description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} If you installed Portainer, access it at the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:9443${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -41,8 +41,10 @@ function update_script() {
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    exit
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										75
									
								
								ct/gomft.sh
									
									
									
									
									
								
							
							
						
						
									
										75
									
								
								ct/gomft.sh
									
									
									
									
									
								
							@@ -28,83 +28,14 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! dpkg -l | grep -q "^ii.*build-essential"; then
 | 
			
		||||
    $STD apt-get install -y build-essential
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ ! -f "/usr/bin/node" ]]; then
 | 
			
		||||
    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
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  RELEASE=$(curl -fsSL "https://api.github.com/repos/StarFleetCPTN/GoMFT/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 ~/.gomft)" ]] || [[ ! -f ~/.gomft ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop gomft
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    if ! command -v git >/dev/null 2>&1; then
 | 
			
		||||
      $STD apt-get install -y git
 | 
			
		||||
    fi
 | 
			
		||||
    rm -f /opt/gomft/gomft
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/StarFleetCPTN/GoMFT/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar -xzf "$temp_file"
 | 
			
		||||
    cp -rf "GoMFT-${RELEASE}"/* /opt/gomft/
 | 
			
		||||
    cd /opt/gomft
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    TEMPL_VERSION="$(awk '/github.com\/a-h\/templ/{print $2}' go.mod)"
 | 
			
		||||
    $STD go install github.com/a-h/templ/cmd/templ@${TEMPL_VERSION}
 | 
			
		||||
    # dirty hack to fix templ
 | 
			
		||||
    cat <<'EOF' >/opt/gomft/components/file_metadata/search/file_metadata_search_content.templ
 | 
			
		||||
package search
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
    "context"
 | 
			
		||||
    "github.com/starfleetcptn/gomft/components/file_metadata"
 | 
			
		||||
    "github.com/starfleetcptn/gomft/components/file_metadata/list"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
templ FileMetadataSearchContent(ctx context.Context, data file_metadata.FileMetadataSearchData) {
 | 
			
		||||
    <!-- Search Results -->
 | 
			
		||||
    <div id="search-results">
 | 
			
		||||
        if len(data.Files) > 0 {
 | 
			
		||||
            @list.FileMetadataListPartial(ctx, file_metadata.FileMetadataListData{
 | 
			
		||||
                Files:      data.Files,
 | 
			
		||||
                Page:       data.Page,
 | 
			
		||||
                Limit:      data.Limit,
 | 
			
		||||
                TotalCount: data.TotalCount,
 | 
			
		||||
                TotalPages: data.TotalPages,
 | 
			
		||||
                Filter:     data.Filter,
 | 
			
		||||
                SortBy:     data.SortBy,
 | 
			
		||||
                SortDir:    data.SortDir,
 | 
			
		||||
            }, "/files/search/partial", "#search-results-container")
 | 
			
		||||
        } else {
 | 
			
		||||
            <div class="p-6 text-center text-gray-500 dark:text-gray-400">
 | 
			
		||||
                <svg class="mx-auto mb-4 w-12 h-12 text-gray-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
 | 
			
		||||
                    <path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" />
 | 
			
		||||
                </svg>
 | 
			
		||||
                <p>No files found matching your search criteria.</p>
 | 
			
		||||
            </div>
 | 
			
		||||
        }
 | 
			
		||||
    </div>
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
    $STD "$HOME"/go/bin/templ generate
 | 
			
		||||
    export CGO_ENABLED=1
 | 
			
		||||
    export GOOS=linux
 | 
			
		||||
    $STD go build -o gomft
 | 
			
		||||
    chmod +x /opt/gomft/gomft
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f "$temp_file"
 | 
			
		||||
    rm -rf "$HOME/GoMFT-v.${RELEASE}/"
 | 
			
		||||
    msg_ok "Cleanup Complete"
 | 
			
		||||
    fetch_and_deploy_gh_release "gomft" "StarFleetCPTN/GoMFT" "singlefile" "latest" "/opt/gomft" "gomft*linux-amd64"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start gomft
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
    __  __                        ___              _      __              __        ______              
 | 
			
		||||
   / / / /___  ____ ___  ___     /   |  __________(_)____/ /_____ _____  / /_      / ____/___  ________ 
 | 
			
		||||
  / /_/ / __ \/ __ `__ \/ _ \   / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ /   / __ \/ ___/ _ \
 | 
			
		||||
 / __  / /_/ / / / / / /  __/  / ___ |(__  |__  ) (__  ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / /  /  __/
 | 
			
		||||
/_/ /_/\____/_/ /_/ /_/\___/  /_/  |_/____/____/_/____/\__/\__,_/_/ /_/\__/      \____/\____/_/   \___/ 
 | 
			
		||||
                                                                                                        
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/hortusfox
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/hortusfox
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __  __           __             ______          
 | 
			
		||||
   / / / /___  _____/ /___  _______/ ____/___  _  __
 | 
			
		||||
  / /_/ / __ \/ ___/ __/ / / / ___/ /_  / __ \| |/_/
 | 
			
		||||
 / __  / /_/ / /  / /_/ /_/ (__  ) __/ / /_/ />  <  
 | 
			
		||||
/_/ /_/\____/_/   \__/\__,_/____/_/    \____/_/|_|  
 | 
			
		||||
                                                    
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/palmr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/palmr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ____        __              
 | 
			
		||||
   / __ \____ _/ /___ ___  _____
 | 
			
		||||
  / /_/ / __ `/ / __ `__ \/ ___/
 | 
			
		||||
 / ____/ /_/ / / / / / / / /    
 | 
			
		||||
/_/    \__,_/_/_/ /_/ /_/_/     
 | 
			
		||||
                                
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/swizzin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/swizzin
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
   _____         _           _     
 | 
			
		||||
  / ___/      __(_)_______  (_)___ 
 | 
			
		||||
  \__ \ | /| / / /_  /_  / / / __ \
 | 
			
		||||
 ___/ / |/ |/ / / / /_/ /_/ / / / /
 | 
			
		||||
/____/|__/|__/_/ /___/___/_/_/ /_/ 
 | 
			
		||||
                                   
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/twingate-connector
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/twingate-connector
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
  ______         _                   __             ______                            __            
 | 
			
		||||
 /_  __/      __(_)___  ____ _____ _/ /____        / ____/___  ____  ____  ___  _____/ /_____  _____
 | 
			
		||||
  / / | | /| / / / __ \/ __ `/ __ `/ __/ _ \______/ /   / __ \/ __ \/ __ \/ _ \/ ___/ __/ __ \/ ___/
 | 
			
		||||
 / /  | |/ |/ / / / / / /_/ / /_/ / /_/  __/_____/ /___/ /_/ / / / / / / /  __/ /__/ /_/ /_/ / /    
 | 
			
		||||
/_/   |__/|__/_/_/ /_/\__, /\__,_/\__/\___/      \____/\____/_/ /_/_/ /_/\___/\___/\__/\____/_/     
 | 
			
		||||
                     /____/                                                                         
 | 
			
		||||
@@ -1,165 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: tteck (tteckster) | Co-Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://www.home-assistant.io/
 | 
			
		||||
 | 
			
		||||
APP="Home Assistant-Core"
 | 
			
		||||
var_tags="${var_tags:-automation;smarthome}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_os="${var_os:-ubuntu}"
 | 
			
		||||
var_version="${var_version:-24.10}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  if ! lsb_release -d | grep -q "Ubuntu 24.10"; then
 | 
			
		||||
    msg_error "Wrong OS detected. This script only supports Ubuntu 24.10."
 | 
			
		||||
    msg_error "Read Guide: https://github.com/community-scripts/ProxmoxVE/discussions/1549"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /srv/homeassistant ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  setup_uv
 | 
			
		||||
  IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
  UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
 | 
			
		||||
    "1" "Update Core" ON \
 | 
			
		||||
    "2" "Install HACS" OFF \
 | 
			
		||||
    "3" "Install FileBrowser" OFF \
 | 
			
		||||
    3>&1 1>&2 2>&3)
 | 
			
		||||
 | 
			
		||||
  if [ "$UPD" == "1" ]; then
 | 
			
		||||
    if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SELECT BRANCH" --yesno "Use Beta Branch?" 10 58); then
 | 
			
		||||
      clear
 | 
			
		||||
      header_info
 | 
			
		||||
      echo -e "${GN}Updating to Beta Version${CL}"
 | 
			
		||||
      BR="--pre"
 | 
			
		||||
    else
 | 
			
		||||
      clear
 | 
			
		||||
      header_info
 | 
			
		||||
      echo -e "${GN}Updating to Stable Version${CL}"
 | 
			
		||||
      BR=""
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping Home Assistant"
 | 
			
		||||
    systemctl stop homeassistant
 | 
			
		||||
    msg_ok "Stopped Home Assistant"
 | 
			
		||||
 | 
			
		||||
    if [[ -d /srv/homeassistant/bin ]]; then
 | 
			
		||||
      msg_info "Migrating to .venv-based structure"
 | 
			
		||||
      $STD source /srv/homeassistant/bin/activate
 | 
			
		||||
      PY_VER=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
 | 
			
		||||
      $STD deactivate
 | 
			
		||||
      mv /srv/homeassistant "/srv/homeassistant_backup_$PY_VER"
 | 
			
		||||
      mkdir -p /srv/homeassistant
 | 
			
		||||
      cd /srv/homeassistant
 | 
			
		||||
 | 
			
		||||
      $STD uv python install 3.13
 | 
			
		||||
      UV_PYTHON=$(uv python list | awk '/3\.13\.[0-9]+.*\/root\/.local/ {print $2; exit}')
 | 
			
		||||
      if [[ -z "$UV_PYTHON" ]]; then
 | 
			
		||||
        msg_error "No local Python 3.13 found via uv"
 | 
			
		||||
        exit 1
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
      $STD uv venv .venv --python "$UV_PYTHON"
 | 
			
		||||
      $STD source .venv/bin/activate
 | 
			
		||||
      $STD uv pip install homeassistant mysqlclient psycopg2-binary isal webrtcvad wheel
 | 
			
		||||
      mkdir -p /root/.homeassistant
 | 
			
		||||
      msg_ok "Migration complete"
 | 
			
		||||
    else
 | 
			
		||||
      source /srv/homeassistant/.venv/bin/activate
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Home Assistant"
 | 
			
		||||
    $STD uv pip install $BR --upgrade homeassistant
 | 
			
		||||
    msg_ok "Updated Home Assistant"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Home Assistant"
 | 
			
		||||
    if [[ -f /etc/systemd/system/homeassistant.service ]] && grep -q "/srv/homeassistant/bin/python3" /etc/systemd/system/homeassistant.service; then
 | 
			
		||||
      sed -i 's|ExecStart=/srv/homeassistant/bin/python3|ExecStart=/srv/homeassistant/.venv/bin/python3|' /etc/systemd/system/homeassistant.service
 | 
			
		||||
      sed -i 's|PATH=/srv/homeassistant/bin|PATH=/srv/homeassistant/.venv/bin|' /etc/systemd/system/homeassistant.service
 | 
			
		||||
      $STD systemctl daemon-reload
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    systemctl start homeassistant
 | 
			
		||||
    sleep 5
 | 
			
		||||
    msg_ok "Started Home Assistant"
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
    echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ "$UPD" == "2" ]; then
 | 
			
		||||
    msg_info "Installing Home Assistant Community Store (HACS)"
 | 
			
		||||
    $STD apt update
 | 
			
		||||
    cd /root/.homeassistant
 | 
			
		||||
    $STD bash <(curl -fsSL https://get.hacs.xyz)
 | 
			
		||||
    msg_ok "Installed Home Assistant Community Store (HACS)"
 | 
			
		||||
    echo -e "\n Reboot Home Assistant and clear browser cache then Add HACS integration.\n"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ "$UPD" == "3" ]; then
 | 
			
		||||
    set +Eeuo pipefail
 | 
			
		||||
    read -r -p "${TAB3}Would you like to use No Authentication? <y/N> " prompt
 | 
			
		||||
    msg_info "Installing FileBrowser"
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
 | 
			
		||||
    $STD curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin
 | 
			
		||||
 | 
			
		||||
    if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
 | 
			
		||||
      $STD filebrowser config init -a '0.0.0.0'
 | 
			
		||||
      $STD filebrowser config set -a '0.0.0.0'
 | 
			
		||||
      $STD filebrowser config set --auth.method=noauth
 | 
			
		||||
      $STD filebrowser users add ID 1 --perm.admin
 | 
			
		||||
    else
 | 
			
		||||
      $STD filebrowser config init -a '0.0.0.0'
 | 
			
		||||
      $STD filebrowser config set -a '0.0.0.0'
 | 
			
		||||
      $STD filebrowser users add admin helper-scripts.com --perm.admin
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Installed FileBrowser"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Service"
 | 
			
		||||
    cat <<EOF >/etc/systemd/system/filebrowser.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Filebrowser
 | 
			
		||||
After=network-online.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
User=root
 | 
			
		||||
WorkingDirectory=/root/
 | 
			
		||||
ExecStart=/usr/local/bin/filebrowser -r /root/.homeassistant
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=default.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
    systemctl enable --now -q filebrowser.service
 | 
			
		||||
    msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Completed Successfully!\n"
 | 
			
		||||
    echo -e "FileBrowser should be reachable by going to the following URL.
 | 
			
		||||
         ${BL}http://$IP:8080${CL}   admin|helper-scripts.com\n"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
 | 
			
		||||
@@ -22,13 +22,14 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/homebox ]]; then
 | 
			
		||||
  if [[ ! -f /etc/systemd/system/homebox.service ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ -x /opt/homebox ]]; then
 | 
			
		||||
    sed -i 's|/opt\b|/opt/homebox|g' /etc/systemd/system/homebox.service
 | 
			
		||||
    sed -i 's|^ExecStart=/opt/homebox$|ExecStart=/opt/homebox/homebox|' /etc/systemd/system/homebox.service
 | 
			
		||||
    systemctl daemon-reload
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
@@ -37,9 +38,11 @@ function update_script() {
 | 
			
		||||
    systemctl stop homebox
 | 
			
		||||
    msg_ok "${APP} Stopped"
 | 
			
		||||
 | 
			
		||||
    [ -x /opt/homebox ] && rm -f /opt/homebox
 | 
			
		||||
    fetch_and_deploy_gh_release "homebox" "sysadminsmedia/homebox" "prebuild" "latest" "/opt/homebox" "homebox_Linux_x86_64.tar.gz"
 | 
			
		||||
    chmod +x /opt/homebox/homebox
 | 
			
		||||
    [ -f /opt/.env ] && mv /opt/.env /opt/homebox/.env
 | 
			
		||||
    [ -d /opt/.data ] && mv /opt/.data /opt/homebox/.data
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start homebox
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										74
									
								
								ct/hortusfox.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								ct/hortusfox.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/danielbrendel/hortusfox-web
 | 
			
		||||
 | 
			
		||||
APP="HortusFox"
 | 
			
		||||
var_tags="${var_tags:-plants}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/hortusfox ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/danielbrendel/hortusfox-web/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
			
		||||
  if [[ ! -f ~/.hortusfox ]] || [[ "${RELEASE}" != "$(cat ~/.hortusfox)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up current HortusFox installation"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    mv /opt/hortusfox/ /opt/hortusfox-backup
 | 
			
		||||
    msg_ok "Backed up current HortusFox installation"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "hortusfox" "danielbrendel/hortusfox-web"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating HortusFox"
 | 
			
		||||
    cd /opt/hortusfox
 | 
			
		||||
    mv /opt/hortusfox-backup/.env /opt/hortusfox/.env
 | 
			
		||||
    $STD composer install --no-dev --optimize-autoloader
 | 
			
		||||
    $STD php asatru migrate --no-interaction
 | 
			
		||||
    $STD php asatru plants:attributes
 | 
			
		||||
    $STD php asatru calendar:classes
 | 
			
		||||
    chown -R www-data:www-data /opt/hortusfox
 | 
			
		||||
    msg_ok "Updated HortusFox"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -r /opt/hortusfox-backup
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
							
								
								
									
										24
									
								
								ct/immich.sh
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								ct/immich.sh
									
									
									
									
									
								
							@@ -52,13 +52,14 @@ function update_script() {
 | 
			
		||||
  if [[ -f ~/.immich_library_revisions ]]; then
 | 
			
		||||
    libraries=("libjxl" "libheif" "libraw" "imagemagick" "libvips")
 | 
			
		||||
    cd "$BASE_DIR"
 | 
			
		||||
    msg_info "Checking for updates to custom image-processing libraries"
 | 
			
		||||
    $STD git pull
 | 
			
		||||
    for library in "${libraries[@]}"; do
 | 
			
		||||
      compile_"$library"
 | 
			
		||||
    done
 | 
			
		||||
    msg_ok "Image-processing libraries updated"
 | 
			
		||||
    msg_ok "Image-processing libraries up to date"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE="1.137.3"
 | 
			
		||||
  RELEASE="1.138.1"
 | 
			
		||||
  #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}"
 | 
			
		||||
@@ -74,7 +75,8 @@ function update_script() {
 | 
			
		||||
  APP_DIR="${INSTALL_DIR}/app"
 | 
			
		||||
  ML_DIR="${APP_DIR}/machine-learning"
 | 
			
		||||
  GEO_DIR="${INSTALL_DIR}/geodata"
 | 
			
		||||
  VCHORD_RELEASE="$(curl -fsSL https://api.github.com/repos/tensorchord/vectorchord/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
 | 
			
		||||
  VCHORD_RELEASE="0.4.3"
 | 
			
		||||
  # VCHORD_RELEASE="$(curl -fsSL https://api.github.com/repos/tensorchord/vectorchord/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f ~/.vchord_version ]] || [[ "$VCHORD_RELEASE" != "$(cat ~/.vchord_version)" ]]; then
 | 
			
		||||
    msg_info "Updating VectorChord"
 | 
			
		||||
@@ -91,7 +93,8 @@ function update_script() {
 | 
			
		||||
    $STD sudo -u postgres psql -d immich -c "ALTER EXTENSION vchord UPDATE;"
 | 
			
		||||
    systemctl restart postgresql
 | 
			
		||||
    if [[ ! -f ~/.vchord_version ]] || [[ ! "$(cat ~/.vchord_version)" > "0.3.0" ]]; then
 | 
			
		||||
      $STD sudo -u postgres psql -d immich -c "REINDEX DATABASE;"
 | 
			
		||||
      $STD sudo -u postgres psql -d immich -c "REINDEX INDEX face_index;"
 | 
			
		||||
      $STD sudo -u postgres psql -d immich -c "REINDEX INDEX clip_index;"
 | 
			
		||||
    fi
 | 
			
		||||
    echo "$VCHORD_RELEASE" >~/.vchord_version
 | 
			
		||||
    rm ./vchord.deb
 | 
			
		||||
@@ -106,10 +109,10 @@ function update_script() {
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -a
 | 
			
		||||
. "$INSTALL_DIR"/.env
 | 
			
		||||
. ${INSTALL_DIR}/.env
 | 
			
		||||
set +a
 | 
			
		||||
 | 
			
		||||
/usr/bin/node "$APP_DIR"/dist/main.js "\$@"
 | 
			
		||||
/usr/bin/node ${APP_DIR}/dist/main.js "\$@"
 | 
			
		||||
EOF
 | 
			
		||||
    chmod +x "$INSTALL_DIR"/start.sh
 | 
			
		||||
  fi
 | 
			
		||||
@@ -145,6 +148,7 @@ EOF
 | 
			
		||||
  export SHARP_FORCE_GLOBAL_LIBVIPS=true
 | 
			
		||||
  $STD npm install sharp
 | 
			
		||||
  rm -rf "$APP_DIR"/node_modules/@img/sharp-{libvips*,linuxmusl-x64}
 | 
			
		||||
  mv "$INSTALL_DIR"/start.sh "$APP_DIR"/bin
 | 
			
		||||
  msg_ok "Updated ${APP} web and microservices"
 | 
			
		||||
 | 
			
		||||
  cd "$SRC_DIR"/machine-learning
 | 
			
		||||
@@ -180,7 +184,10 @@ EOF
 | 
			
		||||
  msg_ok "Updated Immich CLI"
 | 
			
		||||
 | 
			
		||||
  chown -R immich:immich "$INSTALL_DIR"
 | 
			
		||||
  echo "$RELEASE" >/opt/"${APP}"_version.txt
 | 
			
		||||
  if [[ ! -f ~/.debian_version.bak ]]; then
 | 
			
		||||
    cp /etc/debian_version ~/.debian_version.bak
 | 
			
		||||
    sed -i 's/.*/13.0/' /etc/debian_version
 | 
			
		||||
  fi
 | 
			
		||||
  msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Cleaning up"
 | 
			
		||||
@@ -315,8 +322,7 @@ function compile_imagemagick() {
 | 
			
		||||
 | 
			
		||||
function compile_libvips() {
 | 
			
		||||
  SOURCE=$SOURCE_DIR/libvips
 | 
			
		||||
  # : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
 | 
			
		||||
  : "${LIBVIPS_REVISION:=8fa37a64547e392d3808eed8d72adab7e02b3d00}"
 | 
			
		||||
  : "${LIBVIPS_REVISION:=$(jq -cr '.revision' "$BASE_DIR"/server/sources/libvips.json)}"
 | 
			
		||||
  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
 | 
			
		||||
 
 | 
			
		||||
@@ -78,7 +78,7 @@ function update_script() {
 | 
			
		||||
  cd /opt/karakeep/apps/cli
 | 
			
		||||
  $STD pnpm install --frozen-lockfile
 | 
			
		||||
  $STD pnpm build
 | 
			
		||||
  DATA_DIR="$(sed -n '/^DATA_DIR/p' /etc/karakeep/karakeep.env | awk -F= '{print $2}')"
 | 
			
		||||
  DATA_DIR="$(sed -n '/^DATA_DIR/p' /etc/karakeep/karakeep.env | awk -F= '{print $2}' | tr -d '="=')"
 | 
			
		||||
  export DATA_DIR="${DATA_DIR:-/opt/karakeep_data}"
 | 
			
		||||
  cd /opt/karakeep/packages/db
 | 
			
		||||
  $STD pnpm migrate
 | 
			
		||||
 
 | 
			
		||||
@@ -27,38 +27,50 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Stopping Keycloak"
 | 
			
		||||
  systemctl stop keycloak
 | 
			
		||||
  msg_ok "Stopped Keycloak"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating packages"
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get -y upgrade
 | 
			
		||||
  msg_ok "Updated packages"
 | 
			
		||||
 | 
			
		||||
  msg_info "Backup old Keycloak"
 | 
			
		||||
  cd /opt
 | 
			
		||||
  mv keycloak keycloak.old
 | 
			
		||||
  tar -czf keycloak_conf_backup.tar.gz keycloak.old/conf
 | 
			
		||||
  msg_ok "Backup done"
 | 
			
		||||
 | 
			
		||||
  fetch_and_deploy_gh_release "keycloak" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP}"
 | 
			
		||||
  cd /opt
 | 
			
		||||
  mv keycloak_conf_backup.tar.gz keycloak/conf
 | 
			
		||||
  cp -r keycloak.old/providers keycloak
 | 
			
		||||
  cp -r keycloak.old/themes keycloak
 | 
			
		||||
  rm -rf keycloak.old
 | 
			
		||||
  msg_ok "Updated ${APP} LXC"
 | 
			
		||||
 | 
			
		||||
  msg_info "Restarting Keycloak"
 | 
			
		||||
  systemctl restart keycloak
 | 
			
		||||
  msg_ok "Restarted Keycloak"
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/keycloak/keycloak/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.keycloak_app 2>/dev/null)" ]] || [[ ! -f ~/.keycloak_app ]]; then
 | 
			
		||||
    msg_info "Stopping Keycloak"
 | 
			
		||||
    systemctl stop keycloak
 | 
			
		||||
    msg_ok "Stopped Keycloak"
 | 
			
		||||
  
 | 
			
		||||
    msg_info "Updating packages"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated packages"
 | 
			
		||||
  
 | 
			
		||||
    msg_info "Backup old Keycloak"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    mv keycloak keycloak.old
 | 
			
		||||
    msg_ok "Backup done"
 | 
			
		||||
  
 | 
			
		||||
    fetch_and_deploy_gh_release "keycloak_app" "keycloak/keycloak" "prebuild" "latest" "/opt/keycloak" "keycloak-*.tar.gz"
 | 
			
		||||
  
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    cp -a keycloak.old/conf/. keycloak/conf/
 | 
			
		||||
    cp -a keycloak.old/providers/. keycloak/providers/ 2>/dev/null || true
 | 
			
		||||
    cp -a keycloak.old/themes/. keycloak/themes/ 2>/dev/null || true
 | 
			
		||||
    msg_ok "Updated ${APP} LXC"
 | 
			
		||||
  
 | 
			
		||||
    msg_info "Restarting Keycloak"
 | 
			
		||||
    systemctl restart keycloak
 | 
			
		||||
    msg_ok "Restarted Keycloak"
 | 
			
		||||
  
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf keycloak.old
 | 
			
		||||
    msg_ok "Cleanup complete"
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										83
									
								
								ct/kometa.sh
									
									
									
									
									
								
							
							
						
						
									
										83
									
								
								ct/kometa.sh
									
									
									
									
									
								
							@@ -20,51 +20,46 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
    if [[ ! -f "/opt/kometa/kometa.py" ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/kometa_version.txt)" ]] || [[ ! -f /opt/kometa_version.txt ]]; then
 | 
			
		||||
        msg_info "Updating $APP"
 | 
			
		||||
        msg_info "Stopping $APP"
 | 
			
		||||
        systemctl stop kometa
 | 
			
		||||
        msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
        cd /tmp
 | 
			
		||||
        temp_file=$(mktemp)
 | 
			
		||||
        RELEASE=$(curl -fsSL https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file""
 | 
			
		||||
        tar -xzf "$temp_file"
 | 
			
		||||
        cp /opt/kometa/config/config.yml /opt
 | 
			
		||||
        rm -rf /opt/kometa
 | 
			
		||||
        mv Kometa-${RELEASE} /opt/kometa
 | 
			
		||||
        cd /opt/kometa
 | 
			
		||||
        rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
			
		||||
        $STD pip install -r requirements.txt --ignore-installed
 | 
			
		||||
        mkdir -p config/assets
 | 
			
		||||
        cp /opt/config.yml config/config.yml
 | 
			
		||||
        echo "${RELEASE}" >/opt/kometa_version.txt
 | 
			
		||||
        msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting $APP"
 | 
			
		||||
        systemctl start kometa
 | 
			
		||||
        msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -f $temp_file
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
        msg_ok "Update Successful"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
    fi
 | 
			
		||||
  if [[ ! -d "/opt/kometa" ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | jq -r '.tag_name | sub("^v";"")')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.kometa 2>/dev/null)" ]] || [[ ! -f ~/.kometa ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop kometa
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    cp /opt/kometa/config/config.yml /opt
 | 
			
		||||
    msg_ok "Backup completed"
 | 
			
		||||
 | 
			
		||||
    PYTHON_VERSION="3.12" setup_uv
 | 
			
		||||
    $STD uv python update-shell
 | 
			
		||||
    fetch_and_deploy_gh_release "kometa" "Kometa-Team/Kometa"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Kometa"
 | 
			
		||||
    $STD uv pip install -r requirements.txt --system
 | 
			
		||||
    mkdir -p config/assets
 | 
			
		||||
    cp /opt/config.yml config/config.yml
 | 
			
		||||
    msg_ok "Updated Kometa"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start kometa
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -74,4 +69,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access the LXC at following IP address:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ ! -f ~/.komga ]] || [[ "${RELEASE}" != "$(cat ~/.komga)" ]]; then
 | 
			
		||||
  if [[ ! -f ~/.komga-org ]] || [[ "${RELEASE}" != "$(cat ~/.komga-org)" ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop komga
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 
 | 
			
		||||
@@ -24,10 +24,6 @@ function update_script() {
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/meilisearch ]]; then
 | 
			
		||||
    msg_error "No Meilisearch Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Meilisearch Update" --radiolist --cancel-button Exit-Script "Spacebar = Select" 10 58 2 \
 | 
			
		||||
    "1" "Update Meilisearch" ON \
 | 
			
		||||
    "2" "Update Meilisearch-UI" OFF \
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,10 @@ function update_script() {
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cd /opt/myspeed
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    cp -r /opt/myspeed_bak/data/* /opt/myspeed/data/
 | 
			
		||||
    if [[ -d /opt/myspeed_bak/data ]]; then
 | 
			
		||||
      mkdir -p /opt/myspeed/data/
 | 
			
		||||
      cp -r /opt/myspeed_bak/data/* /opt/myspeed/data/
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Updated ${APP} to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP} Service"
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ function update_script() {
 | 
			
		||||
    msg_info "Updating $APP"
 | 
			
		||||
    systemctl stop openobserve
 | 
			
		||||
    LATEST=$(curl -fsSL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
    tar zxvf <(curl -fsSL https://github.com/openobserve/openobserve/releases/download/$LATEST/openobserve-${LATEST}-linux-amd64.tar.gz) -C /opt/openobserve
 | 
			
		||||
    $STD tar zxvf <(curl -fsSL https://downloads.openobserve.ai/releases/openobserve/$LATEST/openobserve-$LATEST-linux-amd64.tar.gz) -C /opt/openobserve
 | 
			
		||||
    systemctl start openobserve
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
    exit
 | 
			
		||||
 
 | 
			
		||||
@@ -42,11 +42,12 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cd /opt/outline
 | 
			
		||||
    mv /opt/.env /opt/outline
 | 
			
		||||
    export NODE_ENV=development
 | 
			
		||||
    export NODE_OPTIONS="--max-old-space-size=3584"
 | 
			
		||||
    $STD yarn install --frozen-lockfile
 | 
			
		||||
    export NODE_ENV=production
 | 
			
		||||
    $STD yarn build
 | 
			
		||||
    mv /opt/.env /opt/outline
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										79
									
								
								ct/palmr.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								ct/palmr.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,79 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/kyantech/Palmr
 | 
			
		||||
 | 
			
		||||
APP="Palmr"
 | 
			
		||||
var_tags="${var_tags:-files}"
 | 
			
		||||
var_cpu="${var_cpu:-4}"
 | 
			
		||||
var_ram="${var_ram:-6144}"
 | 
			
		||||
var_disk="${var_disk:-6}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/palmr_data ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/kyantech/palmr/releases/latest | jq '.tag_name' | sed 's/^"v//;s/"$//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.palmr 2>/dev/null)" ]] || [[ ! -f ~/.palmr ]]; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop palmr-frontend palmr-backend
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
    cp /opt/palmr/apps/server/.env /opt/palmr.env
 | 
			
		||||
    fetch_and_deploy_gh_release "Palmr" "kyantech/Palmr" "tarball" "latest" "/opt/palmr"
 | 
			
		||||
 | 
			
		||||
    PNPM="$(jq -r '.packageManager' /opt/palmr/package.json)"
 | 
			
		||||
    NODE_VERSION="20" NODE_MODULE="$PNPM" setup_nodejs
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    cd /opt/palmr/apps/server
 | 
			
		||||
    mv /opt/palmr.env /opt/palmr/apps/server/.env
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    $STD pnpm dlx prisma generate
 | 
			
		||||
    $STD pnpm dlx prisma migrate deploy
 | 
			
		||||
    $STD pnpm dlx prisma db push
 | 
			
		||||
    $STD pnpm build
 | 
			
		||||
 | 
			
		||||
    cd /opt/palmr/apps/web
 | 
			
		||||
    export NODE_ENV=production
 | 
			
		||||
    export NEXT_TELEMETRY_DISABLED=1
 | 
			
		||||
    mv ./.env.example ./.env
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    $STD pnpm build
 | 
			
		||||
    chown -R palmr:palmr /opt/palmr_data /opt/palmr
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start palmr-backend palmr-frontend
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "Already up to date"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
@@ -9,7 +9,7 @@ APP="Paperless-AI"
 | 
			
		||||
var_tags="${var_tags:-ai;document}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-12}"
 | 
			
		||||
var_disk="${var_disk:-20}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ APP="Paperless-ngx"
 | 
			
		||||
var_tags="${var_tags:-document;management}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_disk="${var_disk:-12}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
@@ -20,70 +20,115 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/paperless ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | jq -r .tag_name | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.paperless 2>/dev/null)" ]] || [[ ! -f ~/.paperless ]]; then
 | 
			
		||||
    msg_info "Stopping all Paperless-ngx Services"
 | 
			
		||||
    systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
 | 
			
		||||
    msg_ok "Stopped all Paperless-ngx Services"
 | 
			
		||||
 | 
			
		||||
  UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
 | 
			
		||||
    "1" "Update Paperless-ngx to $RELEASE" ON \
 | 
			
		||||
    "2" "Paperless-ngx Credentials" OFF \
 | 
			
		||||
    3>&1 1>&2 2>&3)
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [ "$UPD" == "1" ]; then
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
      if [[ "$(gs --version 2>/dev/null)" != "10.04.0" ]]; then
 | 
			
		||||
        msg_info "Updating Ghostscript (Patience)"
 | 
			
		||||
        cd /tmp
 | 
			
		||||
        curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz" -o $(basename "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz")
 | 
			
		||||
        tar -xzf ghostscript-10.04.0.tar.gz
 | 
			
		||||
        cd ghostscript-10.04.0
 | 
			
		||||
        $STD ./configure
 | 
			
		||||
        $STD make
 | 
			
		||||
        $STD sudo make install
 | 
			
		||||
        rm -rf /tmp/ghostscript*
 | 
			
		||||
        msg_ok "Ghostscript updated to 10.04.0"
 | 
			
		||||
      fi
 | 
			
		||||
      msg_info "Stopping all Paperless-ngx Services"
 | 
			
		||||
      systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service
 | 
			
		||||
      msg_ok "Stopped all Paperless-ngx Services"
 | 
			
		||||
    if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then
 | 
			
		||||
 | 
			
		||||
      msg_info "Backing up data"
 | 
			
		||||
      mkdir -p /opt/paperless/backup
 | 
			
		||||
      cp -r /opt/paperless/data /opt/paperless/backup/
 | 
			
		||||
      cp -r /opt/paperless/media /opt/paperless/backup/
 | 
			
		||||
      cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
 | 
			
		||||
      msg_ok "Backup completed"
 | 
			
		||||
 | 
			
		||||
      PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
      fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
 | 
			
		||||
      fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
 | 
			
		||||
      setup_gs
 | 
			
		||||
 | 
			
		||||
      msg_info "Updating to ${RELEASE}"
 | 
			
		||||
      cd ~
 | 
			
		||||
      curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz" -o $(basename "https://github.com/paperless-ngx/paperless-ngx/releases/download/$RELEASE/paperless-ngx-$RELEASE.tar.xz")
 | 
			
		||||
      tar -xf paperless-ngx-$RELEASE.tar.xz
 | 
			
		||||
      cp -r /opt/paperless/paperless.conf paperless-ngx/
 | 
			
		||||
      cp -r paperless-ngx/* /opt/paperless/
 | 
			
		||||
      cp -r /opt/paperless/backup/* /opt/paperless/
 | 
			
		||||
      cd /opt/paperless
 | 
			
		||||
      $STD pip install -r requirements.txt
 | 
			
		||||
      $STD uv sync --all-extras
 | 
			
		||||
      cd /opt/paperless/src
 | 
			
		||||
      $STD /usr/bin/python3 manage.py migrate
 | 
			
		||||
      echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
      $STD uv run -- python manage.py migrate
 | 
			
		||||
      msg_ok "Updated to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
      msg_info "Cleaning up"
 | 
			
		||||
      cd ~
 | 
			
		||||
      rm paperless-ngx-$RELEASE.tar.xz
 | 
			
		||||
      rm -rf paperless-ngx
 | 
			
		||||
      msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
      msg_info "Starting all Paperless-ngx Services"
 | 
			
		||||
      systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service
 | 
			
		||||
      sleep 1
 | 
			
		||||
      msg_ok "Started all Paperless-ngx Services"
 | 
			
		||||
      msg_ok "Updated Successfully!\n"
 | 
			
		||||
    else
 | 
			
		||||
      msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
      msg_warn "You are about to migrate your Paperless-ngx installation to uv!"
 | 
			
		||||
      msg_custom "🔒" "It is strongly recommended to take a Proxmox snapshot first:"
 | 
			
		||||
      echo -e "   1. Stop the container:  pct stop <CTID>"
 | 
			
		||||
      echo -e "   2. Create a snapshot:  pct snapshot <CTID> pre-paperless-uv-migration"
 | 
			
		||||
      echo -e "   3. Start the container again\n"
 | 
			
		||||
 | 
			
		||||
      read -rp "Have you created a snapshot? [y/N]: " confirm
 | 
			
		||||
      if [[ ! "$confirm" =~ ^([yY]|[yY][eE][sS])$ ]]; then
 | 
			
		||||
        msg_error "Migration aborted. Please create a snapshot first."
 | 
			
		||||
        exit 1
 | 
			
		||||
      fi
 | 
			
		||||
      msg_info "Migrating old Paperless-ngx installation to uv"
 | 
			
		||||
      rm -rf /opt/paperless/venv
 | 
			
		||||
      find /opt/paperless -name "__pycache__" -type d -exec rm -rf {} +
 | 
			
		||||
 | 
			
		||||
      declare -A PATCHES=(
 | 
			
		||||
        ["paperless-consumer.service"]="ExecStart=uv run -- python manage.py document_consumer"
 | 
			
		||||
        ["paperless-scheduler.service"]="ExecStart=uv run -- celery --app paperless beat --loglevel INFO"
 | 
			
		||||
        ["paperless-task-queue.service"]="ExecStart=uv run -- celery --app paperless worker --loglevel INFO"
 | 
			
		||||
        ["paperless-webserver.service"]="ExecStart=uv run -- granian --interface asgi --ws \"paperless.asgi:application\""
 | 
			
		||||
      )
 | 
			
		||||
 | 
			
		||||
      for svc in "${!PATCHES[@]}"; do
 | 
			
		||||
        path=$(systemctl show -p FragmentPath "$svc" | cut -d= -f2)
 | 
			
		||||
        if [[ -n "$path" && -f "$path" ]]; then
 | 
			
		||||
          sed -i "s|^ExecStart=.*|${PATCHES[$svc]}|" "$path"
 | 
			
		||||
          if [[ "$svc" == "paperless-webserver.service" ]]; then
 | 
			
		||||
            grep -q "^Environment=GRANIAN_HOST=" "$path" ||
 | 
			
		||||
              sed -i '/^\[Service\]/a Environment=GRANIAN_HOST=::' "$path"
 | 
			
		||||
            grep -q "^Environment=GRANIAN_PORT=" "$path" ||
 | 
			
		||||
              sed -i '/^\[Service\]/a Environment=GRANIAN_PORT=8000' "$path"
 | 
			
		||||
            grep -q "^Environment=GRANIAN_WORKERS=" "$path" ||
 | 
			
		||||
              sed -i '/^\[Service\]/a Environment=GRANIAN_WORKERS=1' "$path"
 | 
			
		||||
          fi
 | 
			
		||||
          msg_ok "Patched $svc"
 | 
			
		||||
        else
 | 
			
		||||
          msg_error "Service file for $svc not found!"
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
 | 
			
		||||
      $STD systemctl daemon-reload
 | 
			
		||||
      msg_info "Backing up data"
 | 
			
		||||
      mkdir -p /opt/paperless/backup
 | 
			
		||||
      cp -r /opt/paperless/data /opt/paperless/backup/
 | 
			
		||||
      cp -r /opt/paperless/media /opt/paperless/backup/
 | 
			
		||||
      cp -r /opt/paperless/paperless.conf /opt/paperless/backup/
 | 
			
		||||
      msg_ok "Backup completed"
 | 
			
		||||
 | 
			
		||||
      PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
      fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz"
 | 
			
		||||
      fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc"
 | 
			
		||||
      setup_gs
 | 
			
		||||
 | 
			
		||||
      msg_info "Updating Paperless-ngx"
 | 
			
		||||
      cp -r /opt/paperless/backup/* /opt/paperless/
 | 
			
		||||
      cd /opt/paperless
 | 
			
		||||
      $STD uv sync --all-extras
 | 
			
		||||
      cd /opt/paperless/src
 | 
			
		||||
      $STD uv run -- python manage.py migrate
 | 
			
		||||
      msg_ok "Paperless-ngx migration and update to ${RELEASE} completed"
 | 
			
		||||
    fi
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if [ "$UPD" == "2" ]; then
 | 
			
		||||
    cat paperless.creds
 | 
			
		||||
    exit
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting all Paperless-ngx Services"
 | 
			
		||||
    systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue
 | 
			
		||||
    sleep 1
 | 
			
		||||
    msg_ok "Started all Paperless-ngx Services"
 | 
			
		||||
    msg_ok "Updated Successfully!\n"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -94,3 +139,4 @@ 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}:8000${CL}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -23,32 +23,25 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/paymenter ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
 | 
			
		||||
  if [[ "$CURRENT_PHP" != "8.3" ]]; then
 | 
			
		||||
    msg_info "Migrating PHP $CURRENT_PHP to 8.3"
 | 
			
		||||
    $STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
    $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
    $STD sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get remove -y php"${CURRENT_PHP//./}"*
 | 
			
		||||
    $STD apt-get install -y \
 | 
			
		||||
      php8.3 \
 | 
			
		||||
      php8.3-{common,cli,gd,mysql,mbstring,bcmath,xml,curl,zip,intl,redis,fpm}
 | 
			
		||||
    PHP_VERSION="8.3" PHP_FPM="YES" PHP_MODULE="common,mysql,fpm,redis" setup_php
 | 
			
		||||
    setup_composer
 | 
			
		||||
    sed -i 's|php8\.2-fpm\.sock|php8.3-fpm.sock|g' /etc/nginx/sites-available/paymenter.conf
 | 
			
		||||
    $STD systemctl reload nginx
 | 
			
		||||
    msg_ok "Migrated PHP $CURRENT_PHP to 8.3"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/paymenter/paymenter/releases/latest | grep '"tag_name"' | sed -E 's/.*"tag_name": "([^"]+)".*/\1/')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/paymenter/paymenter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f ~/.paymenter ]] || [[ "${RELEASE}" != "$(cat ~/.paymenter)" ]]; then
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    cd /opt/paymenter
 | 
			
		||||
    $STD php artisan p:upgrade --no-interaction
 | 
			
		||||
    echo "${RELEASE}" >~/.paymenter
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}."
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										54
									
								
								ct/pulse.sh
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								ct/pulse.sh
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
#!/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: rcourtman
 | 
			
		||||
# Author: rcourtman & vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/rcourtman/Pulse
 | 
			
		||||
 | 
			
		||||
@@ -23,42 +23,48 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ -d /opt/pulse-monitor ]]; then
 | 
			
		||||
  msg_error "An old installation was detected. Please recreate the LXC from scratch (https://github.com/community-scripts/ProxmoxVE/pull/4848)"
 | 
			
		||||
  exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ ! -d /opt/pulse ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/rcourtman/Pulse/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f ~/.pulse ]]; then
 | 
			
		||||
    msg_error "Old Installation Found! Please recreate the container due big changes in the software."
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/rcourtman/Pulse/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  SERVICE_PATH="/etc/systemd/system"
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.pulse 2>/dev/null)" ]] || [[ ! -f ~/.pulse ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop pulse
 | 
			
		||||
    systemctl stop pulse*.service
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Pulse"
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    mkdir -p /opt/pulse
 | 
			
		||||
    rm -rf /opt/pulse/*
 | 
			
		||||
    curl -fsSL "https://github.com/rcourtman/Pulse/releases/download/v${RELEASE}/pulse-v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar zxf "$temp_file" --strip-components=1 -C /opt/pulse
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated Pulse to ${RELEASE}"
 | 
			
		||||
    if [[ -f /opt/pulse/pulse ]]; then
 | 
			
		||||
      rm -f /opt/pulse/pulse
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    msg_info "Setting permissions for /opt/pulse..."
 | 
			
		||||
    chown -R pulse:pulse "/opt/pulse"
 | 
			
		||||
    find "/opt/pulse" -type d -exec chmod 755 {} \;
 | 
			
		||||
    find "/opt/pulse" -type f -exec chmod 644 {} \;
 | 
			
		||||
    msg_ok "Set permissions."
 | 
			
		||||
    fetch_and_deploy_gh_release "pulse" "rcourtman/Pulse" "prebuild" "latest" "/opt/pulse" "*-linux-amd64.tar.gz"
 | 
			
		||||
    chown -R pulse:pulse /etc/pulse /opt/pulse
 | 
			
		||||
    if [[ -f "$SERVICE_PATH"/pulse.service ]]; then
 | 
			
		||||
      mv "$SERVICE_PATH"/pulse.service "$SERVICE_PATH"/pulse-backend.service
 | 
			
		||||
    fi
 | 
			
		||||
    sed -i -e 's|pulse/pulse|pulse/bin/pulse|' \
 | 
			
		||||
      -e 's/^Environment="API.*$//' "$SERVICE_PATH"/pulse-backend.service
 | 
			
		||||
    systemctl daemon-reload
 | 
			
		||||
    if grep -q 'pulse-home:/bin/bash' /etc/passwd; then
 | 
			
		||||
      usermod -s /usr/sbin/nologin pulse
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start pulse
 | 
			
		||||
    systemctl start pulse-backend
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}."
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit  
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
APP="Reactive-Resume"
 | 
			
		||||
var_tags="${var_tags:-documents}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-3072}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-8}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
@@ -28,15 +28,16 @@ function update_script() {
 | 
			
		||||
    msg_error "No $APP Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/lazy-media/Reactive-Resume/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/lazy-media/Reactive-Resume/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  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"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "Reactive-Resume" "lazy-media/Reactive-Resume" "tarball" "latest" "/opt/Reactive-Resume"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    cd /opt/"$APP"
 | 
			
		||||
    export PUPPETEER_SKIP_DOWNLOAD="true"
 | 
			
		||||
@@ -84,9 +85,9 @@ function update_script() {
 | 
			
		||||
    rm -f "$brwsr_tmp"
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -28,13 +28,10 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if [[ ! -f /opt/rustdeskapi_version.txt ]]; then
 | 
			
		||||
    touch /opt/rustdeskapi_version.txt
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk-server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  APIRELEASE=$(curl -fsSL https://api.github.com/repos/lejianwen/rustdesk-api/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/rustdesk_version.txt)" ]] || [[ "${APIRELEASE}" != "$(cat /opt/rustdesk-api.txt)" ]] || [[ ! -f /opt/rustdesk_version.txt ]] || [[ ! -f /opt/rustdesk-api.txt ]]; then
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.rustdesk-hbbr)" ]] || [[ "${APIRELEASE}" != "$(cat ~/.rustdesk-api)" ]] || [[ ! -f ~/.rustdesk-hbbr ]] || [[ ! -f ~/.rustdesk-api ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop rustdesk-hbbr
 | 
			
		||||
    systemctl stop rustdesk-hbbs
 | 
			
		||||
@@ -43,28 +40,15 @@ function update_script() {
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    TEMPDIR=$(mktemp -d)
 | 
			
		||||
    curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbr_${RELEASE}_amd64.deb" \
 | 
			
		||||
      -o "${TEMPDIR}/rustdesk-server-hbbr_${RELEASE}_amd64.deb"
 | 
			
		||||
    curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-hbbs_${RELEASE}_amd64.deb" \
 | 
			
		||||
      -o "${TEMPDIR}/rustdesk-server-hbbs_${RELEASE}_amd64.deb"
 | 
			
		||||
    curl -fsSL "https://github.com/rustdesk/rustdesk-server/releases/download/${RELEASE}/rustdesk-server-utils_${RELEASE}_amd64.deb" \
 | 
			
		||||
      -o "${TEMPDIR}/rustdesk-server-utils_${RELEASE}_amd64.deb"
 | 
			
		||||
    curl -fsSL "https://github.com/lejianwen/rustdesk-api/releases/download/v${APIRELEASE}/rustdesk-api-server_${APIRELEASE}_amd64.deb" \
 | 
			
		||||
      -o "${TEMPDIR}/rustdesk-api-server_${APIRELEASE}_amd64.deb"
 | 
			
		||||
    $STD dpkg -i $TEMPDIR/*.deb
 | 
			
		||||
    echo "${RELEASE}" >/opt/rustdesk_version.txt
 | 
			
		||||
    echo "${APIRELEASE}" >/opt/rustdeskapi_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf $TEMPDIR
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
    fetch_and_deploy_gh_release "rustdesk-hbbr" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbr*amd64.deb"
 | 
			
		||||
    fetch_and_deploy_gh_release "rustdesk-hbbs" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-hbbs*amd64.deb"
 | 
			
		||||
    fetch_and_deploy_gh_release "rustdesk-utils" "rustdesk/rustdesk-server" "binary" "latest" "/opt/rustdesk" "rustdesk-server-utils*amd64.deb"
 | 
			
		||||
    fetch_and_deploy_gh_release "rustdesk-api" "lejianwen/rustdesk-api" "binary" "latest" "/opt/rustdesk" "rustdesk-api-server*amd64.deb"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting services"
 | 
			
		||||
    systemctl start -q rustdesk-* --all
 | 
			
		||||
    msg_ok "Services started"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								ct/swizzin.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								ct/swizzin.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: EEJoshua
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://swizzin.ltd/
 | 
			
		||||
 | 
			
		||||
APP="Swizzin"
 | 
			
		||||
var_tags="${var_tags:-seedbox}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-20}"
 | 
			
		||||
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 ! command -v sudo box >/dev/null 2>&1; then
 | 
			
		||||
    msg_error "No ${APP} installation found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Running 'sudo box update' inside the container"
 | 
			
		||||
  $STD sudo box update
 | 
			
		||||
  msg_ok "Update finished"
 | 
			
		||||
  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}If installed panel, access through the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 tteck
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (Canbiz)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://tandoor.dev/
 | 
			
		||||
@@ -27,27 +27,57 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  #if ! [[ $(dpkg -s python3-xmlsec 2>/dev/null) ]]; then
 | 
			
		||||
    #$STD apt-get update
 | 
			
		||||
    #$STD apt-get install -y python3-xmlsec
 | 
			
		||||
  #fi
 | 
			
		||||
  #if cd /opt/tandoor && git pull | grep -q 'Already up to date'; then
 | 
			
		||||
    msg_ok "There is currently no update available."
 | 
			
		||||
  #else
 | 
			
		||||
    #msg_info "Updating ${APP} (Patience)"
 | 
			
		||||
    #export $(cat /opt/tandoor/.env | grep "^[^#]" | xargs)
 | 
			
		||||
    #cd /opt/tandoor/
 | 
			
		||||
    #$STD pip3 install -r requirements.txt
 | 
			
		||||
    #$STD /usr/bin/python3 /opt/tandoor/manage.py migrate
 | 
			
		||||
    #$STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic --no-input
 | 
			
		||||
    #$STD /usr/bin/python3 /opt/tandoor/manage.py collectstatic_js_reverse
 | 
			
		||||
    #cd /opt/tandoor/vue
 | 
			
		||||
    #$STD yarn install
 | 
			
		||||
    #$STD yarn build
 | 
			
		||||
    #cd /opt/tandoor
 | 
			
		||||
    #$STD python3 version.py
 | 
			
		||||
    #systemctl restart gunicorn_tandoor
 | 
			
		||||
    #msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f ~/.tandoor ]]; then
 | 
			
		||||
    msg_error "v1 Installation found, please export your data and create an new LXC."
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/TandoorRecipes/recipes/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.tandoor 2>/dev/null)" ]] || [[ ! -f ~/.tandoor ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop tandoor
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    mv /opt/tandoor /opt/tandoor.bak
 | 
			
		||||
    msg_ok "Backup Created"
 | 
			
		||||
 | 
			
		||||
    NODE_VERSION="20" NODE_MODULE="yarn" setup_nodejs
 | 
			
		||||
    PYTHON_VERSION="3.13" setup_uv
 | 
			
		||||
    fetch_and_deploy_gh_release "tandoor" "TandoorRecipes/recipes" "tarball" "latest" "/opt/tandoor"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    cp -r /opt/tandoor.bak/{config,api,mediafiles,staticfiles} /opt/tandoor/
 | 
			
		||||
    mv /opt/.env /opt/tandoor/.env
 | 
			
		||||
    cd /opt/tandoor
 | 
			
		||||
    $STD uv venv .venv --python=python3
 | 
			
		||||
    $STD uv pip install -r requirements.txt --python .venv/bin/python
 | 
			
		||||
    cd /opt/tandoor/vue3
 | 
			
		||||
    $STD yarn install
 | 
			
		||||
    $STD yarn build
 | 
			
		||||
    TANDOOR_VERSION="$(curl -fsSL https://api.github.com/repos/TandoorRecipes/recipes/releases/latest | jq -r .tag_name)"
 | 
			
		||||
    cat <<EOF >/opt/tandoor/cookbook/version_info.py
 | 
			
		||||
TANDOOR_VERSION = "$TANDOOR_VERSION"
 | 
			
		||||
TANDOOR_REF = "bare-metal"
 | 
			
		||||
VERSION_INFO = []
 | 
			
		||||
EOF
 | 
			
		||||
    cd /opt/tandoor
 | 
			
		||||
    $STD /opt/tandoor/.venv/bin/python manage.py migrate
 | 
			
		||||
    $STD /opt/tandoor/.venv/bin/python manage.py collectstatic --no-input
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start tandoor
 | 
			
		||||
    systemctl reload nginx
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf /opt/tandoor.bak
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								ct/tdarr.sh
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								ct/tdarr.sh
									
									
									
									
									
								
							@@ -20,18 +20,30 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /opt/tdarr ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/tdarr ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating $APP LXC"
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get -y upgrade
 | 
			
		||||
  rm -rf /opt/tdarr/Tdarr_Updater
 | 
			
		||||
  cd /opt/tdarr
 | 
			
		||||
  RELEASE=$(curl -fsSL https://f000.backblazeb2.com/file/tdarrs/versions.json | grep -oP '(?<="Tdarr_Updater": ")[^"]+' | grep linux_x64 | head -n 1)
 | 
			
		||||
  curl -fsSL "$RELEASE" -o Tdarr_Updater.zip
 | 
			
		||||
  $STD unzip Tdarr_Updater.zip
 | 
			
		||||
  chmod +x Tdarr_Updater
 | 
			
		||||
  $STD ./Tdarr_Updater
 | 
			
		||||
  msg_ok "Updated $APP LXC"
 | 
			
		||||
 | 
			
		||||
  msg_info "Cleaning up"
 | 
			
		||||
  rm -rf /opt/tdarr/Tdarr_Updater.zip
 | 
			
		||||
  msg_ok "Cleaned"
 | 
			
		||||
  msg_ok "$APP has been successfully updated!"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -41,4 +53,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}:8265${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8265${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,17 +27,20 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating ${APP}"
 | 
			
		||||
 | 
			
		||||
  if ! dpkg -s aspnetcore-runtime-8.0 >/dev/null 2>&1; then
 | 
			
		||||
    curl -fsSL "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb" -o $(basename "https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb")
 | 
			
		||||
    $STD dpkg -i packages-microsoft-prod.deb
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install -y aspnetcore-runtime-8.0
 | 
			
		||||
    rm packages-microsoft-prod.deb
 | 
			
		||||
  RELEASE=$(curl -fsSL https://technitium.com/dns/ | grep -oP 'Version \K[\d.]+')
 | 
			
		||||
  if [[ ! -f ~/.technitium || "${VERSION}" != "$(cat ~/.technitium)" ]]; then
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    curl -fsSL "https://download.technitium.com/dns/DnsServerPortable.tar.gz" -o /opt/DnsServerPortable.tar.gz
 | 
			
		||||
    $STD tar zxvf /opt/DnsServerPortable.tar.gz -C /opt/technitium/dns/
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -f /opt/DnsServerPortable.tar.gz
 | 
			
		||||
    msg_ok "Cleaned up"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required.  ${APP} is already at v${RELEASE}."
 | 
			
		||||
  fi
 | 
			
		||||
  $STD bash <(curl -fsSL https://download.technitium.com/dns/install.sh)
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -26,32 +26,34 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  RELEASE="$(curl -fsSL https://api.github.com/repos/toniebox-reverse-engineering/teddycloud/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
 | 
			
		||||
  VERSION="${RELEASE#tc_v}"
 | 
			
		||||
  if [[ ! -f "/opt/${APP}_version.txt" || "${VERSION}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ ! -f ~/.teddycloud || "${RELEASE}" != "$(cat ~/.teddycloud)" ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop teddycloud
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${VERSION}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    msg_info "Creating backup"
 | 
			
		||||
    mv /opt/teddycloud /opt/teddycloud_bak
 | 
			
		||||
    curl -fsSL "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip" -o $(basename "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip")
 | 
			
		||||
    $STD unzip -d /opt/teddycloud teddycloud.amd64.release_v${VERSION}.zip
 | 
			
		||||
    msg_ok "Backup created"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "teddycloud" "toniebox-reverse-engineering/teddycloud" "prebuild" "latest" "/opt/teddycloud" "teddycloud.amd64.release*.zip"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring data"
 | 
			
		||||
    cp -R /opt/teddycloud_bak/certs /opt/teddycloud_bak/config /opt/teddycloud_bak/data /opt/teddycloud
 | 
			
		||||
    echo "${VERSION}" >"/opt/${APP}_version.txt"
 | 
			
		||||
    msg_ok "Updated ${APP} to v${VERSION}"
 | 
			
		||||
    msg_ok "Data restored"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start teddycloud
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf /opt/teddycloud.amd64.release_v${VERSION}.zip
 | 
			
		||||
    rm -rf /opt/teddycloud_bak
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${VERSION}"
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -27,33 +27,15 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! dpkg -l build-essential >/dev/null 2>&1; then
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install -y build-essential
 | 
			
		||||
  fi
 | 
			
		||||
  if ! npm list -g node-gyp >/dev/null 2>&1; then
 | 
			
		||||
    $STD npm install -g node-gyp
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/thelounge/thelounge-deb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
  if [[ ! -f ~/.thelounge ]] || [[ "${RELEASE}" != "$(cat ~/.thelounge)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop thelounge
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    $STD apt-get install --only-upgrade nodejs
 | 
			
		||||
    cd /opt
 | 
			
		||||
    curl -fsSL "https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb" -o $(basename "https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb")
 | 
			
		||||
    dpkg -i ./thelounge_${RELEASE}_all.deb
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
    fetch_and_deploy_gh_release "thelounge" "thelounge/thelounge-deb" "binary"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start thelounge
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -rf "/opt/thelounge_${RELEASE}_all.deb"
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required.  ${APP} is already at v${RELEASE}."
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								ct/tianji.sh
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								ct/tianji.sh
									
									
									
									
									
								
							@@ -29,33 +29,26 @@ function update_script() {
 | 
			
		||||
  if ! command -v jq &>/dev/null; then
 | 
			
		||||
    $STD apt-get install -y jq
 | 
			
		||||
  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@9.7.1
 | 
			
		||||
    msg_ok "Node.js 22 installed"
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/msgbyte/tianji/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP} Service"
 | 
			
		||||
    systemctl stop tianji
 | 
			
		||||
    msg_ok "Stopped ${APP} Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/msgbyte/tianji/releases/latest | jq -r '.tag_name' | sed 's/^v//')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.tianji 2>/dev/null)" ]] || [[ ! -f ~/.tianji ]]; then
 | 
			
		||||
 | 
			
		||||
    setup_uv
 | 
			
		||||
    NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/msgbyte/tianji/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop tianji
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up data"
 | 
			
		||||
    cp /opt/tianji/src/server/.env /opt/.env
 | 
			
		||||
    mv /opt/tianji /opt/tianji_bak
 | 
			
		||||
    curl -fsSL "https://github.com/msgbyte/tianji/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/msgbyte/tianji/archive/refs/tags/v${RELEASE}.zip")
 | 
			
		||||
    $STD unzip v${RELEASE}.zip
 | 
			
		||||
    mv tianji-${RELEASE} /opt/tianji
 | 
			
		||||
    cd tianji
 | 
			
		||||
    msg_ok "Backed up data"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "tianji" "msgbyte/tianji"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    cd /opt/tianji
 | 
			
		||||
    export NODE_OPTIONS="--max_old_space_size=4096"
 | 
			
		||||
    $STD pnpm install --filter @tianji/client... --config.dedupe-peer-dependents=false --frozen-lockfile
 | 
			
		||||
    $STD pnpm build:static
 | 
			
		||||
@@ -66,15 +59,17 @@ function update_script() {
 | 
			
		||||
    mv /opt/.env /opt/tianji/src/server/.env
 | 
			
		||||
    cd src/server
 | 
			
		||||
    $STD pnpm db:migrate:apply
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating AppRise"
 | 
			
		||||
    $STD uv pip install apprise cryptography --system
 | 
			
		||||
    msg_ok "Updated AppRise"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start tianji
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    rm -R /opt/v${RELEASE}.zip
 | 
			
		||||
    rm -rf /opt/tianji_bak
 | 
			
		||||
    rm -rf /opt/tianji/src/client
 | 
			
		||||
    rm -rf /opt/tianji/website
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,42 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_error "Currently we don't provide an update function for this ${APP}."
 | 
			
		||||
    
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/traccar/traccar/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat ~/.traccar)" ]] || [[ ! -f ~/.traccar ]]; then
 | 
			
		||||
      msg_info "Stopping service"
 | 
			
		||||
      systemctl stop traccar
 | 
			
		||||
      msg_ok "Service stopped"
 | 
			
		||||
 | 
			
		||||
      msg_info "Creating backup"
 | 
			
		||||
      mv /opt/traccar/conf/traccar.xml /opt
 | 
			
		||||
      [[ -d /opt/traccar/data ]] && mv /opt/traccar/data /opt
 | 
			
		||||
      [[ -d /opt/traccar/media ]] && mv /opt/traccar/media /opt
 | 
			
		||||
      msg_ok "Backup created"
 | 
			
		||||
 | 
			
		||||
      rm -rf /opt/traccar
 | 
			
		||||
      fetch_and_deploy_gh_release "traccar" "traccar/traccar" "prebuild" "latest" "/opt/traccar" "traccar-linux-64*.zip"
 | 
			
		||||
      cd /opt/traccar
 | 
			
		||||
      $STD ./traccar.run
 | 
			
		||||
 | 
			
		||||
      msg_info "Restoring data"
 | 
			
		||||
      mv /opt/traccar.xml /opt/traccar/conf
 | 
			
		||||
      [[ -d /opt/data ]] && mv /opt/data /opt/traccar
 | 
			
		||||
      [[ -d /opt/media ]] && mv /opt/media /opt/traccar
 | 
			
		||||
      msg_ok "Data restored"
 | 
			
		||||
 | 
			
		||||
      msg_info "Starting ${APP}"
 | 
			
		||||
      systemctl start traccar
 | 
			
		||||
      msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
      msg_info "Cleaning up"
 | 
			
		||||
      [ -f README.txt ] || [ -f traccar.run ] && rm -f README.txt traccar.run
 | 
			
		||||
      msg_ok "Cleaned up"
 | 
			
		||||
 | 
			
		||||
      msg_ok "Successfully updated ${APP}"
 | 
			
		||||
    else
 | 
			
		||||
      msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
    fi
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -38,4 +73,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}:8082${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8082${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,16 +27,20 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/traefik/traefik/releases | grep -oP '"tag_name":\s*"v\K[\d.]+?(?=")' | sort -V | tail -n 1)
 | 
			
		||||
  msg_info "Updating $APP LXC"
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
    curl -fsSL "https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_amd64.tar.gz" -o $(basename "https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_amd64.tar.gz")
 | 
			
		||||
    tar -C /tmp -xzf traefik*.tar.gz
 | 
			
		||||
    mv /tmp/traefik /usr/bin/
 | 
			
		||||
    rm -rf traefik*.tar.gz
 | 
			
		||||
    systemctl restart traefik.service
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/traefik/traefik/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat ~/.traefik)" ]] || [[ ! -f ~/.traefik ]]; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop traefik
 | 
			
		||||
    msg_ok "Service stopped"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "traefik" "traefik/traefik" "prebuild" "latest" "/usr/bin" "traefik_v*_linux_amd64.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start traefik
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Successfully updated ${APP}"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								ct/twingate-connector.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								ct/twingate-connector.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
#!/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: twingate-andrewb
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://www.twingate.com/docs/
 | 
			
		||||
 | 
			
		||||
APP="Twingate-Connector"
 | 
			
		||||
var_tags="${var_tags:-network;connector;twingate}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-3}"
 | 
			
		||||
var_os="${var_os:-ubuntu}"
 | 
			
		||||
var_version="${var_version:-24.04}"
 | 
			
		||||
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 /lib/systemd/system/twingate-connector.service ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP}"
 | 
			
		||||
  $STD apt update
 | 
			
		||||
  $STD apt install -yq twingate-connector
 | 
			
		||||
  $STD systemctl restart twingate-connector
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "All Finished! If you need to update your access or refresh tokens, they can be found in /etc/twingate/connector.conf"
 | 
			
		||||
@@ -32,11 +32,12 @@ function update_script() {
 | 
			
		||||
    systemctl stop umami
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "umami" "umami-software/umami" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    cd /opt/umami
 | 
			
		||||
    git pull
 | 
			
		||||
    yarn install
 | 
			
		||||
    yarn build
 | 
			
		||||
    $STD yarn install
 | 
			
		||||
    $STD yarn run build
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
@@ -54,4 +55,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -34,27 +34,29 @@ function update_script() {
 | 
			
		||||
      echo "Installed NPM..."
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  LATEST=$(curl -fsSL https://api.github.com/repos/louislam/uptime-kuma/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
 | 
			
		||||
  msg_info "Stopping ${APP}"
 | 
			
		||||
  $STD sudo systemctl stop uptime-kuma
 | 
			
		||||
  msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
  cd /opt/uptime-kuma
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/louislam/uptime-kuma/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
 | 
			
		||||
  if [[ ! -f ~/.uptime-kuma ]] || [[ "${RELEASE}" != "$(cat ~/.uptime-kuma)" ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    $STD systemctl stop uptime-kuma
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Pulling ${APP} ${LATEST}"
 | 
			
		||||
  $STD git fetch --all
 | 
			
		||||
  $STD git checkout $LATEST --force
 | 
			
		||||
  msg_ok "Pulled ${APP} ${LATEST}"
 | 
			
		||||
    fetch_and_deploy_gh_release "uptime-kuma" "louislam/uptime-kuma" "tarball"
 | 
			
		||||
    cd /opt/uptime-kuma
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} to ${LATEST}"
 | 
			
		||||
  $STD npm install --production
 | 
			
		||||
  $STD npm run download-dist
 | 
			
		||||
  msg_ok "Updated ${APP}"
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    $STD npm install --omit dev
 | 
			
		||||
    $STD npm run download-dist
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting ${APP}"
 | 
			
		||||
  $STD sudo systemctl start uptime-kuma
 | 
			
		||||
  msg_ok "Started ${APP}"
 | 
			
		||||
  msg_ok "Updated Successfully"
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    $STD sudo systemctl start uptime-kuma
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ APP="Vaultwarden"
 | 
			
		||||
var_tags="${var_tags:-password-manager}"
 | 
			
		||||
var_cpu="${var_cpu:-4}"
 | 
			
		||||
var_ram="${var_ram:-6144}"
 | 
			
		||||
var_disk="${var_disk:-6}"
 | 
			
		||||
var_disk="${var_disk:-20}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 
 | 
			
		||||
@@ -35,8 +35,15 @@ function update_script() {
 | 
			
		||||
    [[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl stop victoriametrics-logs
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    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"
 | 
			
		||||
    victoriametrics_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest" |
 | 
			
		||||
      jq -r '.assets[].name' |
 | 
			
		||||
      grep -E '^victoria-metrics-linux-amd64-v[0-9.]+\.tar\.gz$')
 | 
			
		||||
    vmutils_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest" |
 | 
			
		||||
      jq -r '.assets[].name' |
 | 
			
		||||
      grep -E '^vmutils-linux-amd64-v[0-9.]+\.tar\.gz$')
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "$victoriametrics_filename"
 | 
			
		||||
    fetch_and_deploy_gh_release "vmutils" "VictoriaMetrics/VictoriaMetrics" "prebuild" "latest" "/opt/victoriametrics" "$vmutils_filename"
 | 
			
		||||
 | 
			
		||||
    if [[ -f /etc/systemd/system/victoriametrics-logs.service ]]; then
 | 
			
		||||
      fetch_and_deploy_gh_release "victorialogs" "VictoriaMetrics/VictoriaLogs" "prebuild" "latest" "/opt/victoriametrics" "victoria-logs-linux-amd64*.tar.gz"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								ct/wallos.sh
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								ct/wallos.sh
									
									
									
									
									
								
							@@ -27,17 +27,19 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/ellite/Wallos/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    curl -fsSL "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip" -o $(basename "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip")
 | 
			
		||||
  if [[ ! -f ~/.wallos ]] || [[ "${RELEASE}" != "$(cat ~/.wallos)" ]]; then
 | 
			
		||||
    msg_info "Creating backup"
 | 
			
		||||
    mkdir -p /opt/logos
 | 
			
		||||
    mv /opt/wallos/db/wallos.db /opt/wallos.db
 | 
			
		||||
    mv /opt/wallos/images/uploads/logos /opt/logos/
 | 
			
		||||
    $STD unzip v${RELEASE}.zip
 | 
			
		||||
    msg_ok "Backup created"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/wallos
 | 
			
		||||
    mv Wallos-${RELEASE} /opt/wallos
 | 
			
		||||
    fetch_and_deploy_gh_release "wallos" "ellite/Wallos" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring ${APP}"
 | 
			
		||||
    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
 | 
			
		||||
@@ -48,16 +50,12 @@ function update_script() {
 | 
			
		||||
    chmod -R 755 /opt/wallos
 | 
			
		||||
    mkdir -p /var/log/cron
 | 
			
		||||
    $STD curl http://localhost/endpoints/db/migrate.php
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
    msg_ok "Configured ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Reload Apache2"
 | 
			
		||||
    systemctl reload apache2
 | 
			
		||||
    msg_ok "Apache2 Reloaded"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -R /opt/v${RELEASE}.zip
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,6 +27,10 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! [[ $(dpkg -s zstd 2>/dev/null) ]]; then
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install -y zstd
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  # Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
 | 
			
		||||
  msg_info "Running Migration"
 | 
			
		||||
@@ -66,8 +70,9 @@ EOF
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file"
 | 
			
		||||
    tar -xf $temp_file
 | 
			
		||||
    cp -f wastebin /opt/wastebin/
 | 
			
		||||
    cp -f wastebin* /opt/wastebin/
 | 
			
		||||
    chmod +x /opt/wastebin/wastebin
 | 
			
		||||
    chmod +x /opt/wastebin/wastebin-ctl
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated Wastebin"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -27,22 +27,20 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/sbondCo/Watcharr/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 ~/.watcharr)" ]] || [[ ! -f ~/.watcharr ]]; then
 | 
			
		||||
        msg_info "Updating $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Stopping $APP"
 | 
			
		||||
        systemctl stop watcharr
 | 
			
		||||
        msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
        temp_file=$(mktemp)
 | 
			
		||||
        temp_folder=$(mktemp -d)
 | 
			
		||||
        curl -fsSL "https://github.com/sbondCo/Watcharr/archive/refs/tags/v${RELEASE}.tar.gz" -o ""$temp_file""
 | 
			
		||||
        tar -xzf "$temp_file" -C "$temp_folder"
 | 
			
		||||
        rm -f /opt/watcharr/server/watcharr
 | 
			
		||||
        rm -rf /opt/watcharr/server/ui
 | 
			
		||||
        cp -rf ${temp_folder}/Watcharr-${RELEASE}/* /opt/watcharr
 | 
			
		||||
        fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
        cd /opt/watcharr
 | 
			
		||||
        export GOOS=linux
 | 
			
		||||
        $STD npm i
 | 
			
		||||
@@ -57,12 +55,6 @@ function update_script() {
 | 
			
		||||
        systemctl start watcharr
 | 
			
		||||
        msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -f ${temp_file}
 | 
			
		||||
        rm -rf ${temp_folder}
 | 
			
		||||
        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}"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,17 +27,28 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating $APP"
 | 
			
		||||
    systemctl stop watchyourlan.service
 | 
			
		||||
    cp -R /data/config.yaml config.yaml
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/aceberg/WatchYourLAN/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d '"' -f 4)
 | 
			
		||||
    curl -fsSL "https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_amd64.deb" -o $(basename "https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_amd64.deb")
 | 
			
		||||
    dpkg -i watchyourlan_${RELEASE}_linux_amd64.deb
 | 
			
		||||
    cp -R config.yaml /data/config.yaml
 | 
			
		||||
    sed -i 's|/etc/watchyourlan/config.yaml|/data/config.yaml|' /lib/systemd/system/watchyourlan.service
 | 
			
		||||
    rm watchyourlan_${RELEASE}_linux_amd64.deb config.yaml
 | 
			
		||||
    systemctl enable -q --now watchyourlan
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/aceberg/WatchYourLAN/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
 | 
			
		||||
      msg_info "Stopping service"
 | 
			
		||||
      systemctl stop watchyourlan.service
 | 
			
		||||
      msg_ok "Service stopped"
 | 
			
		||||
 | 
			
		||||
      cp -R /data/config.yaml ~/config.yaml
 | 
			
		||||
      fetch_and_deploy_gh_release "watchyourlan" "aceberg/WatchYourLAN" "binary"
 | 
			
		||||
      cp -R config.yaml /data/config.yaml
 | 
			
		||||
      sed -i 's|/etc/watchyourlan/config.yaml|/data/config.yaml|' /lib/systemd/system/watchyourlan.service
 | 
			
		||||
      
 | 
			
		||||
      msg_info "Cleaning up"
 | 
			
		||||
      rm ~/config.yaml
 | 
			
		||||
      msg_ok "Cleaned up"
 | 
			
		||||
 | 
			
		||||
      msg_info "Starting service"
 | 
			
		||||
      systemctl enable -q --now watchyourlan
 | 
			
		||||
      msg_ok "Service started"
 | 
			
		||||
    else
 | 
			
		||||
      msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
    fi
 | 
			
		||||
    exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -27,23 +27,26 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | cut -d '"' -f 4)
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
 | 
			
		||||
  if [[ ! -f ~/.wavelog ]] || [[ "${RELEASE}" != "$(cat ~/.wavelog)" ]]; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop apache2
 | 
			
		||||
    msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    msg_info "Creating backup"
 | 
			
		||||
    cp /opt/wavelog/application/config/config.php /opt/config.php
 | 
			
		||||
    cp /opt/wavelog/application/config/database.php /opt/database.php
 | 
			
		||||
    cp -r /opt/wavelog/userdata /opt/userdata
 | 
			
		||||
    if [[ -f /opt/wavelog/assets/js/sections/custom.js ]]; then
 | 
			
		||||
      cp /opt/wavelog/assets/js/sections/custom.js /opt/custom.js
 | 
			
		||||
    fi
 | 
			
		||||
    curl -fsSL "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip" -o $(basename "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip")
 | 
			
		||||
    $STD unzip ${RELEASE}.zip
 | 
			
		||||
    msg_ok "Backup created"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/wavelog
 | 
			
		||||
    mv wavelog-${RELEASE}/ /opt/wavelog
 | 
			
		||||
    fetch_and_deploy_gh_release "wavelog" "wavelog/wavelog" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    rm -rf /opt/wavelog/install
 | 
			
		||||
    mv /opt/config.php /opt/wavelog/application/config/config.php
 | 
			
		||||
    mv /opt/database.php /opt/wavelog/application/config/database.php
 | 
			
		||||
@@ -55,16 +58,12 @@ function update_script() {
 | 
			
		||||
    chown -R www-data:www-data /opt/wavelog/
 | 
			
		||||
    find /opt/wavelog/ -type d -exec chmod 755 {} \;
 | 
			
		||||
    find /opt/wavelog/ -type f -exec chmod 664 {} \;
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf ${RELEASE}.zip
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								ct/wikijs.sh
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								ct/wikijs.sh
									
									
									
									
									
								
							@@ -27,8 +27,9 @@ function update_script() {
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/Requarks/wiki/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 ~/.wikijs)" ]] || [[ ! -f ~/.wikijs ]]; then
 | 
			
		||||
        msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite."
 | 
			
		||||
        SQLITE_INSTALL=$([ -f /opt/wikijs/db.sqlite ] && echo "true" || echo "false")
 | 
			
		||||
        if [[ "${SQLITE_INSTALL}" == "true" && "${RELEASE}" =~ ^3.* ]]; then
 | 
			
		||||
@@ -47,13 +48,9 @@ function update_script() {
 | 
			
		||||
        cp -R /opt/wikijs/{config.yml,/data} /opt/wikijs-backup
 | 
			
		||||
        msg_ok "Backed up Data"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating ${APP}"
 | 
			
		||||
        rm -rf /opt/wikijs/*
 | 
			
		||||
        cd /opt/wikijs
 | 
			
		||||
        curl -fsSL "https://github.com/requarks/wiki/releases/download/v${RELEASE}/wiki-js.tar.gz" -o $(basename "https://github.com/requarks/wiki/releases/download/v${RELEASE}/wiki-js.tar.gz")
 | 
			
		||||
        tar -xzf wiki-js.tar.gz
 | 
			
		||||
        msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
        fetch_and_deploy_gh_release "wikijs" "requarks/wiki" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz"
 | 
			
		||||
        
 | 
			
		||||
        msg_info "Restoring Data"
 | 
			
		||||
        cp -R /opt/wikijs-backup/* /opt/wikijs
 | 
			
		||||
        $SQLITE_INSTALL && $STD npm rebuild sqlite3
 | 
			
		||||
@@ -64,9 +61,9 @@ function update_script() {
 | 
			
		||||
        msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -rf /opt/wikijs/wiki-js.tar.gz
 | 
			
		||||
        rm -rf /opt/wikijs-backup
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
        
 | 
			
		||||
        msg_ok "Updated Successfully"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -30,10 +30,12 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
  apt-get update
 | 
			
		||||
  apt-get -y upgrade
 | 
			
		||||
  sleep 2
 | 
			
		||||
  cd /etc/wgdashboard/src
 | 
			
		||||
  ./wgd.sh update
 | 
			
		||||
  ./wgd.sh start
 | 
			
		||||
  if [[ -d /etc/wgdashboard ]]; then
 | 
			
		||||
    sleep 2
 | 
			
		||||
    cd /etc/wgdashboard/src
 | 
			
		||||
    ./wgd.sh update
 | 
			
		||||
    ./wgd.sh start
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -43,5 +45,5 @@ description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} WGDashboard Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${INFO}${YW}Access WGDashboard (if installed) using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:10086${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -28,21 +28,20 @@ function update_script() {
 | 
			
		||||
      exit
 | 
			
		||||
   fi
 | 
			
		||||
 | 
			
		||||
   msg_info "Updating yt-dlp"
 | 
			
		||||
   $STD yt-dlp -U
 | 
			
		||||
   msg_ok "Updated yt-dlp"
 | 
			
		||||
 | 
			
		||||
   RELEASE=$(curl -fsSL https://api.github.com/repos/marcopiovanello/yt-dlp-web-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
   if [[ "${RELEASE}" != "$(cat /opt/yt-dlp-webui_version.txt)" ]] || [[ ! -f /opt/yt-dlp-webui_version.txt ]]; then
 | 
			
		||||
   if [[ "${RELEASE}" != "$(cat ~/.yt-dlp-webui)" ]] || [[ ! -f ~/.yt-dlp-webui ]]; then
 | 
			
		||||
 | 
			
		||||
      msg_info "Stopping $APP"
 | 
			
		||||
      systemctl stop yt-dlp-webui
 | 
			
		||||
      msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
      msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
      msg_info "Updating yt-dlp"
 | 
			
		||||
      $STD yt-dlp -U
 | 
			
		||||
      msg_ok "Updated yt-dlp"
 | 
			
		||||
      
 | 
			
		||||
      rm -rf /usr/local/bin/yt-dlp-webui
 | 
			
		||||
curl -fsSL "https://github.com/marcopiovanello/yt-dlp-web-ui/releases/download/v${RELEASE}/yt-dlp-webui_linux-amd64" -o "/usr/local/bin/yt-dlp-webui"
 | 
			
		||||
      chmod +x /usr/local/bin/yt-dlp-webui
 | 
			
		||||
      msg_ok "Updated $APP LXC"
 | 
			
		||||
      fetch_and_deploy_gh_release "yt-dlp-webui" "marcopiovanello/yt-dlp-web-ui" "singlefile" "latest" "/usr/local/bin" "yt-dlp-webui_linux-amd64"
 | 
			
		||||
 | 
			
		||||
      msg_info "Starting $APP"
 | 
			
		||||
      systemctl start yt-dlp-webui
 | 
			
		||||
@@ -60,4 +59,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}:3033${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3033${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -32,36 +32,32 @@ function update_script() {
 | 
			
		||||
    $STD npm install -g pnpm@latest
 | 
			
		||||
    msg_ok "Installed pnpm"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/diced/zipline/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 ~/.zipline ]] || [[ "${RELEASE}" != "$(cat ~/.zipline)" ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    systemctl stop zipline
 | 
			
		||||
    msg_ok "${APP} Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cp /opt/zipline/.env /opt/
 | 
			
		||||
    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
 | 
			
		||||
    cp /opt/zipline/.env /opt/
 | 
			
		||||
    rm -R /opt/zipline
 | 
			
		||||
    mv zipline-"${RELEASE}" /opt/zipline
 | 
			
		||||
    fetch_and_deploy_gh_release "zipline" "diced/zipline" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cd /opt/zipline
 | 
			
		||||
    mv /opt/.env /opt/zipline/.env
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    $STD pnpm build
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    systemctl start zipline
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf v"${RELEASE}".zip
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
@@ -27,27 +27,24 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
  if [[ ! -f ~/.zitadel ]] || [[ "${RELEASE}" != "$(cat ~/.zitadel)" ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop zitadel
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    rm -f /usr/local/bin/zitadel
 | 
			
		||||
    fetch_and_deploy_gh_release "zitadel" "zitadel/zitadel" "prebuild" "latest" "/usr/local/bin" "zitadel-linux-amd64.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    cd /tmp
 | 
			
		||||
    curl -fsSL "https://github.com/zitadel/zitadel/releases/download/v$RELEASE/zitadel-linux-amd64.tar.gz" | tar -xz
 | 
			
		||||
    mv zitadel-linux-amd64/zitadel /usr/local/bin
 | 
			
		||||
    $STD zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start zitadel
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf /tmp/zitadel-linux-amd64
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								ct/zoraxy.sh
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								ct/zoraxy.sh
									
									
									
									
									
								
							@@ -27,17 +27,21 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/tobychui/zoraxy/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
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/tobychui/zoraxy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f ~/.zoraxy ]] || [[ "${RELEASE}" != "$(cat ~/.zoraxy)" ]]; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop zoraxy
 | 
			
		||||
    curl -fsSL "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_amd64" -o $(basename "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_amd64")
 | 
			
		||||
    msg_ok "Service stopped"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/zoraxy/zoraxy
 | 
			
		||||
    mv zoraxy_linux_amd64 /opt/zoraxy/zoraxy
 | 
			
		||||
    chmod +x /opt/zoraxy/zoraxy
 | 
			
		||||
    fetch_and_deploy_gh_release "zoraxy" "tobychui/zoraxy" "singlefile" "latest" "/opt/zoraxy" "zoraxy_linux_amd64"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl start zoraxy
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
    msg_ok "Service started"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated successfully"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -23,25 +23,29 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /usr/bin/zot ]]; then
 | 
			
		||||
    msg_error "No ${APP} installation found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/project-zot/zot/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/project-zot/zot/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
			
		||||
  if [[ ! -f ~/.${APP} ]] || [[ "${RELEASE}" != "$(cat ~/.${APP})" ]]; then
 | 
			
		||||
    msg_info "Stopping Zot service"
 | 
			
		||||
    systemctl stop zot
 | 
			
		||||
    msg_ok "Stopped Zot service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Zot to ${RELEASE}"
 | 
			
		||||
    curl -fsSL "https://github.com/project-zot/zot/releases/download/${RELEASE}/zot-linux-amd64" -o /usr/bin/zot
 | 
			
		||||
    chmod +x /usr/bin/zot
 | 
			
		||||
    rm -f /usr/bin/zot
 | 
			
		||||
    fetch_and_deploy_gh_release "zot" "project-zot/zot" "singlefile" "latest" "/usr/bin" "zot-linux-amd64"
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring Zot Registry"
 | 
			
		||||
    chown root:root /usr/bin/zot
 | 
			
		||||
    echo "${RELEASE}" >~/.${APP}
 | 
			
		||||
    systemctl restart zot
 | 
			
		||||
    msg_ok "Updated Zot to ${RELEASE}"
 | 
			
		||||
    msg_ok "Configured Zot Registry"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl start zot
 | 
			
		||||
    msg_ok "Service started"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated successfuly"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "Zot is already up to date (${RELEASE})"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -27,27 +27,24 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/zwave-js/zwave-js-ui/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
 | 
			
		||||
  
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f ~/.zwave-js-ui ]] || [[ "${RELEASE}" != "$(cat ~/.zwave-js-ui)" ]]; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop zwave-js-ui
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Z-Wave JS UI"
 | 
			
		||||
    rm -rf /opt/zwave-js-ui/*
 | 
			
		||||
    cd /opt/zwave-js-ui
 | 
			
		||||
    curl -fsSL "https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip" -o $(basename "https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip")
 | 
			
		||||
    $STD unzip zwave-js-ui-${RELEASE}-linux.zip
 | 
			
		||||
    msg_ok "Updated Z-Wave JS UI"
 | 
			
		||||
    fetch_and_deploy_gh_release "zwave-js-ui" "zwave-js/zwave-js-ui" "prebuild" "latest" "/opt/zwave-js-ui" "zwave-js-ui*-linux.zip"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start zwave-js-ui
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleanup"
 | 
			
		||||
    rm -rf /opt/zwave-js-ui/zwave-js-ui-${RELEASE}-linux.zip
 | 
			
		||||
    rm -rf /opt/zwave-js-ui/store
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Updated Successfully!\n"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required.  ${APP} is already at ${RELEASE}."
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": true,
 | 
			
		||||
  "interface_port": 8090,
 | 
			
		||||
  "documentation": "https://www.ispyconnect.com/docs/agent/about",
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 80,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://it-tools.tech/",
 | 
			
		||||
  "website": "https://sharevb-it-tools.vercel.app/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/it-tools.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "IT-Tools is a web-based suite of utilities designed to streamline and simplify various IT tasks, providing tools for developers and system administrators to manage their workflows efficiently.",
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 6767,
 | 
			
		||||
  "documentation": "https://wiki.bazarr.media/",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								frontend/public/json/copyparty.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/public/json/copyparty.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Copyparty",
 | 
			
		||||
  "slug": "copyparty",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    11
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-08-18",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": "https://github.com/9001/copyparty?tab=readme-ov-file#the-browser",
 | 
			
		||||
  "website": "https://github.com/9001/copyparty",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/copyparty.webp",
 | 
			
		||||
  "config_path": "/etc/copyparty.conf",
 | 
			
		||||
  "description": "Copyparty is a lightweight, portable HTTP file server with a browser-based interface. It supports drag-and-drop uploads, downloads, deduplication, media playback, and advanced search, making it ideal for quickly sharing and managing files.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/addon/copyparty.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
        "hdd": null,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within the Proxmox shell or in LXC",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										48
									
								
								frontend/public/json/debian-13-vm.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								frontend/public/json/debian-13-vm.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Debian 13",
 | 
			
		||||
  "slug": "debian-13-vm",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    2
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-08-19",
 | 
			
		||||
  "type": "vm",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://www.debian.org/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/debian.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "Debian 13 (Trixie) Linux is a distribution that emphasizes free software. It supports many hardware platforms",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "vm/debian-13-vm.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": null,
 | 
			
		||||
        "version": null
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "VM has no root password set. To login type in user `root` and just press enter",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "After installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/836´ for useful Debian commands",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
	{
 | 
			
		||||
      "text": "If you use Cloud-init, checkout after installation: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@
 | 
			
		||||
  "website": "https://docmost.com/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/docmost.webp",
 | 
			
		||||
  "config_path": "/opt/docmost/.env",
 | 
			
		||||
  "description": "Open-source collaborative wiki and documentation software Create, collaborate, and share knowledge seamlessly with Docmost. Ideal for managing your wiki, knowledge-base, documentation and a lot more.",
 | 
			
		||||
  "description": "Open-source collaborative wiki and documentation software. Create, collaborate, and share knowledge seamlessly with Docmost. Ideal for managing your wiki, knowledge-base, documentation and a lot more.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 61208,
 | 
			
		||||
  "documentation": "https://glances.readthedocs.io/en/latest/",
 | 
			
		||||
@@ -33,12 +33,8 @@
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Execute within an existing LXC Console",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
      "text": "Execute within an existing LXC Console (Debian / Ubuntu / Alpine supported)",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,52 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Home Assistant Core",
 | 
			
		||||
    "slug": "homeassistant-core",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        16
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-01-17",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 8123,
 | 
			
		||||
    "documentation": "https://www.home-assistant.io/docs/",
 | 
			
		||||
    "website": "https://www.home-assistant.io/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/home-assistant.webp",
 | 
			
		||||
    "config_path": "/root/.homeassistant",
 | 
			
		||||
    "description": "A standalone installation of Home Assistant Core refers to a setup where the Home Assistant Core software is installed directly on a device or operating system, without the use of Docker containers. This provides a simpler, but less flexible and scalable solution, as the software is tightly coupled with the underlying system.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/homeassistant-core.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 10,
 | 
			
		||||
                "os": "ubuntu",
 | 
			
		||||
                "version": "24.10"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Requires PVE 8.2.2 with kernel 6.8.4-3-pve or newer",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Deprecation-Warning: This Core-based setup will be deprecated by August 2025. Use Home Assistant OS is strongly recommended to ensure long-term stability and updates.",
 | 
			
		||||
            "type": "warning"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "text": "config path: `/root/.homeassistant`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								frontend/public/json/hortusfox.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/public/json/hortusfox.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "HortusFox",
 | 
			
		||||
  "slug": "hortusfox",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    24
 | 
			
		||||
  ],
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "date_created": "2025-08-08",
 | 
			
		||||
  "config_path": "/opt/hortusfox/.env",
 | 
			
		||||
  "interface_port": 80,
 | 
			
		||||
  "documentation": "https://github.com/danielbrendel/hortusfox-web",
 | 
			
		||||
  "website": "https://www.hortusfox.com/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/hortusfox.webp",
 | 
			
		||||
  "description": "HortusFox is a collaborative plant management system for plant enthusiasts. Manage, document and track your entire plant collection – self-hosted and privacy-friendly.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/hortusfox.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Login Credentials : `cat ~/hortusfox.creds`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
  "name": "Jenkins",
 | 
			
		||||
  "slug": "jenkins",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    22
 | 
			
		||||
    20
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-12-26",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 5080,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "documentation": "https://openobserve.ai/docs/",
 | 
			
		||||
  "website": "https://openobserve.ai/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/openobserve.webp",
 | 
			
		||||
  "config_path": "/opt/openobserve/data/.env",
 | 
			
		||||
 
 | 
			
		||||
@@ -32,5 +32,10 @@
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "If you use VLANs (default LAN is set to VLAN 999), make sure the Proxmox Linux Bridge is configured as VLAN-aware, otherwise the VM may fail to start.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								frontend/public/json/palmr.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								frontend/public/json/palmr.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Palmr",
 | 
			
		||||
  "slug": "palmr",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    11
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-08-08",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://palmr.kyantech.com.br/docs/3.1-beta",
 | 
			
		||||
  "config_path": "/opt/palmr/apps/server/.env, /opt/palmr/apps/web/.env",
 | 
			
		||||
  "website": "https://palmr.kyantech.com.br/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/palmr.webp",
 | 
			
		||||
  "description": "Palmr is a fast and secure platform for sharing files, built with performance and privacy in mind.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/palmr.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 4,
 | 
			
		||||
        "ram": 6144,
 | 
			
		||||
        "hdd": 6,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "This LXC is very memory-hungry when updating; it requires at least 6GB RAM, but RAM may be reduced to as low as 2GB when running normally",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To use a bind mount for storage, create symlinks to your mount for both `uploads` and `temp-uploads` in `/opt/palmr_data`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To use Palmr with a reverse proxy, uncomment `SECURE_SITE` in `/opt/palmr/apps/server/.env`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 12,
 | 
			
		||||
        "hdd": 20,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 8000,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "documentation": "https://docs.paperless-ngx.com/",
 | 
			
		||||
    "website": "https://docs.paperless-ngx.com/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/paperless-ngx.webp",
 | 
			
		||||
    "config_path": "/opt/paperless/paperless.conf",
 | 
			
		||||
@@ -21,19 +21,19 @@
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 10,
 | 
			
		||||
                "hdd": 12,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "username": "admin",
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "Show Login Credentials, type `update` in the LXC console",
 | 
			
		||||
            "text": "Show Login Credentials, type `cat ~/paperless.creds` in the LXC console",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": "https://github.com/rcourtman/Pulse",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/pulse.webp",
 | 
			
		||||
  "config_path": "/opt/pulse/.env",
 | 
			
		||||
  "config_path": "/etc/pulse",
 | 
			
		||||
  "description": "A lightweight monitoring application for Proxmox VE that displays real-time status for VMs and containers via a simple web interface.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
@@ -39,6 +39,10 @@
 | 
			
		||||
    {
 | 
			
		||||
      "text": "After installation, access the web interface to configure your Proxmox connection details through the built-in setup wizard",
 | 
			
		||||
      "type": "Info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Configure authentication in the Web UI => Settings => Security",
 | 
			
		||||
      "type": "Info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -28,8 +28,8 @@
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
    "username": "proxmox",
 | 
			
		||||
    "password": "proxmox"
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,8 +11,8 @@
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://docs.rxresume.org/",
 | 
			
		||||
  "website": "https://rxresume.org",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/reactive-resume-light.png",
 | 
			
		||||
    "config_path": "/opt/reactive-resume/.env",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/reactive-resume.webp",
 | 
			
		||||
  "config_path": "/opt/reactive-resume/.env",
 | 
			
		||||
  "description": "A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
@@ -20,7 +20,7 @@
 | 
			
		||||
      "script": "ct/reactive-resume.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 3072,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 8,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
@@ -33,4 +33,3 @@
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,8 +11,8 @@
 | 
			
		||||
  "interface_port": 5030,
 | 
			
		||||
  "documentation": "https://github.com/slskd/slskd/tree/master/docs",
 | 
			
		||||
  "website": "https://github.com/slskd/slskd",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/slskd.png",
 | 
			
		||||
    "config_path": "/opt/slskd/config/slskd.yml",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/slskd.webp",
 | 
			
		||||
  "config_path": "/opt/slskd/config/slskd.yml",
 | 
			
		||||
  "description": "A modern client-server application for the Soulseek file sharing network. ",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
@@ -42,4 +42,3 @@
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 7912,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "documentation": "https://github.com/Donkie/Spoolman/wiki/Installation",
 | 
			
		||||
  "website": "https://github.com/Donkie/Spoolman",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/spoolman.webp",
 | 
			
		||||
  "config_path": "/opt/spoolman/.env",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										52
									
								
								frontend/public/json/swizzin.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								frontend/public/json/swizzin.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Swizzin",
 | 
			
		||||
  "slug": "swizzin",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    15
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-08-19",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 80,
 | 
			
		||||
  "documentation": "https://swizzin.ltd/getting-started",
 | 
			
		||||
  "config_path": "/etc/swizzin/",
 | 
			
		||||
  "website": "https://swizzin.ltd/",
 | 
			
		||||
  "logo": "https://swizzin.ltd/img/logo-sm.png",
 | 
			
		||||
  "description": "Swizzin is a light-weight, modular, and user-friendly seedbox solution for Debian-based servers. It allows for the easy installation and management of a wide variety of applications commonly used for torrenting and media management, such as rTorrent, Sonarr, Radarr, and Plex, all accessible through a command-line utility or a web-based dashboard.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/swizzin.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 20,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Installation might take a long time if choosing to install many apps. Be patient.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Swizzin is a management suite, not a single application. Use the 'box' command inside the container to install/manage individual apps like rTorrent, Sonarr, etc. A full list can be found in documentation.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "It is very recommended to install at least the 'panel' for web access, and 'nginx' for easy access to other apps.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8265,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
 
 | 
			
		||||
@@ -31,10 +31,5 @@
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,10 +6,10 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8082,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "documentation": "https://www.traccar.org/documentation/",
 | 
			
		||||
  "website": "https://www.traccar.org/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/traccar.webp",
 | 
			
		||||
  "config_path": "/opt/traccar/conf/traccar.xml",
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8080,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "documentation": "https://doc.traefik.io/",
 | 
			
		||||
  "website": "https://traefik.io/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/traefik.webp",
 | 
			
		||||
  "config_path": "/etc/traefik/traefik.yaml",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								frontend/public/json/twingate-connector.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								frontend/public/json/twingate-connector.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "twingate-connector",
 | 
			
		||||
  "slug": "twingate-connector",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    4
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-08-18",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": "https://www.twingate.com/docs/",
 | 
			
		||||
  "config_path": "/etc/twingate/connector.conf",
 | 
			
		||||
  "website": "https://www.twingate.com",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/twingate.webp",
 | 
			
		||||
  "description": "Twingate Connectors are lightweight software components that establish secure, least-privileged access between private network resources and authorized users without exposing the network to the internet. They act as outbound-only bridges between your protected resources and the Twingate infrastructure, ensuring zero-trust access without the need for a VPN.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/twingate-connector.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 3,
 | 
			
		||||
        "os": "Ubuntu",
 | 
			
		||||
        "version": "24.04"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "You can get your Twingate access or refresh tokens from the Twingate Admin Console. `https://auth.twingate.com/signup-v2`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "If you need to update your access or refresh tokens, they can be found in /etc/twingate/connector.conf",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,40 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Umami",
 | 
			
		||||
    "slug": "umami",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        9
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-09",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": false,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 3000,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://umami.is/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/umami.webp",
 | 
			
		||||
    "config_path": "/opt/umami/.env",
 | 
			
		||||
    "description": "Umami makes it easy to collect, analyze, and understand your web data while maintaining visitor privacy and data ownership.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/umami.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 12,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": "admin",
 | 
			
		||||
        "password": "umami"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": [
 | 
			
		||||
        {
 | 
			
		||||
            "text": "To view the database credentials : `cat umami.creds`",
 | 
			
		||||
            "type": "info"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
  "name": "Umami",
 | 
			
		||||
  "slug": "umami",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    9
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-09",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://umami.is/docs",
 | 
			
		||||
  "website": "https://umami.is/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/umami.webp",
 | 
			
		||||
  "config_path": "/opt/umami/.env",
 | 
			
		||||
  "description": "Umami makes it easy to collect, analyze, and understand your web data while maintaining visitor privacy and data ownership.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/umami.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 12,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": "admin",
 | 
			
		||||
    "password": "umami"
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To view the database credentials : `cat umami.creds`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Uptime Kuma",
 | 
			
		||||
    "slug": "uptimekuma",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        9
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 3001,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://github.com/louislam/uptime-kuma#uptime-kuma",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/uptime-kuma.webp",
 | 
			
		||||
    "config_path": "",
 | 
			
		||||
    "description": "Uptime Kuma is a monitoring and alerting system that tracks the availability and performance of servers, websites, and other internet-connected devices. It can be self-hosted and is open-source, offering a visually appealing interface for monitoring and receiving notifications about downtime events.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/uptimekuma.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
  "name": "Uptime Kuma",
 | 
			
		||||
  "slug": "uptimekuma",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    9
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3001,
 | 
			
		||||
  "documentation": "https://github.com/louislam/uptime-kuma/wiki",
 | 
			
		||||
  "website": "https://github.com/louislam/uptime-kuma#uptime-kuma",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/uptime-kuma.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "Uptime Kuma is a monitoring and alerting system that tracks the availability and performance of servers, websites, and other internet-connected devices. It can be self-hosted and is open-source, offering a visually appealing interface for monitoring and receiving notifications about downtime events.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/uptimekuma.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 4,
 | 
			
		||||
        "ram": 6144,
 | 
			
		||||
        "hdd": 6,
 | 
			
		||||
        "hdd": 20,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -12,7 +12,7 @@
 | 
			
		||||
  "documentation": "https://github.com/wavelog/wavelog/wiki",
 | 
			
		||||
  "website": "https://www.wavelog.org/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/wavelog.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "config_path": "/opt/wavelog/application/config/config.php",
 | 
			
		||||
  "description": "Wavelog is a self-hosted PHP application that allows you to log your amateur radio contacts anywhere. All you need is a web browser and active internet connection.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Wiki.js",
 | 
			
		||||
    "slug": "wikijs",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        12
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 3000,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://js.wiki/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/wiki-js.webp",
 | 
			
		||||
    "config_path": "/opt/wikijs/config.yml",
 | 
			
		||||
    "description": "Wiki.js is a free, open-source, and modern wiki application built using Node.js. It is designed to be fast, easy to use, and flexible, with a range of features for collaboration, knowledge management, and content creation. Wiki.js supports Markdown syntax for editing pages, and includes features such as version control, page history, and access control, making it easy to manage content and collaborate with others. The software is fully customizable, with a range of themes and extensions available, and can be deployed on a local server or in the cloud, making it an ideal choice for small teams and organizations looking to create and manage a wiki. Wiki.js provides a modern, user-friendly interface, and supports a range of data sources, including local file systems, databases, and cloud storage services.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/wikijs.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 7,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
  "name": "Wiki.js",
 | 
			
		||||
  "slug": "wikijs",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    12
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://docs.requarks.io/",
 | 
			
		||||
  "website": "https://js.wiki/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/wiki-js.webp",
 | 
			
		||||
  "config_path": "/opt/wikijs/config.yml",
 | 
			
		||||
  "description": "Wiki.js is a free, open-source, and modern wiki application built using Node.js. It is designed to be fast, easy to use, and flexible, with a range of features for collaboration, knowledge management, and content creation. Wiki.js supports Markdown syntax for editing pages, and includes features such as version control, page history, and access control, making it easy to manage content and collaborate with others. The software is fully customizable, with a range of themes and extensions available, and can be deployed on a local server or in the cloud, making it an ideal choice for small teams and organizations looking to create and manage a wiki. Wiki.js provides a modern, user-friendly interface, and supports a range of data sources, including local file systems, databases, and cloud storage services.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/wikijs.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 7,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -46,6 +46,10 @@
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Wireguard and WGDashboard are not the same. More info: `https://docs.wgdashboard.dev/what-is-wireguard-what-is-wgdashboard.html`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "WGDashboard installation is optional.`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "documentation": "https://zipline.diced.sh/docs/get-started",
 | 
			
		||||
  "website": "https://zipline.diced.sh/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zipline.webp",
 | 
			
		||||
  "config_path": "/opt/zipline/.env",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Zoraxy",
 | 
			
		||||
    "slug": "zoraxy",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        4
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 8000,
 | 
			
		||||
    "documentation": null,
 | 
			
		||||
    "website": "https://zoraxy.aroz.org/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zoraxy.webp",
 | 
			
		||||
    "config_path": "",
 | 
			
		||||
    "description": "Zoraxy is an all in one homelab network routing solution.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/zoraxy.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 2,
 | 
			
		||||
                "ram": 2048,
 | 
			
		||||
                "hdd": 6,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
  "name": "Zoraxy",
 | 
			
		||||
  "slug": "zoraxy",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    4
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8000,
 | 
			
		||||
  "documentation": "https://github.com/tobychui/zoraxy/wiki",
 | 
			
		||||
  "website": "https://zoraxy.aroz.org/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zoraxy.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "Zoraxy is an all in one homelab network routing solution.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/zoraxy.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 6,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user