mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			167 Commits
		
	
	
		
			2025-06-02
			...
			2025-06-16
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					795fe72768 | ||
| 
						 | 
					6d7d15ce46 | ||
| 
						 | 
					a648b9abc4 | ||
| 
						 | 
					4057fadfe0 | ||
| 
						 | 
					9b700195e4 | ||
| 
						 | 
					906a0a0fbc | ||
| 
						 | 
					8df55a03f4 | ||
| 
						 | 
					8241ed932d | ||
| 
						 | 
					0b3c645ffb | ||
| 
						 | 
					0c17402efc | ||
| 
						 | 
					ccad7a2cd8 | ||
| 
						 | 
					15772d8802 | ||
| 
						 | 
					c7e0faa33b | ||
| 
						 | 
					13b1c684ee | ||
| 
						 | 
					5e649d7cb1 | ||
| 
						 | 
					ec8a8b1908 | ||
| 
						 | 
					d850dde4ef | ||
| 
						 | 
					fb4075ac12 | ||
| 
						 | 
					8576463522 | ||
| 
						 | 
					2a4353fa13 | ||
| 
						 | 
					d21cbf1d40 | ||
| 
						 | 
					e97c96d0bb | ||
| 
						 | 
					04dab68e17 | ||
| 
						 | 
					b001687f5c | ||
| 
						 | 
					9f26e25126 | ||
| 
						 | 
					5671d8e957 | ||
| 
						 | 
					0bf641f02c | ||
| 
						 | 
					7fc39a442b | ||
| 
						 | 
					6e1ee7d16e | ||
| 
						 | 
					5ee48aba1e | ||
| 
						 | 
					e6c21811bb | ||
| 
						 | 
					142fea21bd | ||
| 
						 | 
					df43101b4e | ||
| 
						 | 
					3044a774c2 | ||
| 
						 | 
					65e4c027b8 | ||
| 
						 | 
					dabfb57173 | ||
| 
						 | 
					63dfc2bd7b | ||
| 
						 | 
					89399ef421 | ||
| 
						 | 
					d9474c3dd6 | ||
| 
						 | 
					f5a5e4854c | ||
| 
						 | 
					632e823749 | ||
| 
						 | 
					a128f3c43d | ||
| 
						 | 
					9c90699ca2 | ||
| 
						 | 
					f6f6ca6bac | ||
| 
						 | 
					b6d0b1ae6a | ||
| 
						 | 
					93906db2d1 | ||
| 
						 | 
					4ab71ccf00 | ||
| 
						 | 
					e058badee6 | ||
| 
						 | 
					74c6df5aa6 | ||
| 
						 | 
					c2484b7c60 | ||
| 
						 | 
					b064127323 | ||
| 
						 | 
					138f90f09c | ||
| 
						 | 
					84469e2b5b | ||
| 
						 | 
					a164d259e0 | ||
| 
						 | 
					34aa360920 | ||
| 
						 | 
					f0dde5a42d | ||
| 
						 | 
					e0ccc1a0af | ||
| 
						 | 
					4fa7483d8b | ||
| 
						 | 
					cd835c6791 | ||
| 
						 | 
					abf233c94f | ||
| 
						 | 
					edd4fb3cc2 | ||
| 
						 | 
					d97620a390 | ||
| 
						 | 
					c2c5159a2d | ||
| 
						 | 
					46d9f85f5e | ||
| 
						 | 
					ba7ec5aa68 | ||
| 
						 | 
					dd4c556959 | ||
| 
						 | 
					0e63437154 | ||
| 
						 | 
					0769320146 | ||
| 
						 | 
					d6da26c640 | ||
| 
						 | 
					d9facc0e62 | ||
| 
						 | 
					31e0b5fae3 | ||
| 
						 | 
					b0bd2f4804 | ||
| 
						 | 
					3aefe199f7 | ||
| 
						 | 
					677008c779 | ||
| 
						 | 
					b8ba409e5c | ||
| 
						 | 
					7cf8300b47 | ||
| 
						 | 
					77fb5ea516 | ||
| 
						 | 
					e92dfe1b2b | ||
| 
						 | 
					61bfa16645 | ||
| 
						 | 
					84c295a10b | ||
| 
						 | 
					ed834bf424 | ||
| 
						 | 
					b1f8992933 | ||
| 
						 | 
					201f7c4651 | ||
| 
						 | 
					2574e41ee8 | ||
| 
						 | 
					2aeb7cf79a | ||
| 
						 | 
					98c277f471 | ||
| 
						 | 
					78a2201a93 | ||
| 
						 | 
					2de03f5734 | ||
| 
						 | 
					c59f9f421c | ||
| 
						 | 
					598acc2048 | ||
| 
						 | 
					6e6b279b88 | ||
| 
						 | 
					943a5f4d8f | ||
| 
						 | 
					4efa882558 | ||
| 
						 | 
					eff985ca02 | ||
| 
						 | 
					ff239ff3cd | ||
| 
						 | 
					45bb824101 | ||
| 
						 | 
					1956c8740b | ||
| 
						 | 
					f6638b095d | ||
| 
						 | 
					6a1738c52a | ||
| 
						 | 
					a9e3520df1 | ||
| 
						 | 
					08230e9089 | ||
| 
						 | 
					a5c6984087 | ||
| 
						 | 
					99174cb9c2 | ||
| 
						 | 
					336e70f059 | ||
| 
						 | 
					ce8b9aa5b4 | ||
| 
						 | 
					70d6815d91 | ||
| 
						 | 
					75273e86b6 | ||
| 
						 | 
					37a2f6a715 | ||
| 
						 | 
					4b7c734b9a | ||
| 
						 | 
					590db0d148 | ||
| 
						 | 
					50ad6410d5 | ||
| 
						 | 
					85b80bfb22 | ||
| 
						 | 
					33e49b7556 | ||
| 
						 | 
					0a6f7e6426 | ||
| 
						 | 
					5fd5d78a2a | ||
| 
						 | 
					ab32878b63 | ||
| 
						 | 
					ee7090f271 | ||
| 
						 | 
					df6bd2a68a | ||
| 
						 | 
					e46e9a3372 | ||
| 
						 | 
					6c08814cc5 | ||
| 
						 | 
					4cca5062af | ||
| 
						 | 
					dc2b585e6b | ||
| 
						 | 
					cc4f5c4478 | ||
| 
						 | 
					01ced07bff | ||
| 
						 | 
					85e13c9ac5 | ||
| 
						 | 
					1ac4b0c10f | ||
| 
						 | 
					781471f37a | ||
| 
						 | 
					e2790814b8 | ||
| 
						 | 
					f5705621b2 | ||
| 
						 | 
					a28a4fd752 | ||
| 
						 | 
					b890fae808 | ||
| 
						 | 
					8e88379c1b | ||
| 
						 | 
					b2307f1bb9 | ||
| 
						 | 
					db9ffe3105 | ||
| 
						 | 
					2c1e101135 | ||
| 
						 | 
					a991908a37 | ||
| 
						 | 
					f0206a6252 | ||
| 
						 | 
					e8061a9f6e | ||
| 
						 | 
					64c47bd335 | ||
| 
						 | 
					ec573be7e0 | ||
| 
						 | 
					4e53abbd48 | ||
| 
						 | 
					338d351c29 | ||
| 
						 | 
					835893e589 | ||
| 
						 | 
					1e81c11e74 | ||
| 
						 | 
					27384ad89a | ||
| 
						 | 
					27d3909df5 | ||
| 
						 | 
					2e3f416242 | ||
| 
						 | 
					b91cbbcbe9 | ||
| 
						 | 
					3f43cd5575 | ||
| 
						 | 
					1564d4d6d3 | ||
| 
						 | 
					077db6c52f | ||
| 
						 | 
					a0d2bece1d | ||
| 
						 | 
					0178742308 | ||
| 
						 | 
					d2482e5c82 | ||
| 
						 | 
					2400f98f75 | ||
| 
						 | 
					176946bd45 | ||
| 
						 | 
					a25009bdb1 | ||
| 
						 | 
					03eff3a2e1 | ||
| 
						 | 
					ff12d802cc | ||
| 
						 | 
					02b753eb12 | ||
| 
						 | 
					c9eaaee0c0 | ||
| 
						 | 
					f154249dde | ||
| 
						 | 
					9ef7274199 | ||
| 
						 | 
					e9477e7a07 | ||
| 
						 | 
					1fcf9f9520 | ||
| 
						 | 
					bbe226218c | ||
| 
						 | 
					8d38c1d724 | 
							
								
								
									
										206
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										206
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -14,8 +14,214 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
 | 
			
		||||
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 2025-06-17
 | 
			
		||||
 | 
			
		||||
## 2025-06-16
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Intel NIC offload Fix by @rcastley [@MickLesk](https://github.com/MickLesk) ([#5155](https://github.com/community-scripts/ProxmoxVE/pull/5155))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - [core] Move install_php() from VED to main [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5182](https://github.com/community-scripts/ProxmoxVE/pull/5182))
 | 
			
		||||
- Firefly: Add Data Importer to LXC [@tremor021](https://github.com/tremor021) ([#5159](https://github.com/community-scripts/ProxmoxVE/pull/5159))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Wastebin: Fix missing dependencies [@tremor021](https://github.com/tremor021) ([#5185](https://github.com/community-scripts/ProxmoxVE/pull/5185))
 | 
			
		||||
    - Kasm: Storing Creds Fix [@omiinaya](https://github.com/omiinaya) ([#5162](https://github.com/community-scripts/ProxmoxVE/pull/5162))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - add optional Cloud-init support to Debian VM script  [@koendiender](https://github.com/koendiender) ([#5137](https://github.com/community-scripts/ProxmoxVE/pull/5137))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: 2FAuth [@tremor021](https://github.com/tremor021) ([#5184](https://github.com/community-scripts/ProxmoxVE/pull/5184))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - Refactor layout and component styles for improved responsiveness [@BramSuurdje](https://github.com/BramSuurdje) ([#5195](https://github.com/community-scripts/ProxmoxVE/pull/5195))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Refactor ScriptItem and ConfigFile components to conditionally render config file location. Update ConfigFile to accept configPath prop instead of item. [@BramSuurdje](https://github.com/BramSuurdje) ([#5197](https://github.com/community-scripts/ProxmoxVE/pull/5197))
 | 
			
		||||
    - Update default image asset in the public directory and update api route to only search for files that end with .json [@BramSuurdje](https://github.com/BramSuurdje) ([#5179](https://github.com/community-scripts/ProxmoxVE/pull/5179))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Update default image asset in the public directory [@BramSuurdje](https://github.com/BramSuurdje) ([#5189](https://github.com/community-scripts/ProxmoxVE/pull/5189))
 | 
			
		||||
 | 
			
		||||
## 2025-06-15
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - LibreTranslate ([#5154](https://github.com/community-scripts/ProxmoxVE/pull/5154))
 | 
			
		||||
 | 
			
		||||
## 2025-06-14
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - [core] Update install_mariadb func [@tremor021](https://github.com/tremor021) ([#5138](https://github.com/community-scripts/ProxmoxVE/pull/5138))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - flowiseai: set NodeJS to Version 20 [@MickLesk](https://github.com/MickLesk) ([#5130](https://github.com/community-scripts/ProxmoxVE/pull/5130))
 | 
			
		||||
    - Update dolibarr-install.sh - Get largest version number [@tjcomserv](https://github.com/tjcomserv) ([#5127](https://github.com/community-scripts/ProxmoxVE/pull/5127))
 | 
			
		||||
 | 
			
		||||
## 2025-06-13
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Zigbee2MQTT: Fix missing directory [@tremor021](https://github.com/tremor021) ([#5120](https://github.com/community-scripts/ProxmoxVE/pull/5120))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Umbrel OS: Fix bad disk size shown on website [@tremor021](https://github.com/tremor021) ([#5125](https://github.com/community-scripts/ProxmoxVE/pull/5125))
 | 
			
		||||
 | 
			
		||||
## 2025-06-12
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Manage my Damn Life ([#5100](https://github.com/community-scripts/ProxmoxVE/pull/5100))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Kasm: Increase Ressources & Hint for Fuse / Swap [@MickLesk](https://github.com/MickLesk) ([#5112](https://github.com/community-scripts/ProxmoxVE/pull/5112))
 | 
			
		||||
 | 
			
		||||
## 2025-06-11
 | 
			
		||||
 | 
			
		||||
## 2025-06-10
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Element Synapse: switched from development to production mode and fixed update [@Frankmaaan](https://github.com/Frankmaaan) ([#5066](https://github.com/community-scripts/ProxmoxVE/pull/5066))
 | 
			
		||||
    - Tinyauth: Fix creation of service file [@tremor021](https://github.com/tremor021) ([#5090](https://github.com/community-scripts/ProxmoxVE/pull/5090))
 | 
			
		||||
    - Dolibarr: Fix typo in SQL command [@tremor021](https://github.com/tremor021) ([#5091](https://github.com/community-scripts/ProxmoxVE/pull/5091))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
  - #### 📡 API
 | 
			
		||||
 | 
			
		||||
    - [core] Prevent API form sending Data when disabled [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5080](https://github.com/community-scripts/ProxmoxVE/pull/5080))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Immich: Update JSON [@vhsdream](https://github.com/vhsdream) ([#5085](https://github.com/community-scripts/ProxmoxVE/pull/5085))
 | 
			
		||||
 | 
			
		||||
## 2025-06-09
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Authelia: Fix the URL of the container [@tremor021](https://github.com/tremor021) ([#5064](https://github.com/community-scripts/ProxmoxVE/pull/5064))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - GoMFT: Remove from website temporarily [@tremor021](https://github.com/tremor021) ([#5065](https://github.com/community-scripts/ProxmoxVE/pull/5065))
 | 
			
		||||
 | 
			
		||||
## 2025-06-08
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Minarca ([#5058](https://github.com/community-scripts/ProxmoxVE/pull/5058))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - zot: fix missing var (Dev -> Main) [@MickLesk](https://github.com/MickLesk) ([#5056](https://github.com/community-scripts/ProxmoxVE/pull/5056))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - karakeep: Add more configuration defaults [@vhsdream](https://github.com/vhsdream) ([#5054](https://github.com/community-scripts/ProxmoxVE/pull/5054))
 | 
			
		||||
 | 
			
		||||
## 2025-06-07
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - alpine-it-tools fix update [@CrazyWolf13](https://github.com/CrazyWolf13) ([#5039](https://github.com/community-scripts/ProxmoxVE/pull/5039))
 | 
			
		||||
 | 
			
		||||
### 🧰 Maintenance
 | 
			
		||||
 | 
			
		||||
  - #### 💾 Core
 | 
			
		||||
 | 
			
		||||
    - Fix typo in build.func [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#5041](https://github.com/community-scripts/ProxmoxVE/pull/5041))
 | 
			
		||||
 | 
			
		||||
## 2025-06-06
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Zot-Registry ([#5016](https://github.com/community-scripts/ProxmoxVE/pull/5016))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - zipline: fix old upload copy from v3 to v4 [@MickLesk](https://github.com/MickLesk) ([#5015](https://github.com/community-scripts/ProxmoxVE/pull/5015))
 | 
			
		||||
 | 
			
		||||
## 2025-06-05
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 | 
			
		||||
  - Lyrion Music Server ([#4992](https://github.com/community-scripts/ProxmoxVE/pull/4992))
 | 
			
		||||
- gitea-mirror ([#4967](https://github.com/community-scripts/ProxmoxVE/pull/4967))
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Zipline: Fix PostgreSQL install [@tremor021](https://github.com/tremor021) ([#4989](https://github.com/community-scripts/ProxmoxVE/pull/4989))
 | 
			
		||||
    - Homarr: add nodejs upgrade [@CrazyWolf13](https://github.com/CrazyWolf13) ([#4974](https://github.com/community-scripts/ProxmoxVE/pull/4974))
 | 
			
		||||
    - add FUSE to rclone [@Frankmaaan](https://github.com/Frankmaaan) ([#4972](https://github.com/community-scripts/ProxmoxVE/pull/4972))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Zitadel: Upgrade Install to PSQL 17 [@MickLesk](https://github.com/MickLesk) ([#5000](https://github.com/community-scripts/ProxmoxVE/pull/5000))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Fix clean-lxcs.sh type categorization [@bitspill](https://github.com/bitspill) ([#4980](https://github.com/community-scripts/ProxmoxVE/pull/4980))
 | 
			
		||||
 | 
			
		||||
## 2025-06-04
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - Pulse: add polkit for sudoless web updates [@rcourtman](https://github.com/rcourtman) ([#4970](https://github.com/community-scripts/ProxmoxVE/pull/4970))
 | 
			
		||||
- Pulse: add correct Port for URL output  [@rcourtman](https://github.com/rcourtman) ([#4951](https://github.com/community-scripts/ProxmoxVE/pull/4951))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - [refactor] Seelf [@tremor021](https://github.com/tremor021) ([#4954](https://github.com/community-scripts/ProxmoxVE/pull/4954))
 | 
			
		||||
 | 
			
		||||
## 2025-06-03
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Kasm: Swap fix [@omiinaya](https://github.com/omiinaya) ([#4937](https://github.com/community-scripts/ProxmoxVE/pull/4937))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - netbox: correct website URL  [@theincrediblenoone](https://github.com/theincrediblenoone) ([#4952](https://github.com/community-scripts/ProxmoxVE/pull/4952))
 | 
			
		||||
 | 
			
		||||
## 2025-06-02
 | 
			
		||||
 | 
			
		||||
### 🆕 New Scripts
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								ct/2fauth.sh
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								ct/2fauth.sh
									
									
									
									
									
								
							@@ -24,21 +24,16 @@ function update_script() {
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  # Check if installation is present | -f for file, -d for folder
 | 
			
		||||
  if [[ ! -d "/opt/2fauth" ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Crawling the new version and checking whether an update is required
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/2fauth_version.txt)" ]] || [[ ! -f /opt/2fauth_version.txt ]]; then
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
 | 
			
		||||
    # Creating Backup
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    mv "/opt/2fauth" "/opt/2fauth-backup"
 | 
			
		||||
    if ! dpkg -l | grep -q 'php8.3'; then
 | 
			
		||||
@@ -46,37 +41,24 @@ function update_script() {
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Backup Created"
 | 
			
		||||
 | 
			
		||||
    # Upgrade PHP
 | 
			
		||||
    if ! dpkg -l | grep -q 'php8.3'; then
 | 
			
		||||
      $STD apt-get install -y \
 | 
			
		||||
        lsb-release \
 | 
			
		||||
        gpg
 | 
			
		||||
      curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/deb.sury.org-php.gpg
 | 
			
		||||
      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 install -y php8.3-{bcmath,common,ctype,curl,fileinfo,fpm,gd,mbstring,mysql,xml,cli,intl}
 | 
			
		||||
        gnupg2
 | 
			
		||||
      PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" install_php
 | 
			
		||||
      sed -i 's/php8.2/php8.3/g' /etc/nginx/conf.d/2fauth.conf
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Execute Update
 | 
			
		||||
    curl -fsSL -o "${RELEASE}.zip" "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip"
 | 
			
		||||
    $STD unzip "${RELEASE}.zip"
 | 
			
		||||
    mv "2FAuth-${RELEASE//v/}/" "/opt/2fauth"
 | 
			
		||||
    fetch_and_deploy_gh_release "Bubka/2FAuth"
 | 
			
		||||
    mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
 | 
			
		||||
    mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
 | 
			
		||||
    cd "/opt/2fauth" || return
 | 
			
		||||
 | 
			
		||||
    chown -R www-data: "/opt/2fauth"
 | 
			
		||||
    chmod -R 755 "/opt/2fauth"
 | 
			
		||||
 | 
			
		||||
    export COMPOSER_ALLOW_SUPERUSER=1
 | 
			
		||||
    $STD composer install --no-dev --prefer-source
 | 
			
		||||
 | 
			
		||||
    php artisan 2fauth:install
 | 
			
		||||
 | 
			
		||||
    $STD systemctl restart nginx
 | 
			
		||||
 | 
			
		||||
    # Cleaning up
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf "v${RELEASE}.zip"
 | 
			
		||||
    if dpkg -l | grep -q 'php8.2'; then
 | 
			
		||||
@@ -86,7 +68,6 @@ function update_script() {
 | 
			
		||||
    $STD apt-get -y autoclean
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
    # Last Action
 | 
			
		||||
    echo "${RELEASE}" >/opt/2fauth_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
  else
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,6 @@ catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [ ! -d /usr/share/nginx/html ]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@ var_disk="${var_disk:-1}"
 | 
			
		||||
var_os="${var_os:-alpine}"
 | 
			
		||||
var_version="${var_version:-3.21}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
var_fuse="${var_fuse:-yes}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
@@ -21,9 +22,6 @@ catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [ ! -d /opt/rclone ]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit 1
 | 
			
		||||
 
 | 
			
		||||
@@ -55,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}:9091${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}https://YOUR_AUTHELIA_URL${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@ function update_script() {
 | 
			
		||||
  $STD apt-get -y upgrade
 | 
			
		||||
  msg_ok "Updated $APP LXC"
 | 
			
		||||
 | 
			
		||||
  if [[ -f /systemd/system/synapse-admin.service ]]; then
 | 
			
		||||
  if [[ -f /etc/systemd/system/synapse-admin.service ]]; then
 | 
			
		||||
    msg_info "Updating Synapse-Admin"
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/etkecc/synapse-admin/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
 | 
			
		||||
@@ -58,7 +58,16 @@ function update_script() {
 | 
			
		||||
      curl -fsSL "https://github.com/etkecc/synapse-admin/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
      tar xzf "$temp_file" -C /opt/synapse-admin --strip-components=1
 | 
			
		||||
      cd /opt/synapse-admin
 | 
			
		||||
      $STD yarn global add serve
 | 
			
		||||
      $STD yarn install --ignore-engines
 | 
			
		||||
      $STD yarn build
 | 
			
		||||
      mv ./dist ../ && \
 | 
			
		||||
        rm -rf * && \
 | 
			
		||||
        mv ../dist ./
 | 
			
		||||
      if [[ -z $(grep "ExecStart=/usr/local/bin/serve" /etc/systemd/system/synapse-admin.service) ]]; then
 | 
			
		||||
        sed -i 's|^ExecStart=.*|ExecStart=/usr/local/bin/serve -s dist -l 5173|' /etc/systemd/system/synapse-admin.service
 | 
			
		||||
        systemctl reenable synapse-admin
 | 
			
		||||
      fi
 | 
			
		||||
      systemctl start synapse-admin
 | 
			
		||||
      echo "${RELEASE}" >/opt/"${APP}"_version.txt
 | 
			
		||||
      rm -f "$temp_file"
 | 
			
		||||
 
 | 
			
		||||
@@ -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: quantumryuu
 | 
			
		||||
# Author: quantumryuu | Co-Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://firefly-iii.org/
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										83
									
								
								ct/gitea-mirror.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								ct/gitea-mirror.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
#!/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: CrazyWolf13
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/arunavo4/gitea-mirror
 | 
			
		||||
 | 
			
		||||
APP="gitea-mirror"
 | 
			
		||||
var_tags="${var_tags:-mirror;gitea}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/gitea-mirror ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/arunavo4/gitea-mirror/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop gitea-mirror
 | 
			
		||||
    msg_ok "Services Stopped"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backup Data"
 | 
			
		||||
    mkdir -p /opt/gitea-mirror-backup/data
 | 
			
		||||
    cp /opt/gitea-mirror/data/* /opt/gitea-mirror-backup/data/
 | 
			
		||||
    msg_ok "Backup Data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Installing Bun"
 | 
			
		||||
    export BUN_INSTALL=/opt/bun
 | 
			
		||||
    curl -fsSL https://bun.sh/install | $STD bash
 | 
			
		||||
    ln -sf /opt/bun/bin/bun /usr/local/bin/bun
 | 
			
		||||
    ln -sf /opt/bun/bin/bun /usr/local/bin/bunx
 | 
			
		||||
    msg_ok "Installed Bun"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/gitea-mirror
 | 
			
		||||
    fetch_and_deploy_gh_release "arunavo4/gitea-mirror"
 | 
			
		||||
    
 | 
			
		||||
    msg_info "Updating and rebuilding ${APP} to v${RELEASE}"  
 | 
			
		||||
    cd /opt/gitea-mirror
 | 
			
		||||
    $STD bun run setup
 | 
			
		||||
    $STD bun run build
 | 
			
		||||
    APP_VERSION=$(grep -o '"version": *"[^"]*"' package.json | cut -d'"' -f4)
 | 
			
		||||
    sudo sed -i.bak "s|^Environment=npm_package_version=.*|Environment=npm_package_version=${APP_VERSION}|" /etc/systemd/system/gitea-mirror.service
 | 
			
		||||
    msg_ok "Updated and rebuilt ${APP} to v${RELEASE}"  
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring Data"
 | 
			
		||||
    cp /opt/gitea-mirror-backup/data/* /opt/gitea-mirror/data
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Restored Data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl daemon-reload
 | 
			
		||||
    systemctl start gitea-mirror
 | 
			
		||||
    msg_ok "Service Started"
 | 
			
		||||
  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}:4321${CL}"
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/gitea-mirror
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/gitea-mirror
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
          _ __                             _                     
 | 
			
		||||
   ____ _(_) /____  ____ _      ____ ___  (_)_____________  _____
 | 
			
		||||
  / __ `/ / __/ _ \/ __ `/_____/ __ `__ \/ / ___/ ___/ __ \/ ___/
 | 
			
		||||
 / /_/ / / /_/  __/ /_/ /_____/ / / / / / / /  / /  / /_/ / /    
 | 
			
		||||
 \__, /_/\__/\___/\__,_/     /_/ /_/ /_/_/_/  /_/   \____/_/     
 | 
			
		||||
/____/                                                           
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/libretranslate
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/libretranslate
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __    _ __            ______                      __      __     
 | 
			
		||||
   / /   (_) /_  ________/_  __/________ _____  _____/ /___ _/ /____ 
 | 
			
		||||
  / /   / / __ \/ ___/ _ \/ / / ___/ __ `/ __ \/ ___/ / __ `/ __/ _ \
 | 
			
		||||
 / /___/ / /_/ / /  /  __/ / / /  / /_/ / / / (__  ) / /_/ / /_/  __/
 | 
			
		||||
/_____/_/_.___/_/   \___/_/ /_/   \__,_/_/ /_/____/_/\__,_/\__/\___/ 
 | 
			
		||||
                                                                     
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/lyrionmusicserver
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/lyrionmusicserver
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __               _                __  ___           _         _____                          
 | 
			
		||||
   / /   __  _______(_)___  ____     /  |/  /_  _______(_)____   / ___/___  ______   _____  _____
 | 
			
		||||
  / /   / / / / ___/ / __ \/ __ \   / /|_/ / / / / ___/ / ___/   \__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
			
		||||
 / /___/ /_/ / /  / / /_/ / / / /  / /  / / /_/ (__  ) / /__    ___/ /  __/ /   | |/ /  __/ /    
 | 
			
		||||
/_____/\__, /_/  /_/\____/_/ /_/  /_/  /_/\__,_/____/_/\___/   /____/\___/_/    |___/\___/_/     
 | 
			
		||||
      /____/                                                                                     
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/managemydamnlife
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/managemydamnlife
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __  ___                                __  ___         ____                           __    _ ____   
 | 
			
		||||
   /  |/  /___ _____  ____ _____ ____     /  |/  /_  __   / __ \____ _____ ___  ____     / /   (_) __/__ 
 | 
			
		||||
  / /|_/ / __ `/ __ \/ __ `/ __ `/ _ \   / /|_/ / / / /  / / / / __ `/ __ `__ \/ __ \   / /   / / /_/ _ \
 | 
			
		||||
 / /  / / /_/ / / / / /_/ / /_/ /  __/  / /  / / /_/ /  / /_/ / /_/ / / / / / / / / /  / /___/ / __/  __/
 | 
			
		||||
/_/  /_/\__,_/_/ /_/\__,_/\__, /\___/  /_/  /_/\__, /  /_____/\__,_/_/ /_/ /_/_/ /_/  /_____/_/_/  \___/ 
 | 
			
		||||
                         /____/               /____/                                                     
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/minarca
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/minarca
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    __  ____                            
 | 
			
		||||
   /  |/  (_)___  ____ _______________ _
 | 
			
		||||
  / /|_/ / / __ \/ __ `/ ___/ ___/ __ `/
 | 
			
		||||
 / /  / / / / / / /_/ / /  / /__/ /_/ / 
 | 
			
		||||
/_/  /_/_/_/ /_/\__,_/_/   \___/\__,_/  
 | 
			
		||||
                                        
 | 
			
		||||
							
								
								
									
										6
									
								
								ct/headers/zot-registry
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/zot-registry
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
 _____         __        ____             _      __            
 | 
			
		||||
/__  /  ____  / /_      / __ \___  ____ _(_)____/ /________  __
 | 
			
		||||
  / /  / __ \/ __/_____/ /_/ / _ \/ __ `/ / ___/ __/ ___/ / / /
 | 
			
		||||
 / /__/ /_/ / /_/_____/ _, _/  __/ /_/ / (__  ) /_/ /  / /_/ / 
 | 
			
		||||
/____/\____/\__/     /_/ |_|\___/\__, /_/____/\__/_/   \__, /  
 | 
			
		||||
                                /____/                /____/   
 | 
			
		||||
							
								
								
									
										19
									
								
								ct/homarr.sh
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								ct/homarr.sh
									
									
									
									
									
								
							@@ -92,6 +92,19 @@ EOF
 | 
			
		||||
    cp /opt/homarr/.env /opt/homarr-data-backup/.env
 | 
			
		||||
    msg_ok "Backup Data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Nodejs"
 | 
			
		||||
    $STD apt update
 | 
			
		||||
    $STD apt upgrade nodejs -y
 | 
			
		||||
    msg_ok "Updated Nodejs"
 | 
			
		||||
 | 
			
		||||
    $STD command -v jq || $STD apt-get update && $STD apt-get install -y jq
 | 
			
		||||
    NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
 | 
			
		||||
    NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
 | 
			
		||||
    install_node_and_modules
 | 
			
		||||
    
 | 
			
		||||
    rm -rf /opt/homarr
 | 
			
		||||
    fetch_and_deploy_gh_release "homarr-labs/homarr"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating and rebuilding ${APP} to v${RELEASE} (Patience)"
 | 
			
		||||
    rm /opt/run_homarr.sh
 | 
			
		||||
    cat <<'EOF' >/opt/run_homarr.sh
 | 
			
		||||
@@ -117,12 +130,6 @@ node apps/nextjs/server.js & PID=$!
 | 
			
		||||
wait $PID
 | 
			
		||||
EOF
 | 
			
		||||
    chmod +x /opt/run_homarr.sh
 | 
			
		||||
    $STD command -v jq || $STD apt-get update && $STD apt-get install -y jq
 | 
			
		||||
    NODE_VERSION=$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.engines.node | split(">=")[1] | split(".")[0]')
 | 
			
		||||
    NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/homarr-labs/homarr/dev/package.json | jq -r '.packageManager | split("@")[1]')"
 | 
			
		||||
    install_node_and_modules
 | 
			
		||||
    rm -rf /opt/homarr
 | 
			
		||||
    fetch_and_deploy_gh_release "homarr-labs/homarr"
 | 
			
		||||
    mv /opt/homarr-data-backup/.env /opt/homarr/.env
 | 
			
		||||
    cd /opt/homarr
 | 
			
		||||
    $STD pnpm install --recursive --frozen-lockfile --shamefully-hoist
 | 
			
		||||
 
 | 
			
		||||
@@ -8,11 +8,11 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
APP="Kasm"
 | 
			
		||||
var_tags="${var_tags:-os}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-4192}"
 | 
			
		||||
var_ram="${var_ram:-8192}"
 | 
			
		||||
var_disk="${var_disk:-30}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-0}"
 | 
			
		||||
var_fuse="${var_fuse:-yes}"
 | 
			
		||||
var_tun="${var_tun:-yes}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										61
									
								
								ct/libretranslate.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								ct/libretranslate.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/LibreTranslate/LibreTranslate
 | 
			
		||||
 | 
			
		||||
APP="LibreTranslate"
 | 
			
		||||
var_tags="${var_tags:-Arr}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
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 [[ ! -d /opt/libretranslate ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -s https://api.github.com/repos/LibreTranslate/LibreTranslate/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat $HOME/.libretranslate)" ]] || [[ ! -f $HOME/.libretranslate ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop libretranslate
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    cd /opt/libretranslate
 | 
			
		||||
    source .venv/bin/activate
 | 
			
		||||
    $STD pip install -U libretranslate
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start libretranslate
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
 | 
			
		||||
							
								
								
									
										61
									
								
								ct/lyrionmusicserver.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								ct/lyrionmusicserver.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Omar Minaya
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://lyrion.org/getting-started/
 | 
			
		||||
 | 
			
		||||
APP="Lyrion Music Server"
 | 
			
		||||
var_tags="${var_tags:-media}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-3}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -f /lib/systemd/system/lyrionmusicserver.service ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  DEB_URL=$(curl -s 'https://lyrion.org/getting-started/' | grep -oP '<a\s[^>]*href="\K[^"]*amd64\.deb(?="[^>]*>)' | head -n 1)
 | 
			
		||||
  RELEASE=$(echo "$DEB_URL" | grep -oP 'lyrionmusicserver_\K[0-9.]+(?=_amd64\.deb)')
 | 
			
		||||
  DEB_FILE="/tmp/lyrionmusicserver_${RELEASE}_amd64.deb"
 | 
			
		||||
  if [[ ! -f /opt/lyrion_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/lyrion_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Updating $APP to ${RELEASE}"
 | 
			
		||||
    curl -fsSL -o "$DEB_FILE" "$DEB_URL"
 | 
			
		||||
    $STD apt install "$DEB_FILE" -y
 | 
			
		||||
    systemctl restart lyrion
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to ${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning up"
 | 
			
		||||
    $STD rm -f "$DEB_FILE"
 | 
			
		||||
    $STD apt-get -y autoremove
 | 
			
		||||
    $STD apt-get -y autoclean
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "$APP is already up to date (${RELEASE})"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access the web interface at:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
 | 
			
		||||
							
								
								
									
										78
									
								
								ct/managemydamnlife.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								ct/managemydamnlife.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
#!/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/intri-in/manage-my-damn-life-nextjs
 | 
			
		||||
 | 
			
		||||
APP="Manage My Damn Life"
 | 
			
		||||
var_tags="${var_tags:-calendar;tasks}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
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/mmdl ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/intri-in/manage-my-damn-life-nextjs/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/mmdl_version.txt)" ]] || [[ ! -f /opt/mmdl_version.txt ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop mmdl
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    cp /opt/mmdl/.env /opt/mmdl.env
 | 
			
		||||
    msg_ok "Backup Created"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    curl -fsSLO "https://github.com/intri-in/manage-my-damn-life-nextjs/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
    rm -r /opt/mmdl
 | 
			
		||||
    unzip -q v"$RELEASE".zip
 | 
			
		||||
    mv manage-my-damn-life-nextjs-"$RELEASE"/ /opt/mmdl
 | 
			
		||||
    mv /opt/mmdl.env /opt/mmdl/.env
 | 
			
		||||
    cd /opt/mmdl
 | 
			
		||||
    $STD npm install
 | 
			
		||||
    $STD npm run migrate
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start mmdl
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f ~/v"$RELEASE".zip
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
    # Last Action
 | 
			
		||||
    echo "$RELEASE" >/opt/mmdl_version.txt
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
  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}:3000${CL}"
 | 
			
		||||
							
								
								
									
										54
									
								
								ct/minarca.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								ct/minarca.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://minarca.org/en_CA
 | 
			
		||||
 | 
			
		||||
APP="Minarca"
 | 
			
		||||
var_tags="${var_tags:-backup}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
var_fuse="${var_fuse:-yes}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
  if [[ ! -d /opt/minarca-server ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Stopping ${APP}"
 | 
			
		||||
  systemctl stop minarca-server
 | 
			
		||||
  msg_ok "${APP} Stopped"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP} LXC"
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
  $STD apt-get upgrade -y
 | 
			
		||||
  msg_ok "Updated ${APP} LXC"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting ${APP}"
 | 
			
		||||
  systemctl start minarca-server
 | 
			
		||||
  msg_ok "Restarted ${APP}"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
			
		||||
@@ -67,4 +67,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}(:your_port)${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7655${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@ var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
var_fuse="${var_fuse:-yes}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										66
									
								
								ct/seelf.sh
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								ct/seelf.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: tremor021
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/YuukanOO/seelf
 | 
			
		||||
 | 
			
		||||
@@ -20,49 +20,31 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
    if [[ ! -d /opt/seelf ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    RELEASE=$(curl -fsSL https://api.github.com/repos/YuukanOO/seelf/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
        msg_info "Updating $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Stopping $APP"
 | 
			
		||||
        systemctl stop seelf
 | 
			
		||||
        msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
        msg_info "Updating $APP to v${RELEASE}. Patience"
 | 
			
		||||
        export PATH=$PATH:/usr/local/go/bin
 | 
			
		||||
        source ~/.bashrc
 | 
			
		||||
        curl -fsSL "https://github.com/YuukanOO/seelf/archive/refs/tags/v${RELEASE}.tar.gz" -o $(basename "https://github.com/YuukanOO/seelf/archive/refs/tags/v${RELEASE}.tar.gz")
 | 
			
		||||
        tar -xzf v${RELEASE}.tar.gz
 | 
			
		||||
        cp -r seelf-${RELEASE}/ /opt/seelf
 | 
			
		||||
        cd /opt/seelf
 | 
			
		||||
        $STD make build
 | 
			
		||||
        msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting $APP"
 | 
			
		||||
        systemctl start seelf
 | 
			
		||||
        msg_ok "Started $APP"
 | 
			
		||||
 | 
			
		||||
        # Cleaning up
 | 
			
		||||
        msg_info "Cleaning Up"
 | 
			
		||||
        rm -f ~/*.tar.gz
 | 
			
		||||
        rm -rf ~/seelf-${RELEASE}
 | 
			
		||||
        msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
        msg_ok "Update Successful"
 | 
			
		||||
    else
 | 
			
		||||
        msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
    fi
 | 
			
		||||
  if [[ ! -d /opt/seelf ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if fetch_and_deploy_gh_release "YuukanOO/seelf"; then
 | 
			
		||||
    msg_ok "$APP already at the latest version. No update required."
 | 
			
		||||
  else
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    systemctl stop seelf
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP"
 | 
			
		||||
    cd /opt/seelf
 | 
			
		||||
    $STD make build
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    systemctl start seelf
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,9 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  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
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,9 @@ function update_script() {
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cp /opt/zipline/.env /opt/
 | 
			
		||||
    mkdir -p /opt/zipline-upload
 | 
			
		||||
    cp -R /opt/zipline/upload/* /opt/zipline-upload/
 | 
			
		||||
    if [ -d /opt/zipline/upload ] && [ "$(ls -A /opt/zipline/upload)" ]; then
 | 
			
		||||
      cp -R /opt/zipline/upload/* /opt/zipline-upload/
 | 
			
		||||
    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
 | 
			
		||||
    rm -R /opt/zipline
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										59
									
								
								ct/zot-registry.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								ct/zot-registry.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
#!/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://zotregistry.dev/
 | 
			
		||||
 | 
			
		||||
APP="Zot-Registry"
 | 
			
		||||
var_tags="${var_tags:-registry;oci}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
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 [[ ! -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)}')
 | 
			
		||||
  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
 | 
			
		||||
    chown root:root /usr/bin/zot
 | 
			
		||||
    echo "${RELEASE}" >~/.${APP}
 | 
			
		||||
    systemctl restart zot
 | 
			
		||||
    msg_ok "Updated Zot to ${RELEASE}"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "Zot is already up to date (${RELEASE})"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
build_container
 | 
			
		||||
description
 | 
			
		||||
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 120 KiB  | 
@@ -1,23 +1,23 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Proxmox VE LXC IP-Tag",
 | 
			
		||||
  "slug": "add-lxc-iptag",
 | 
			
		||||
  "slug": "add-iptag",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-12-16",
 | 
			
		||||
  "date_created": "2025-06-16",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
 | 
			
		||||
  "config_path": "/opt/lxc-iptag/iptag.conf",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/proxmox.svg",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "This script automatically adds IP address as tags to LXC containers using a Systemd service. The service also updates the tags if a LXC IP address is changed.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/add-lxc-iptag.sh",
 | 
			
		||||
      "script": "tools/pve/add-iptag.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": null,
 | 
			
		||||
        "ram": null,
 | 
			
		||||
@@ -36,6 +36,10 @@
 | 
			
		||||
      "text": "Execute within the Proxmox shell",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Configuration: `nano /opt/iptag/iptag.conf`. iptag.service must be restarted after change.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 9091,
 | 
			
		||||
  "interface_port": 443,
 | 
			
		||||
  "documentation": "https://www.authelia.com/integration/deployment/bare-metal/",
 | 
			
		||||
  "website": "https://www.authelia.com/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/authelia.webp",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
    1
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-04-29",
 | 
			
		||||
  "type": "addon",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c '$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/update-lxcs-cron.sh)' -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
 | 
			
		||||
      "text": "To exclude LXCs from updating, edit the crontab using `crontab -e` and add CTID as shown in the example below:\n\n\n\n`0 0 * * 0 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/update-lxcs-cron.sh)\" -s 103 111 >>/var/log/update-lxcs-cron.log 2>/dev/null`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8096,
 | 
			
		||||
  "documentation": "https://emby.media/support/articles/Home.html",
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,10 @@
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Data Importer is at `http://<LXC_IP>/dataimporter/`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Database credentials: `cat ~/firefly.creds`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/gitea-mirror.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/gitea-mirror.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Gitea-Mirror",
 | 
			
		||||
  "slug": "gitea-mirror",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    7
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-06-05",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 4321,
 | 
			
		||||
  "documentation": "https://github.com/arunavo4/gitea-mirror/",
 | 
			
		||||
  "config_path": "/etc/systemd/system/gitea-mirror.service",
 | 
			
		||||
  "website": "https://github.com/arunavo4/gitea-mirror/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/gitea-mirror.webp",
 | 
			
		||||
  "description": "Gitea Mirror auto-syncs GitHub repos to your self-hosted Gitea, with a sleek Web UI and easy Docker deployment. ",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/gitea-mirror.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -33,15 +33,15 @@
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "During installation, HW-accelerated machine-learning (with OpenVINO) is an available option. This also allows for HW-accelerated transcoding, but it must be enabled in Video Transcoding Settings",
 | 
			
		||||
      "text": "During installation, you will be prompted with the option to install Intel OpenVINO for hardware-accelerated machine-learning. If you opt in, increase your LXC RAM after installation, as OpenVINO is memory-intensive",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "If using OpenVINO HW machine-learning, increase RAM because OpenVINO is memory-intensive",
 | 
			
		||||
      "text": "HW-accelerated video transcoding is supported, but must be enabled in Immich Settings",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "To change upload location, edit 'IMMICH_MEDIA_LOCATION' in `/opt/immich/.env`",
 | 
			
		||||
      "text": "To change upload location, edit 'IMMICH_MEDIA_LOCATION' in `/opt/immich/.env`, and create the symlink 'upload' in /opt/immich/app & /opt/immich/app/machine-learning to your new upload location",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@
 | 
			
		||||
      "script": "ct/kasm.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "ram": 8192,
 | 
			
		||||
        "hdd": 50,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
@@ -36,6 +36,10 @@
 | 
			
		||||
      "text": "WARNING: Installation sources scripts outside of Community Scripts repo. Please check the source before installing.",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Kasm needs swap (on Proxmox host) and activated FUSE to be installed successfully!",
 | 
			
		||||
      "type": "warning"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Show password: `cat ~/kasm.creds`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								frontend/public/json/libretranslate.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								frontend/public/json/libretranslate.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "LibreTranslate",
 | 
			
		||||
  "slug": "libretranslate",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-06-15",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 5000,
 | 
			
		||||
  "documentation": "https://github.com/LibreTranslate/LibreTranslate?tab=readme-ov-file#settings--flags",
 | 
			
		||||
  "website": "https://libretranslate.com/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/libretranslate.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "Free and Open Source Machine Translation API, entirely self-hosted. Unlike other APIs, it doesn't rely on proprietary providers such as Google or Azure to perform translations. Instead, its translation engine is powered by the open source Argos Translate library.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/libretranslate.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 20,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "During the installation, application will download language models used for translation. Depending on how fast your internet/host is, this can take 5-10 minutes.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "text": "At every boot of LXC, application will look for updates for language models installed. This can prolong the startup of the LXC.",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/lyrionmusicserver.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/lyrionmusicserver.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Lyrion Music Server",
 | 
			
		||||
  "slug": "lyrionmusicserver",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    13
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-06-05",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "config_path": "/etc/default/lyrionmusicserver",
 | 
			
		||||
  "interface_port": 9000,
 | 
			
		||||
  "documentation": "https://lyrion.org/",
 | 
			
		||||
  "website": "https://lyrion.org/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/lyrion-media-server.webp",
 | 
			
		||||
  "description": "Lyrion Music Server is an open-source server software to stream local music collections, internet radio, and music services to Squeezebox and compatible audio players.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/lyrionmusicserver.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 3,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/managemydamnlife.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/managemydamnlife.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Manage My Damn Life",
 | 
			
		||||
  "slug": "managemydamnlife",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    0
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-06-12",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://manage-my-damn-life-nextjs.readthedocs.io/en/latest/",
 | 
			
		||||
  "config_path": "/opt/mmdl/.env",
 | 
			
		||||
  "website": "https://github.com/intri-in/manage-my-damn-life-nextjs",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/manage-my-damn-life.webp",
 | 
			
		||||
  "description": "Manage My Damn Life (MMDL) is a self-hosted front end for managing your CalDAV tasks and calendars.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/managemydamnlife.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 6,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/minarca.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/minarca.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Minarca",
 | 
			
		||||
  "slug": "minarca",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    7
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-06-08",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8080,
 | 
			
		||||
  "documentation": "https://nexus.ikus-soft.com/repository/archive/minarca/6.0.3/doc/index.html",
 | 
			
		||||
  "config_path": "/etc/minarca/minarca-server.conf",
 | 
			
		||||
  "website": "https://minarca.org/en_CA",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/minarca.webp",
 | 
			
		||||
  "description": "Minarca is a self-hosted open source data backup software that allows you to manage your computer and server backups for free from a direct online accessible centralized view of your data with easy retrieval.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/minarca.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 10,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": "admin",
 | 
			
		||||
    "password": "admin123"
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 443,
 | 
			
		||||
  "documentation": "https://netboxlabs.com/docs/netbox/en/stable/",
 | 
			
		||||
  "website": "https://netboxlabs.com/",
 | 
			
		||||
  "website": "https://netboxlabs.com/products/netbox/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/netbox.webp",
 | 
			
		||||
  "config_path": "/opt/netbox/netbox/netbox/configuration.py",
 | 
			
		||||
  "description": "NetBox is the source of truth for everything on your network, from physical components like power systems and cabling to virtual assets like IP addresses and VLANs. Network automation and observability tools depend on NetBox’s authoritative data to roll out configurations, monitor changes, and accelerate operations across the enterprise",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										40
									
								
								frontend/public/json/nic-offloading-fix.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								frontend/public/json/nic-offloading-fix.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "NIC Offloading Fix",
 | 
			
		||||
  "slug": "nic-offloading-fix",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    1
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-05-25",
 | 
			
		||||
  "type": "pve",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": null,
 | 
			
		||||
  "documentation": null,
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "website": null,
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/proxmox.webp",
 | 
			
		||||
  "description": "This script automates the process of disabling network interface card (NIC) offloading features specifically for Intel e1000e network interfaces on Linux systems.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "tools/pve/nic-offloading-fix.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",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": false,
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3000,
 | 
			
		||||
  "documentation": "https://stonith404.github.io/pingvin-share/introduction",
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 20,
 | 
			
		||||
        "hdd": 32,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -33,7 +33,7 @@
 | 
			
		||||
  },
 | 
			
		||||
  "notes": [
 | 
			
		||||
    {
 | 
			
		||||
      "text": "Database credentials: `cat wavelog.creds`",
 | 
			
		||||
      "text": "Database credentials: `cat ~/wavelog.creds`",
 | 
			
		||||
      "type": "info"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								frontend/public/json/zot-registry.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/public/json/zot-registry.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "Zot Registry",
 | 
			
		||||
  "slug": "zot",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    13
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-06-06",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 8080,
 | 
			
		||||
  "documentation": "https://zotregistry.dev/docs/intro/",
 | 
			
		||||
  "website": "https://zotregistry.dev/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zot-registry.webp",
 | 
			
		||||
  "config_path": "/etc/zot/config.json",
 | 
			
		||||
  "description": "Zot is a cloud-native OCI image registry focused on extensibility, maintainability, and performance. It supports advanced features such as Web UI, security scanning, authentication via htpasswd and OIDC, and more.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/zot-registry.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
@@ -19,7 +19,11 @@ const getMetadata = async () => {
 | 
			
		||||
 | 
			
		||||
const getScripts = async () => {
 | 
			
		||||
  const filePaths = (await fs.readdir(jsonDir))
 | 
			
		||||
    .filter((fileName) => fileName !== metadataFileName && fileName !== versionFileName)
 | 
			
		||||
    .filter((fileName) => 
 | 
			
		||||
      fileName.endsWith(".json") && 
 | 
			
		||||
      fileName !== metadataFileName && 
 | 
			
		||||
      fileName !== versionFileName
 | 
			
		||||
    )
 | 
			
		||||
    .map((fileName) => path.resolve(jsonDir, fileName));
 | 
			
		||||
 | 
			
		||||
  const scripts = await Promise.all(
 | 
			
		||||
 
 | 
			
		||||
@@ -104,7 +104,7 @@ export default function RootLayout({
 | 
			
		||||
            <Navbar />
 | 
			
		||||
            <div className="flex min-h-screen flex-col justify-center">
 | 
			
		||||
              <div className="flex w-full justify-center">
 | 
			
		||||
                <div className="w-full max-w-7xl ">
 | 
			
		||||
                <div className="w-full max-w-[1440px] ">
 | 
			
		||||
                  <QueryProvider>
 | 
			
		||||
                    <NuqsAdapter>{children}</NuqsAdapter>
 | 
			
		||||
                  </QueryProvider>
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ export default function ScriptAccordion({
 | 
			
		||||
      value={expandedItem}
 | 
			
		||||
      onValueChange={handleAccordionChange}
 | 
			
		||||
      collapsible
 | 
			
		||||
      className="overflow-y-scroll max-h-[calc(100vh-225px)] overflow-x-hidden mt-3 p-2"
 | 
			
		||||
      className="overflow-y-scroll max-h-[calc(100vh-225px)] overflow-x-hidden p-2"
 | 
			
		||||
    >
 | 
			
		||||
      {items.map((category) => (
 | 
			
		||||
        <AccordionItem
 | 
			
		||||
 
 | 
			
		||||
@@ -15,12 +15,12 @@ import { ResourceDisplay } from "./ResourceDisplay";
 | 
			
		||||
import { getDisplayValueFromType } from "./ScriptInfoBlocks";
 | 
			
		||||
import Alerts from "./ScriptItems/Alerts";
 | 
			
		||||
import Buttons from "./ScriptItems/Buttons";
 | 
			
		||||
import ConfigFile from "./ScriptItems/ConfigFile";
 | 
			
		||||
import DefaultPassword from "./ScriptItems/DefaultPassword";
 | 
			
		||||
import Description from "./ScriptItems/Description";
 | 
			
		||||
import InstallCommand from "./ScriptItems/InstallCommand";
 | 
			
		||||
import InterFaces from "./ScriptItems/InterFaces";
 | 
			
		||||
import Tooltips from "./ScriptItems/Tooltips";
 | 
			
		||||
import ConfigFile from "./ScriptItems/ConfigFile";
 | 
			
		||||
 | 
			
		||||
interface ScriptItemProps {
 | 
			
		||||
  item: Script;
 | 
			
		||||
@@ -120,7 +120,7 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="w-full max-w-5xl mx-auto">
 | 
			
		||||
    <div className="w-full mx-auto">
 | 
			
		||||
      <div className="flex w-full flex-col">
 | 
			
		||||
        <div className="mb-3 flex items-center justify-between">
 | 
			
		||||
          <h2 className="text-2xl font-semibold tracking-tight text-foreground/90">Selected Script</h2>
 | 
			
		||||
@@ -132,7 +132,7 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
 | 
			
		||||
          </button>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div className="rounded-xl border border-border/40 bg-gradient-to-b from-card/30 to-background/50 backdrop-blur-sm shadow-sm">
 | 
			
		||||
        <div className="rounded-xl border border-border bg-gradient-to-b from-card/30 to-background/50 backdrop-blur-sm shadow-sm">
 | 
			
		||||
          <div className="p-6 space-y-6">
 | 
			
		||||
            <Suspense fallback={<div className="animate-pulse h-32 bg-accent/20 rounded-xl" />}>
 | 
			
		||||
              <ScriptHeader item={item} />
 | 
			
		||||
@@ -152,16 +152,18 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
 | 
			
		||||
              <div className="">
 | 
			
		||||
                <InstallCommand item={item} />
 | 
			
		||||
              </div>
 | 
			
		||||
              <Separator />
 | 
			
		||||
              <div className="flex gap-3 px-4 py-2 bg-accent/25">
 | 
			
		||||
                <h2 className="text-lg font-semibold">
 | 
			
		||||
                  Location of config file
 | 
			
		||||
                </h2>
 | 
			
		||||
              </div>
 | 
			
		||||
              <Separator />
 | 
			
		||||
              <div className="">
 | 
			
		||||
                <ConfigFile item={item} />
 | 
			
		||||
              </div>
 | 
			
		||||
              {item.config_path && (
 | 
			
		||||
                <>
 | 
			
		||||
                  <Separator />
 | 
			
		||||
                  <div className="flex gap-3 px-4 py-2 bg-accent/25">
 | 
			
		||||
                    <h2 className="text-lg font-semibold">Location of config file</h2>
 | 
			
		||||
                  </div>
 | 
			
		||||
                  <Separator />
 | 
			
		||||
                  <div className="">
 | 
			
		||||
                    <ConfigFile configPath={item.config_path} />
 | 
			
		||||
                  </div>
 | 
			
		||||
                </>
 | 
			
		||||
              )}
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <DefaultPassword item={item} />
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,9 @@
 | 
			
		||||
import ConfigCopyButton from "@/components/ui/config-copy-button";
 | 
			
		||||
import { Script } from "@/lib/types";
 | 
			
		||||
 | 
			
		||||
export default function ConfigFile({ item }: { item: Script }) {
 | 
			
		||||
export default function ConfigFile({ configPath }: { configPath: string }) {
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="px-4 pb-4">
 | 
			
		||||
      <ConfigCopyButton>{item.config_path ? item.config_path : "No config path set"}</ConfigCopyButton>
 | 
			
		||||
      <ConfigCopyButton>{configPath}</ConfigCopyButton>
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ const Sidebar = ({
 | 
			
		||||
	}, [] as Script[]);
 | 
			
		||||
 | 
			
		||||
	return (
 | 
			
		||||
		<div className="flex min-w-72 flex-col sm:max-w-72">
 | 
			
		||||
		<div className="flex min-w-[350px] flex-col sm:max-w-[350px]">
 | 
			
		||||
			<div className="flex items-end justify-between pb-4">
 | 
			
		||||
				<h1 className="text-xl font-bold">Categories</h1>
 | 
			
		||||
				<p className="text-xs italic text-muted-foreground">
 | 
			
		||||
@@ -40,4 +40,4 @@ const Sidebar = ({
 | 
			
		||||
	);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default Sidebar;
 | 
			
		||||
export default Sidebar;
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@ function ScriptContent() {
 | 
			
		||||
            setSelectedScript={setSelectedScript}
 | 
			
		||||
          />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div className="mx-7 w-full sm:mx-0 sm:ml-7">
 | 
			
		||||
        <div className="mx-4 w-full sm:mx-0 sm:ml-4">
 | 
			
		||||
          {selectedScript && item ? (
 | 
			
		||||
            <ScriptItem item={item} setSelectedScript={setSelectedScript} />
 | 
			
		||||
          ) : (
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ function Navbar() {
 | 
			
		||||
						isScrolled ? "glass border-b bg-background/50" : ""
 | 
			
		||||
					}`}
 | 
			
		||||
				>
 | 
			
		||||
					<div className="flex h-20 w-full max-w-7xl items-center justify-between sm:flex-row">
 | 
			
		||||
					<div className="flex h-20 w-full max-w-[1440px] items-center justify-between sm:flex-row">
 | 
			
		||||
						<Link
 | 
			
		||||
							href={"/"}
 | 
			
		||||
							className="flex cursor-pointer w-full justify-center sm:justify-start flex-row-reverse items-center gap-2 font-semibold sm:flex-row"
 | 
			
		||||
 
 | 
			
		||||
@@ -15,17 +15,12 @@ update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  lsb-release
 | 
			
		||||
curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/deb.sury.org-php.gpg
 | 
			
		||||
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 install -y \
 | 
			
		||||
  nginx \
 | 
			
		||||
  composer \
 | 
			
		||||
  php8.3-{bcmath,common,ctype,curl,fileinfo,fpm,gd,intl,mbstring,mysql,xml,cli}
 | 
			
		||||
  lsb-release \
 | 
			
		||||
  nginx
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
PHP_VERSION="8.3" PHP_MODULE="common,ctype,fileinfo,fpm,mysql,cli" install_php
 | 
			
		||||
install_composer
 | 
			
		||||
install_mariadb
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Database"
 | 
			
		||||
@@ -43,16 +38,12 @@ $STD mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUS
 | 
			
		||||
} >>~/2FAuth.creds
 | 
			
		||||
msg_ok "Set up Database"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup 2FAuth"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
curl -fsSL "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip" -o "${RELEASE}.zip"
 | 
			
		||||
$STD unzip "${RELEASE}.zip"
 | 
			
		||||
mv "2FAuth-${RELEASE//v/}/" /opt/2fauth
 | 
			
		||||
fetch_and_deploy_gh_release "Bubka/2FAuth"
 | 
			
		||||
 | 
			
		||||
cd "/opt/2fauth" || return
 | 
			
		||||
msg_info "Setup 2FAuth"
 | 
			
		||||
cd /opt/2fauth
 | 
			
		||||
cp .env.example .env
 | 
			
		||||
IPADDRESS=$(hostname -I | awk '{print $1}')
 | 
			
		||||
 | 
			
		||||
sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
 | 
			
		||||
  -e "s|^DB_CONNECTION=$|DB_CONNECTION=mysql|" \
 | 
			
		||||
  -e "s|^DB_DATABASE=$|DB_DATABASE=$DB_NAME|" \
 | 
			
		||||
@@ -60,22 +51,16 @@ sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
 | 
			
		||||
  -e "s|^DB_PORT=$|DB_PORT=3306|" \
 | 
			
		||||
  -e "s|^DB_USERNAME=$|DB_USERNAME=$DB_USER|" \
 | 
			
		||||
  -e "s|^DB_PASSWORD=$|DB_PASSWORD=$DB_PASS|" .env
 | 
			
		||||
 | 
			
		||||
export COMPOSER_ALLOW_SUPERUSER=1
 | 
			
		||||
$STD composer update --no-plugins --no-scripts
 | 
			
		||||
$STD composer install --no-dev --prefer-source --no-plugins --no-scripts
 | 
			
		||||
 | 
			
		||||
$STD php artisan key:generate --force
 | 
			
		||||
 | 
			
		||||
$STD php artisan migrate:refresh
 | 
			
		||||
$STD php artisan passport:install -q -n
 | 
			
		||||
$STD php artisan storage:link
 | 
			
		||||
$STD php artisan config:cache
 | 
			
		||||
 | 
			
		||||
chown -R www-data: /opt/2fauth
 | 
			
		||||
chmod -R 755 /opt/2fauth
 | 
			
		||||
 | 
			
		||||
echo "${RELEASE}" >"/opt/2fauth_version.txt"
 | 
			
		||||
msg_ok "Setup 2fauth"
 | 
			
		||||
 | 
			
		||||
msg_info "Configure Service"
 | 
			
		||||
@@ -107,7 +92,6 @@ server {
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
systemctl reload nginx
 | 
			
		||||
msg_ok "Configured Service"
 | 
			
		||||
 | 
			
		||||
@@ -115,7 +99,6 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f "/opt/v${RELEASE}.zip"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing dependencies"
 | 
			
		||||
$STD apk add --no-cache \
 | 
			
		||||
  apache2-utils
 | 
			
		||||
  apache2-utils fuse3
 | 
			
		||||
msg_ok "Installed dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing rclone"
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ EOF
 | 
			
		||||
 | 
			
		||||
sed -i -e 's/\$/\$\$/g' /opt/tinyauth/.env
 | 
			
		||||
 | 
			
		||||
cat <<EOF >/etc/init.d/tinyauth
 | 
			
		||||
cat <<'EOF' >/etc/init.d/tinyauth
 | 
			
		||||
#!/sbin/openrc-run
 | 
			
		||||
description="Tinyauth Service"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -14,8 +14,8 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Alpine-Zigbee2MQTT"
 | 
			
		||||
mkdir -p /root/.z2m /etc/zigbee2mqtt
 | 
			
		||||
$STD apk add zigbee2mqtt
 | 
			
		||||
mkdir -p /root/.z2m
 | 
			
		||||
ln -s /etc/zigbee2mqtt/ /root/.z2m
 | 
			
		||||
chown -R root:root /etc/zigbee2mqtt /root/.z2m
 | 
			
		||||
sed -i -e 's/#datadir="\/var\/lib\/zigbee2mqtt"/datadir="\/etc\/zigbee2mqtt"/' -e 's/#command_user="zigbee2mqtt"/command_user="root"/' /etc/conf.d/zigbee2mqtt
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@ install_mariadb
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Database"
 | 
			
		||||
ROOT_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
$STD mariadb -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$ROOT_PASS'); flush privileges;"
 | 
			
		||||
$STD mariadb -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$ROOT_PASS'; flush privileges;"
 | 
			
		||||
{
 | 
			
		||||
  echo "Dolibarr DB Credentials"
 | 
			
		||||
  echo "MariaDB Root Password: $ROOT_PASS"
 | 
			
		||||
@@ -32,7 +32,7 @@ msg_ok "Set up database"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Dolibarr"
 | 
			
		||||
BASE="https://sourceforge.net/projects/dolibarr/files/Dolibarr%20installer%20for%20Debian-Ubuntu%20(DoliDeb)/"
 | 
			
		||||
RELEASE=$(curl -fsSL "$BASE" | grep -oP '(?<=/Dolibarr%20installer%20for%20Debian-Ubuntu%20%28DoliDeb%29/)[^/"]+' | head -n1)
 | 
			
		||||
RELEASE=$(curl -fsSL "$BASE" | grep -oP '(?<=/Dolibarr%20installer%20for%20Debian-Ubuntu%20%28DoliDeb%29/)\d+(\.\d+)+(?=/)' | sort -V | tail -n1)
 | 
			
		||||
FILE=$(curl -fsSL "${BASE}${RELEASE}/" | grep -oP 'dolibarr_[^"]+_all.deb' | head -n1)
 | 
			
		||||
curl -fsSL "https://netcologne.dl.sourceforge.net/project/dolibarr/Dolibarr%20installer%20for%20Debian-Ubuntu%20(DoliDeb)/${RELEASE}/${FILE}?viasf=1" -o ""$FILE""
 | 
			
		||||
echo "dolibarr dolibarr/reconfigure-webserver multiselect apache2" | debconf-set-selections
 | 
			
		||||
 
 | 
			
		||||
@@ -54,7 +54,12 @@ RELEASE=$(curl -fsSL https://api.github.com/repos/etkecc/synapse-admin/releases/
 | 
			
		||||
curl -fsSL "https://github.com/etkecc/synapse-admin/archive/refs/tags/v${RELEASE}.tar.gz" -o "$temp_file"
 | 
			
		||||
tar xzf "$temp_file" -C /opt/synapse-admin --strip-components=1
 | 
			
		||||
cd /opt/synapse-admin
 | 
			
		||||
$STD yarn global add serve
 | 
			
		||||
$STD yarn install --ignore-engines
 | 
			
		||||
$STD yarn build
 | 
			
		||||
mv ./dist ../ && \
 | 
			
		||||
  rm -rf * && \
 | 
			
		||||
  mv ../dist ./
 | 
			
		||||
msg_ok "Installed Element Synapse"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
@@ -67,7 +72,7 @@ Requires=matrix-synapse.service
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/synapse-admin
 | 
			
		||||
ExecStart=/usr/bin/yarn start --host
 | 
			
		||||
ExecStart=/usr/local/bin/serve -s dist -l 5173
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: quantumryuu
 | 
			
		||||
# Author: quantumryuu | Co-Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://firefly-iii.org/
 | 
			
		||||
 | 
			
		||||
@@ -30,7 +30,6 @@ msg_info "Setting up database"
 | 
			
		||||
DB_NAME=firefly
 | 
			
		||||
DB_USER=firefly
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
MYSQL_VERSION=$(mariadb --version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -n1)
 | 
			
		||||
$STD mariadb -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
$STD mariadb -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
 | 
			
		||||
mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
 | 
			
		||||
@@ -43,6 +42,7 @@ mariadb -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRI
 | 
			
		||||
msg_ok "Set up database"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Firefly III (Patience)"
 | 
			
		||||
LOCAL_IP=$(hostname -I | awk '{print $1}')
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/firefly-iii/firefly-iii/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
			
		||||
cd /opt
 | 
			
		||||
curl -fsSL "https://github.com/firefly-iii/firefly-iii/releases/download/v${RELEASE}/FireflyIII-v${RELEASE}.tar.gz" -o "FireflyIII-v${RELEASE}.tar.gz"
 | 
			
		||||
@@ -61,6 +61,14 @@ $STD php artisan firefly:upgrade-database
 | 
			
		||||
$STD php artisan firefly:correct-database
 | 
			
		||||
$STD php artisan firefly:report-integrity
 | 
			
		||||
$STD php artisan firefly:laravel-passport-keys
 | 
			
		||||
IMPORTER_RELEASE=$(curl -fsSL https://api.github.com/repos/firefly-iii/data-importer/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}')
 | 
			
		||||
mkdir -p /opt/firefly/dataimporter
 | 
			
		||||
cd /opt
 | 
			
		||||
curl -fsSL "https://github.com/firefly-iii/data-importer/releases/download/v${IMPORTER_RELEASE}/DataImporter-v${IMPORTER_RELEASE}.tar.gz" -o "DataImporter-v${IMPORTER_RELEASE}.tar.gz"
 | 
			
		||||
tar -xzf "DataImporter-v${IMPORTER_RELEASE}.tar.gz" -C /opt/firefly/dataimporter
 | 
			
		||||
cp /opt/firefly/dataimporter/.env.example /opt/firefly/dataimporter/.env
 | 
			
		||||
sed -i "s#FIREFLY_III_URL=#FIREFLY_III_URL=http://${LOCAL_IP}#g" /opt/firefly/dataimporter/.env
 | 
			
		||||
chown -R www-data:www-data /opt/firefly
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed Firefly III"
 | 
			
		||||
 | 
			
		||||
@@ -75,7 +83,18 @@ cat <<EOF >/etc/apache2/sites-available/firefly.conf
 | 
			
		||||
        AllowOverride All
 | 
			
		||||
        Require all granted
 | 
			
		||||
    </Directory>
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  Alias /dataimporter/ /opt/firefly/dataimporter/public/
 | 
			
		||||
 | 
			
		||||
    <Directory /opt/firefly/dataimporter/public/>
 | 
			
		||||
        Options Indexes FollowSymLinks
 | 
			
		||||
        AllowOverride All
 | 
			
		||||
        Require all granted
 | 
			
		||||
    </Directory>
 | 
			
		||||
    <FilesMatch \.php$>
 | 
			
		||||
        SetHandler application/x-httpd-php
 | 
			
		||||
    </FilesMatch>
 | 
			
		||||
 | 
			
		||||
    ErrorLog /var/log/apache2/error.log
 | 
			
		||||
    CustomLog /var/log/apache2/access.log combined
 | 
			
		||||
 | 
			
		||||
@@ -93,7 +112,8 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -rf /opt/FireflyIII-v${RELEASE}.tar.gz
 | 
			
		||||
rm -rf "/opt/FireflyIII-v${RELEASE}.tar.gz"
 | 
			
		||||
rm -rf "/opt/DataImporter-v${IMPORTER_RELEASE}.tar.gz"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" install_node_and_modules
 | 
			
		||||
NODE_VERSION="20" install_node_and_modules
 | 
			
		||||
 | 
			
		||||
msg_info "Installing FlowiseAI (Patience)"
 | 
			
		||||
$STD npm install -g flowise \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										70
									
								
								install/gitea-mirror-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								install/gitea-mirror-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: CrazyWolf13
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/arunavo4/gitea-mirror
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  openssl \
 | 
			
		||||
  sqlite3 \
 | 
			
		||||
  unzip
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Bun"
 | 
			
		||||
export BUN_INSTALL=/opt/bun
 | 
			
		||||
curl -fsSL https://bun.sh/install | $STD bash
 | 
			
		||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bun
 | 
			
		||||
ln -sf /opt/bun/bin/bun /usr/local/bin/bunx
 | 
			
		||||
msg_ok "Installed Bun"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "arunavo4/gitea-mirror"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing gitea-mirror"
 | 
			
		||||
cd /opt/gitea-mirror
 | 
			
		||||
$STD bun run setup
 | 
			
		||||
$STD bun run build
 | 
			
		||||
msg_ok "Installed gitea-mirror"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Services"
 | 
			
		||||
JWT_SECRET=$(openssl rand -hex 32)
 | 
			
		||||
APP_VERSION=$(grep -o '"version": *"[^"]*"' package.json | cut -d'"' -f4)
 | 
			
		||||
cat <<EOF >/etc/systemd/system/gitea-mirror.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Gitea Mirror
 | 
			
		||||
After=network.target
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
WorkingDirectory=/opt/gitea-mirror
 | 
			
		||||
ExecStart=/usr/local/bin/bun dist/server/entry.mjs
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
RestartSec=10
 | 
			
		||||
Environment=NODE_ENV=production
 | 
			
		||||
Environment=HOST=0.0.0.0
 | 
			
		||||
Environment=PORT=4321
 | 
			
		||||
Environment=DATABASE_URL=file:/opt/gitea-mirror/data/gitea-mirror.db
 | 
			
		||||
Environment=JWT_SECRET=${JWT_SECRET}
 | 
			
		||||
Environment=npm_package_version=${APP_VERSION}
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now gitea-mirror
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -87,7 +87,7 @@ msg_ok "Dependencies Installed"
 | 
			
		||||
NODE_VERSION="22" install_node_and_modules
 | 
			
		||||
PG_VERSION="16" install_postgresql
 | 
			
		||||
 | 
			
		||||
read -r -p "Install OpenVINO dependencies for Intel HW-accelerated machine-learning? " prompt
 | 
			
		||||
read -r -p "${TAB3}Install OpenVINO dependencies for Intel HW-accelerated machine-learning? " prompt
 | 
			
		||||
if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
  msg_info "Installing OpenVINO dependencies"
 | 
			
		||||
  touch ~/.openvino
 | 
			
		||||
 
 | 
			
		||||
@@ -91,10 +91,26 @@ BROWSER_WEB_URL="http://127.0.0.1:9222"
 | 
			
		||||
 | 
			
		||||
# If you're planning to use ollama for tagging, uncomment the following lines:
 | 
			
		||||
# OLLAMA_BASE_URL="<OLLAMA_ADDR>"
 | 
			
		||||
# OLLAMA_KEEP_ALIVE="5m"
 | 
			
		||||
 | 
			
		||||
# You can change the models used by uncommenting the following lines, and changing them according to your needs:
 | 
			
		||||
# INFERENCE_TEXT_MODEL="gpt-4o-mini"
 | 
			
		||||
# INFERENCE_IMAGE_MODEL="gpt-4o-mini" 
 | 
			
		||||
 | 
			
		||||
# Additional inference defaults
 | 
			
		||||
# INFERENCE_CONTEXT_LENGTH="2048"
 | 
			
		||||
# INFERENCE_ENABLE_AUTO_TAGGING=true
 | 
			
		||||
# INFERENCE_ENABLE_AUTO_SUMMARIZATION=false
 | 
			
		||||
 | 
			
		||||
# Crawler defaults
 | 
			
		||||
# CRAWLER_NUM_WORKERS="1"
 | 
			
		||||
# CRAWLER_DOWNLOAD_BANNER_IMAGE=true
 | 
			
		||||
# CRAWLER_STORE_SCREENSHOT=true
 | 
			
		||||
# CRAWLER_FULL_PAGE_SCREENSHOT=false
 | 
			
		||||
# CRAWLER_FULL_PAGE_ARCHIVE=false
 | 
			
		||||
# CRAWLER_VIDEO_DOWNLOAD=false
 | 
			
		||||
# CRAWLER_VIDEO_DOWNLOAD_MAX_SIZE="50"
 | 
			
		||||
# CRAWLER_ENABLE_ADBLOCKER=true
 | 
			
		||||
EOF
 | 
			
		||||
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
			
		||||
msg_ok "Installed karakeep"
 | 
			
		||||
 
 | 
			
		||||
@@ -16,18 +16,25 @@ update_os
 | 
			
		||||
msg_info "Installing Kasm Workspaces"
 | 
			
		||||
KASM_VERSION=$(curl -fsSL 'https://www.kasmweb.com/downloads' | grep -o 'https://kasm-static-content.s3.amazonaws.com/kasm_release_[^"]*\.tar\.gz' | head -n 1 | sed -E 's/.*release_(.*)\.tar\.gz/\1/')
 | 
			
		||||
curl -fsSL -o "/opt/kasm_release_${KASM_VERSION}.tar.gz" "https://kasm-static-content.s3.amazonaws.com/kasm_release_${KASM_VERSION}.tar.gz"
 | 
			
		||||
 | 
			
		||||
cd /opt
 | 
			
		||||
tar -xf "kasm_release_${KASM_VERSION}.tar.gz"
 | 
			
		||||
chmod +x /opt/kasm_release/install.sh
 | 
			
		||||
printf 'y\ny\ny\n4\n' | bash /opt/kasm_release/install.sh | tee ~/kasm-install.output
 | 
			
		||||
sed -n '/Kasm UI Login Credentials/,$p' ~/kasm-install.output >~/kasm.creds
 | 
			
		||||
printf 'y\ny\ny\n4\n' | bash /opt/kasm_release/install.sh > ~/kasm-install.output 2>&1
 | 
			
		||||
cat ~/kasm-install.output | grep -A 20 -i "credentials\|login\|password\|admin" | sed '1i Kasm-Workspaces-Credentials' >~/kasm.creds
 | 
			
		||||
 | 
			
		||||
msg_ok "Installed Kasm Workspaces"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Displaying Kasm Credentials"
 | 
			
		||||
cat ~/kasm.creds
 | 
			
		||||
msg_ok "Kasm Credentials displayed"
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD rm -f /opt/kasm_release_${KASM_VERSION}.tar.gz
 | 
			
		||||
rm -f /opt/kasm_release_${KASM_VERSION}.tar.gz
 | 
			
		||||
rm -f ~/kasm-install.output
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										76
									
								
								install/libretranslate-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								install/libretranslate-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/LibreTranslate/LibreTranslate
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing dependencies"
 | 
			
		||||
$STD apt-get install -y --no-install-recommends \
 | 
			
		||||
  pkg-config \
 | 
			
		||||
  gcc \
 | 
			
		||||
  g++ \
 | 
			
		||||
  libicu-dev
 | 
			
		||||
msg_ok "Installed dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Python3"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  python3-pip \
 | 
			
		||||
  python3-dev \
 | 
			
		||||
  python3-icu
 | 
			
		||||
msg_ok "Setup Python3"
 | 
			
		||||
 | 
			
		||||
setup_uv
 | 
			
		||||
fetch_and_deploy_gh_release "LibreTranslate/LibreTranslate"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup LibreTranslate (Patience)"
 | 
			
		||||
cd /opt/libretranslate
 | 
			
		||||
$STD uv venv .venv
 | 
			
		||||
$STD source .venv/bin/activate
 | 
			
		||||
$STD uv pip install --upgrade pip setuptools
 | 
			
		||||
$STD uv pip install Babel==2.12.1
 | 
			
		||||
$STD .venv/bin/python scripts/compile_locales.py
 | 
			
		||||
$STD uv pip install torch==2.2.0 --extra-index-url https://download.pytorch.org/whl/cpu
 | 
			
		||||
$STD uv pip install "numpy<2"
 | 
			
		||||
$STD uv pip install .
 | 
			
		||||
$STD uv pip install libretranslate
 | 
			
		||||
$STD .venv/bin/python scripts/install_models.py
 | 
			
		||||
msg_ok "Installed LibreTranslate"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/libretranslate.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=LibreTranslate
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
User=root
 | 
			
		||||
Type=idle
 | 
			
		||||
Restart=always
 | 
			
		||||
Environment="PATH=/usr/local/lib/python3.11/dist-packages/libretranslate"
 | 
			
		||||
ExecStart=/opt/libretranslate/.venv/bin/python3 /opt/libretranslate/.venv/bin/libretranslate --host * --update-models
 | 
			
		||||
ExecReload=/bin/kill -s HUP
 | 
			
		||||
KillMode=mixed
 | 
			
		||||
TimeoutStopSec=1
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now libretranslate
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										32
									
								
								install/lyrionmusicserver-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								install/lyrionmusicserver-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Omar Minaya
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://lyrion.org/getting-started/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Lyrion Music Server"
 | 
			
		||||
DEB_URL=$(curl -fsSL 'https://lyrion.org/getting-started/' | grep -oP '<a\s[^>]*href="\K[^"]*amd64\.deb(?="[^>]*>)' | head -n 1)
 | 
			
		||||
RELEASE=$(echo "$DEB_URL" | grep -oP 'lyrionmusicserver_\K[0-9.]+(?=_amd64\.deb)')
 | 
			
		||||
DEB_FILE="/tmp/lyrionmusicserver_${RELEASE}_amd64.deb"
 | 
			
		||||
curl -fsSL -o "$DEB_FILE" "$DEB_URL"
 | 
			
		||||
$STD apt install "$DEB_FILE" -y
 | 
			
		||||
echo "${RELEASE}" >"/opt/lyrion_version.txt"
 | 
			
		||||
msg_ok "Setup Lyrion Music Server v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD rm -f "$DEB_FILE"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
							
								
								
									
										84
									
								
								install/managemydamnlife-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								install/managemydamnlife-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: vhsdream
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/intri-in/manage-my-damn-life-nextjs
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="20" install_node_and_modules
 | 
			
		||||
MYSQL_VERSION="8.0" install_mysql
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up Database"
 | 
			
		||||
DB_NAME="mmdl"
 | 
			
		||||
DB_USER="mmdl"
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
 | 
			
		||||
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED by '$DB_PASS';"
 | 
			
		||||
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
 | 
			
		||||
{
 | 
			
		||||
  echo "Manage My Damn Life Credentials"
 | 
			
		||||
  echo "Database User: $DB_USER"
 | 
			
		||||
  echo "Database Password: $DB_PASS"
 | 
			
		||||
  echo "Database Name: $DB_NAME"
 | 
			
		||||
} >>~/mmdl.creds
 | 
			
		||||
msg_ok "Set up Database"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing ${APPLICATION}"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/intri-in/manage-my-damn-life-nextjs/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSLO "https://github.com/intri-in/manage-my-damn-life-nextjs/archive/refs/tags/v${RELEASE}.zip"
 | 
			
		||||
unzip -q v"$RELEASE".zip
 | 
			
		||||
mv manage-my-damn-life-nextjs-"$RELEASE"/ /opt/mmdl
 | 
			
		||||
cp /opt/mmdl/sample.env.local /opt/mmdl/.env
 | 
			
		||||
 | 
			
		||||
sed -i -e 's|db|localhost|' \
 | 
			
		||||
  -e "s|myuser|${DB_USER}|" \
 | 
			
		||||
  -e "s|mypassword|${DB_PASS}|" \
 | 
			
		||||
  -e 's|5433|3306|' \
 | 
			
		||||
  -e 's|DB_DIALECT=postgres|DB_DIALECT=mysql|' \
 | 
			
		||||
  -e "s|sample_install_mmdm|${DB_NAME}|" \
 | 
			
		||||
  -e "s|=PASSWORD|=$(openssl rand -base64 40 | tr -dc 'a-zA-Z0-9' | head -c40)|" \
 | 
			
		||||
  /opt/mmdl/.env
 | 
			
		||||
 | 
			
		||||
cd /opt/mmdl
 | 
			
		||||
export NEXT_TELEMETRY_DISABLE=1
 | 
			
		||||
export CI="true"
 | 
			
		||||
$STD npm install
 | 
			
		||||
$STD npm run migrate
 | 
			
		||||
$STD npm run build
 | 
			
		||||
echo "${RELEASE}" >/opt/mmdl_version.txt
 | 
			
		||||
msg_ok "Installed ${APPLICATION}"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/mmdl.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=${APPLICATION} Service
 | 
			
		||||
After=network.target mysql.service
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
WorkingDirectory=/opt/mmdl
 | 
			
		||||
EnvironmentFile=/opt/mmdl/.env
 | 
			
		||||
ExecStart=/usr/bin/npm run start
 | 
			
		||||
Restart=on-abnormal
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now mmdl
 | 
			
		||||
msg_ok "Created Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f ~/v${RELEASE}.zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -33,9 +33,9 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
    php-json \
 | 
			
		||||
    php-curl
 | 
			
		||||
 | 
			
		||||
  curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz" -o "phpMyAdmin-5.2.1-all-languages.tar.gz"
 | 
			
		||||
  curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.tar.gz" -o "phpMyAdmin-5.2.2-all-languages.tar.gz"
 | 
			
		||||
  mkdir -p /var/www/html/phpMyAdmin
 | 
			
		||||
  tar xf phpMyAdmin-5.2.1-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin
 | 
			
		||||
  tar xf phpMyAdmin-5.2.2-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin
 | 
			
		||||
  cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php
 | 
			
		||||
  SECRET=$(openssl rand -base64 24)
 | 
			
		||||
  sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg['blowfish_secret'] = '${SECRET}';#" /var/www/html/phpMyAdmin/config.inc.php
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								install/minarca-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								install/minarca-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://minarca.org/en_CA
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  apt-transport-https \
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  lsb-release
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Minarca"
 | 
			
		||||
curl -fsSL https://www.ikus-soft.com/archive/minarca/public.key | gpg --dearmor >/usr/share/keyrings/minarca-keyring.gpg
 | 
			
		||||
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/minarca-keyring.gpg] https://nexus.ikus-soft.com/repository/apt-release-$(lsb_release -sc)/ $(lsb_release -sc) main" >/etc/apt/sources.list.d/minarca.list
 | 
			
		||||
$STD apt-get update
 | 
			
		||||
$STD apt-get install -y minarca-server
 | 
			
		||||
msg_ok "Installed Minarca"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -62,9 +62,9 @@ if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then
 | 
			
		||||
    php-json \
 | 
			
		||||
    php-curl
 | 
			
		||||
 | 
			
		||||
  curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz" -o "phpMyAdmin-5.2.1-all-languages.tar.gz"
 | 
			
		||||
  curl -fsSL "https://files.phpmyadmin.net/phpMyAdmin/5.2.2/phpMyAdmin-5.2.2-all-languages.tar.gz" -o "phpMyAdmin-5.2.2-all-languages.tar.gz"
 | 
			
		||||
  mkdir -p /var/www/html/phpMyAdmin
 | 
			
		||||
  tar xf phpMyAdmin-5.2.1-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin
 | 
			
		||||
  tar xf phpMyAdmin-5.2.2-all-languages.tar.gz --strip-components=1 -C /var/www/html/phpMyAdmin
 | 
			
		||||
  cp /var/www/html/phpMyAdmin/config.sample.inc.php /var/www/html/phpMyAdmin/config.inc.php
 | 
			
		||||
  SECRET=$(openssl rand -base64 24)
 | 
			
		||||
  sed -i "s#\$cfg\['blowfish_secret'\] = '';#\$cfg['blowfish_secret'] = '${SECRET}';#" /var/www/html/phpMyAdmin/config.inc.php
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,8 @@ update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  diffutils
 | 
			
		||||
  diffutils \
 | 
			
		||||
  policykit-1
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Creating dedicated user pulse..."
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y apache2-utils
 | 
			
		||||
$STD apt-get install -y apache2-utils fuse3
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing rclone"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: tremor021
 | 
			
		||||
# Author: Slaviša Arežina (tremor021)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/YuukanOO/seelf
 | 
			
		||||
 | 
			
		||||
@@ -21,21 +21,17 @@ msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
install_go
 | 
			
		||||
NODE_VERSION="22" install_node_and_modules
 | 
			
		||||
fetch_and_deploy_gh_release "YuukanOO/seelf"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up seelf. Patience"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/YuukanOO/seelf/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
			
		||||
curl -fsSL "https://github.com/YuukanOO/seelf/archive/refs/tags/v${RELEASE}.tar.gz" -o "v${RELEASE}.tar.gz"
 | 
			
		||||
tar -xzf v"${RELEASE}".tar.gz
 | 
			
		||||
mv seelf-"${RELEASE}"/ /opt/seelf
 | 
			
		||||
cd /opt/seelf
 | 
			
		||||
$STD make build
 | 
			
		||||
PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
mkdir -p /opt/seelf/data
 | 
			
		||||
{
 | 
			
		||||
  echo "ADMIN_EMAIL=admin@example.com"
 | 
			
		||||
  echo "ADMIN_PASSWORD=$PASS"
 | 
			
		||||
} | tee .env ~/seelf.creds >/dev/null
 | 
			
		||||
 | 
			
		||||
echo "${RELEASE}" >/opt/seelf_version.txt
 | 
			
		||||
SEELF_ADMIN_EMAIL=admin@example.com SEELF_ADMIN_PASSWORD=$PASS ./seelf serve &>/dev/null &
 | 
			
		||||
sleep 5
 | 
			
		||||
kill $!
 | 
			
		||||
@@ -51,8 +47,10 @@ After=network.target
 | 
			
		||||
Type=simple
 | 
			
		||||
User=root
 | 
			
		||||
Group=root
 | 
			
		||||
EnvironmentFile=/opt/seelf/.env
 | 
			
		||||
Environment=DATA_PATH=/opt/seelf/data
 | 
			
		||||
WorkingDirectory=/opt/seelf
 | 
			
		||||
ExecStart=/opt/seelf/./seelf serve
 | 
			
		||||
ExecStart=/opt/seelf/./seelf -c data/conf.yml serve
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
@@ -64,13 +62,7 @@ msg_ok "Created Service"
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
# Cleanup
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f ~/v"${RELEASE}".tar.gz
 | 
			
		||||
rm -f "$temp_file"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,8 @@ $STD apt-get install -y \
 | 
			
		||||
  build-essential \
 | 
			
		||||
  git \
 | 
			
		||||
  make \
 | 
			
		||||
  ca-certificates
 | 
			
		||||
  ca-certificates \
 | 
			
		||||
  jq
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" NODE_MODULE="pnpm@$(curl -s https://raw.githubusercontent.com/msgbyte/tianji/master/package.json | jq -r '.packageManager | split("@")[1]')" install_node_and_modules
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,10 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing dependencies"
 | 
			
		||||
$STD apt-get install -y zstd
 | 
			
		||||
msg_ok "Installed dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Wastebin"
 | 
			
		||||
temp_file=$(mktemp)
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
 
 | 
			
		||||
@@ -14,11 +14,6 @@ setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
  postgresql
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
NODE_VERSION="22" NODE_MODULE="pnpm@latest" install_node_and_modules
 | 
			
		||||
PG_VERSION="16" install_postgresql
 | 
			
		||||
 | 
			
		||||
@@ -83,6 +78,7 @@ msg_ok "Created Service"
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
rm -f /opt/v${RELEASE}.zip
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -17,8 +17,9 @@ msg_info "Installing Dependencies (Patience)"
 | 
			
		||||
$STD apt-get install -y ca-certificates
 | 
			
		||||
msg_ok "Installed Dependecies"
 | 
			
		||||
 | 
			
		||||
PG_VERSION="17" PG_MODULES="common" install_postgresql
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Postgresql"
 | 
			
		||||
$STD apt-get install -y postgresql postgresql-common
 | 
			
		||||
DB_NAME="zitadel"
 | 
			
		||||
DB_USER="zitadel"
 | 
			
		||||
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										65
									
								
								install/zot-registry-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								install/zot-registry-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (CanbiZ)
 | 
			
		||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://zotregistry.dev/
 | 
			
		||||
 | 
			
		||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
			
		||||
color
 | 
			
		||||
verb_ip6
 | 
			
		||||
catch_errors
 | 
			
		||||
setting_up_container
 | 
			
		||||
network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y apache2-utils
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Zot Registry"
 | 
			
		||||
RELEASE=$(curl -fsSL https://api.github.com/repos/project-zot/zot/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
curl -fsSL "https://github.com/project-zot/zot/releases/download/${RELEASE}/zot-linux-amd64" -o /usr/bin/zot
 | 
			
		||||
chmod +x /usr/bin/zot
 | 
			
		||||
chown root:root /usr/bin/zot
 | 
			
		||||
mkdir -p /etc/zot
 | 
			
		||||
curl -fsSL https://raw.githubusercontent.com/project-zot/zot/refs/heads/main/examples/config-ui.json -o /etc/zot/config.json
 | 
			
		||||
ZOTPASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
 | 
			
		||||
$STD htpasswd -b -B -c /etc/zot/htpasswd admin "$ZOTPASSWORD"
 | 
			
		||||
{
 | 
			
		||||
  echo "Zot-Credentials"
 | 
			
		||||
  echo "Zot User: admin"
 | 
			
		||||
  echo "Zot Password: $ZOTPASSWORD"
 | 
			
		||||
} >>~/zot.creds
 | 
			
		||||
echo "${RELEASE}" >~/.${APPLICATION}
 | 
			
		||||
msg_ok "Installed Zot Registry"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Service"
 | 
			
		||||
cat <<EOF >/etc/systemd/system/zot.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=OCI Distribution Registry
 | 
			
		||||
Documentation=https://zotregistry.dev/
 | 
			
		||||
After=network.target auditd.service local-fs.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/usr/bin/zot serve /etc/zot/config.json
 | 
			
		||||
Restart=on-failure
 | 
			
		||||
User=root
 | 
			
		||||
LimitNOFILE=500000
 | 
			
		||||
MemoryHigh=2G
 | 
			
		||||
MemoryMax=4G
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
systemctl enable -q --now zot
 | 
			
		||||
msg_ok "Setup Service"
 | 
			
		||||
 | 
			
		||||
motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
@@ -39,9 +39,11 @@ post_to_api() {
 | 
			
		||||
EOF
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
  RESPONSE=$(curl -fsSL -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
  if [[ "$DIAGNOSTICS" == "yes" ]]; then
 | 
			
		||||
    RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
    -H "Content-Type: application/json" \
 | 
			
		||||
    -d "$JSON_PAYLOAD") || true
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
post_to_api_vm() {
 | 
			
		||||
@@ -87,9 +89,11 @@ post_to_api_vm() {
 | 
			
		||||
EOF
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
  RESPONSE=$(curl -fsSL -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
  if [[ "$DIAGNOSTICS" == "yes" ]]; then
 | 
			
		||||
    RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
    -H "Content-Type: application/json" \
 | 
			
		||||
    -d "$JSON_PAYLOAD") || true
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
POST_UPDATE_DONE=false
 | 
			
		||||
@@ -115,9 +119,11 @@ post_update_to_api() {
 | 
			
		||||
EOF
 | 
			
		||||
)
 | 
			
		||||
   
 | 
			
		||||
  RESPONSE=$(curl -fsSL -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
  if [[ "$DIAGNOSTICS" == "yes" ]]; then
 | 
			
		||||
    RESPONSE=$(curl -s -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
 | 
			
		||||
    -H "Content-Type: application/json" \
 | 
			
		||||
    -d "$JSON_PAYLOAD") || true
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  POST_UPDATE_DONE=true
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -379,7 +379,7 @@ write_config() {
 | 
			
		||||
 | 
			
		||||
CT_TYPE="${CT_TYPE}"
 | 
			
		||||
DISK_SIZE="${DISK_SIZE}"
 | 
			
		||||
CORE_COUNT="${DISK_SIZE}"
 | 
			
		||||
CORE_COUNT="${CORE_COUNT}"
 | 
			
		||||
RAM_SIZE="${RAM_SIZE}"
 | 
			
		||||
HN="${HN}"
 | 
			
		||||
BRG="${BRG}"
 | 
			
		||||
@@ -411,7 +411,7 @@ EOF
 | 
			
		||||
 | 
			
		||||
CT_TYPE="${CT_TYPE}"
 | 
			
		||||
DISK_SIZE="${DISK_SIZE}"
 | 
			
		||||
CORE_COUNT="${DISK_SIZE}"
 | 
			
		||||
CORE_COUNT="${CORE_COUNT}"
 | 
			
		||||
RAM_SIZE="${RAM_SIZE}"
 | 
			
		||||
HN="${HN}"
 | 
			
		||||
BRG="${BRG}"
 | 
			
		||||
@@ -1090,6 +1090,8 @@ build_container() {
 | 
			
		||||
  else
 | 
			
		||||
    export FUNCTIONS_FILE_PATH="$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/install.func)"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  export DIAGNOSTICS="$DIAGNOSTICS"
 | 
			
		||||
  export RANDOM_UUID="$RANDOM_UUID"
 | 
			
		||||
  export CACHER="$APT_CACHER"
 | 
			
		||||
  export CACHER_IP="$APT_CACHER_IP"
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,7 @@ error_handler() {
 | 
			
		||||
  local command="$2"
 | 
			
		||||
  local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
 | 
			
		||||
  echo -e "\n$error_message"
 | 
			
		||||
  if [[ "$line_number" -eq 50 ]]; then
 | 
			
		||||
  if [[ "$line_number" -eq 51 ]]; then
 | 
			
		||||
    echo -e "The silent function has suppressed the error, run the script with verbose mode enabled, which will provide more detailed output.\n"
 | 
			
		||||
    post_update_to_api "failed" "No error message, script ran in silent mode"
 | 
			
		||||
  else
 | 
			
		||||
 
 | 
			
		||||
@@ -227,6 +227,7 @@ install_mariadb() {
 | 
			
		||||
  local MARIADB_VERSION="${MARIADB_VERSION:-latest}"
 | 
			
		||||
  local DISTRO_CODENAME
 | 
			
		||||
  DISTRO_CODENAME="$(awk -F= '/^VERSION_CODENAME=/{print $2}' /etc/os-release)"
 | 
			
		||||
  CURRENT_OS="$(awk -F= '/^ID=/{print $2}' /etc/os-release)"
 | 
			
		||||
 | 
			
		||||
  # grab dynamic latest LTS version
 | 
			
		||||
  if [[ "$MARIADB_VERSION" == "latest" ]]; then
 | 
			
		||||
@@ -270,7 +271,7 @@ install_mariadb() {
 | 
			
		||||
  curl -fsSL "https://mariadb.org/mariadb_release_signing_key.asc" |
 | 
			
		||||
    gpg --dearmor -o /etc/apt/trusted.gpg.d/mariadb.gpg
 | 
			
		||||
 | 
			
		||||
  echo "deb [signed-by=/etc/apt/trusted.gpg.d/mariadb.gpg] http://mirror.mariadb.org/repo/${MARIADB_VERSION}/debian ${DISTRO_CODENAME} main" \
 | 
			
		||||
  echo "deb [signed-by=/etc/apt/trusted.gpg.d/mariadb.gpg] http://mirror.mariadb.org/repo/${MARIADB_VERSION}/${CURRENT_OS} ${DISTRO_CODENAME} main" \
 | 
			
		||||
    >/etc/apt/sources.list.d/mariadb.list
 | 
			
		||||
 | 
			
		||||
  $STD apt-get update
 | 
			
		||||
@@ -379,45 +380,44 @@ install_php() {
 | 
			
		||||
  # Deduplicate modules
 | 
			
		||||
  COMBINED_MODULES=$(echo "$COMBINED_MODULES" | tr ',' '\n' | awk '!seen[$0]++' | paste -sd, -)
 | 
			
		||||
 | 
			
		||||
  local CURRENT_PHP
 | 
			
		||||
  local CURRENT_PHP=""
 | 
			
		||||
  if command -v php >/dev/null 2>&1; then
 | 
			
		||||
    CURRENT_PHP=$(php -v 2>/dev/null | awk '/^PHP/{print $2}' | cut -d. -f1,2)
 | 
			
		||||
  else
 | 
			
		||||
    CURRENT_PHP=""
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ -z "$CURRENT_PHP" ]]; then
 | 
			
		||||
    msg_info "Setup PHP $PHP_VERSION"
 | 
			
		||||
    msg_info "No PHP found, setting up PHP $PHP_VERSION"
 | 
			
		||||
  elif [[ "$CURRENT_PHP" != "$PHP_VERSION" ]]; then
 | 
			
		||||
    msg_info "PHP $CURRENT_PHP detected, migrating to PHP $PHP_VERSION"
 | 
			
		||||
    if [[ ! -f /etc/apt/sources.list.d/php.list ]]; then
 | 
			
		||||
      $STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
      $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
      echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ ${DISTRO_CODENAME} main" \
 | 
			
		||||
        >/etc/apt/sources.list.d/php.list
 | 
			
		||||
      $STD apt-get update
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    $STD apt-get purge -y "php${CURRENT_PHP//./}"* || true
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Ensure Sury repo is available
 | 
			
		||||
  if [[ ! -f /etc/apt/sources.list.d/php.list ]]; then
 | 
			
		||||
    $STD curl -fsSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
 | 
			
		||||
    $STD dpkg -i /tmp/debsuryorg-archive-keyring.deb
 | 
			
		||||
    echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ ${DISTRO_CODENAME} main" \
 | 
			
		||||
      >/etc/apt/sources.list.d/php.list
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  local MODULE_LIST="php${PHP_VERSION}"
 | 
			
		||||
  IFS=',' read -ra MODULES <<<"$COMBINED_MODULES"
 | 
			
		||||
  for mod in "${MODULES[@]}"; do
 | 
			
		||||
    MODULE_LIST+=" php${PHP_VERSION}-${mod}"
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  if [[ "$PHP_FPM" == "YES" ]]; then
 | 
			
		||||
    MODULE_LIST+=" php${PHP_VERSION}-fpm"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "$PHP_APACHE" == "YES" ]]; then
 | 
			
		||||
    # Optionally disable old Apache PHP module
 | 
			
		||||
  if [[ "$PHP_APACHE" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then
 | 
			
		||||
    if [[ -f /etc/apache2/mods-enabled/php${CURRENT_PHP}.load ]]; then
 | 
			
		||||
      $STD a2dismod php${CURRENT_PHP} || true
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [[ "$PHP_FPM" == "YES" ]]; then
 | 
			
		||||
  if [[ "$PHP_FPM" == "YES" ]] && [[ -n "$CURRENT_PHP" ]]; then
 | 
			
		||||
    $STD systemctl stop php${CURRENT_PHP}-fpm || true
 | 
			
		||||
    $STD systemctl disable php${CURRENT_PHP}-fpm || true
 | 
			
		||||
  fi
 | 
			
		||||
@@ -435,8 +435,7 @@ install_php() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Patch all relevant php.ini files
 | 
			
		||||
  local PHP_INI_PATHS=()
 | 
			
		||||
  PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/cli/php.ini")
 | 
			
		||||
  local PHP_INI_PATHS=("/etc/php/${PHP_VERSION}/cli/php.ini")
 | 
			
		||||
  [[ "$PHP_FPM" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/fpm/php.ini")
 | 
			
		||||
  [[ "$PHP_APACHE" == "YES" ]] && PHP_INI_PATHS+=("/etc/php/${PHP_VERSION}/apache2/php.ini")
 | 
			
		||||
 | 
			
		||||
@@ -451,7 +450,6 @@ install_php() {
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# ------------------------------------------------------------------------------
 | 
			
		||||
# Installs or updates Composer globally.
 | 
			
		||||
#
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								tools/headers/add-iptag
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								tools/headers/add-iptag
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
    ________      ______           
 | 
			
		||||
   /  _/ __ \    /_  __/___ _____ _
 | 
			
		||||
   / // /_/ /_____/ / / __ `/ __ `/
 | 
			
		||||
 _/ // ____/_____/ / / /_/ / /_/ / 
 | 
			
		||||
/___/_/         /_/  \__,_/\__, /  
 | 
			
		||||
                          /____/   
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
    __   _  ________   ________      ______           
 | 
			
		||||
   / /  | |/ / ____/  /  _/ __ \    /_  __/___ _____ _
 | 
			
		||||
  / /   |   / /       / // /_/ /_____/ / / __ `/ __ `/
 | 
			
		||||
 / /___/   / /___   _/ // ____/_____/ / / /_/ / /_/ / 
 | 
			
		||||
/_____/_/|_\____/  /___/_/         /_/  \__,_/\__, /  
 | 
			
		||||
                                             /____/   
 | 
			
		||||
@@ -1,357 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
			
		||||
# Author: MickLesk (Canbiz)
 | 
			
		||||
# License: MIT
 | 
			
		||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
			
		||||
# Source: https://github.com/gitsang/lxc-iptag
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
  clear
 | 
			
		||||
  cat <<"EOF"
 | 
			
		||||
    __   _  ________   ________      ______           
 | 
			
		||||
   / /  | |/ / ____/  /  _/ __ \    /_  __/___ _____ _
 | 
			
		||||
  / /   |   / /       / // /_/ /_____/ / / __ `/ __ `/
 | 
			
		||||
 / /___/   / /___   _/ // ____/_____/ / / /_/ / /_/ / 
 | 
			
		||||
/_____/_/|_\____/  /___/_/         /_/  \__,_/\__, /  
 | 
			
		||||
                                             /____/   
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
clear
 | 
			
		||||
header_info
 | 
			
		||||
APP="LXC IP-Tag"
 | 
			
		||||
hostname=$(hostname)
 | 
			
		||||
 | 
			
		||||
# Farbvariablen
 | 
			
		||||
YW=$(echo "\033[33m")
 | 
			
		||||
GN=$(echo "\033[1;92m")
 | 
			
		||||
RD=$(echo "\033[01;31m")
 | 
			
		||||
CL=$(echo "\033[m")
 | 
			
		||||
BFR="\\r\\033[K"
 | 
			
		||||
HOLD=" "
 | 
			
		||||
CM=" ✔️ ${CL}"
 | 
			
		||||
CROSS=" ✖️ ${CL}"
 | 
			
		||||
 | 
			
		||||
# This function enables error handling in the script by setting options and defining a trap for the ERR signal.
 | 
			
		||||
catch_errors() {
 | 
			
		||||
  set -Eeuo pipefail
 | 
			
		||||
  trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# This function is called when an error occurs. It receives the exit code, line number, and command that caused the error, and displays an error message.
 | 
			
		||||
error_handler() {
 | 
			
		||||
  if [ -n "$SPINNER_PID" ] && ps -p "$SPINNER_PID" >/dev/null; then kill "$SPINNER_PID" >/dev/null; fi
 | 
			
		||||
  printf "\e[?25h"
 | 
			
		||||
  local exit_code="$?"
 | 
			
		||||
  local line_number="$1"
 | 
			
		||||
  local command="$2"
 | 
			
		||||
  local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
 | 
			
		||||
  echo -e "\n$error_message\n"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# This function displays a spinner.
 | 
			
		||||
spinner() {
 | 
			
		||||
  local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
 | 
			
		||||
  local spin_i=0
 | 
			
		||||
  local interval=0.1
 | 
			
		||||
  printf "\e[?25l"
 | 
			
		||||
 | 
			
		||||
  local color="${YWB}"
 | 
			
		||||
 | 
			
		||||
  while true; do
 | 
			
		||||
    printf "\r ${color}%s${CL}" "${frames[spin_i]}"
 | 
			
		||||
    spin_i=$(((spin_i + 1) % ${#frames[@]}))
 | 
			
		||||
    sleep "$interval"
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# This function displays an informational message with a yellow color.
 | 
			
		||||
msg_info() {
 | 
			
		||||
  local msg="$1"
 | 
			
		||||
  echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
 | 
			
		||||
  spinner &
 | 
			
		||||
  SPINNER_PID=$!
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# This function displays a success message with a green color.
 | 
			
		||||
msg_ok() {
 | 
			
		||||
  if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
 | 
			
		||||
  printf "\e[?25h"
 | 
			
		||||
  local msg="$1"
 | 
			
		||||
  echo -e "${BFR}${CM}${GN}${msg}${CL}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# This function displays a error message with a red color.
 | 
			
		||||
msg_error() {
 | 
			
		||||
  if [ -n "$SPINNER_PID" ] && ps -p "$SPINNER_PID" >/dev/null; then kill "$SPINNER_PID" >/dev/null; fi
 | 
			
		||||
  printf "\e[?25h"
 | 
			
		||||
  local msg="$1"
 | 
			
		||||
  echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
while true; do
 | 
			
		||||
  read -p "This will install ${APP} on ${hostname}. Proceed? (y/n): " yn
 | 
			
		||||
  case $yn in
 | 
			
		||||
  [Yy]*) break ;;
 | 
			
		||||
  [Nn]*)
 | 
			
		||||
    msg_error "Installation cancelled."
 | 
			
		||||
    exit
 | 
			
		||||
    ;;
 | 
			
		||||
  *) msg_error "Please answer yes or no." ;;
 | 
			
		||||
  esac
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
if ! pveversion | grep -Eq "pve-manager/8\.[0-4](\.[0-9]+)*"; then
 | 
			
		||||
  msg_error "This version of Proxmox Virtual Environment is not supported"
 | 
			
		||||
  msg_error "⚠️ Requires Proxmox Virtual Environment Version 8.0 or later."
 | 
			
		||||
  msg_error "Exiting..."
 | 
			
		||||
  sleep 2
 | 
			
		||||
  exit
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
FILE_PATH="/usr/local/bin/iptag"
 | 
			
		||||
if [[ -f "$FILE_PATH" ]]; then
 | 
			
		||||
  msg_info "The file already exists: '$FILE_PATH'. Skipping installation."
 | 
			
		||||
  exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
apt-get update &>/dev/null
 | 
			
		||||
apt-get install -y ipcalc net-tools &>/dev/null
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting up IP-Tag Scripts"
 | 
			
		||||
mkdir -p /opt/lxc-iptag
 | 
			
		||||
msg_ok "Setup IP-Tag Scripts"
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Default Config"
 | 
			
		||||
if [[ ! -f /opt/lxc-iptag/iptag.conf ]]; then
 | 
			
		||||
  cat <<EOF >/opt/lxc-iptag/iptag.conf
 | 
			
		||||
# Configuration file for LXC IP tagging
 | 
			
		||||
 | 
			
		||||
# List of allowed CIDRs
 | 
			
		||||
CIDR_LIST=(
 | 
			
		||||
  192.168.0.0/16
 | 
			
		||||
  172.16.0.0/12
 | 
			
		||||
  10.0.0.0/8
 | 
			
		||||
  100.64.0.0/10
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Interval settings (in seconds)
 | 
			
		||||
LOOP_INTERVAL=60
 | 
			
		||||
FW_NET_INTERFACE_CHECK_INTERVAL=60
 | 
			
		||||
LXC_STATUS_CHECK_INTERVAL=-1
 | 
			
		||||
FORCE_UPDATE_INTERVAL=1800
 | 
			
		||||
EOF
 | 
			
		||||
  msg_ok "Setup default config"
 | 
			
		||||
else
 | 
			
		||||
  msg_ok "Default config already exists"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_info "Setup Main Function"
 | 
			
		||||
if [[ ! -f /opt/lxc-iptag/iptag ]]; then
 | 
			
		||||
  cat <<'EOF' >/opt/lxc-iptag/iptag
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# =============== CONFIGURATION =============== #
 | 
			
		||||
 | 
			
		||||
CONFIG_FILE="/opt/lxc-iptag/iptag.conf"
 | 
			
		||||
 | 
			
		||||
# Load the configuration file if it exists
 | 
			
		||||
if [ -f "$CONFIG_FILE" ]; then
 | 
			
		||||
  # shellcheck source=./lxc-iptag.conf
 | 
			
		||||
  source "$CONFIG_FILE"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Convert IP to integer for comparison
 | 
			
		||||
ip_to_int() {
 | 
			
		||||
  local ip="${1}"
 | 
			
		||||
  local a b c d
 | 
			
		||||
 | 
			
		||||
  IFS=. read -r a b c d <<< "${ip}"
 | 
			
		||||
  echo "$((a << 24 | b << 16 | c << 8 | d))"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Check if IP is in CIDR
 | 
			
		||||
ip_in_cidr() {
 | 
			
		||||
  local ip="${1}"
 | 
			
		||||
  local cidr="${2}"
 | 
			
		||||
 | 
			
		||||
  ip_int=$(ip_to_int "${ip}")
 | 
			
		||||
  netmask_int=$(ip_to_int "$(ipcalc -b "${cidr}" | grep Broadcast | awk '{print $2}')")
 | 
			
		||||
  masked_ip_int=$(( "${ip_int}" & "${netmask_int}" ))
 | 
			
		||||
  [[ ${ip_int} -eq ${masked_ip_int} ]] && return 0 || return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Check if IP is in any CIDRs
 | 
			
		||||
ip_in_cidrs() {
 | 
			
		||||
  local ip="${1}"
 | 
			
		||||
  local cidrs=()
 | 
			
		||||
 | 
			
		||||
  mapfile -t cidrs < <(echo "${2}" | tr ' ' '\n')
 | 
			
		||||
  for cidr in "${cidrs[@]}"; do
 | 
			
		||||
  ip_in_cidr "${ip}" "${cidr}" && return 0
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Check if IP is valid
 | 
			
		||||
is_valid_ipv4() {
 | 
			
		||||
  local ip=$1
 | 
			
		||||
  local regex="^([0-9]{1,3}\.){3}[0-9]{1,3}$"
 | 
			
		||||
 | 
			
		||||
  if [[ $ip =~ $regex ]]; then
 | 
			
		||||
    IFS='.' read -r -a parts <<< "$ip"
 | 
			
		||||
    for part in "${parts[@]}"; do
 | 
			
		||||
      if ! [[ $part =~ ^[0-9]+$ ]] || ((part < 0 || part > 255)); then
 | 
			
		||||
        return 1
 | 
			
		||||
      fi
 | 
			
		||||
    done
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
lxc_status_changed() {
 | 
			
		||||
  current_lxc_status=$(pct list 2>/dev/null)
 | 
			
		||||
  if [ "${last_lxc_status}" == "${current_lxc_status}" ]; then
 | 
			
		||||
    return 1
 | 
			
		||||
  else
 | 
			
		||||
    last_lxc_status="${current_lxc_status}"
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fw_net_interface_changed() {
 | 
			
		||||
  current_net_interface=$(ifconfig | grep "^fw")
 | 
			
		||||
  if [ "${last_net_interface}" == "${current_net_interface}" ]; then
 | 
			
		||||
    return 1
 | 
			
		||||
  else
 | 
			
		||||
    last_net_interface="${current_net_interface}"
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# =============== MAIN =============== #
 | 
			
		||||
 | 
			
		||||
update_lxc_iptags() {
 | 
			
		||||
  vmid_list=$(pct list 2>/dev/null | grep -v VMID | awk '{print $1}')
 | 
			
		||||
  for vmid in ${vmid_list}; do
 | 
			
		||||
    last_tagged_ips=()
 | 
			
		||||
    current_valid_ips=()
 | 
			
		||||
    next_tags=()
 | 
			
		||||
 | 
			
		||||
    # Parse current tags
 | 
			
		||||
    mapfile -t current_tags < <(pct config "${vmid}" | grep tags | awk '{print $2}' | sed 's/;/\n/g')
 | 
			
		||||
    for current_tag in "${current_tags[@]}"; do
 | 
			
		||||
      if is_valid_ipv4 "${current_tag}"; then
 | 
			
		||||
        last_tagged_ips+=("${current_tag}")
 | 
			
		||||
        continue
 | 
			
		||||
      fi
 | 
			
		||||
      next_tags+=("${current_tag}")
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    # Get current IPs
 | 
			
		||||
    current_ips_full=$(lxc-info -n "${vmid}" -i | awk '{print $2}')
 | 
			
		||||
    for ip in ${current_ips_full}; do
 | 
			
		||||
      if is_valid_ipv4 "${ip}" && ip_in_cidrs "${ip}" "${CIDR_LIST[*]}"; then
 | 
			
		||||
        current_valid_ips+=("${ip}")
 | 
			
		||||
        next_tags+=("${ip}")
 | 
			
		||||
      fi
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    # Skip if no ip change
 | 
			
		||||
    if [[ "$(echo "${last_tagged_ips[@]}" | tr ' ' '\n' | sort -u)" == "$(echo "${current_valid_ips[@]}" | tr ' ' '\n' | sort -u)" ]]; then
 | 
			
		||||
      echo "Skipping ${vmid} cause ip no changes"
 | 
			
		||||
      continue
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Set tags
 | 
			
		||||
    echo "Setting ${vmid} tags from ${current_tags[*]} to ${next_tags[*]}"
 | 
			
		||||
    pct set "${vmid}" -tags "$(IFS=';'; echo "${next_tags[*]}")"
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
check() {
 | 
			
		||||
  current_time=$(date +%s)
 | 
			
		||||
 | 
			
		||||
  time_since_last_lxc_status_check=$((current_time - last_lxc_status_check_time))
 | 
			
		||||
  if [[ "${LXC_STATUS_CHECK_INTERVAL}" -gt 0 ]] \
 | 
			
		||||
    && [[ "${time_since_last_lxc_status_check}" -ge "${STATUS_CHECK_INTERVAL}" ]]; then
 | 
			
		||||
    echo "Checking lxc status..."
 | 
			
		||||
    last_lxc_status_check_time=${current_time}
 | 
			
		||||
    if lxc_status_changed; then
 | 
			
		||||
      update_lxc_iptags
 | 
			
		||||
      last_update_time=${current_time}
 | 
			
		||||
      return
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  time_since_last_fw_net_interface_check=$((current_time - last_fw_net_interface_check_time))
 | 
			
		||||
  if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL}" -gt 0 ]] \
 | 
			
		||||
    && [[ "${time_since_last_fw_net_interface_check}" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL}" ]]; then
 | 
			
		||||
    echo "Checking fw net interface..."
 | 
			
		||||
    last_fw_net_interface_check_time=${current_time}
 | 
			
		||||
    if fw_net_interface_changed; then
 | 
			
		||||
      update_lxc_iptags
 | 
			
		||||
      last_update_time=${current_time}
 | 
			
		||||
      return
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  time_since_last_update=$((current_time - last_update_time))
 | 
			
		||||
  if [ ${time_since_last_update} -ge ${FORCE_UPDATE_INTERVAL} ]; then
 | 
			
		||||
    echo "Force updating lxc iptags..."
 | 
			
		||||
    update_lxc_iptags
 | 
			
		||||
    last_update_time=${current_time}
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# main: Set the IP tags for all LXC containers
 | 
			
		||||
main() {
 | 
			
		||||
  while true; do
 | 
			
		||||
    check
 | 
			
		||||
    sleep "${LOOP_INTERVAL}"
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main
 | 
			
		||||
EOF
 | 
			
		||||
  msg_ok "Setup Main Function"
 | 
			
		||||
else
 | 
			
		||||
  msg_ok "Main Function already exists"
 | 
			
		||||
fi
 | 
			
		||||
chmod +x /opt/lxc-iptag/iptag
 | 
			
		||||
 | 
			
		||||
msg_info "Creating Service"
 | 
			
		||||
if [[ ! -f /lib/systemd/system/iptag.service ]]; then
 | 
			
		||||
  cat <<EOF >/lib/systemd/system/iptag.service
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=LXC IP-Tag service
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=simple
 | 
			
		||||
ExecStart=/opt/lxc-iptag/iptag
 | 
			
		||||
Restart=always
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
  msg_ok "Created Service"
 | 
			
		||||
else
 | 
			
		||||
  msg_ok "Service already exists."
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_ok "Setup IP-Tag Scripts"
 | 
			
		||||
 | 
			
		||||
msg_info "Starting Service"
 | 
			
		||||
systemctl daemon-reload &>/dev/null
 | 
			
		||||
systemctl enable -q --now iptag.service &>/dev/null
 | 
			
		||||
msg_ok "Started Service"
 | 
			
		||||
SPINNER_PID=""
 | 
			
		||||
echo -e "\n${APP} installation completed successfully! ${CL}\n"
 | 
			
		||||
							
								
								
									
										227
									
								
								tools/pve/nic-offloading-fix.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										227
									
								
								tools/pve/nic-offloading-fix.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,227 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# Creates a systemd service to disable NIC offloading features for Intel e1000e interfaces
 | 
			
		||||
# Author: rcastley
 | 
			
		||||
# License: MIT
 | 
			
		||||
 | 
			
		||||
YW=$(echo "\033[33m")
 | 
			
		||||
YWB=$'\e[93m'
 | 
			
		||||
BL=$(echo "\033[36m")
 | 
			
		||||
RD=$(echo "\033[01;31m")
 | 
			
		||||
BGN=$(echo "\033[4;92m")
 | 
			
		||||
GN=$(echo "\033[1;92m")
 | 
			
		||||
DGN=$(echo "\033[32m")
 | 
			
		||||
CL=$(echo "\033[m")
 | 
			
		||||
TAB="  "
 | 
			
		||||
CM="${TAB}✔️${TAB}"
 | 
			
		||||
CROSS="${TAB}✖️${TAB}"
 | 
			
		||||
INFO="${TAB}ℹ️${TAB}${CL}"
 | 
			
		||||
WARN="${TAB}⚠️${TAB}${CL}"
 | 
			
		||||
 | 
			
		||||
function header_info {
 | 
			
		||||
  clear
 | 
			
		||||
  cat <<"EOF"
 | 
			
		||||
 | 
			
		||||
    _   ____________   ____  __________                ___                ____  _            __    __
 | 
			
		||||
   / | / /  _/ ____/  / __ \/ __/ __/ /___  ____ _____/ (_)___  ____ _   / __ \(_)________ _/ /_  / /__  _____
 | 
			
		||||
  /  |/ // // /      / / / / /_/ /_/ / __ \/ __ `/ __  / / __ \/ __ `/  / / / / / ___/ __ `/ __ \/ / _ \/ ___/
 | 
			
		||||
 / /|  // // /___   / /_/ / __/ __/ / /_/ / /_/ / /_/ / / / / / /_/ /  / /_/ / (__  ) /_/ / /_/ / /  __/ /
 | 
			
		||||
/_/ |_/___/\____/   \____/_/ /_/ /_/\____/\__,_/\__,_/_/_/ /_/\__, /  /_____/_/____/\__,_/_.___/_/\___/_/
 | 
			
		||||
                                                             /____/
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
header_info
 | 
			
		||||
 | 
			
		||||
function msg_info() { echo -e "${INFO} ${YW}${1}...${CL}"; }
 | 
			
		||||
function msg_ok() { echo -e "${CM} ${GN}${1}${CL}"; }
 | 
			
		||||
function msg_error() { echo -e "${CROSS} ${RD}${1}${CL}"; }
 | 
			
		||||
function msg_warn() { echo -e "${WARN} ${YWB}${1}"; }
 | 
			
		||||
 | 
			
		||||
# Check for root privileges
 | 
			
		||||
if [ "$(id -u)" -ne 0 ]; then
 | 
			
		||||
    msg_error "Error: This script must be run as root."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if ! command -v ethtool >/dev/null 2>&1; then
 | 
			
		||||
    msg_info "Installing ethtool"
 | 
			
		||||
    apt-get update &>/dev/null
 | 
			
		||||
    apt-get install -y ethtool &>/dev/null || { msg_error "Failed to install ethtool. Exiting."; exit 1; }
 | 
			
		||||
    msg_ok "ethtool installed successfully"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Get list of network interfaces using Intel e1000e driver
 | 
			
		||||
INTERFACES=()
 | 
			
		||||
COUNT=0
 | 
			
		||||
 | 
			
		||||
msg_info "Searching for Intel e1000e interfaces"
 | 
			
		||||
 | 
			
		||||
for device in /sys/class/net/*; do
 | 
			
		||||
    interface="$(basename "$device")"  # or adjust the rest of the usages below, as mostly you'll use the path anyway
 | 
			
		||||
    # Skip loopback interface and virtual interfaces
 | 
			
		||||
    if [[ "$interface" != "lo" ]] && [[ ! "$interface" =~ ^(tap|fwbr|veth|vmbr|bonding_masters) ]]; then
 | 
			
		||||
        # Check if the interface uses the e1000e driver
 | 
			
		||||
        driver=$(basename $(readlink -f /sys/class/net/$interface/device/driver 2>/dev/null) 2>/dev/null)
 | 
			
		||||
 | 
			
		||||
        if [[ "$driver" == "e1000e" ]]; then
 | 
			
		||||
            # Get MAC address for additional identification
 | 
			
		||||
            mac=$(cat /sys/class/net/$interface/address 2>/dev/null)
 | 
			
		||||
            INTERFACES+=("$interface" "Intel e1000e NIC ($mac)")
 | 
			
		||||
            ((COUNT++))
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Check if any Intel e1000e interfaces were found
 | 
			
		||||
if [ ${#INTERFACES[@]} -eq 0 ]; then
 | 
			
		||||
    whiptail --title "Error" --msgbox "No Intel e1000e network interfaces found!" 10 60
 | 
			
		||||
    msg_error "No Intel e1000e network interfaces found! Exiting."
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
msg_ok "Found ${BL}$COUNT${GN} Intel e1000e interfaces"
 | 
			
		||||
 | 
			
		||||
# Create a checklist for interface selection with all interfaces initially checked
 | 
			
		||||
INTERFACES_CHECKLIST=()
 | 
			
		||||
for ((i=0; i<${#INTERFACES[@]}; i+=2)); do
 | 
			
		||||
    INTERFACES_CHECKLIST+=("${INTERFACES[i]}" "${INTERFACES[i+1]}" "ON")
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Show interface selection checklist
 | 
			
		||||
SELECTED_INTERFACES=$(whiptail --backtitle "Intel e1000e NIC Offloading Disabler" --title "Network Interfaces" \
 | 
			
		||||
                    --separate-output --checklist "Select Intel e1000e network interfaces\n(Space to toggle, Enter to confirm):" 15 80 6 \
 | 
			
		||||
                    "${INTERFACES_CHECKLIST[@]}" 3>&1 1>&2 2>&3)
 | 
			
		||||
 | 
			
		||||
exitstatus=$?
 | 
			
		||||
if [ $exitstatus != 0 ]; then
 | 
			
		||||
    msg_info "User canceled. Exiting."
 | 
			
		||||
    exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Check if any interfaces were selected
 | 
			
		||||
if [ -z "$SELECTED_INTERFACES" ]; then
 | 
			
		||||
    msg_error "No interfaces selected. Exiting."
 | 
			
		||||
    exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Convert the selected interfaces into an array
 | 
			
		||||
readarray -t INTERFACE_ARRAY <<< "$SELECTED_INTERFACES"
 | 
			
		||||
 | 
			
		||||
# Show the number of selected interfaces
 | 
			
		||||
INTERFACE_COUNT=${#INTERFACE_ARRAY[@]}
 | 
			
		||||
 | 
			
		||||
# Print selected interfaces
 | 
			
		||||
for iface in "${INTERFACE_ARRAY[@]}"; do
 | 
			
		||||
    msg_ok "Selected interface: ${BL}$iface${CL}"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Ask for confirmation with the list of selected interfaces
 | 
			
		||||
CONFIRMATION_MSG="You have selected the following interface(s):\n\n"
 | 
			
		||||
for iface in "${INTERFACE_ARRAY[@]}"; do
 | 
			
		||||
    SPEED=$(cat /sys/class/net/$iface/speed 2>/dev/null)
 | 
			
		||||
    MAC=$(cat /sys/class/net/$iface/address 2>/dev/null)
 | 
			
		||||
    CONFIRMATION_MSG+="- $iface (MAC: $MAC, Speed: ${SPEED}Mbps)\n"
 | 
			
		||||
done
 | 
			
		||||
CONFIRMATION_MSG+="\nThis will create systemd service(s) to disable offloading features.\n\nProceed?"
 | 
			
		||||
 | 
			
		||||
if ! whiptail --backtitle "Intel e1000e NIC Offloading Disabler" --title "Confirmation" \
 | 
			
		||||
    --yesno "$CONFIRMATION_MSG" 20 80; then
 | 
			
		||||
    msg_info "User canceled. Exiting."
 | 
			
		||||
    exit 0
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Loop through all selected interfaces and create services for each
 | 
			
		||||
for SELECTED_INTERFACE in "${INTERFACE_ARRAY[@]}"; do
 | 
			
		||||
    # Create service name for this interface
 | 
			
		||||
    SERVICE_NAME="disable-nic-offload-$SELECTED_INTERFACE.service"
 | 
			
		||||
    SERVICE_PATH="/etc/systemd/system/$SERVICE_NAME"
 | 
			
		||||
 | 
			
		||||
    # Create the service file with e1000e specific optimizations
 | 
			
		||||
    msg_info "Creating systemd service for interface: ${BL}$SELECTED_INTERFACE${YW}"
 | 
			
		||||
 | 
			
		||||
    # Start with the common part of the service file
 | 
			
		||||
    cat > "$SERVICE_PATH" << EOF
 | 
			
		||||
[Unit]
 | 
			
		||||
Description=Disable NIC offloading for Intel e1000e interface $SELECTED_INTERFACE
 | 
			
		||||
After=network.target
 | 
			
		||||
 | 
			
		||||
[Service]
 | 
			
		||||
Type=oneshot
 | 
			
		||||
# Disable all offloading features for Intel e1000e
 | 
			
		||||
ExecStart=/sbin/ethtool -K $SELECTED_INTERFACE gso off gro off tso off tx off rx off rxvlan off txvlan off sg off
 | 
			
		||||
RemainAfterExit=true
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
    # Check if service file was created successfully
 | 
			
		||||
    if [ ! -f "$SERVICE_PATH" ]; then
 | 
			
		||||
        whiptail --title "Error" --msgbox "Failed to create service file for $SELECTED_INTERFACE!" 10 50
 | 
			
		||||
        msg_error "Failed to create service file for $SELECTED_INTERFACE! Skipping to next interface."
 | 
			
		||||
        continue
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Configure this service
 | 
			
		||||
    {
 | 
			
		||||
        echo "25"; sleep 0.2
 | 
			
		||||
        # Reload systemd to recognize the new service
 | 
			
		||||
        systemctl daemon-reload
 | 
			
		||||
        echo "50"; sleep 0.2
 | 
			
		||||
        # Start the service
 | 
			
		||||
        systemctl start "$SERVICE_NAME"
 | 
			
		||||
        echo "75"; sleep 0.2
 | 
			
		||||
        # Enable the service to start on boot
 | 
			
		||||
        systemctl enable "$SERVICE_NAME"
 | 
			
		||||
        echo "100"; sleep 0.2
 | 
			
		||||
    } | whiptail --backtitle "Intel e1000e NIC Offloading Disabler" --gauge "Configuring service for $SELECTED_INTERFACE..." 10 80 0
 | 
			
		||||
 | 
			
		||||
    # Individual service status
 | 
			
		||||
    if systemctl is-active --quiet "$SERVICE_NAME"; then
 | 
			
		||||
        SERVICE_STATUS="Active"
 | 
			
		||||
    else
 | 
			
		||||
        SERVICE_STATUS="Inactive"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if systemctl is-enabled --quiet "$SERVICE_NAME"; then
 | 
			
		||||
        BOOT_STATUS="Enabled"
 | 
			
		||||
    else
 | 
			
		||||
        BOOT_STATUS="Disabled"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Show individual service results
 | 
			
		||||
    msg_ok "Service for ${BL}$SELECTED_INTERFACE${GN} created and enabled!"
 | 
			
		||||
    msg_info "${TAB}Service: ${BL}$SERVICE_NAME${YW}"
 | 
			
		||||
    msg_info "${TAB}Status: ${BL}$SERVICE_STATUS${YW}"
 | 
			
		||||
    msg_info "${TAB}Start on boot: ${BL}$BOOT_STATUS${YW}"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Prepare summary of all interfaces
 | 
			
		||||
SUMMARY_MSG="Services created successfully!\n\n"
 | 
			
		||||
SUMMARY_MSG+="Configured Interfaces:\n"
 | 
			
		||||
 | 
			
		||||
for iface in "${INTERFACE_ARRAY[@]}"; do
 | 
			
		||||
    SERVICE_NAME="disable-nic-offload-$iface.service"
 | 
			
		||||
    if systemctl is-active --quiet "$SERVICE_NAME"; then
 | 
			
		||||
        SVC_STATUS="Active"
 | 
			
		||||
    else
 | 
			
		||||
        SVC_STATUS="Inactive"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if systemctl is-enabled --quiet "$SERVICE_NAME"; then
 | 
			
		||||
        BOOT_SVC_STATUS="Enabled"
 | 
			
		||||
    else
 | 
			
		||||
        BOOT_SVC_STATUS="Disabled"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    SUMMARY_MSG+="- $iface: $SVC_STATUS, Boot: $BOOT_SVC_STATUS\n"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# Show summary results
 | 
			
		||||
whiptail --backtitle "Intel e1000e NIC Offloading Disabler" --title "Success" --msgbox "$SUMMARY_MSG" 20 80
 | 
			
		||||
 | 
			
		||||
msg_ok "Intel e1000e optimization complete for ${#INTERFACE_ARRAY[@]} interface(s)!"
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
@@ -57,6 +57,7 @@ MACADDRESS="${TAB}🔗${TAB}${CL}"
 | 
			
		||||
VLANTAG="${TAB}🏷️${TAB}${CL}"
 | 
			
		||||
CREATING="${TAB}🚀${TAB}${CL}"
 | 
			
		||||
ADVANCED="${TAB}🧩${TAB}${CL}"
 | 
			
		||||
CLOUD="${TAB}☁️${TAB}${CL}"
 | 
			
		||||
 | 
			
		||||
THIN="discard=on,ssd=1,"
 | 
			
		||||
set -e
 | 
			
		||||
@@ -191,6 +192,7 @@ function default_settings() {
 | 
			
		||||
  VLAN=""
 | 
			
		||||
  MTU=""
 | 
			
		||||
  START_VM="yes"
 | 
			
		||||
  CLOUD_INIT="no"
 | 
			
		||||
  METHOD="default"
 | 
			
		||||
  echo -e "${CONTAINERID}${BOLD}${DGN}Virtual Machine ID: ${BGN}${VMID}${CL}"
 | 
			
		||||
  echo -e "${CONTAINERTYPE}${BOLD}${DGN}Machine Type: ${BGN}i440fx${CL}"
 | 
			
		||||
@@ -204,6 +206,7 @@ function default_settings() {
 | 
			
		||||
  echo -e "${MACADDRESS}${BOLD}${DGN}MAC Address: ${BGN}${MAC}${CL}"
 | 
			
		||||
  echo -e "${VLANTAG}${BOLD}${DGN}VLAN: ${BGN}Default${CL}"
 | 
			
		||||
  echo -e "${DEFAULT}${BOLD}${DGN}Interface MTU Size: ${BGN}Default${CL}"
 | 
			
		||||
  echo -e "${CLOUD}${BOLD}${DGN}Configure Cloud-init: ${BGN}no${CL}"
 | 
			
		||||
  echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
 | 
			
		||||
  echo -e "${CREATING}${BOLD}${DGN}Creating a Debian 12 VM using the above default settings${CL}"
 | 
			
		||||
}
 | 
			
		||||
@@ -373,6 +376,14 @@ function advanced_settings() {
 | 
			
		||||
    exit-script
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "CLOUD-INIT" --yesno "Configure the VM with Cloud-init?" --defaultno 10 58); then
 | 
			
		||||
    echo -e "${CLOUD}${BOLD}${DGN}Configure Cloud-init: ${BGN}yes${CL}"
 | 
			
		||||
    CLOUD_INIT="yes"
 | 
			
		||||
  else
 | 
			
		||||
    echo -e "${CLOUD}${BOLD}${DGN}Configure Cloud-init: ${BGN}no${CL}"
 | 
			
		||||
    CLOUD_INIT="no"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if (whiptail --backtitle "Proxmox VE Helper Scripts" --title "START VIRTUAL MACHINE" --yesno "Start VM when completed?" 10 58); then
 | 
			
		||||
    echo -e "${GATEWAY}${BOLD}${DGN}Start VM when completed: ${BGN}yes${CL}"
 | 
			
		||||
    START_VM="yes"
 | 
			
		||||
@@ -439,7 +450,11 @@ fi
 | 
			
		||||
msg_ok "Using ${CL}${BL}$STORAGE${CL} ${GN}for Storage Location."
 | 
			
		||||
msg_ok "Virtual Machine ID is ${CL}${BL}$VMID${CL}."
 | 
			
		||||
msg_info "Retrieving the URL for the Debian 12 Qcow2 Disk Image"
 | 
			
		||||
URL=https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-amd64.qcow2
 | 
			
		||||
if [ "$CLOUD_INIT" == "yes" ]; then
 | 
			
		||||
  URL=https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2
 | 
			
		||||
else
 | 
			
		||||
  URL=https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-amd64.qcow2
 | 
			
		||||
fi
 | 
			
		||||
sleep 2
 | 
			
		||||
msg_ok "${CL}${BL}${URL}${CL}"
 | 
			
		||||
curl -f#SL -o "$(basename "$URL")" "$URL"
 | 
			
		||||
@@ -474,11 +489,20 @@ qm create $VMID -agent 1${MACHINE} -tablet 0 -localtime 1 -bios ovmf${CPU_TYPE}
 | 
			
		||||
  -name $HN -tags community-script -net0 virtio,bridge=$BRG,macaddr=$MAC$VLAN$MTU -onboot 1 -ostype l26 -scsihw virtio-scsi-pci
 | 
			
		||||
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
 | 
			
		||||
qm importdisk $VMID ${FILE} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
 | 
			
		||||
qm set $VMID \
 | 
			
		||||
  -efidisk0 ${DISK0_REF}${FORMAT} \
 | 
			
		||||
  -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=${DISK_SIZE} \
 | 
			
		||||
  -boot order=scsi0 \
 | 
			
		||||
  -serial0 socket >/dev/null
 | 
			
		||||
if [ "$CLOUD_INIT" == "yes" ]; then
 | 
			
		||||
  qm set $VMID \
 | 
			
		||||
    -efidisk0 ${DISK0_REF}${FORMAT} \
 | 
			
		||||
    -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=${DISK_SIZE} \
 | 
			
		||||
    -scsi1 ${STORAGE}:cloudinit \
 | 
			
		||||
    -boot order=scsi0 \
 | 
			
		||||
    -serial0 socket >/dev/null
 | 
			
		||||
else
 | 
			
		||||
  qm set $VMID \
 | 
			
		||||
    -efidisk0 ${DISK0_REF}${FORMAT} \
 | 
			
		||||
    -scsi0 ${DISK1_REF},${DISK_CACHE}${THIN}size=${DISK_SIZE} \
 | 
			
		||||
    -boot order=scsi0 \
 | 
			
		||||
    -serial0 socket >/dev/null
 | 
			
		||||
fi
 | 
			
		||||
DESCRIPTION=$(
 | 
			
		||||
  cat <<EOF
 | 
			
		||||
<div align='center'>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user