mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 02:12:49 +00:00 
			
		
		
		
	Compare commits
	
		
			173 Commits
		
	
	
		
			2025-02-06
			...
			2025-02-12
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					3b905f29ef | ||
| 
						 | 
					f2512b032f | ||
| 
						 | 
					29d3073539 | ||
| 
						 | 
					2a91a5d2e9 | ||
| 
						 | 
					2492497417 | ||
| 
						 | 
					dc3a0eca69 | ||
| 
						 | 
					d5714eb749 | ||
| 
						 | 
					bd90b30300 | ||
| 
						 | 
					5946079f47 | ||
| 
						 | 
					72b546e945 | ||
| 
						 | 
					65f8495a12 | ||
| 
						 | 
					ab64e7e013 | ||
| 
						 | 
					80053c1cc3 | ||
| 
						 | 
					067c962baf | ||
| 
						 | 
					e5c6953e98 | ||
| 
						 | 
					03d8d095cc | ||
| 
						 | 
					22f44d117a | ||
| 
						 | 
					417d4089d7 | ||
| 
						 | 
					c892401218 | ||
| 
						 | 
					3483ea7025 | ||
| 
						 | 
					9ec1b651cd | ||
| 
						 | 
					f06b37f180 | ||
| 
						 | 
					ca01015586 | ||
| 
						 | 
					362b5cd031 | ||
| 
						 | 
					64e9eac80f | ||
| 
						 | 
					e4c2485823 | ||
| 
						 | 
					a5f77f23e9 | ||
| 
						 | 
					0f7ff181df | ||
| 
						 | 
					1788551393 | ||
| 
						 | 
					1c9d23713d | ||
| 
						 | 
					3f779e14fa | ||
| 
						 | 
					58eff8c4cb | ||
| 
						 | 
					6c495bcafc | ||
| 
						 | 
					6de6b1542c | ||
| 
						 | 
					62425bc514 | ||
| 
						 | 
					8cf1c2969b | ||
| 
						 | 
					5d56822d1b | ||
| 
						 | 
					c014bc200e | ||
| 
						 | 
					56de05a392 | ||
| 
						 | 
					76ca5181ae | ||
| 
						 | 
					8181518c24 | ||
| 
						 | 
					ba636ed25d | ||
| 
						 | 
					e797cba504 | ||
| 
						 | 
					ecc294953b | ||
| 
						 | 
					e9d8b30de0 | ||
| 
						 | 
					4a42012906 | ||
| 
						 | 
					37016259e1 | ||
| 
						 | 
					bf5fc97e1a | ||
| 
						 | 
					1c89ef3f12 | ||
| 
						 | 
					b2d022edff | ||
| 
						 | 
					a5a143111c | ||
| 
						 | 
					9338fdeebf | ||
| 
						 | 
					6a486d4d73 | ||
| 
						 | 
					e55db3cb75 | ||
| 
						 | 
					b39078af7e | ||
| 
						 | 
					8e8e631d22 | ||
| 
						 | 
					a34da2459d | ||
| 
						 | 
					81a64c2cff | ||
| 
						 | 
					414a6617f8 | ||
| 
						 | 
					4af819f449 | ||
| 
						 | 
					229016ca10 | ||
| 
						 | 
					51f3f97967 | ||
| 
						 | 
					c548c3bd88 | ||
| 
						 | 
					0877e6a2f2 | ||
| 
						 | 
					133aa1a1f2 | ||
| 
						 | 
					c32e71cae3 | ||
| 
						 | 
					a71bdb6f06 | ||
| 
						 | 
					f6bc82e77a | ||
| 
						 | 
					5736b6aa5c | ||
| 
						 | 
					c30b080e44 | ||
| 
						 | 
					61567a66b0 | ||
| 
						 | 
					e23137eb63 | ||
| 
						 | 
					8acf81b937 | ||
| 
						 | 
					f1683ad39f | ||
| 
						 | 
					33ee969d91 | ||
| 
						 | 
					f03471133e | ||
| 
						 | 
					cdbabcac89 | ||
| 
						 | 
					0122e70b1d | ||
| 
						 | 
					a4037c151e | ||
| 
						 | 
					5d58d6d14f | ||
| 
						 | 
					8a1446ac4e | ||
| 
						 | 
					1ce3929d66 | ||
| 
						 | 
					dd62089b61 | ||
| 
						 | 
					8cda7e4dd8 | ||
| 
						 | 
					bc3abdfe91 | ||
| 
						 | 
					e793dfff3a | ||
| 
						 | 
					12ec0b46bc | ||
| 
						 | 
					55fa65e168 | ||
| 
						 | 
					6de6216bc6 | ||
| 
						 | 
					1bca424acf | ||
| 
						 | 
					a51e688388 | ||
| 
						 | 
					c40fc2b159 | ||
| 
						 | 
					d859646dac | ||
| 
						 | 
					a0e0f28c66 | ||
| 
						 | 
					8595675531 | ||
| 
						 | 
					70435b9e5a | ||
| 
						 | 
					1731f5274b | ||
| 
						 | 
					6a775f6026 | ||
| 
						 | 
					0b3e63bd3f | ||
| 
						 | 
					514ff1fbe7 | ||
| 
						 | 
					85bf9f319b | ||
| 
						 | 
					dff4e735f0 | ||
| 
						 | 
					b81b9c574b | ||
| 
						 | 
					f82eb87476 | ||
| 
						 | 
					d47bd677da | ||
| 
						 | 
					2c32b7fa94 | ||
| 
						 | 
					4d996c95e0 | ||
| 
						 | 
					90473b7b10 | ||
| 
						 | 
					e4f756ce73 | ||
| 
						 | 
					10159e934f | ||
| 
						 | 
					865e6fd3d7 | ||
| 
						 | 
					a1dd57ded6 | ||
| 
						 | 
					1c808b95a8 | ||
| 
						 | 
					0c024515f1 | ||
| 
						 | 
					4c7d82f4eb | ||
| 
						 | 
					e4ee00b403 | ||
| 
						 | 
					d380fdd0ea | ||
| 
						 | 
					9756ac639b | ||
| 
						 | 
					7105f67145 | ||
| 
						 | 
					35547c4316 | ||
| 
						 | 
					ccc71a7225 | ||
| 
						 | 
					c5101d3358 | ||
| 
						 | 
					5bbf197a8d | ||
| 
						 | 
					70b5c62c9f | ||
| 
						 | 
					33ef8aadbe | ||
| 
						 | 
					e989bbba29 | ||
| 
						 | 
					3f35900914 | ||
| 
						 | 
					e5f738b567 | ||
| 
						 | 
					6fc357ecd0 | ||
| 
						 | 
					758659a91e | ||
| 
						 | 
					b05858c6e9 | ||
| 
						 | 
					a481e89cad | ||
| 
						 | 
					b9094e306e | ||
| 
						 | 
					31c8617258 | ||
| 
						 | 
					f94d727af7 | ||
| 
						 | 
					054829c4d5 | ||
| 
						 | 
					d20c92bd4f | ||
| 
						 | 
					64b9fa090a | ||
| 
						 | 
					5abc84b776 | ||
| 
						 | 
					2b0666bcf8 | ||
| 
						 | 
					2ef6ac2fe4 | ||
| 
						 | 
					4bb887a390 | ||
| 
						 | 
					8fd8ca2c50 | ||
| 
						 | 
					f69d5b5831 | ||
| 
						 | 
					fead4b76f8 | ||
| 
						 | 
					800c1065b9 | ||
| 
						 | 
					782e0a8535 | ||
| 
						 | 
					5863d81571 | ||
| 
						 | 
					c15e34143f | ||
| 
						 | 
					57c3a42a6e | ||
| 
						 | 
					7c13a7bce0 | ||
| 
						 | 
					9c23b55bc0 | ||
| 
						 | 
					5c0811c5ba | ||
| 
						 | 
					6bc92a0feb | ||
| 
						 | 
					9f5f5f54a0 | ||
| 
						 | 
					047ef8e669 | ||
| 
						 | 
					be572755a9 | ||
| 
						 | 
					393e1c6481 | ||
| 
						 | 
					539696e84a | ||
| 
						 | 
					6ecfc10b8c | ||
| 
						 | 
					1c7bab33e6 | ||
| 
						 | 
					b0cdb308bd | ||
| 
						 | 
					9d61a37945 | ||
| 
						 | 
					c4bd38cb9e | ||
| 
						 | 
					2f37355d77 | ||
| 
						 | 
					59a132fd6b | ||
| 
						 | 
					9c3bd7dc20 | ||
| 
						 | 
					d73d312882 | ||
| 
						 | 
					3361fabfc4 | ||
| 
						 | 
					030682c754 | ||
| 
						 | 
					3029e69767 | ||
| 
						 | 
					7dcc717017 | ||
| 
						 | 
					9825506ab7 | 
							
								
								
									
										10
									
								
								.github/CONTRIBUTOR_GUIDE/ct/AppName.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/CONTRIBUTOR_GUIDE/ct/AppName.md
									
									
									
									
										vendored
									
									
								
							@@ -171,7 +171,7 @@ if [[ ! -d /opt/snipe-it ]]; then
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### 3.3 **Check version**
 | 
					### 3.3 **Check version**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Befoer updating, check if a new version exists.
 | 
					- Before updating, check if a new version exists.
 | 
				
			||||||
  - We use the `${APPLICATION}_version.txt` file created in `/opt` during the install to compare new versions against the currently installed version.
 | 
					  - We use the `${APPLICATION}_version.txt` file created in `/opt` during the install to compare new versions against the currently installed version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Example with a Github Release:
 | 
					Example with a Github Release:
 | 
				
			||||||
@@ -241,7 +241,7 @@ Example:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### 3.7 **No update function**
 | 
					### 3.7 **No update function**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- In case you can not provide a update function use the following code to provide user feedback.
 | 
					- In case you can not provide an update function use the following code to provide user feedback.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```bash
 | 
					```bash
 | 
				
			||||||
function update_script() {
 | 
					function update_script() {
 | 
				
			||||||
@@ -252,7 +252,7 @@ function update_script() {
 | 
				
			|||||||
        msg_error "No ${APP} Installation Found!"
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					        exit
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    msg_error "Ther is currently no automatic update function for ${APP}."
 | 
					    msg_error "There is currently no automatic update function for ${APP}."
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
@@ -286,6 +286,6 @@ echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
				
			|||||||
- [ ] Metadata (author, license) is included at the top.
 | 
					- [ ] Metadata (author, license) is included at the top.
 | 
				
			||||||
- [ ] Variables follow naming conventions.
 | 
					- [ ] Variables follow naming conventions.
 | 
				
			||||||
- [ ] Update function exists.
 | 
					- [ ] Update function exists.
 | 
				
			||||||
- [ ] Update functions checks if app is installed an for new version.
 | 
					- [ ] Update functions checks if app is installed and for new version.
 | 
				
			||||||
- [ ] Update function up temporary files.
 | 
					- [ ] Update function cleans up temporary files.
 | 
				
			||||||
- [ ] Script ends with a helpful message for the user to reach the application.
 | 
					- [ ] Script ends with a helpful message for the user to reach the application.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/CONTRIBUTOR_GUIDE/ct/AppName.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/CONTRIBUTOR_GUIDE/ct/AppName.sh
									
									
									
									
										vendored
									
									
								
							@@ -46,8 +46,6 @@ function update_script() {
 | 
				
			|||||||
    # Crawling the new version and checking whether an update is required
 | 
					    # Crawling the new version and checking whether an update is required
 | 
				
			||||||
    RELEASE=$(curl -fsSL [RELEASE_URL] | [PARSE_RELEASE_COMMAND])
 | 
					    RELEASE=$(curl -fsSL [RELEASE_URL] | [PARSE_RELEASE_COMMAND])
 | 
				
			||||||
    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
					    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
				
			||||||
        msg_info "Updating $APP"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Stopping Services
 | 
					        # Stopping Services
 | 
				
			||||||
        msg_info "Stopping $APP"
 | 
					        msg_info "Stopping $APP"
 | 
				
			||||||
        systemctl stop [SERVICE_NAME]
 | 
					        systemctl stop [SERVICE_NAME]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,7 +80,4 @@ msg_info "Cleaning up"
 | 
				
			|||||||
rm -f ${RELEASE}.zip
 | 
					rm -f ${RELEASE}.zip
 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 | 
					 | 
				
			||||||
motd_ssh
 | 
					 | 
				
			||||||
customize
 | 
					 | 
				
			||||||
							
								
								
									
										2
									
								
								.github/CONTRIBUTOR_GUIDE/json/AppName.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/CONTRIBUTOR_GUIDE/json/AppName.json
									
									
									
									
										vendored
									
									
								
							@@ -12,7 +12,7 @@
 | 
				
			|||||||
    "documentation": null,
 | 
					    "documentation": null,
 | 
				
			||||||
    "website": "LINK TO WEBSITE",
 | 
					    "website": "LINK TO WEBSITE",
 | 
				
			||||||
    "logo": "LINK TO LOGO",
 | 
					    "logo": "LINK TO LOGO",
 | 
				
			||||||
    "description": "Deescription of the app",
 | 
					    "description": "Description of the app",
 | 
				
			||||||
    "install_methods": [
 | 
					    "install_methods": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "type": "default",
 | 
					            "type": "default",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,8 +30,6 @@ body:
 | 
				
			|||||||
        required: true
 | 
					        required: true
 | 
				
			||||||
      - label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests."
 | 
					      - label: "I have searched existing [discussions](https://github.com/community-scripts/ProxmoxVE/discussions?discussions_q=) and found no duplicate requests."
 | 
				
			||||||
        required: true
 | 
					        required: true
 | 
				
			||||||
      - label: "This is not a game-related request."
 | 
					 | 
				
			||||||
        required: true
 | 
					 | 
				
			||||||
- type: markdown
 | 
					- type: markdown
 | 
				
			||||||
  attributes:
 | 
					  attributes:
 | 
				
			||||||
    value: "Thanks for submitting your request! The team will review it and reach out if we need more information."
 | 
					    value: "Thanks for submitting your request! The team will review it and reach out if we need more information."
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										11
									
								
								.github/autolabeler-config.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/autolabeler-config.json
									
									
									
									
										vendored
									
									
								
							@@ -23,7 +23,7 @@
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      "fileStatus": "modified",
 | 
					      "fileStatus": "modified",
 | 
				
			||||||
      "includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
 | 
					      "includeGlobs": ["ct/**", "install/**", "misc/**", "turnkey/**", "vm/**"],
 | 
				
			||||||
      "excludeGlobs": ["misc/build.func", "misc/install.func"]
 | 
					      "excludeGlobs": ["misc/build.func", "misc/install.func", "misc/api.func"]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "delete script": [
 | 
					  "delete script": [
 | 
				
			||||||
@@ -51,13 +51,20 @@
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      "fileStatus": null,
 | 
					      "fileStatus": null,
 | 
				
			||||||
      "includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh"],
 | 
					      "includeGlobs": ["*.md", ".github/**", "misc/*.func", "ct/create_lxc.sh"],
 | 
				
			||||||
 | 
					      "excludeGlobs": ["misc/api.func"]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					   "api": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "fileStatus": null,
 | 
				
			||||||
 | 
					      "includeGlobs": ["api/**", "misc/api.func"],
 | 
				
			||||||
      "excludeGlobs": []
 | 
					      "excludeGlobs": []
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "high risk": [
 | 
					  "high risk": [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      "fileStatus": null,
 | 
					      "fileStatus": null,
 | 
				
			||||||
      "includeGlobs": ["misc/build.func", "misc/install.func"],
 | 
					      "includeGlobs": ["misc/build.func", "misc/install.func", "ct/create_lxc.sh"],
 | 
				
			||||||
      "excludeGlobs": []
 | 
					      "excludeGlobs": []
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										60
									
								
								.github/changelog-pr-config.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								.github/changelog-pr-config.json
									
									
									
									
										vendored
									
									
								
							@@ -1,30 +1,34 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
    {
 | 
					  {
 | 
				
			||||||
        "title": "💥 Breaking Changes",
 | 
					      "title": "💥 Breaking Changes",
 | 
				
			||||||
        "labels": ["breaking change"]
 | 
					      "labels": ["breaking change"]
 | 
				
			||||||
    },
 | 
					  },
 | 
				
			||||||
    {
 | 
					  {
 | 
				
			||||||
        "title": "✨ New Scripts",
 | 
					      "title": "✨ New Scripts",
 | 
				
			||||||
        "labels": ["new script"]
 | 
					      "labels": ["new script"]
 | 
				
			||||||
    },
 | 
					  },
 | 
				
			||||||
    {
 | 
					  {
 | 
				
			||||||
        "title": "🚀 Updated Scripts",
 | 
					      "title": "🚀 Updated Scripts",
 | 
				
			||||||
        "labels": ["update script"]
 | 
					      "labels": ["update script"]
 | 
				
			||||||
    },
 | 
					  },
 | 
				
			||||||
    {
 | 
					  {
 | 
				
			||||||
        "title": "🌐 Website",
 | 
					      "title": "🌐 Website",
 | 
				
			||||||
        "labels": ["website"]
 | 
					      "labels": ["website"]
 | 
				
			||||||
    },
 | 
					  },
 | 
				
			||||||
    {
 | 
					  {
 | 
				
			||||||
        "title": "🐞 Bug Fixes",
 | 
					      "title": "🐞 Bug Fixes",
 | 
				
			||||||
        "labels": ["bug fix"]
 | 
					      "labels": ["bug fix"]
 | 
				
			||||||
    },
 | 
					  },
 | 
				
			||||||
    {
 | 
					  {
 | 
				
			||||||
        "title": "🧰 Maintenance",
 | 
					      "title": "🧰 Maintenance",
 | 
				
			||||||
        "labels": ["maintenance"]
 | 
					      "labels": ["maintenance"]
 | 
				
			||||||
    },
 | 
					  },
 | 
				
			||||||
    {
 | 
					  {
 | 
				
			||||||
        "title": "❔ Unlabelled",
 | 
					      "title": "📡 API",
 | 
				
			||||||
        "labels": []
 | 
					      "labels": ["api"]
 | 
				
			||||||
    }
 | 
					  },
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					      "title": "❔ Unlabelled",
 | 
				
			||||||
 | 
					      "labels": []
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								.github/pull_request_template.md
									
									
									
									
										vendored
									
									
								
							@@ -1,28 +1,25 @@
 | 
				
			|||||||
## ✍️ Description
 | 
					## ✍️ Description  
 | 
				
			||||||
 | 
					<!-- Provide a clear and concise description of your changes. -->  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
					## 🔗 Related PR / Discussion / Issue  
 | 
				
			||||||
 | 
					Link: #
 | 
				
			||||||
- - -
 | 
					 | 
				
			||||||
- Related Issue: #
 | 
					 | 
				
			||||||
- Related PR: #
 | 
					 | 
				
			||||||
- Related Discussion: #
 | 
					 | 
				
			||||||
- - - 
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## ✅ Prerequisites
 | 
					 | 
				
			||||||
The following steps must be completed for the pull request to be considered:  
 | 
					 | 
				
			||||||
- [] Self-review performed (I have reviewed my code to ensure it follows established patterns and conventions.)  
 | 
					 | 
				
			||||||
- [] Testing performed (I have thoroughly tested my changes and verified expected functionality.)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 🛠️ Type of Change
 | 
					## ✅ Prerequisites  
 | 
				
			||||||
Please check the relevant options:  
 | 
					Before this PR can be reviewed, the following must be completed:  
 | 
				
			||||||
- [] Bug fix (non-breaking change that resolves an issue)  
 | 
					- [] **Self-review performed** – Code follows established patterns and conventions.  
 | 
				
			||||||
- [] New feature (non-breaking change that adds functionality)  
 | 
					- [] **Testing performed** – Changes have been thoroughly tested and verified.  
 | 
				
			||||||
- [] Breaking change (fix or feature that would cause existing functionality to change unexpectedly)  
 | 
					 | 
				
			||||||
- [] New script (a fully functional and thoroughly tested script or set of scripts)  
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
---
 | 
					 | 
				
			||||||
## 📋 Additional Information (optional)
 | 
					 | 
				
			||||||
Provide any extra context or screenshots about the feature or fix here.  
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 🛠️ Type of Change  
 | 
				
			||||||
 | 
					Select all that apply:  
 | 
				
			||||||
 | 
					- [] 🐞 **Bug fix** – Resolves an issue without breaking functionality.  
 | 
				
			||||||
 | 
					- [] ✨ **New feature** – Adds new, non-breaking functionality.  
 | 
				
			||||||
 | 
					- [] 💥 **Breaking change** – Alters existing functionality in a way that may require updates.  
 | 
				
			||||||
 | 
					- [] 🆕 **New script** – A fully functional and tested script or script set.  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 📋 Additional Information (optional)  
 | 
				
			||||||
 | 
					<!-- Provide extra context, screenshots, or references if needed. -->  
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,13 @@ jobs:
 | 
				
			|||||||
      pull-requests: write
 | 
					      pull-requests: write
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
 | 
					      - name: Generate a token
 | 
				
			||||||
 | 
					        id: generate-token
 | 
				
			||||||
 | 
					        uses: actions/create-github-app-token@v1
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          app-id: ${{ vars.APP_ID }}
 | 
				
			||||||
 | 
					          private-key: ${{ secrets.APP_PRIVATE_KEY }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Step 1: Checkout repository
 | 
					      # Step 1: Checkout repository
 | 
				
			||||||
      - name: Checkout repository
 | 
					      - name: Checkout repository
 | 
				
			||||||
        uses: actions/checkout@v2
 | 
					        uses: actions/checkout@v2
 | 
				
			||||||
@@ -71,7 +78,7 @@ jobs:
 | 
				
			|||||||
                       --base main \
 | 
					                       --base main \
 | 
				
			||||||
                       --label "automated pr"
 | 
					                       --label "automated pr"
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
					          GH_TOKEN: ${{ steps.generate-token.outputs.token }}
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      - name: Approve pull request
 | 
					      - name: Approve pull request
 | 
				
			||||||
        if: env.changed == 'true'
 | 
					        if: env.changed == 'true'
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										50
									
								
								.github/workflows/changelog-pr.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										50
									
								
								.github/workflows/changelog-pr.yml
									
									
									
									
										vendored
									
									
								
							@@ -30,15 +30,15 @@ jobs:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      - name: Get latest dates in changelog
 | 
					      - name: Get latest dates in changelog
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          # Extract the latest and second latest dates from changelog
 | 
					          # Extrahiere die neuesten zwei Daten aus dem Changelog
 | 
				
			||||||
          DATES=$(grep '^## [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}' CHANGELOG.md | head -n 2 | awk '{print $2}')
 | 
					          DATES=$(grep -E '^## [0-9]{4}-[0-9]{2}-[0-9]{2}' CHANGELOG.md | head -n 2 | awk '{print $2}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          LATEST_DATE=$(echo "$DATES" | sed -n '1p')
 | 
					          LATEST_DATE=$(echo "$DATES" | sed -n '1p')
 | 
				
			||||||
          SECOND_LATEST_DATE=$(echo "$DATES" | sed -n '2p')
 | 
					          SECOND_LATEST_DATE=$(echo "$DATES" | sed -n '2p')
 | 
				
			||||||
          TODAY=$(date -u +%Y-%m-%d)
 | 
					          TODAY=$(date -u +%Y-%m-%d)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          echo "TODAY=$TODAY" >> $GITHUB_ENV
 | 
					          echo "TODAY=$TODAY" >> $GITHUB_ENV
 | 
				
			||||||
          if [ "$LATEST_DATE" == "$TODAY" ]; then
 | 
					          if [[ "$LATEST_DATE" == "$TODAY" ]]; then
 | 
				
			||||||
            echo "LATEST_DATE=$SECOND_LATEST_DATE" >> $GITHUB_ENV
 | 
					            echo "LATEST_DATE=$SECOND_LATEST_DATE" >> $GITHUB_ENV
 | 
				
			||||||
          else
 | 
					          else
 | 
				
			||||||
            echo "LATEST_DATE=$LATEST_DATE" >> $GITHUB_ENV
 | 
					            echo "LATEST_DATE=$LATEST_DATE" >> $GITHUB_ENV
 | 
				
			||||||
@@ -55,10 +55,10 @@ jobs:
 | 
				
			|||||||
            const configPath = path.resolve(process.env.CONFIG_PATH);
 | 
					            const configPath = path.resolve(process.env.CONFIG_PATH);
 | 
				
			||||||
            const fileContent = await fs.readFile(configPath, 'utf-8');
 | 
					            const fileContent = await fs.readFile(configPath, 'utf-8');
 | 
				
			||||||
            const changelogConfig = JSON.parse(fileContent);
 | 
					            const changelogConfig = JSON.parse(fileContent);
 | 
				
			||||||
            const categorizedPRs = changelogConfig.map((obj) => ({ ...obj, notes: [] }));
 | 
					            const categorizedPRs = changelogConfig.map(obj => ({ ...obj, notes: [] }));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const latestDateInChangelog = new Date(process.env.LATEST_DATE);
 | 
					            const latestDateInChangelog = new Date(process.env.LATEST_DATE);
 | 
				
			||||||
            latestDateInChangelog.setUTCHours(23,59,59,999);
 | 
					            latestDateInChangelog.setUTCHours(23, 59, 59, 999);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const { data: pulls } = await github.rest.pulls.list({
 | 
					            const { data: pulls } = await github.rest.pulls.list({
 | 
				
			||||||
              owner: context.repo.owner,
 | 
					              owner: context.repo.owner,
 | 
				
			||||||
@@ -70,18 +70,16 @@ jobs:
 | 
				
			|||||||
              per_page: 100,
 | 
					              per_page: 100,
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            pulls.filter((pr) => 
 | 
					            pulls.filter(pr => 
 | 
				
			||||||
              pr.merged_at && 
 | 
					              pr.merged_at && 
 | 
				
			||||||
              new Date(pr.merged_at) > latestDateInChangelog && 
 | 
					              new Date(pr.merged_at) > latestDateInChangelog && 
 | 
				
			||||||
              !pr.labels.some((label) => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
 | 
					              !pr.labels.some(label => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
 | 
				
			||||||
            ).forEach((pr) => {
 | 
					            ).forEach(pr => {
 | 
				
			||||||
              const prLabels = pr.labels.map((label) => label.name.toLowerCase());
 | 
					              const prLabels = pr.labels.map(label => label.name.toLowerCase());
 | 
				
			||||||
              const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
 | 
					              const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              for (const { labels, notes } of categorizedPRs) {
 | 
					              for (const { labels, notes } of categorizedPRs) {
 | 
				
			||||||
                const prHasCategoryLabel = labels.some((label) => prLabels.includes(label));
 | 
					                if (labels.length === 0 || labels.some(label => prLabels.includes(label))) {
 | 
				
			||||||
                const isUnlabelledCategory = labels.length === 0;
 | 
					 | 
				
			||||||
                if (prHasCategoryLabel || isUnlabelledCategory) {
 | 
					 | 
				
			||||||
                  notes.push(prNote);
 | 
					                  notes.push(prNote);
 | 
				
			||||||
                  break;
 | 
					                  break;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -102,7 +100,7 @@ jobs:
 | 
				
			|||||||
            const changelogPath = path.resolve('CHANGELOG.md');
 | 
					            const changelogPath = path.resolve('CHANGELOG.md');
 | 
				
			||||||
            const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
 | 
					            const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            let newReleaseNotes = `## ${today}\n\n### Changed\n\n`;
 | 
					            let newReleaseNotes = `## ${today}\n\n### Changes\n\n`;
 | 
				
			||||||
            for (const { title, notes } of categorizedPRs) {
 | 
					            for (const { title, notes } of categorizedPRs) {
 | 
				
			||||||
              if (notes.length > 0) {
 | 
					              if (notes.length > 0) {
 | 
				
			||||||
                newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
 | 
					                newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
 | 
				
			||||||
@@ -112,21 +110,21 @@ jobs:
 | 
				
			|||||||
            const changelogContent = await fs.readFile(changelogPath, 'utf-8');
 | 
					            const changelogContent = await fs.readFile(changelogPath, 'utf-8');
 | 
				
			||||||
            const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
 | 
					            const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Replace todays release notes or insert release notes above previous release notes
 | 
					            // Ersetze oder füge Release Notes ein
 | 
				
			||||||
            const regex = changelogIncludesTodaysReleaseNotes ? 
 | 
					            const regex = changelogIncludesTodaysReleaseNotes 
 | 
				
			||||||
              new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs") :
 | 
					              ? new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs") 
 | 
				
			||||||
              new RegExp(`(?=## ${latestDateInChangelog})`, "gs");
 | 
					              : new RegExp(`(?=## ${latestDateInChangelog})`, "gs");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const newChangelogContent = changelogContent.replace(regex, newReleaseNotes)
 | 
					            const newChangelogContent = changelogContent.replace(regex, newReleaseNotes);
 | 
				
			||||||
            await fs.writeFile(changelogPath, newChangelogContent);
 | 
					            await fs.writeFile(changelogPath, newChangelogContent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Check if there are any changes
 | 
					      - name: Check for changes
 | 
				
			||||||
        id: verify-diff
 | 
					        id: verify-diff
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          git diff --quiet . || echo "changed=true" >> $GITHUB_OUTPUT
 | 
					          git diff --quiet . || echo "changed=true" >> $GITHUB_ENV
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Commit and push changes to separate branch
 | 
					      - name: Commit and push changes
 | 
				
			||||||
        if: steps.verify-diff.outputs.changed == 'true'
 | 
					        if: env.changed == 'true'
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
          git config --global user.name "github-actions[bot]"
 | 
					          git config --global user.name "github-actions[bot]"
 | 
				
			||||||
          git config --global user.email "github-actions[bot]@users.noreply.github.com"
 | 
					          git config --global user.email "github-actions[bot]@users.noreply.github.com"
 | 
				
			||||||
@@ -136,7 +134,7 @@ jobs:
 | 
				
			|||||||
          git push origin $BRANCH_NAME --force
 | 
					          git push origin $BRANCH_NAME --force
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Create pull request if not exists
 | 
					      - name: Create pull request if not exists
 | 
				
			||||||
        if: steps.verify-diff.outputs.changed == 'true'
 | 
					        if: env.changed == 'true'
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          GH_TOKEN: ${{ steps.generate-token.outputs.token }}
 | 
					          GH_TOKEN: ${{ steps.generate-token.outputs.token }}
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
@@ -150,7 +148,7 @@ jobs:
 | 
				
			|||||||
          fi
 | 
					          fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - name: Approve pull request
 | 
					      - name: Approve pull request
 | 
				
			||||||
        if: steps.verify-diff.outputs.changed == 'true'
 | 
					        if: env.changed == 'true'
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
					          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
@@ -158,9 +156,9 @@ jobs:
 | 
				
			|||||||
          if [ -n "$PR_NUMBER" ]; then
 | 
					          if [ -n "$PR_NUMBER" ]; then
 | 
				
			||||||
            gh pr review $PR_NUMBER --approve
 | 
					            gh pr review $PR_NUMBER --approve
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
          
 | 
					
 | 
				
			||||||
      - name: Re-approve pull request after update
 | 
					      - name: Re-approve pull request after update
 | 
				
			||||||
        if: steps.verify-diff.outputs.changed == 'true'
 | 
					        if: env.changed == 'true'
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
					          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
				
			||||||
        run: |
 | 
					        run: |
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										139
									
								
								.github/workflows/script-test.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								.github/workflows/script-test.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,139 @@
 | 
				
			|||||||
 | 
					name: Run Scripts on PVE Node
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  pull_request:
 | 
				
			||||||
 | 
					    branches:
 | 
				
			||||||
 | 
					      - main
 | 
				
			||||||
 | 
					    paths:
 | 
				
			||||||
 | 
					      - 'install/*.sh'
 | 
				
			||||||
 | 
					      - 'ct/*.sh'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  run-install-script:
 | 
				
			||||||
 | 
					    runs-on: pvenode
 | 
				
			||||||
 | 
					    steps:          
 | 
				
			||||||
 | 
					      - name: Checkout PR branch
 | 
				
			||||||
 | 
					        uses: actions/checkout@v4
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          ref: ${{ github.event.pull_request.head.ref }}
 | 
				
			||||||
 | 
					          fetch-depth: 0  
 | 
				
			||||||
 | 
					      - name: Add Git safe directory
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          git config --global --add safe.directory /__w/ProxmoxVE/ProxmoxVE
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      - name: Set up GH_TOKEN
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          echo "GH_TOKEN=${GH_TOKEN}" >> $GITHUB_ENV
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Get changed files in PR
 | 
				
			||||||
 | 
					        id: changed-files
 | 
				
			||||||
 | 
					        run: | 
 | 
				
			||||||
 | 
					          CHANGED_FILES=$(gh pr diff --name-only ${{ github.event.pull_request.number }})  
 | 
				
			||||||
 | 
					          CHANGED_FILES=$(echo "$CHANGED_FILES" | tr '\n' ' ')  
 | 
				
			||||||
 | 
					          echo "Changed files: $CHANGED_FILES"  
 | 
				
			||||||
 | 
					          echo "SCRIPT=$CHANGED_FILES" >> $GITHUB_ENV
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Get scripts
 | 
				
			||||||
 | 
					        id: check-install-script
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          ALL_FILES=()
 | 
				
			||||||
 | 
					          ADDED_FILES=()  
 | 
				
			||||||
 | 
					          for FILE in ${{ env.SCRIPT }}; do           
 | 
				
			||||||
 | 
					            if [[ $FILE =~ ^install/.*-install\.sh$ ]] || [[ $FILE =~ ^ct/.*\.sh$ ]]; then             
 | 
				
			||||||
 | 
					              STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
 | 
				
			||||||
 | 
					              if [[ ! " ${ADDED_FILES[@]} " =~ " $STRIPPED_NAME " ]]; then
 | 
				
			||||||
 | 
					                ALL_FILES+=("$FILE")
 | 
				
			||||||
 | 
					                ADDED_FILES+=("$STRIPPED_NAME")  # Mark this base file as added (without the path)
 | 
				
			||||||
 | 
					              fi
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					          done
 | 
				
			||||||
 | 
					          ALL_FILES=$(echo "${ALL_FILES[@]}" | xargs)
 | 
				
			||||||
 | 
					          echo "$ALL_FILES"
 | 
				
			||||||
 | 
					          echo "ALL_FILES=$ALL_FILES" >> $GITHUB_ENV
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					      - name: Run scripts
 | 
				
			||||||
 | 
					        id: run-install
 | 
				
			||||||
 | 
					        continue-on-error: true
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          set +e  
 | 
				
			||||||
 | 
					          #run for each files in /ct
 | 
				
			||||||
 | 
					          for FILE in ${{ env.ALL_FILES }}; do            
 | 
				
			||||||
 | 
					            echo "Running: $FILE"
 | 
				
			||||||
 | 
					            STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
 | 
				
			||||||
 | 
					            if [[ $FILE =~ ^install/.*-install\.sh$ ]]; then
 | 
				
			||||||
 | 
					              CT_SCRIPT="ct/$STRIPPED_NAME.sh"
 | 
				
			||||||
 | 
					              if [[ ! -f $CT_SCRIPT ]]; then
 | 
				
			||||||
 | 
					                echo "No CT script found for $STRIPPED_NAME"
 | 
				
			||||||
 | 
					                exit 1
 | 
				
			||||||
 | 
					              fi
 | 
				
			||||||
 | 
					                echo "Found CT script for $STRIPPED_NAME"
 | 
				
			||||||
 | 
					                chmod +x "$CT_SCRIPT"
 | 
				
			||||||
 | 
					                RUNNING_FILE=$CT_SCRIPT
 | 
				
			||||||
 | 
					            elif [[ $FILE =~ ^ct/.*\.sh$ ]]; then
 | 
				
			||||||
 | 
					              INSTALL_SCRIPT="install/$STRIPPED_NAME-install.sh"
 | 
				
			||||||
 | 
					              if [[ ! -f $INSTALL_SCRIPT ]]; then
 | 
				
			||||||
 | 
					                echo "No install script found for $STRIPPED_NAME"
 | 
				
			||||||
 | 
					                exit 1
 | 
				
			||||||
 | 
					              fi
 | 
				
			||||||
 | 
					                echo "Found install script for $STRIPPED_NAME"
 | 
				
			||||||
 | 
					                chmod +x "$INSTALL_SCRIPT"
 | 
				
			||||||
 | 
					                RUNNING_FILE=$FILE
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					            git checkout origin/main .github/workflows/scripts/app-test/pr-build.func
 | 
				
			||||||
 | 
					            git checkout origin/main .github/workflows/scripts/app-test/pr-install.func
 | 
				
			||||||
 | 
					            git checkout origin/main .github/workflows/scripts/app-test/pr-alpine-install.func
 | 
				
			||||||
 | 
					            git checkout origin/main .github/workflows/scripts/app-test/pr-create-lxc.sh
 | 
				
			||||||
 | 
					            sed -i 's|source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)|source .github/workflows/scripts/app-test/pr-build.func|g' "$RUNNING_FILE"
 | 
				
			||||||
 | 
					            chmod +x $RUNNING_FILE         
 | 
				
			||||||
 | 
					            chmod +x .github/workflows/scripts/app-test/pr-create-lxc.sh
 | 
				
			||||||
 | 
					            chmod +x .github/workflows/scripts/app-test/pr-install.func
 | 
				
			||||||
 | 
					            chmod +x .github/workflows/scripts/app-test/pr-alpine-install.func
 | 
				
			||||||
 | 
					            chmod +x .github/workflows/scripts/app-test/pr-build.func
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ERROR_MSG=$(./$RUNNING_FILE 2>&1 > /dev/null)
 | 
				
			||||||
 | 
					            echo "Finished running $FILE"
 | 
				
			||||||
 | 
					            if [ -n "$ERROR_MSG" ]; then
 | 
				
			||||||
 | 
					              echo "ERROR in $STRIPPED_NAME: $ERROR_MSG"
 | 
				
			||||||
 | 
					              echo "$ERROR_MSG" > result_$STRIPPED_NAME.log
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					          done
 | 
				
			||||||
 | 
					          set -e  # Restore exit-on-error
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      - name: Cleanup PVE Node
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          containers=$(pct list | tail -n +2 | awk '{print $0 " " $4}' | awk '{print $1}')
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					          for container_id in $containers; do
 | 
				
			||||||
 | 
					            status=$(pct status $container_id | awk '{print $2}')
 | 
				
			||||||
 | 
					            if [[ $status == "running" ]]; then
 | 
				
			||||||
 | 
					                pct stop $container_id
 | 
				
			||||||
 | 
					                pct destroy $container_id
 | 
				
			||||||
 | 
					            fi            
 | 
				
			||||||
 | 
					          done
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      - name: Post error comments
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          ERROR="false"
 | 
				
			||||||
 | 
					          SEARCH_LINE=".github/workflows/scripts/app-test/pr-build.func: line"
 | 
				
			||||||
 | 
					          for FILE in ${{ env.ALL_FILES }}; do
 | 
				
			||||||
 | 
					            STRIPPED_NAME=$(basename "$FILE" | sed 's/-install//' | sed 's/\.sh$//')
 | 
				
			||||||
 | 
					            if [[ ! -f result_$STRIPPED_NAME.log ]]; then
 | 
				
			||||||
 | 
					              continue
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					            ERROR_MSG=$(cat result_$STRIPPED_NAME.log)
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					            if [ -n "$ERROR_MSG" ]; then
 | 
				
			||||||
 | 
					              CLEANED_ERROR_MSG=$(echo "$ERROR_MSG" | sed "s|$SEARCH_LINE.*||")
 | 
				
			||||||
 | 
					              echo "Posting error message for $FILE"
 | 
				
			||||||
 | 
					              echo ${CLEANED_ERROR_MSG}
 | 
				
			||||||
 | 
					              gh pr comment ${{ github.event.pull_request.number }} \
 | 
				
			||||||
 | 
					                --body ":warning: The script _**$FILE**_ failed with the following message: <br> <div><strong>${CLEANED_ERROR_MSG}</strong></div>"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              ERROR="true"
 | 
				
			||||||
 | 
					            fi
 | 
				
			||||||
 | 
					          done
 | 
				
			||||||
 | 
					          echo "ERROR=$ERROR" >> $GITHUB_ENV
 | 
				
			||||||
 | 
					      - name: Fail if error
 | 
				
			||||||
 | 
					        if: ${{ env.ERROR }} == 'true'
 | 
				
			||||||
 | 
					        run: exit 1 
 | 
				
			||||||
							
								
								
									
										88
									
								
								.github/workflows/scripts/app-test/pr-alpine-install.func
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								.github/workflows/scripts/app-test/pr-alpine-install.func
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: michelroegl-brunner
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					color() {
 | 
				
			||||||
 | 
					  return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					catch_errors() {
 | 
				
			||||||
 | 
					  set -Eeuo pipefail
 | 
				
			||||||
 | 
					  trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					error_handler() {
 | 
				
			||||||
 | 
					  local line_number="$1"
 | 
				
			||||||
 | 
					  local command="$2"
 | 
				
			||||||
 | 
					  SCRIPT_NAME=$(basename "$0")
 | 
				
			||||||
 | 
					  local error_message="$SCRIPT_NAME: Failure in line $line_number while executing command $command"
 | 
				
			||||||
 | 
					  echo -e "\n$error_message"
 | 
				
			||||||
 | 
					  exit 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					verb_ip6() {
 | 
				
			||||||
 | 
					    STD=""
 | 
				
			||||||
 | 
					    return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info() {
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -ne "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok() { 
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -e "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_error() {
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -e "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RETRY_NUM=10
 | 
				
			||||||
 | 
					RETRY_EVERY=3
 | 
				
			||||||
 | 
					i=$RETRY_NUM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					setting_up_container() {
 | 
				
			||||||
 | 
					  while [ $i -gt 0 ]; do
 | 
				
			||||||
 | 
					    if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" != "" ]; then
 | 
				
			||||||
 | 
					      break
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    echo 1>&2 -en "No Network! "
 | 
				
			||||||
 | 
					    sleep $RETRY_EVERY
 | 
				
			||||||
 | 
					    i=$((i - 1))
 | 
				
			||||||
 | 
					  done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [ "$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d'/' -f1)" = "" ]; then
 | 
				
			||||||
 | 
					    echo 1>&2 -e "\n No Network After $RETRY_NUM Tries"
 | 
				
			||||||
 | 
					    echo -e "Check Network Settings"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  msg_ok "Set up Container OS"
 | 
				
			||||||
 | 
					  msg_ok "Network Connected: $(hostname -i)"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					network_check() {
 | 
				
			||||||
 | 
					  RESOLVEDIP=$(getent hosts github.com | awk '{ print $1 }')
 | 
				
			||||||
 | 
					  if [[ -z "$RESOLVEDIP" ]]; then msg_error "DNS Lookup Failure"; else msg_ok "DNS Resolved github.com to $RESOLVEDIP"; fi
 | 
				
			||||||
 | 
					  set -e
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					update_os() {
 | 
				
			||||||
 | 
					 msg_info "Updating Container OS"
 | 
				
			||||||
 | 
					  apk update
 | 
				
			||||||
 | 
					  apk upgrade
 | 
				
			||||||
 | 
					  msg_ok "Updated Container OS"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh() {
 | 
				
			||||||
 | 
					  return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					customize() {
 | 
				
			||||||
 | 
					   return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										259
									
								
								.github/workflows/scripts/app-test/pr-build.func
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								.github/workflows/scripts/app-test/pr-build.func
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,259 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: michelroegl-brunner
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variables() {
 | 
				
			||||||
 | 
					  NSAPP=$(echo ${APP,,} | tr -d ' ') 
 | 
				
			||||||
 | 
					  var_install="${NSAPP}-install"     
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NEXTID=$(pvesh get /cluster/nextid)
 | 
				
			||||||
 | 
					timezone=$(cat /etc/timezone)
 | 
				
			||||||
 | 
					header_info(){ 
 | 
				
			||||||
 | 
					  return  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					base_settings() {
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  CT_TYPE="1"
 | 
				
			||||||
 | 
					  DISK_SIZE="4"
 | 
				
			||||||
 | 
					  CORE_COUNT="1"
 | 
				
			||||||
 | 
					  RAM_SIZE="1024"
 | 
				
			||||||
 | 
					  VERBOSE="${1:-no}"
 | 
				
			||||||
 | 
					  PW=""
 | 
				
			||||||
 | 
					  CT_ID=$NEXTID
 | 
				
			||||||
 | 
					  HN="Testing"
 | 
				
			||||||
 | 
					  BRG="vmbr0"
 | 
				
			||||||
 | 
					  NET="dhcp"
 | 
				
			||||||
 | 
					  GATE=""
 | 
				
			||||||
 | 
					  APT_CACHER=""
 | 
				
			||||||
 | 
					  APT_CACHER_IP=""
 | 
				
			||||||
 | 
					  DISABLEIP6="no"
 | 
				
			||||||
 | 
					  MTU=""
 | 
				
			||||||
 | 
					  SD=""
 | 
				
			||||||
 | 
					  NS=""
 | 
				
			||||||
 | 
					  MAC=""
 | 
				
			||||||
 | 
					  VLAN=""
 | 
				
			||||||
 | 
					  SSH="no"
 | 
				
			||||||
 | 
					  SSH_AUTHORIZED_KEY=""
 | 
				
			||||||
 | 
					  TAGS="community-script;"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  CT_TYPE=${var_unprivileged:-$CT_TYPE}
 | 
				
			||||||
 | 
					  DISK_SIZE=${var_disk:-$DISK_SIZE}
 | 
				
			||||||
 | 
					  CORE_COUNT=${var_cpu:-$CORE_COUNT}
 | 
				
			||||||
 | 
					  RAM_SIZE=${var_ram:-$RAM_SIZE}
 | 
				
			||||||
 | 
					  VERB=${var_verbose:-$VERBOSE}
 | 
				
			||||||
 | 
					  TAGS="${TAGS}${var_tags:-}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [ -z "$var_os" ]; then
 | 
				
			||||||
 | 
					    var_os="debian"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  if [ -z "$var_version" ]; then
 | 
				
			||||||
 | 
					    var_version="12"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					color() {
 | 
				
			||||||
 | 
					  # Colors
 | 
				
			||||||
 | 
					  YW=$(echo "\033[33m")
 | 
				
			||||||
 | 
					  YWB=$(echo "\033[93m")
 | 
				
			||||||
 | 
					  BL=$(echo "\033[36m")
 | 
				
			||||||
 | 
					  RD=$(echo "\033[01;31m")
 | 
				
			||||||
 | 
					  BGN=$(echo "\033[4;92m")
 | 
				
			||||||
 | 
					  GN=$(echo "\033[1;92m")
 | 
				
			||||||
 | 
					  DGN=$(echo "\033[32m")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Formatting
 | 
				
			||||||
 | 
					  CL=$(echo "\033[m")
 | 
				
			||||||
 | 
					  UL=$(echo "\033[4m")
 | 
				
			||||||
 | 
					  BOLD=$(echo "\033[1m")
 | 
				
			||||||
 | 
					  BFR="\\r\\033[K"
 | 
				
			||||||
 | 
					  HOLD=" "
 | 
				
			||||||
 | 
					  TAB="  "
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Icons
 | 
				
			||||||
 | 
					  CM="${TAB}✔️${TAB}${CL}"
 | 
				
			||||||
 | 
					  CROSS="${TAB}✖️${TAB}${CL}"
 | 
				
			||||||
 | 
					  INFO="${TAB}💡${TAB}${CL}"
 | 
				
			||||||
 | 
					  OS="${TAB}🖥️${TAB}${CL}"
 | 
				
			||||||
 | 
					  OSVERSION="${TAB}🌟${TAB}${CL}"
 | 
				
			||||||
 | 
					  CONTAINERTYPE="${TAB}📦${TAB}${CL}"
 | 
				
			||||||
 | 
					  DISKSIZE="${TAB}💾${TAB}${CL}"
 | 
				
			||||||
 | 
					  CPUCORE="${TAB}🧠${TAB}${CL}"
 | 
				
			||||||
 | 
					  RAMSIZE="${TAB}🛠️${TAB}${CL}"
 | 
				
			||||||
 | 
					  SEARCH="${TAB}🔍${TAB}${CL}"
 | 
				
			||||||
 | 
					  VERIFYPW="${TAB}🔐${TAB}${CL}"
 | 
				
			||||||
 | 
					  CONTAINERID="${TAB}🆔${TAB}${CL}"
 | 
				
			||||||
 | 
					  HOSTNAME="${TAB}🏠${TAB}${CL}"
 | 
				
			||||||
 | 
					  BRIDGE="${TAB}🌉${TAB}${CL}"
 | 
				
			||||||
 | 
					  NETWORK="${TAB}📡${TAB}${CL}"
 | 
				
			||||||
 | 
					  GATEWAY="${TAB}🌐${TAB}${CL}"
 | 
				
			||||||
 | 
					  DISABLEIPV6="${TAB}🚫${TAB}${CL}"
 | 
				
			||||||
 | 
					  DEFAULT="${TAB}⚙️${TAB}${CL}"
 | 
				
			||||||
 | 
					  MACADDRESS="${TAB}🔗${TAB}${CL}"
 | 
				
			||||||
 | 
					  VLANTAG="${TAB}🏷️${TAB}${CL}"
 | 
				
			||||||
 | 
					  ROOTSSH="${TAB}🔑${TAB}${CL}"
 | 
				
			||||||
 | 
					  CREATING="${TAB}🚀${TAB}${CL}"
 | 
				
			||||||
 | 
					  ADVANCED="${TAB}🧩${TAB}${CL}"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					catch_errors() {
 | 
				
			||||||
 | 
					  set -Eeuo pipefail
 | 
				
			||||||
 | 
					  trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This function handles errors
 | 
				
			||||||
 | 
					error_handler() {  
 | 
				
			||||||
 | 
					  local line_number="$1"
 | 
				
			||||||
 | 
					  local command="$2"
 | 
				
			||||||
 | 
					  SCRIPT_NAME=$(basename "$0")
 | 
				
			||||||
 | 
					  local error_message="$SCRIPT_NAME: Failure in line $line_number while executing command $command"
 | 
				
			||||||
 | 
					  echo -e "\n$error_message"
 | 
				
			||||||
 | 
					  exit "$error_message"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info() {
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -ne "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok() { 
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -e "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_error() {
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -e "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					start(){
 | 
				
			||||||
 | 
					  return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					build_container() {
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  if [ "$CT_TYPE" == "1" ]; then
 | 
				
			||||||
 | 
					    FEATURES="keyctl=1,nesting=1"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    FEATURES="nesting=1"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  TEMP_DIR=$(mktemp -d)
 | 
				
			||||||
 | 
					  pushd $TEMP_DIR >/dev/null
 | 
				
			||||||
 | 
					  if [ "$var_os" == "alpine" ]; then
 | 
				
			||||||
 | 
					    export FUNCTIONS_FILE_PATH="$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-alpine-install.func)"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    export FUNCTIONS_FILE_PATH="$(cat /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-install.func)"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export CACHER="$APT_CACHER"
 | 
				
			||||||
 | 
					  export CACHER_IP="$APT_CACHER_IP"
 | 
				
			||||||
 | 
					  export tz=""
 | 
				
			||||||
 | 
					  export DISABLEIPV6="$DISABLEIP6"
 | 
				
			||||||
 | 
					  export APPLICATION="$APP"
 | 
				
			||||||
 | 
					  export app="$NSAPP"
 | 
				
			||||||
 | 
					  export PASSWORD="$PW"
 | 
				
			||||||
 | 
					  export VERBOSE="$VERB"
 | 
				
			||||||
 | 
					  export SSH_ROOT="${SSH}"
 | 
				
			||||||
 | 
					  export SSH_AUTHORIZED_KEY
 | 
				
			||||||
 | 
					  export CTID="$CT_ID"
 | 
				
			||||||
 | 
					  export CTTYPE="$CT_TYPE"
 | 
				
			||||||
 | 
					  export PCT_OSTYPE="$var_os"
 | 
				
			||||||
 | 
					  export PCT_OSVERSION="$var_version"
 | 
				
			||||||
 | 
					  export PCT_DISK_SIZE="$DISK_SIZE"
 | 
				
			||||||
 | 
					  export tz="$timezone"
 | 
				
			||||||
 | 
					  export PCT_OPTIONS="
 | 
				
			||||||
 | 
					    -features $FEATURES
 | 
				
			||||||
 | 
					    -hostname $HN
 | 
				
			||||||
 | 
					    -tags $TAGS
 | 
				
			||||||
 | 
					    $SD
 | 
				
			||||||
 | 
					    $NS
 | 
				
			||||||
 | 
					    -net0 name=eth0,bridge=$BRG$MAC,ip=$NET$GATE$VLAN$MTU
 | 
				
			||||||
 | 
					    -onboot 1
 | 
				
			||||||
 | 
					    -cores $CORE_COUNT
 | 
				
			||||||
 | 
					    -memory $RAM_SIZE
 | 
				
			||||||
 | 
					    -unprivileged $CT_TYPE
 | 
				
			||||||
 | 
					    $PW
 | 
				
			||||||
 | 
					  "
 | 
				
			||||||
 | 
					  echo "Container ID: $CTID"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # This executes create_lxc.sh and creates the container and .conf file
 | 
				
			||||||
 | 
					  bash /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/.github/workflows/scripts/app-test/pr-create-lxc.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  LXC_CONFIG=/etc/pve/lxc/${CTID}.conf
 | 
				
			||||||
 | 
					  if [ "$CT_TYPE" == "0" ]; then
 | 
				
			||||||
 | 
					    cat <<EOF >>$LXC_CONFIG
 | 
				
			||||||
 | 
					# USB passthrough
 | 
				
			||||||
 | 
					lxc.cgroup2.devices.allow: a
 | 
				
			||||||
 | 
					lxc.cap.drop:
 | 
				
			||||||
 | 
					lxc.cgroup2.devices.allow: c 188:* rwm
 | 
				
			||||||
 | 
					lxc.cgroup2.devices.allow: c 189:* rwm
 | 
				
			||||||
 | 
					lxc.mount.entry: /dev/serial/by-id  dev/serial/by-id  none bind,optional,create=dir
 | 
				
			||||||
 | 
					lxc.mount.entry: /dev/ttyUSB0       dev/ttyUSB0       none bind,optional,create=file
 | 
				
			||||||
 | 
					lxc.mount.entry: /dev/ttyUSB1       dev/ttyUSB1       none bind,optional,create=file
 | 
				
			||||||
 | 
					lxc.mount.entry: /dev/ttyACM0       dev/ttyACM0       none bind,optional,create=file
 | 
				
			||||||
 | 
					lxc.mount.entry: /dev/ttyACM1       dev/ttyACM1       none bind,optional,create=file
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [ "$CT_TYPE" == "0" ]; then
 | 
				
			||||||
 | 
					    if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" ]]; then
 | 
				
			||||||
 | 
					      cat <<EOF >>$LXC_CONFIG
 | 
				
			||||||
 | 
					# VAAPI hardware transcoding
 | 
				
			||||||
 | 
					lxc.cgroup2.devices.allow: c 226:0 rwm
 | 
				
			||||||
 | 
					lxc.cgroup2.devices.allow: c 226:128 rwm
 | 
				
			||||||
 | 
					lxc.cgroup2.devices.allow: c 29:0 rwm
 | 
				
			||||||
 | 
					lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file
 | 
				
			||||||
 | 
					lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
 | 
				
			||||||
 | 
					lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    if [[ "$APP" == "Channels" || "$APP" == "Emby" || "$APP" == "ErsatzTV" || "$APP" == "Frigate" || "$APP" == "Jellyfin" || "$APP" == "Plex" || "$APP" == "Scrypted" || "$APP" == "Tdarr" || "$APP" == "Unmanic" || "$APP" == "Ollama" ]]; then
 | 
				
			||||||
 | 
					      if [[ -e "/dev/dri/renderD128" ]]; then
 | 
				
			||||||
 | 
					        if [[ -e "/dev/dri/card0" ]]; then
 | 
				
			||||||
 | 
					          cat <<EOF >>$LXC_CONFIG
 | 
				
			||||||
 | 
					# VAAPI hardware transcoding
 | 
				
			||||||
 | 
					dev0: /dev/dri/card0,gid=44
 | 
				
			||||||
 | 
					dev1: /dev/dri/renderD128,gid=104
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					          cat <<EOF >>$LXC_CONFIG
 | 
				
			||||||
 | 
					# VAAPI hardware transcoding
 | 
				
			||||||
 | 
					dev0: /dev/dri/card1,gid=44
 | 
				
			||||||
 | 
					dev1: /dev/dri/renderD128,gid=104
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # This starts the container and executes <app>-install.sh
 | 
				
			||||||
 | 
					  msg_info "Starting LXC Container"
 | 
				
			||||||
 | 
					  pct start "$CTID"
 | 
				
			||||||
 | 
					  msg_ok "Started LXC Container"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if [[ ! -f "/root/actions-runner/_work/ProxmoxVE/ProxmoxVE/install/$var_install.sh" ]]; then
 | 
				
			||||||
 | 
					    msg_error "No install script found for $APP"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					    if [ "$var_os" == "alpine" ]; then
 | 
				
			||||||
 | 
					    sleep 3
 | 
				
			||||||
 | 
					    pct exec "$CTID" -- /bin/sh -c 'cat <<EOF >/etc/apk/repositories
 | 
				
			||||||
 | 
					http://dl-cdn.alpinelinux.org/alpine/latest-stable/main
 | 
				
			||||||
 | 
					http://dl-cdn.alpinelinux.org/alpine/latest-stable/community
 | 
				
			||||||
 | 
					EOF'
 | 
				
			||||||
 | 
					    pct exec "$CTID" -- ash -c "apk add bash >/dev/null"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  lxc-attach -n "$CTID" -- bash -c "$(< /root/actions-runner/_work/ProxmoxVE/ProxmoxVE/install/$var_install.sh)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					description(){
 | 
				
			||||||
 | 
					 return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										158
									
								
								.github/workflows/scripts/app-test/pr-create-lxc.sh
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								.github/workflows/scripts/app-test/pr-create-lxc.sh
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,158 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: michelroegl-brunner
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					color() {
 | 
				
			||||||
 | 
					  return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					catch_errors() {
 | 
				
			||||||
 | 
					  set -Eeuo pipefail
 | 
				
			||||||
 | 
					  trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					error_handler() {
 | 
				
			||||||
 | 
					    local exit_code="$?"
 | 
				
			||||||
 | 
					  local line_number="$1"
 | 
				
			||||||
 | 
					  local command="$2"
 | 
				
			||||||
 | 
					  local error_message="Failure in line $line_number: exit code $exit_code: while executing command $command"
 | 
				
			||||||
 | 
					  echo -e "\n$error_message"
 | 
				
			||||||
 | 
					  exit 100
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					verb_ip6() {
 | 
				
			||||||
 | 
					    return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info() {
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -ne "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok() { 
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -e "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_error() {
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -e "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VALIDCT=$(pvesm status -content rootdir | awk 'NR>1')
 | 
				
			||||||
 | 
					if [ -z "$VALIDCT" ]; then
 | 
				
			||||||
 | 
					  msg_error "Unable to detect a valid Container Storage location."
 | 
				
			||||||
 | 
					  exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					VALIDTMP=$(pvesm status -content vztmpl | awk 'NR>1')
 | 
				
			||||||
 | 
					if [ -z "$VALIDTMP" ]; then
 | 
				
			||||||
 | 
					  msg_error "Unable to detect a valid Template Storage location."
 | 
				
			||||||
 | 
					  exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function select_storage() {
 | 
				
			||||||
 | 
					  local CLASS=$1
 | 
				
			||||||
 | 
					  local CONTENT
 | 
				
			||||||
 | 
					  local CONTENT_LABEL
 | 
				
			||||||
 | 
					  case $CLASS in
 | 
				
			||||||
 | 
					  container)
 | 
				
			||||||
 | 
					    CONTENT='rootdir'
 | 
				
			||||||
 | 
					    CONTENT_LABEL='Container'
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					  template)
 | 
				
			||||||
 | 
					    CONTENT='vztmpl'
 | 
				
			||||||
 | 
					    CONTENT_LABEL='Container template'
 | 
				
			||||||
 | 
					    ;;
 | 
				
			||||||
 | 
					  *) false || { msg_error "Invalid storage class."; exit 201; };;
 | 
				
			||||||
 | 
					  esac
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  local -a MENU
 | 
				
			||||||
 | 
					  while read -r line; do
 | 
				
			||||||
 | 
					    local TAG=$(echo $line | awk '{print $1}')
 | 
				
			||||||
 | 
					    local TYPE=$(echo $line | awk '{printf "%-10s", $2}')
 | 
				
			||||||
 | 
					    local FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
 | 
				
			||||||
 | 
					    local ITEM="Type: $TYPE Free: $FREE "
 | 
				
			||||||
 | 
					    local OFFSET=2
 | 
				
			||||||
 | 
					    if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
 | 
				
			||||||
 | 
					      local MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    MENU+=("$TAG" "$ITEM" "OFF")
 | 
				
			||||||
 | 
					  done < <(pvesm status -content $CONTENT | awk 'NR>1')
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if [ $((${#MENU[@]}/3)) -eq 1 ]; then
 | 
				
			||||||
 | 
					    printf ${MENU[0]}
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					   msg_error "STORAGE ISSUES!"
 | 
				
			||||||
 | 
					    exit 202  
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[ "${CTID:-}" ]] || { msg_error "You need to set 'CTID' variable."; exit 203; }
 | 
				
			||||||
 | 
					[[ "${PCT_OSTYPE:-}" ]] || { msg_error "You need to set 'PCT_OSTYPE' variable."; exit 204; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ "$CTID" -ge "100" ] || { msg_error "ID cannot be less than 100."; exit 205; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if pct status $CTID &>/dev/null; then
 | 
				
			||||||
 | 
					  echo -e "ID '$CTID' is already in use."
 | 
				
			||||||
 | 
					  unset CTID
 | 
				
			||||||
 | 
					  msg_error "Cannot use ID that is already in use."
 | 
				
			||||||
 | 
					  exit 206
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEMPLATE_STORAGE=$(select_storage template) || exit
 | 
				
			||||||
 | 
					msg_ok "Using  $TEMPLATE_STORAGE   for Template Storage."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONTAINER_STORAGE=$(select_storage container) || exit
 | 
				
			||||||
 | 
					msg_ok "Using  $CONTAINER_STORAGE   for Container Storage."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Updating LXC Template List"
 | 
				
			||||||
 | 
					pveam update >/dev/null
 | 
				
			||||||
 | 
					msg_ok "Updated LXC Template List"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
 | 
				
			||||||
 | 
					mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
 | 
				
			||||||
 | 
					[ ${#TEMPLATES[@]} -gt 0 ] || { msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."; exit 207; }
 | 
				
			||||||
 | 
					TEMPLATE="${TEMPLATES[-1]}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE"; then
 | 
				
			||||||
 | 
					  [[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
 | 
				
			||||||
 | 
					  msg_info "Downloading LXC Template"
 | 
				
			||||||
 | 
					  pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
 | 
				
			||||||
 | 
					    { msg_error "A problem occurred while downloading the LXC template."; exit 208; }
 | 
				
			||||||
 | 
					  msg_ok "Downloaded LXC Template"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >> /etc/subuid
 | 
				
			||||||
 | 
					grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >> /etc/subgid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
 | 
				
			||||||
 | 
					[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "${PCT_OPTIONS[@]}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Creating LXC Container"
 | 
				
			||||||
 | 
					  if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
 | 
				
			||||||
 | 
					      [[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					    msg_ok "Template integrity check completed"
 | 
				
			||||||
 | 
					    pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||    
 | 
				
			||||||
 | 
					      { msg_error "A problem occurred while re-downloading the LXC template."; exit 208; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    msg_ok "Re-downloaded LXC Template"
 | 
				
			||||||
 | 
					    if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
 | 
				
			||||||
 | 
					        msg_error "A problem occurred while trying to create container after re-downloading template."
 | 
				
			||||||
 | 
					      exit 200
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					msg_ok "LXC Container  $CTID   was successfully created."
 | 
				
			||||||
							
								
								
									
										93
									
								
								.github/workflows/scripts/app-test/pr-install.func
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								.github/workflows/scripts/app-test/pr-install.func
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: michelroegl-brunner
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					color() {
 | 
				
			||||||
 | 
					  return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					catch_errors() {
 | 
				
			||||||
 | 
					  set -Eeuo pipefail
 | 
				
			||||||
 | 
					  trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					error_handler() {
 | 
				
			||||||
 | 
					  local line_number="$1"
 | 
				
			||||||
 | 
					  local command="$2"
 | 
				
			||||||
 | 
					  SCRIPT_NAME=$(basename "$0")
 | 
				
			||||||
 | 
					  local error_message="$SCRIPT_NAME: Failure in line $line_number while executing command $command"
 | 
				
			||||||
 | 
					  echo -e "\n$error_message"
 | 
				
			||||||
 | 
					  exit "$error_message"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					verb_ip6() {
 | 
				
			||||||
 | 
					    STD=""
 | 
				
			||||||
 | 
					    return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info() {
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -ne "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok() { 
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -e "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_error() {
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  local msg="$1"
 | 
				
			||||||
 | 
					  echo -e "${msg}\n"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					  RETRY_NUM=10
 | 
				
			||||||
 | 
					  RETRY_EVERY=3
 | 
				
			||||||
 | 
					setting_up_container() {
 | 
				
			||||||
 | 
					  sed -i "/$LANG/ s/\(^# \)//" /etc/locale.gen
 | 
				
			||||||
 | 
					  locale_line=$(grep -v '^#' /etc/locale.gen | grep -E '^[a-zA-Z]' | awk '{print $1}' | head -n 1)
 | 
				
			||||||
 | 
					  echo "LANG=${locale_line}" >/etc/default/locale
 | 
				
			||||||
 | 
					  locale-gen >/dev/null
 | 
				
			||||||
 | 
					  export LANG=${locale_line}
 | 
				
			||||||
 | 
					  echo $tz >/etc/timezone
 | 
				
			||||||
 | 
					  ln -sf /usr/share/zoneinfo/$tz /etc/localtime
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  for ((i = RETRY_NUM; i > 0; i--)); do
 | 
				
			||||||
 | 
					    if [ "$(hostname -I)" != "" ]; then
 | 
				
			||||||
 | 
					      break
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    echo 1>&2 -en "No Network! "
 | 
				
			||||||
 | 
					    sleep $RETRY_EVERY
 | 
				
			||||||
 | 
					  done
 | 
				
			||||||
 | 
					  if [ "$(hostname -I)" = "" ]; then
 | 
				
			||||||
 | 
					    echo 1>&2 -e "\nNo Network After $RETRY_NUM Tries"
 | 
				
			||||||
 | 
					    echo -e "Check Network Settings"
 | 
				
			||||||
 | 
					    exit 101
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
				
			||||||
 | 
					  systemctl disable -q --now systemd-networkd-wait-online.service
 | 
				
			||||||
 | 
					  msg_ok "Set up Container OS"
 | 
				
			||||||
 | 
					  msg_ok "Network Connected: $(hostname -I)"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					network_check() {
 | 
				
			||||||
 | 
					  RESOLVEDIP=$(getent hosts github.com | awk '{ print $1 }')
 | 
				
			||||||
 | 
					  if [[ -z "$RESOLVEDIP" ]]; then msg_error "DNS Lookup Failure"; else msg_ok "DNS Resolved github.com to $RESOLVEDIP"; fi
 | 
				
			||||||
 | 
					  set -e
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					update_os() {
 | 
				
			||||||
 | 
					  msg_info "Updating Container OS"
 | 
				
			||||||
 | 
					  apt-get update
 | 
				
			||||||
 | 
					  apt-get -o Dpkg::Options::="--force-confold" -y dist-upgrade
 | 
				
			||||||
 | 
					  rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
				
			||||||
 | 
					  msg_ok "Updated Container OS"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh() {
 | 
				
			||||||
 | 
					  return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					customize() {
 | 
				
			||||||
 | 
					   return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										20
									
								
								.github/workflows/scripts/update-json.sh
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								.github/workflows/scripts/update-json.sh
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FILE=$1
 | 
				
			||||||
 | 
					TODAY=$(date -u +"%Y-%m-%d")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -z "$FILE" ]]; then
 | 
				
			||||||
 | 
					    echo "No file specified. Exiting."
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ ! -f "$FILE" ]]; then
 | 
				
			||||||
 | 
					    echo "File $FILE not found. Exiting."
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DATE_IN_JSON=$(jq -r '.date_created' "$FILE" 2>/dev/null || echo "")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$DATE_IN_JSON" != "$TODAY" ]]; then
 | 
				
			||||||
 | 
					    jq --arg date "$TODAY" '.date_created = $date' "$FILE" > tmp.json && mv tmp.json "$FILE"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
							
								
								
									
										118
									
								
								.github/workflows/update_json_date.yml.bak
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										118
									
								
								.github/workflows/update_json_date.yml.bak
									
									
									
									
										vendored
									
									
								
							@@ -1,48 +1,88 @@
 | 
				
			|||||||
name: Update JSON Date
 | 
					name: Auto Update JSON-Date
 | 
				
			||||||
 | 
					
 | 
				
			||||||
on:
 | 
					on:
 | 
				
			||||||
  pull_request:
 | 
					  push:
 | 
				
			||||||
    types: [opened, synchronize, reopened]
 | 
					    branches:
 | 
				
			||||||
        
 | 
					      - main
 | 
				
			||||||
 | 
					  workflow_dispatch:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  list-files:
 | 
					  update-json-dates:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    permissions:
 | 
				
			||||||
 | 
					      contents: write
 | 
				
			||||||
 | 
					      pull-requests: write
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
    - name: Checkout PR Branch
 | 
					      - name: Generate a token
 | 
				
			||||||
      uses: actions/checkout@v4
 | 
					        id: generate-token
 | 
				
			||||||
      with:
 | 
					        uses: actions/create-github-app-token@v1
 | 
				
			||||||
        ref: ${{ github.event.pull_request.head.ref }}
 | 
					        with:
 | 
				
			||||||
 | 
					          app-id: ${{ vars.APP_ID }}
 | 
				
			||||||
 | 
					          private-key: ${{ secrets.APP_PRIVATE_KEY }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: Fetch PR changes
 | 
					      - name: Checkout repository
 | 
				
			||||||
      run: |
 | 
					        uses: actions/checkout@v4
 | 
				
			||||||
          git remote add fork https://github.com/${{ github.event.pull_request.head.repo.full_name }}.git
 | 
					        with:
 | 
				
			||||||
          git fetch fork ${{ github.event.pull_request.head.ref }}:pullreq
 | 
					          fetch-depth: 0  # Full history for proper detection
 | 
				
			||||||
          git checkout pullreq
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: Update JSON
 | 
					      - name: Set up Git
 | 
				
			||||||
      id: changed-files
 | 
					        run: |
 | 
				
			||||||
      run: |
 | 
					          git config --global user.name "GitHub Actions"
 | 
				
			||||||
          FILES=$(gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/files --jq '.[].filename' | tr '\n' ' ')
 | 
					          git config --global user.email "github-actions[bot]@users.noreply.github.com"
 | 
				
			||||||
          echo "changed_files=${FILES}"
 | 
					
 | 
				
			||||||
          for FILE in $FILES; do
 | 
					      - name: Find JSON files with incorrect date_created
 | 
				
			||||||
            if [[ "$FILE" =~ /(.*)\.json ]]; then
 | 
					        id: find_wrong_json
 | 
				
			||||||
              NAME="${BASH_REMATCH[1]}"
 | 
					        run: |
 | 
				
			||||||
            else
 | 
					          TODAY=$(date -u +"%Y-%m-%d")
 | 
				
			||||||
              echo "no new JSON in ${FILES}"
 | 
					          > incorrect_json_files.txt
 | 
				
			||||||
              continue
 | 
					
 | 
				
			||||||
            fi
 | 
					          for FILE in json/*.json; do
 | 
				
			||||||
          
 | 
					            if [[ -f "$FILE" ]]; then
 | 
				
			||||||
            JSON_FILE="json/${NAME}.json"
 | 
					              DATE_IN_JSON=$(jq -r '.date_created' "$FILE" 2>/dev/null || echo "")
 | 
				
			||||||
            if [[ -f "$JSON_FILE" ]]; then
 | 
					
 | 
				
			||||||
              echo "Updating date_created in $JSON_FILE"
 | 
					              if [[ "$DATE_IN_JSON" != "$TODAY" ]]; then
 | 
				
			||||||
              jq --arg date "$(date +%Y-%m-%d)" '.date_created = $date' "$JSON_FILE" > tmp.json && mv tmp.json "$JSON_FILE"
 | 
					                echo "$FILE" >> incorrect_json_files.txt
 | 
				
			||||||
            else
 | 
					              fi
 | 
				
			||||||
              echo "JSON file $FILES not found"
 | 
					 | 
				
			||||||
            fi
 | 
					            fi
 | 
				
			||||||
          done
 | 
					          done
 | 
				
			||||||
             
 | 
					
 | 
				
			||||||
          git config --global user.name "github-actions[bot]"
 | 
					          if [[ -s incorrect_json_files.txt ]]; then
 | 
				
			||||||
          git config --global user.email "github-actions[bot]@users.noreply.github.com"
 | 
					            echo "CHANGED=true" >> $GITHUB_ENV
 | 
				
			||||||
          git diff --exit-code || git commit -am "Updating Dates in affected JSON files."
 | 
					          else
 | 
				
			||||||
          git push 
 | 
					            echo "CHANGED=false" >> $GITHUB_ENV
 | 
				
			||||||
      env:
 | 
					          fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Run update script
 | 
				
			||||||
 | 
					        if: env.CHANGED == 'true'
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          chmod +x .github/workflows/scripts/update-json.sh
 | 
				
			||||||
 | 
					          while read -r FILE; do
 | 
				
			||||||
 | 
					            .github/workflows/scripts/update-json.sh "$FILE"
 | 
				
			||||||
 | 
					          done < incorrect_json_files.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Commit and create PR if changes exist
 | 
				
			||||||
 | 
					        if: env.CHANGED == 'true'
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          git add json/*.json
 | 
				
			||||||
 | 
					          git commit -m "Auto-update date_created in incorrect JSON files"
 | 
				
			||||||
 | 
					          git checkout -b pr-fix-json-dates
 | 
				
			||||||
 | 
					          git push origin pr-fix-json-dates --force
 | 
				
			||||||
 | 
					          gh pr create --title "[core] Fix incorrect JSON date_created fields" \
 | 
				
			||||||
 | 
					                       --body "This PR is auto-generated to fix incorrect `date_created` fields in JSON files." \
 | 
				
			||||||
 | 
					                       --head pr-fix-json-dates \
 | 
				
			||||||
 | 
					                       --base main \
 | 
				
			||||||
 | 
					                       --label "automated pr"
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          GH_TOKEN: ${{ steps.generate-token.outputs.token }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - name: Approve pull request
 | 
				
			||||||
 | 
					        if: env.CHANGED == 'true'
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
					          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          PR_NUMBER=$(gh pr list --head "pr-fix-json-dates" --json number --jq '.[].number')
 | 
				
			||||||
 | 
					          if [ -n "$PR_NUMBER" ]; then
 | 
				
			||||||
 | 
					            gh pr review $PR_NUMBER --approve
 | 
				
			||||||
 | 
					          fi
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										164
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										164
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -17,6 +17,170 @@ All LXC instances created using this repository come pre-installed with Midnight
 | 
				
			|||||||
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
 | 
					Do not break established syntax in this file, as it is automatically updated by a Github Workflow
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-02-12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 💥 Breaking Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Frigate: Use Fixed Version 14 [@MickLesk](https://github.com/MickLesk) ([#2288](https://github.com/community-scripts/ProxmoxVE/pull/2288))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### ✨ New Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- New Script: Kometa [@tremor021](https://github.com/tremor021) ([#2281](https://github.com/community-scripts/ProxmoxVE/pull/2281))
 | 
				
			||||||
 | 
					- New Script: Excalidraw [@tremor021](https://github.com/tremor021) ([#2285](https://github.com/community-scripts/ProxmoxVE/pull/2285))
 | 
				
			||||||
 | 
					- New Script: Graylog [@tremor021](https://github.com/tremor021) ([#2270](https://github.com/community-scripts/ProxmoxVE/pull/2270))
 | 
				
			||||||
 | 
					- New Script: TasmoCompiler [@tremor021](https://github.com/tremor021) ([#2235](https://github.com/community-scripts/ProxmoxVE/pull/2235))
 | 
				
			||||||
 | 
					- New script: cross-seed [@jmatraszek](https://github.com/jmatraszek) ([#2186](https://github.com/community-scripts/ProxmoxVE/pull/2186))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- FIX: Frigate - remove bad variable [@tremor021](https://github.com/tremor021) ([#2323](https://github.com/community-scripts/ProxmoxVE/pull/2323))
 | 
				
			||||||
 | 
					- Fix: Kometa - Fix wrong web site address [@tremor021](https://github.com/tremor021) ([#2318](https://github.com/community-scripts/ProxmoxVE/pull/2318))
 | 
				
			||||||
 | 
					- Fix: var_tags instead of TAGS in some CT's [@MickLesk](https://github.com/MickLesk) ([#2310](https://github.com/community-scripts/ProxmoxVE/pull/2310))
 | 
				
			||||||
 | 
					- Update ubuntu2410-vm.sh: Fix typo in API call. [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2305](https://github.com/community-scripts/ProxmoxVE/pull/2305))
 | 
				
			||||||
 | 
					- Fix: Myspeed Installation (g++) [@MickLesk](https://github.com/MickLesk) ([#2308](https://github.com/community-scripts/ProxmoxVE/pull/2308))
 | 
				
			||||||
 | 
					- Fix: Pingvin wrong variable used for version tracking [@alberanid](https://github.com/alberanid) ([#2302](https://github.com/community-scripts/ProxmoxVE/pull/2302))
 | 
				
			||||||
 | 
					- Fix: SQL Server 2022 - remove unnecessary sudo [@tremor021](https://github.com/tremor021) ([#2282](https://github.com/community-scripts/ProxmoxVE/pull/2282))
 | 
				
			||||||
 | 
					- fix: frigate pin version [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2296](https://github.com/community-scripts/ProxmoxVE/pull/2296))
 | 
				
			||||||
 | 
					- Fix changedetection: Correct Browser install [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2277](https://github.com/community-scripts/ProxmoxVE/pull/2277))
 | 
				
			||||||
 | 
					- Paperless-AI: add dependency "make" [@MickLesk](https://github.com/MickLesk) ([#2289](https://github.com/community-scripts/ProxmoxVE/pull/2289))
 | 
				
			||||||
 | 
					- Fix: Typo OPNsense VM [@chpego](https://github.com/chpego) ([#2291](https://github.com/community-scripts/ProxmoxVE/pull/2291))
 | 
				
			||||||
 | 
					- Fix: CraftyControler fix java default [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2286](https://github.com/community-scripts/ProxmoxVE/pull/2286))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Fix: some jsons (debian instead Debian in OS) [@MickLesk](https://github.com/MickLesk) ([#2311](https://github.com/community-scripts/ProxmoxVE/pull/2311))
 | 
				
			||||||
 | 
					- Website: Add After-Install Note for Ubuntu VM 22.04/24.04/24.10 and Debian VM [@MickLesk](https://github.com/MickLesk) ([#2307](https://github.com/community-scripts/ProxmoxVE/pull/2307))
 | 
				
			||||||
 | 
					- Fix: duplicate 'VM' name in opnsense-vm.json [@nayzm](https://github.com/nayzm) ([#2293](https://github.com/community-scripts/ProxmoxVE/pull/2293))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-02-11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### ✨ New Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- New Script: Opnsense VM [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2097](https://github.com/community-scripts/ProxmoxVE/pull/2097))
 | 
				
			||||||
 | 
					- New Script: Watcharr [@tremor021](https://github.com/tremor021) ([#2243](https://github.com/community-scripts/ProxmoxVE/pull/2243))
 | 
				
			||||||
 | 
					- New Script: Suwayomi-Server [@tremor021](https://github.com/tremor021) ([#2139](https://github.com/community-scripts/ProxmoxVE/pull/2139))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Fix Photoprism: Add defaults.yml for CLI Tool [@MickLesk](https://github.com/MickLesk) ([#2261](https://github.com/community-scripts/ProxmoxVE/pull/2261))
 | 
				
			||||||
 | 
					- Update Checkmk: include Patch versions in Release grepping [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2264](https://github.com/community-scripts/ProxmoxVE/pull/2264))
 | 
				
			||||||
 | 
					- Fix: Apache Guacamole Version Crawling - only latest Version [@MickLesk](https://github.com/MickLesk) ([#2258](https://github.com/community-scripts/ProxmoxVE/pull/2258))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Update Komodo icon [@bannert1337](https://github.com/bannert1337) ([#2263](https://github.com/community-scripts/ProxmoxVE/pull/2263))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🧰 Maintenance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Add Workflow to test Scripts [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2269](https://github.com/community-scripts/ProxmoxVE/pull/2269))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-02-10
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 💥 Breaking Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [Fix] Filebrowser - Add Static Path for DB [@MickLesk](https://github.com/MickLesk) ([#2207](https://github.com/community-scripts/ProxmoxVE/pull/2207))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### ✨ New Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- New Script: Prometheus Paperless-NGX Exporter [@andygrunwald](https://github.com/andygrunwald) ([#2153](https://github.com/community-scripts/ProxmoxVE/pull/2153))
 | 
				
			||||||
 | 
					- New Script: Proxmox Mail Gateway [@thost96](https://github.com/thost96) ([#1906](https://github.com/community-scripts/ProxmoxVE/pull/1906))
 | 
				
			||||||
 | 
					- New Script: FreshRSS [@bvdberg01](https://github.com/bvdberg01) ([#2226](https://github.com/community-scripts/ProxmoxVE/pull/2226))
 | 
				
			||||||
 | 
					- New Script: Zitadel [@dave-yap](https://github.com/dave-yap) ([#2141](https://github.com/community-scripts/ProxmoxVE/pull/2141))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Feature: Automatic Deletion of choosen LXC's (lxc-delete.sh) [@MickLesk](https://github.com/MickLesk) ([#2228](https://github.com/community-scripts/ProxmoxVE/pull/2228))
 | 
				
			||||||
 | 
					- Quickfix: Crafty-Controller remove unnecessary \ [@MickLesk](https://github.com/MickLesk) ([#2233](https://github.com/community-scripts/ProxmoxVE/pull/2233))
 | 
				
			||||||
 | 
					- Fix: Crafty-Controller java versions and set default [@CrazyWolf13](https://github.com/CrazyWolf13) ([#2199](https://github.com/community-scripts/ProxmoxVE/pull/2199))
 | 
				
			||||||
 | 
					- Feature: Add optional Port for Filebrowser [@MickLesk](https://github.com/MickLesk) ([#2224](https://github.com/community-scripts/ProxmoxVE/pull/2224))
 | 
				
			||||||
 | 
					- [core] Prevent double spinner [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2203](https://github.com/community-scripts/ProxmoxVE/pull/2203))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Website: Fix Zitadel Logo & Created-Date [@MickLesk](https://github.com/MickLesk) ([#2217](https://github.com/community-scripts/ProxmoxVE/pull/2217))
 | 
				
			||||||
 | 
					- Fixed URL typo zerotier-one.json [@Divaksh](https://github.com/Divaksh) ([#2206](https://github.com/community-scripts/ProxmoxVE/pull/2206))
 | 
				
			||||||
 | 
					- evcc.json Clarify the config file location [@mvdw](https://github.com/mvdw) ([#2193](https://github.com/community-scripts/ProxmoxVE/pull/2193))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🧰 Maintenance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [gh]: Improve Workflows, Templates, Handling [@MickLesk](https://github.com/MickLesk) ([#2214](https://github.com/community-scripts/ProxmoxVE/pull/2214))
 | 
				
			||||||
 | 
					- [core] Fix app-header workflow and add API [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2204](https://github.com/community-scripts/ProxmoxVE/pull/2204))
 | 
				
			||||||
 | 
					- Fix: "read -p" does not support color formatting [@PhoenixEmik](https://github.com/PhoenixEmik) ([#2191](https://github.com/community-scripts/ProxmoxVE/pull/2191))
 | 
				
			||||||
 | 
					- [API] Add API to vms [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2021](https://github.com/community-scripts/ProxmoxVE/pull/2021))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-02-09
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Changed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### ✨ New Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- New Script: pbs_microcode.sh [@DonPablo1010](https://github.com/DonPablo1010) ([#2166](https://github.com/community-scripts/ProxmoxVE/pull/2166))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Keep the same hass_config volume for Home Assistant [@genehand](https://github.com/genehand) ([#2160](https://github.com/community-scripts/ProxmoxVE/pull/2160))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Website: Set new Logo for Paperless-AI [@MickLesk](https://github.com/MickLesk) ([#2194](https://github.com/community-scripts/ProxmoxVE/pull/2194))
 | 
				
			||||||
 | 
					- Fix: Barcode Buddy Logo & Title [@MickLesk](https://github.com/MickLesk) ([#2183](https://github.com/community-scripts/ProxmoxVE/pull/2183))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-02-08
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Changed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### ✨ New Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- New script: Barcode Buddy [@bvdberg01](https://github.com/bvdberg01) ([#2167](https://github.com/community-scripts/ProxmoxVE/pull/2167))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Fix: Actualbudget - salvage the `.migrate` file when upgrading [@bourquep](https://github.com/bourquep) ([#2173](https://github.com/community-scripts/ProxmoxVE/pull/2173))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Update cosmos.json description [@BramSuurdje](https://github.com/BramSuurdje) ([#2162](https://github.com/community-scripts/ProxmoxVE/pull/2162))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🧰 Maintenance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- fix typos in CONTRIBUTOR_GUIDE [@thomashondema](https://github.com/thomashondema) ([#2174](https://github.com/community-scripts/ProxmoxVE/pull/2174))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 2025-02-07 - 10.000 ⭐
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Changed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 💥 Breaking Changes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [core]: Enhance LXC template handling and improve error recovery [@MickLesk](https://github.com/MickLesk) ([#2128](https://github.com/community-scripts/ProxmoxVE/pull/2128))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### ✨ New Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- New Script: Cosmos [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2120](https://github.com/community-scripts/ProxmoxVE/pull/2120))
 | 
				
			||||||
 | 
					- New Script: SearXNG [@MickLesk](https://github.com/MickLesk) ([#2123](https://github.com/community-scripts/ProxmoxVE/pull/2123))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🚀 Updated Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Fix: Trillium Update Function & Harmonize Installation [@MickLesk](https://github.com/MickLesk) ([#2148](https://github.com/community-scripts/ProxmoxVE/pull/2148))
 | 
				
			||||||
 | 
					- Fix: Zerotier-One fixed missing dependency [@tremor021](https://github.com/tremor021) ([#2147](https://github.com/community-scripts/ProxmoxVE/pull/2147))
 | 
				
			||||||
 | 
					- Fix: Openwrt Version checking [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2137](https://github.com/community-scripts/ProxmoxVE/pull/2137))
 | 
				
			||||||
 | 
					- Fix: PeaNUT Increase HDD & RAM Size [@MickLesk](https://github.com/MickLesk) ([#2127](https://github.com/community-scripts/ProxmoxVE/pull/2127))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🌐 Website
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Fix: Zerotier json had a bad script path [@tremor021](https://github.com/tremor021) ([#2144](https://github.com/community-scripts/ProxmoxVE/pull/2144))
 | 
				
			||||||
 | 
					- Fix: Cosmos logo doesnt display on website [@MickLesk](https://github.com/MickLesk) ([#2132](https://github.com/community-scripts/ProxmoxVE/pull/2132))
 | 
				
			||||||
 | 
					- Fix JSON-Editor [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2121](https://github.com/community-scripts/ProxmoxVE/pull/2121))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 🧰 Maintenance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [gh]: Following the trend - add star-history in readme [@MickLesk](https://github.com/MickLesk) ([#2135](https://github.com/community-scripts/ProxmoxVE/pull/2135))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 2025-02-06
 | 
					## 2025-02-06
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Changed
 | 
					### Changed
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								README.md
									
									
									
									
									
								
							@@ -91,6 +91,16 @@ If you encounter any issues or have suggestions for improvement, file a new issu
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## ⭐ Star History
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<a href="https://star-history.com/#community-scripts/ProxmoxVE&Date">
 | 
				
			||||||
 | 
					 <picture>
 | 
				
			||||||
 | 
					   <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date&theme=dark" />
 | 
				
			||||||
 | 
					   <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
 | 
				
			||||||
 | 
					   <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=community-scripts/ProxmoxVE&type=Date" />
 | 
				
			||||||
 | 
					 </picture>
 | 
				
			||||||
 | 
					</a>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 📜 License
 | 
					## 📜 License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This project is licensed under the [MIT License](LICENSE).
 | 
					This project is licensed under the [MIT License](LICENSE).
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# App Default Values
 | 
					# App Default Values
 | 
				
			||||||
APP="2FAuth"
 | 
					APP="2FAuth"
 | 
				
			||||||
TAGS="2fa;authenticator"
 | 
					var_tags="2fa;authenticator"
 | 
				
			||||||
var_cpu="1"
 | 
					var_cpu="1"
 | 
				
			||||||
var_ram="512"
 | 
					var_ram="512"
 | 
				
			||||||
var_disk="2"
 | 
					var_disk="2"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,6 +48,7 @@ function update_script() {
 | 
				
			|||||||
        mv *ctual-server-* /opt/actualbudget
 | 
					        mv *ctual-server-* /opt/actualbudget
 | 
				
			||||||
        rm -rf /opt/actualbudget/.env
 | 
					        rm -rf /opt/actualbudget/.env
 | 
				
			||||||
        mv /opt/actualbudget_bak/.env /opt/actualbudget
 | 
					        mv /opt/actualbudget_bak/.env /opt/actualbudget
 | 
				
			||||||
 | 
					        mv /opt/actualbudget_bak/.migrate /opt/actualbudget
 | 
				
			||||||
        mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
 | 
					        mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
 | 
				
			||||||
        cd /opt/actualbudget
 | 
					        cd /opt/actualbudget
 | 
				
			||||||
        yarn install &>/dev/null
 | 
					        yarn install &>/dev/null
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/r
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#App Default Values
 | 
					#App Default Values
 | 
				
			||||||
APP="Apache-Guacamole"
 | 
					APP="Apache-Guacamole"
 | 
				
			||||||
TAGS="webserver;remote"
 | 
					var_tags="webserver;remote"
 | 
				
			||||||
var_disk="4"
 | 
					var_disk="4"
 | 
				
			||||||
var_cpu="1"
 | 
					var_cpu="1"
 | 
				
			||||||
var_ram="2048"
 | 
					var_ram="2048"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										76
									
								
								ct/barcode-buddy.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								ct/barcode-buddy.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
				
			|||||||
 | 
					#!/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: bvdberg01
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://github.com/Forceu/barcodebuddy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Default Values
 | 
				
			||||||
 | 
					APP="Barcode-Buddy"
 | 
				
			||||||
 | 
					var_tags="grocery;household"
 | 
				
			||||||
 | 
					var_cpu="1"
 | 
				
			||||||
 | 
					var_ram="512"
 | 
				
			||||||
 | 
					var_disk="3"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Output & Base Settings
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Core
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					  header_info
 | 
				
			||||||
 | 
					  check_container_storage
 | 
				
			||||||
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					  if [[ ! -d /opt/barcodebuddy ]]; then
 | 
				
			||||||
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  RELEASE=$(curl -s https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
				
			||||||
 | 
					    msg_info "Stopping Service"
 | 
				
			||||||
 | 
					    systemctl stop apache2
 | 
				
			||||||
 | 
					    systemctl stop barcodebuddy
 | 
				
			||||||
 | 
					    msg_ok "Stopped Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
 | 
					    cd /opt
 | 
				
			||||||
 | 
					    mv /opt/barcodebuddy/ /opt/barcodebuddy-backup
 | 
				
			||||||
 | 
					    wget -q "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip"
 | 
				
			||||||
 | 
					    unzip -q "v${RELEASE}.zip"
 | 
				
			||||||
 | 
					    mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy
 | 
				
			||||||
 | 
					    cp -r /opt/barcodebuddy-backup/data/. /opt/barcodebuddy/data
 | 
				
			||||||
 | 
					    chown -R www-data:www-data /opt/barcodebuddy/data
 | 
				
			||||||
 | 
					    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
				
			||||||
 | 
					    msg_ok "Updated $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting Service"
 | 
				
			||||||
 | 
					    systemctl start apache2
 | 
				
			||||||
 | 
					    systemctl start barcodebuddy
 | 
				
			||||||
 | 
					    msg_ok "Started Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Cleaning up"
 | 
				
			||||||
 | 
					    rm -r "/opt/v${RELEASE}.zip"
 | 
				
			||||||
 | 
					    rm -r /opt/barcodebuddy-backup
 | 
				
			||||||
 | 
					    msg_ok "Cleaned"
 | 
				
			||||||
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start
 | 
				
			||||||
 | 
					build_container
 | 
				
			||||||
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
				
			||||||
@@ -29,7 +29,7 @@ function update_script() {
 | 
				
			|||||||
    msg_error "No ${APP} Installation Found!"
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
    exit
 | 
					    exit
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }') 
 | 
					  RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -v '\-rc' | sort -V | tail -n 1) 
 | 
				
			||||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
					  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
				
			||||||
    msg_info "Updating ${APP} to v${RELEASE}"
 | 
					    msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
    omd stop monitoring &>/dev/null
 | 
					    omd stop monitoring &>/dev/null
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								ct/cosmos.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								ct/cosmos.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					#!/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: Michel Roegl-Brunner (michelroegl-brunner)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://https://cosmos-cloud.io/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Default Values
 | 
				
			||||||
 | 
					APP="cosmos"
 | 
				
			||||||
 | 
					var_tags="os,docker"
 | 
				
			||||||
 | 
					var_cpu="2"
 | 
				
			||||||
 | 
					var_ram="2048"
 | 
				
			||||||
 | 
					var_disk="8"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Output & Base Settings
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Core
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					  header_info
 | 
				
			||||||
 | 
					  check_container_storage
 | 
				
			||||||
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					  if [[ ! -d /opt/cosmos ]]; then
 | 
				
			||||||
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  msg_ok "${APP} updates itself automatically!"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start
 | 
				
			||||||
 | 
					build_container
 | 
				
			||||||
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
				
			||||||
@@ -182,24 +182,37 @@ mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLA
 | 
				
			|||||||
[ ${#TEMPLATES[@]} -gt 0 ] || { msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."; exit 207; }
 | 
					[ ${#TEMPLATES[@]} -gt 0 ] || { msg_error "Unable to find a template when searching for '$TEMPLATE_SEARCH'."; exit 207; }
 | 
				
			||||||
TEMPLATE="${TEMPLATES[-1]}"
 | 
					TEMPLATE="${TEMPLATES[-1]}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Download LXC template if needed
 | 
					TEMPLATE_PATH="/var/lib/vz/template/cache/$TEMPLATE"
 | 
				
			||||||
if ! pveam list $TEMPLATE_STORAGE | grep -q $TEMPLATE; then
 | 
					# Check if template exists, if corrupt remove and redownload
 | 
				
			||||||
 | 
					if ! pveam list "$TEMPLATE_STORAGE" | grep -q "$TEMPLATE"; then
 | 
				
			||||||
 | 
					  [[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
 | 
				
			||||||
  msg_info "Downloading LXC Template"
 | 
					  msg_info "Downloading LXC Template"
 | 
				
			||||||
  pveam download $TEMPLATE_STORAGE $TEMPLATE >/dev/null ||
 | 
					  pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||
 | 
				
			||||||
    msg_error "A problem occured while downloading the LXC template."
 | 
					    { msg_error "A problem occurred while downloading the LXC template."; exit 208; }
 | 
				
			||||||
    exit 208
 | 
					 | 
				
			||||||
  msg_ok "Downloaded LXC Template"
 | 
					  msg_ok "Downloaded LXC Template"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Check and fix subuid/subgid
 | 
				
			||||||
 | 
					grep -q "root:100000:65536" /etc/subuid || echo "root:100000:65536" >> /etc/subuid
 | 
				
			||||||
 | 
					grep -q "root:100000:65536" /etc/subgid || echo "root:100000:65536" >> /etc/subgid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Combine all options
 | 
					# Combine all options
 | 
				
			||||||
DEFAULT_PCT_OPTIONS=(
 | 
					 | 
				
			||||||
  -arch $(dpkg --print-architecture))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
 | 
					PCT_OPTIONS=(${PCT_OPTIONS[@]:-${DEFAULT_PCT_OPTIONS[@]}})
 | 
				
			||||||
[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs $CONTAINER_STORAGE:${PCT_DISK_SIZE:-8})
 | 
					[[ " ${PCT_OPTIONS[@]} " =~ " -rootfs " ]] || PCT_OPTIONS+=(-rootfs "$CONTAINER_STORAGE:${PCT_DISK_SIZE:-8}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Create container
 | 
					# Create container with template integrity check
 | 
				
			||||||
msg_info "Creating LXC Container"
 | 
					msg_info "Creating LXC Container"
 | 
				
			||||||
pct create $CTID ${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE} ${PCT_OPTIONS[@]} >/dev/null || { msg_error "A problem occured while trying to create container.";  exit 200; }
 | 
					  if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
 | 
				
			||||||
 | 
					      [[ -f "$TEMPLATE_PATH" ]] && rm -f "$TEMPLATE_PATH"
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					    msg_ok "Template integrity check completed"
 | 
				
			||||||
 | 
					    pveam download "$TEMPLATE_STORAGE" "$TEMPLATE" >/dev/null ||    
 | 
				
			||||||
 | 
					      { msg_error "A problem occurred while re-downloading the LXC template."; exit 208; }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    msg_ok "Re-downloaded LXC Template"
 | 
				
			||||||
 | 
					    if ! pct create "$CTID" "${TEMPLATE_STORAGE}:vztmpl/${TEMPLATE}" "${PCT_OPTIONS[@]}" &>/dev/null; then
 | 
				
			||||||
 | 
					        msg_error "A problem occurred while trying to create container after re-downloading template."
 | 
				
			||||||
 | 
					      exit 200
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created."
 | 
					msg_ok "LXC Container ${BL}$CTID${CL} ${GN}was successfully created."
 | 
				
			||||||
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										54
									
								
								ct/cross-seed.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								ct/cross-seed.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					#!/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: Jakub Matraszek (jmatraszek)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://www.cross-seed.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="cross-seed"
 | 
				
			||||||
 | 
					var_tags="arr"
 | 
				
			||||||
 | 
					var_cpu="1"
 | 
				
			||||||
 | 
					var_ram="1024"
 | 
				
			||||||
 | 
					var_disk="2"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					    header_info
 | 
				
			||||||
 | 
					    check_container_storage
 | 
				
			||||||
 | 
					    check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if command -v cross-seed &> /dev/null; then
 | 
				
			||||||
 | 
					        current_version=$(cross-seed --version)
 | 
				
			||||||
 | 
					        latest_version=$(npm show cross-seed version)
 | 
				
			||||||
 | 
					        if [ "$current_version" != "$latest_version" ]; then
 | 
				
			||||||
 | 
					            msg_info "Updating ${APP} from version v${current_version} to v${latest_version}"
 | 
				
			||||||
 | 
					            npm install -g cross-seed@latest &> /dev/null
 | 
				
			||||||
 | 
					            systemctl restart cross-seed
 | 
				
			||||||
 | 
					            msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            msg_ok "${APP} is already at v${current_version}"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    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 cross-seed API using the following URL:${CL}"
 | 
				
			||||||
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2468${CL}"
 | 
				
			||||||
@@ -6,7 +6,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
 | 
				
			|||||||
# Source: https://github.com/duplicati/duplicati/
 | 
					# Source: https://github.com/duplicati/duplicati/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
APP="Duplicati"
 | 
					APP="Duplicati"
 | 
				
			||||||
TAGS="backup"
 | 
					var_tags="backup"
 | 
				
			||||||
var_cpu="1"
 | 
					var_cpu="1"
 | 
				
			||||||
var_ram="1024"
 | 
					var_ram="1024"
 | 
				
			||||||
var_disk="10"
 | 
					var_disk="10"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										74
									
								
								ct/excalidraw.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								ct/excalidraw.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
				
			|||||||
 | 
					#!/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/excalidraw/excalidraw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="Excalidraw"
 | 
				
			||||||
 | 
					TAGS="diagrams"
 | 
				
			||||||
 | 
					var_cpu="2"
 | 
				
			||||||
 | 
					var_ram="3072"
 | 
				
			||||||
 | 
					var_disk="6"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					    header_info
 | 
				
			||||||
 | 
					    check_container_storage
 | 
				
			||||||
 | 
					    check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [[ ! -d /opt/excalidraw ]]; then
 | 
				
			||||||
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    RELEASE=$(curl -s https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					    if [[ "${RELEASE}" != "$(cat /opt/excalidraw_version.txt)" ]] || [[ ! -f /opt/excalidraw_version.txt ]]; then
 | 
				
			||||||
 | 
					        msg_info "Stopping $APP"
 | 
				
			||||||
 | 
					        systemctl stop excalidraw
 | 
				
			||||||
 | 
					        msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Updating $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					        cd /tmp
 | 
				
			||||||
 | 
					        temp_file=$(mktemp)
 | 
				
			||||||
 | 
					        wget -q "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
 | 
				
			||||||
 | 
					        tar xzf $temp_file
 | 
				
			||||||
 | 
					        rm -rf /opt/excalidraw
 | 
				
			||||||
 | 
					        mv excalidraw-${RELEASE} /opt/excalidraw
 | 
				
			||||||
 | 
					        cd /opt/excalidraw
 | 
				
			||||||
 | 
					        yarn &> /dev/null
 | 
				
			||||||
 | 
					        msg_ok "Updated $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Starting $APP"
 | 
				
			||||||
 | 
					        systemctl start excalidraw
 | 
				
			||||||
 | 
					        msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Cleaning Up"
 | 
				
			||||||
 | 
					        rm -rf $temp_file
 | 
				
			||||||
 | 
					        msg_ok "Cleanup Completed"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        echo "${RELEASE}" >/opt/excalidraw_version.txt
 | 
				
			||||||
 | 
					        msg_ok "Update Successful"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					    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}"
 | 
				
			||||||
							
								
								
									
										46
									
								
								ct/freshrss.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								ct/freshrss.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					#!/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: bvdberg01
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://github.com/FreshRSS/FreshRSS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Default Values
 | 
				
			||||||
 | 
					APP="FreshRSS"
 | 
				
			||||||
 | 
					var_tags="RSS"
 | 
				
			||||||
 | 
					var_cpu="2"
 | 
				
			||||||
 | 
					var_ram="1024"
 | 
				
			||||||
 | 
					var_disk="4"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Output & Base Settings
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Core
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					    header_info
 | 
				
			||||||
 | 
					    check_container_storage
 | 
				
			||||||
 | 
					    check_container_resources
 | 
				
			||||||
 | 
					    if [[ ! -d /opt/freshrss ]]; then
 | 
				
			||||||
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    msg_error "FreshRSS should be updated via the user interface."
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start
 | 
				
			||||||
 | 
					build_container
 | 
				
			||||||
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
				
			||||||
							
								
								
									
										59
									
								
								ct/graylog.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								ct/graylog.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					#!/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://graylog.org/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="Graylog"
 | 
				
			||||||
 | 
					TAGS="logging"
 | 
				
			||||||
 | 
					var_cpu="2"
 | 
				
			||||||
 | 
					var_ram="8192"
 | 
				
			||||||
 | 
					var_disk="30"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					    header_info
 | 
				
			||||||
 | 
					    check_container_storage
 | 
				
			||||||
 | 
					    check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [[ ! -d /etc/graylog ]]; then
 | 
				
			||||||
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    msg_info "Stopping $APP"
 | 
				
			||||||
 | 
					    systemctl stop graylog-datanode
 | 
				
			||||||
 | 
					    systemctl stop graylog-server
 | 
				
			||||||
 | 
					    msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating $APP"
 | 
				
			||||||
 | 
					    apt-get update &> /dev/null
 | 
				
			||||||
 | 
					    apt-get upgrade -y &> /dev/null
 | 
				
			||||||
 | 
					    msg_ok "Updated $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting $APP"
 | 
				
			||||||
 | 
					    systemctl start graylog-datanode
 | 
				
			||||||
 | 
					    systemctl start graylog-server
 | 
				
			||||||
 | 
					    msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_ok "Update Successful"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start
 | 
				
			||||||
 | 
					build_container
 | 
				
			||||||
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/barcode-buddy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/barcode-buddy
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					    ____                            __           ____            __    __     
 | 
				
			||||||
 | 
					   / __ )____ _______________  ____/ /__        / __ )__  ______/ /___/ /_  __
 | 
				
			||||||
 | 
					  / __  / __ `/ ___/ ___/ __ \/ __  / _ \______/ __  / / / / __  / __  / / / /
 | 
				
			||||||
 | 
					 / /_/ / /_/ / /  / /__/ /_/ / /_/ /  __/_____/ /_/ / /_/ / /_/ / /_/ / /_/ / 
 | 
				
			||||||
 | 
					/_____/\__,_/_/   \___/\____/\__,_/\___/     /_____/\__,_/\__,_/\__,_/\__, /  
 | 
				
			||||||
 | 
					                                                                     /____/   
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/cosmos
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/cosmos
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					                                       
 | 
				
			||||||
 | 
					  _________  _________ ___  ____  _____
 | 
				
			||||||
 | 
					 / ___/ __ \/ ___/ __ `__ \/ __ \/ ___/
 | 
				
			||||||
 | 
					/ /__/ /_/ (__  ) / / / / / /_/ (__  ) 
 | 
				
			||||||
 | 
					\___/\____/____/_/ /_/ /_/\____/____/  
 | 
				
			||||||
 | 
					                                       
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/cross-seed
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/cross-seed
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					                                                      __
 | 
				
			||||||
 | 
					  ______________  __________      ________  ___  ____/ /
 | 
				
			||||||
 | 
					 / ___/ ___/ __ \/ ___/ ___/_____/ ___/ _ \/ _ \/ __  / 
 | 
				
			||||||
 | 
					/ /__/ /  / /_/ (__  |__  )_____(__  )  __/  __/ /_/ /  
 | 
				
			||||||
 | 
					\___/_/   \____/____/____/     /____/\___/\___/\__,_/   
 | 
				
			||||||
 | 
					                                                        
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/excalidraw
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/excalidraw
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					    ______                ___     __                   
 | 
				
			||||||
 | 
					   / ____/  ___________ _/ (_)___/ /________ __      __
 | 
				
			||||||
 | 
					  / __/ | |/_/ ___/ __ `/ / / __  / ___/ __ `/ | /| / /
 | 
				
			||||||
 | 
					 / /____>  </ /__/ /_/ / / / /_/ / /  / /_/ /| |/ |/ / 
 | 
				
			||||||
 | 
					/_____/_/|_|\___/\__,_/_/_/\__,_/_/   \__,_/ |__/|__/  
 | 
				
			||||||
 | 
					                                                       
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/freshrss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/freshrss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					    ______               __    ____  __________
 | 
				
			||||||
 | 
					   / ____/_______  _____/ /_  / __ \/ ___/ ___/
 | 
				
			||||||
 | 
					  / /_  / ___/ _ \/ ___/ __ \/ /_/ /\__ \\__ \ 
 | 
				
			||||||
 | 
					 / __/ / /  /  __(__  ) / / / _, _/___/ /__/ / 
 | 
				
			||||||
 | 
					/_/   /_/   \___/____/_/ /_/_/ |_|/____/____/  
 | 
				
			||||||
 | 
					                                               
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/graylog
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/graylog
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					   ______                 __           
 | 
				
			||||||
 | 
					  / ____/________ ___  __/ /___  ____ _
 | 
				
			||||||
 | 
					 / / __/ ___/ __ `/ / / / / __ \/ __ `/
 | 
				
			||||||
 | 
					/ /_/ / /  / /_/ / /_/ / / /_/ / /_/ / 
 | 
				
			||||||
 | 
					\____/_/   \__,_/\__, /_/\____/\__, /  
 | 
				
			||||||
 | 
					                /____/        /____/   
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/kometa
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/kometa
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					    __ __                     __       
 | 
				
			||||||
 | 
					   / //_/___  ____ ___  ___  / /_____ _
 | 
				
			||||||
 | 
					  / ,< / __ \/ __ `__ \/ _ \/ __/ __ `/
 | 
				
			||||||
 | 
					 / /| / /_/ / / / / / /  __/ /_/ /_/ / 
 | 
				
			||||||
 | 
					/_/ |_\____/_/ /_/ /_/\___/\__/\__,_/  
 | 
				
			||||||
 | 
					                                       
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/prometheus-paperless-ngx-exporter
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/prometheus-paperless-ngx-exporter
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					    ____                            __  __                          ____                        __                     _   _________  __      ______                      __           
 | 
				
			||||||
 | 
					   / __ \_________  ____ ___  ___  / /_/ /_  ___  __  _______      / __ \____ _____  ___  _____/ /__  __________      / | / / ____/ |/ /     / ____/  ______  ____  _____/ /____  _____
 | 
				
			||||||
 | 
					  / /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /_/ / __ `/ __ \/ _ \/ ___/ / _ \/ ___/ ___/_____/  |/ / / __ |   /_____/ __/ | |/_/ __ \/ __ \/ ___/ __/ _ \/ ___/
 | 
				
			||||||
 | 
					 / ____/ /  / /_/ / / / / / /  __/ /_/ / / /  __/ /_/ (__  )_____/ ____/ /_/ / /_/ /  __/ /  / /  __(__  |__  )_____/ /|  / /_/ //   /_____/ /____>  </ /_/ / /_/ / /  / /_/  __/ /    
 | 
				
			||||||
 | 
					/_/   /_/   \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/     /_/    \__,_/ .___/\___/_/  /_/\___/____/____/     /_/ |_/\____//_/|_|    /_____/_/|_/ .___/\____/_/   \__/\___/_/     
 | 
				
			||||||
 | 
					                                                                           /_/                                                                      /_/                                
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/proxmox-mail-gateway
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/proxmox-mail-gateway
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					    ____                                             __  ___      _ __      ______      __                          
 | 
				
			||||||
 | 
					   / __ \_________  _  ______ ___  ____  _  __      /  |/  /___ _(_) /     / ____/___ _/ /____ _      ______ ___  __
 | 
				
			||||||
 | 
					  / /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ /|_/ / __ `/ / /_____/ / __/ __ `/ __/ _ \ | /| / / __ `/ / / /
 | 
				
			||||||
 | 
					 / ____/ /  / /_/ />  </ / / / / / /_/ />  </_____/ /  / / /_/ / / /_____/ /_/ / /_/ / /_/  __/ |/ |/ / /_/ / /_/ / 
 | 
				
			||||||
 | 
					/_/   /_/   \____/_/|_/_/ /_/ /_/\____/_/|_|     /_/  /_/\__,_/_/_/      \____/\__,_/\__/\___/|__/|__/\__,_/\__, /  
 | 
				
			||||||
 | 
					                                                                                                           /____/   
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/searxng
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/searxng
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					   _____                _  __ _   ________
 | 
				
			||||||
 | 
					  / ___/___  ____ _____| |/ // | / / ____/
 | 
				
			||||||
 | 
					  \__ \/ _ \/ __ `/ ___/   //  |/ / / __  
 | 
				
			||||||
 | 
					 ___/ /  __/ /_/ / /  /   |/ /|  / /_/ /  
 | 
				
			||||||
 | 
					/____/\___/\__,_/_/  /_/|_/_/ |_/\____/   
 | 
				
			||||||
 | 
					                                          
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/suwayomiserver
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/suwayomiserver
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					   _____                                            _ _____                          
 | 
				
			||||||
 | 
					  / ___/__  ___      ______ ___  ______  ____ ___  (_) ___/___  ______   _____  _____
 | 
				
			||||||
 | 
					  \__ \/ / / / | /| / / __ `/ / / / __ \/ __ `__ \/ /\__ \/ _ \/ ___/ | / / _ \/ ___/
 | 
				
			||||||
 | 
					 ___/ / /_/ /| |/ |/ / /_/ / /_/ / /_/ / / / / / / /___/ /  __/ /   | |/ /  __/ /    
 | 
				
			||||||
 | 
					/____/\__,_/ |__/|__/\__,_/\__, /\____/_/ /_/ /_/_//____/\___/_/    |___/\___/_/     
 | 
				
			||||||
 | 
					                          /____/                                                     
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/tasmocompiler
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/tasmocompiler
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					  ______                           ______                      _ __         
 | 
				
			||||||
 | 
					 /_  __/___ __________ ___  ____  / ____/___  ____ ___  ____  (_) /__  _____
 | 
				
			||||||
 | 
					  / / / __ `/ ___/ __ `__ \/ __ \/ /   / __ \/ __ `__ \/ __ \/ / / _ \/ ___/
 | 
				
			||||||
 | 
					 / / / /_/ (__  ) / / / / / /_/ / /___/ /_/ / / / / / / /_/ / / /  __/ /    
 | 
				
			||||||
 | 
					/_/  \__,_/____/_/ /_/ /_/\____/\____/\____/_/ /_/ /_/ .___/_/_/\___/_/     
 | 
				
			||||||
 | 
					                                                    /_/                     
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/watcharr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/watcharr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					 _       __      __       __                   
 | 
				
			||||||
 | 
					| |     / /___ _/ /______/ /_  ____ ___________
 | 
				
			||||||
 | 
					| | /| / / __ `/ __/ ___/ __ \/ __ `/ ___/ ___/
 | 
				
			||||||
 | 
					| |/ |/ / /_/ / /_/ /__/ / / / /_/ / /  / /    
 | 
				
			||||||
 | 
					|__/|__/\__,_/\__/\___/_/ /_/\__,_/_/  /_/     
 | 
				
			||||||
 | 
					                                               
 | 
				
			||||||
							
								
								
									
										6
									
								
								ct/headers/zitadel
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								ct/headers/zitadel
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					 _____   _ __            __     __
 | 
				
			||||||
 | 
					/__  /  (_) /_____ _____/ /__  / /
 | 
				
			||||||
 | 
					  / /  / / __/ __ `/ __  / _ \/ / 
 | 
				
			||||||
 | 
					 / /__/ / /_/ /_/ / /_/ /  __/ /  
 | 
				
			||||||
 | 
					/____/_/\__/\__,_/\__,_/\___/_/   
 | 
				
			||||||
 | 
					                                  
 | 
				
			||||||
@@ -49,7 +49,7 @@ function update_script() {
 | 
				
			|||||||
      LATEST_IMAGE="$(docker inspect --format "{{.Id}}" --type image "${CONTAINER_IMAGE}")"
 | 
					      LATEST_IMAGE="$(docker inspect --format "{{.Id}}" --type image "${CONTAINER_IMAGE}")"
 | 
				
			||||||
      if [[ "${RUNNING_IMAGE}" != "${LATEST_IMAGE}" ]]; then
 | 
					      if [[ "${RUNNING_IMAGE}" != "${LATEST_IMAGE}" ]]; then
 | 
				
			||||||
        echo "Updating ${container} image ${CONTAINER_IMAGE}"
 | 
					        echo "Updating ${container} image ${CONTAINER_IMAGE}"
 | 
				
			||||||
        DOCKER_COMMAND="$(runlike "${container}")"
 | 
					        DOCKER_COMMAND="$(runlike --use-volume-id "${container}")"
 | 
				
			||||||
        docker rm --force "${container}"
 | 
					        docker rm --force "${container}"
 | 
				
			||||||
        eval ${DOCKER_COMMAND}
 | 
					        eval ${DOCKER_COMMAND}
 | 
				
			||||||
      fi
 | 
					      fi
 | 
				
			||||||
@@ -113,4 +113,4 @@ msg_ok "Completed Successfully!\n"
 | 
				
			|||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}HA: http://${IP}:8123${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}HA: http://${IP}:8123${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}Portainer: http://${IP}:9443${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}Portainer: http://${IP}:9443${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										80
									
								
								ct/kometa.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								ct/kometa.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
				
			|||||||
 | 
					#!/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/Kometa-Team/Kometa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Default Values
 | 
				
			||||||
 | 
					APP="Kometa"
 | 
				
			||||||
 | 
					TAGS="media;streaming"
 | 
				
			||||||
 | 
					var_cpu="1"
 | 
				
			||||||
 | 
					var_ram="1024"
 | 
				
			||||||
 | 
					var_disk="4"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					    header_info
 | 
				
			||||||
 | 
					    check_container_storage
 | 
				
			||||||
 | 
					    check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [[ ! -f "/opt/kometa/kometa.py" ]]; then
 | 
				
			||||||
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    RELEASE=$(curl -s https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					    if [[ "${RELEASE}" != "$(cat /opt/kometa_version.txt)" ]] || [[ ! -f /opt/kometa_version.txt ]]; then
 | 
				
			||||||
 | 
					        msg_info "Updating $APP"
 | 
				
			||||||
 | 
					        msg_info "Stopping $APP"
 | 
				
			||||||
 | 
					        systemctl stop kometa
 | 
				
			||||||
 | 
					        msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Updating $APP to ${RELEASE}"
 | 
				
			||||||
 | 
					        cd /tmp
 | 
				
			||||||
 | 
					        temp_file=$(mktemp)
 | 
				
			||||||
 | 
					        RELEASE=$(curl -s https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					        wget -q "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
 | 
				
			||||||
 | 
					        tar -xzf "$temp_file"
 | 
				
			||||||
 | 
					        cp /opt/kometa/config/config.yml /opt
 | 
				
			||||||
 | 
					        rm -rf /opt/kometa
 | 
				
			||||||
 | 
					        mv Kometa-${RELEASE} /opt/kometa
 | 
				
			||||||
 | 
					        cd /opt/kometa
 | 
				
			||||||
 | 
					        rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
				
			||||||
 | 
					        pip install -r requirements.txt --ignore-installed &> /dev/null
 | 
				
			||||||
 | 
					        mkdir -p config/assets
 | 
				
			||||||
 | 
					        cp /opt/config.yml config/config.yml
 | 
				
			||||||
 | 
					        echo "${RELEASE}" >/opt/kometa_version.txt
 | 
				
			||||||
 | 
					        msg_ok "Updated $APP to ${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Starting $APP"
 | 
				
			||||||
 | 
					        systemctl start kometa
 | 
				
			||||||
 | 
					        msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Cleaning Up"
 | 
				
			||||||
 | 
					        rm -f $temp_file
 | 
				
			||||||
 | 
					        msg_ok "Cleanup Completed"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_ok "Update Successful"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start
 | 
				
			||||||
 | 
					build_container
 | 
				
			||||||
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
				
			||||||
@@ -9,8 +9,8 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
 | 
				
			|||||||
APP="PeaNUT"
 | 
					APP="PeaNUT"
 | 
				
			||||||
var_tags="network;ups;"
 | 
					var_tags="network;ups;"
 | 
				
			||||||
var_cpu="2"
 | 
					var_cpu="2"
 | 
				
			||||||
var_ram="2048"
 | 
					var_ram="3072"
 | 
				
			||||||
var_disk="4"
 | 
					var_disk="7"
 | 
				
			||||||
var_os="debian"
 | 
					var_os="debian"
 | 
				
			||||||
var_version="12"
 | 
					var_version="12"
 | 
				
			||||||
var_unprivileged="1"
 | 
					var_unprivileged="1"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ function update_script() {
 | 
				
			|||||||
    fi
 | 
					    fi
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
    RELEASE=$(curl -s https://api.github.com/repos/stonith404/pingvin-share/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
					    RELEASE=$(curl -s https://api.github.com/repos/stonith404/pingvin-share/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
    if [[ ! -f /opt/$pingvin_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/pingvin_version.txt)" ]]; then
 | 
					    if [[ ! -f /opt/pingvin_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/pingvin_version.txt)" ]]; then
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      msg_info "Stopping Pingvin Share"
 | 
					      msg_info "Stopping Pingvin Share"
 | 
				
			||||||
      systemctl stop pm2-root.service
 | 
					      systemctl stop pm2-root.service
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# App Default Values
 | 
					# App Default Values
 | 
				
			||||||
APP="PocketID"
 | 
					APP="PocketID"
 | 
				
			||||||
TAGS="identity-provider"
 | 
					var_tags="identity-provider"
 | 
				
			||||||
var_cpu="2"
 | 
					var_cpu="2"
 | 
				
			||||||
var_ram="2048"
 | 
					var_ram="2048"
 | 
				
			||||||
var_disk="4"
 | 
					var_disk="4"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										67
									
								
								ct/prometheus-paperless-ngx-exporter.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										67
									
								
								ct/prometheus-paperless-ngx-exporter.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					#!/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: Andy Grunwald (andygrunwald)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://github.com/hansmi/prometheus-paperless-exporter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Default Values
 | 
				
			||||||
 | 
					APP="Prometheus-Paperless-NGX-Exporter"
 | 
				
			||||||
 | 
					var_tags="monitoring;alerting"
 | 
				
			||||||
 | 
					var_cpu="1"
 | 
				
			||||||
 | 
					var_ram="256"
 | 
				
			||||||
 | 
					var_disk="2"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Output & Base Settings
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Core
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					  header_info
 | 
				
			||||||
 | 
					  check_container_storage
 | 
				
			||||||
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					  if [[ ! -f /etc/systemd/system/prometheus-paperless-ngx-exporter.service ]]; then
 | 
				
			||||||
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  RELEASE=$(curl -s https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
				
			||||||
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
 | 
					    systemctl stop prometheus-paperless-ngx-exporter
 | 
				
			||||||
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Updating ${APP} to v${RELEASE}"
 | 
				
			||||||
 | 
					    cd /opt
 | 
				
			||||||
 | 
					    wget -q https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
 | 
				
			||||||
 | 
					    tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
 | 
				
			||||||
 | 
					    cp -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
 | 
				
			||||||
 | 
					    rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
 | 
				
			||||||
 | 
					    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
				
			||||||
 | 
					    msg_ok "Updated ${APP} to v${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
 | 
					    systemctl start prometheus-paperless-ngx-exporter
 | 
				
			||||||
 | 
					    msg_ok "Started ${APP}"
 | 
				
			||||||
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start
 | 
				
			||||||
 | 
					build_container
 | 
				
			||||||
 | 
					description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
 | 
					echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
				
			||||||
 | 
					echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8081/metrics${CL}"
 | 
				
			||||||
							
								
								
									
										43
									
								
								ct/proxmox-mail-gateway.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								ct/proxmox-mail-gateway.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					#!/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: thost96 (thost96)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://www.proxmox.com/en/products/proxmox-mail-gateway
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="Proxmox-Mail-Gateway"
 | 
				
			||||||
 | 
					var_tags="mail"
 | 
				
			||||||
 | 
					var_cpu="2"
 | 
				
			||||||
 | 
					var_ram="4096"
 | 
				
			||||||
 | 
					var_disk="10"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					  header_info
 | 
				
			||||||
 | 
					  check_container_storage
 | 
				
			||||||
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					  if [[ ! -e /usr/bin/pmgproxy ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
 | 
				
			||||||
 | 
					  msg_info "Updating ${APP}"
 | 
				
			||||||
 | 
					  apt-get update &>/dev/null
 | 
				
			||||||
 | 
					  apt-get -y upgrade &>/dev/null
 | 
				
			||||||
 | 
					  msg_ok "Updated ${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}https://${IP}:8006/${CL}"
 | 
				
			||||||
							
								
								
									
										47
									
								
								ct/searxng.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								ct/searxng.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: MickLesk (Canbiz)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://github.com/searxng/searxng
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Default Values
 | 
				
			||||||
 | 
					APP="SearXNG"
 | 
				
			||||||
 | 
					var_tags="search"
 | 
				
			||||||
 | 
					var_cpu="2"
 | 
				
			||||||
 | 
					var_ram="2048"
 | 
				
			||||||
 | 
					var_disk="7"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Output & Base Settings
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Core
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					  header_info
 | 
				
			||||||
 | 
					  check_container_storage
 | 
				
			||||||
 | 
					  check_container_resources
 | 
				
			||||||
 | 
					  if [[ ! -d /usr/local/searxng/searxng-src ]]; then
 | 
				
			||||||
 | 
					    msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					    exit
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					    if cd /usr/local/searxng/searxng-src && git pull | grep -q 'Already up to date'; then
 | 
				
			||||||
 | 
					    msg_ok "There is currently no update available."
 | 
				
			||||||
 | 
					  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}:8888${CL}"
 | 
				
			||||||
@@ -6,7 +6,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
 | 
				
			|||||||
# Source: https://github.com/YuukanOO/seelf
 | 
					# Source: https://github.com/YuukanOO/seelf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
APP="seelf"
 | 
					APP="seelf"
 | 
				
			||||||
TAGS="server;docker"
 | 
					var_tags="server;docker"
 | 
				
			||||||
var_cpu="2"
 | 
					var_cpu="2"
 | 
				
			||||||
var_ram="4096"
 | 
					var_ram="4096"
 | 
				
			||||||
var_disk="10"
 | 
					var_disk="10"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
source <(curl -s https://raw.githubusercontent.com/kris701/ProxmoxVE/refs/heads/main/misc/build.func)
 | 
					source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
 | 
				
			||||||
# Copyright (c) 2021-2025 community-scripts ORG
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
# Author: Kristian Skov
 | 
					# Author: Kristian Skov
 | 
				
			||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
@@ -46,4 +46,4 @@ description
 | 
				
			|||||||
msg_ok "Completed Successfully!\n"
 | 
					msg_ok "Completed Successfully!\n"
 | 
				
			||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
					echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
				
			||||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
 | 
					echo -e "${INFO}${YW} Access it using the following IP:${CL}"
 | 
				
			||||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}:1433${CL}"
 | 
					echo -e "${TAB}${GATEWAY}${BGN}${IP}:1433${CL}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										66
									
								
								ct/suwayomiserver.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								ct/suwayomiserver.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
				
			|||||||
 | 
					#!/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: tremor021
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://github.com/Suwayomi/Suwayomi-Server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="SuwayomiServer"
 | 
				
			||||||
 | 
					var_tags="media;manga"
 | 
				
			||||||
 | 
					var_cpu="1"
 | 
				
			||||||
 | 
					var_ram="1024"
 | 
				
			||||||
 | 
					var_disk="4"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					    header_info
 | 
				
			||||||
 | 
					    check_container_storage
 | 
				
			||||||
 | 
					    check_container_resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [[ ! -f /usr/bin/suwayomi-server ]]; then
 | 
				
			||||||
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    RELEASE=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
 | 
					    if [[ "${RELEASE}" != "$(cat /opt/suwayomi-server_version.txt)" ]] || [[ ! -f /opt/suwayomi-server_version.txt ]]; then
 | 
				
			||||||
 | 
					        msg_info "Updating $APP"
 | 
				
			||||||
 | 
					        msg_info "Stopping $APP"
 | 
				
			||||||
 | 
					        systemctl stop suwayomi-server
 | 
				
			||||||
 | 
					        msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					        msg_info "Updating $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					        cd /tmp
 | 
				
			||||||
 | 
					        URL=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' |  tail -n+2 | head -n 1)
 | 
				
			||||||
 | 
					        wget -q $URL
 | 
				
			||||||
 | 
					        $STD dpkg -i /tmp/*.deb
 | 
				
			||||||
 | 
					        msg_ok "Updated $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					        msg_info "Starting $APP"
 | 
				
			||||||
 | 
					        systemctl start suwayomi-server
 | 
				
			||||||
 | 
					        msg_ok "Started $APP"
 | 
				
			||||||
 | 
					        msg_info "Cleaning Up"
 | 
				
			||||||
 | 
					        rm -f *.deb
 | 
				
			||||||
 | 
					        msg_ok "Cleanup Completed"
 | 
				
			||||||
 | 
					        echo "${RELEASE}" >/opt/suwayomi-server_version.txt.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}:4567${CL}"
 | 
				
			||||||
							
								
								
									
										71
									
								
								ct/tasmocompiler.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								ct/tasmocompiler.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
				
			|||||||
 | 
					#!/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/benzino77/tasmocompiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="TasmoCompiler"
 | 
				
			||||||
 | 
					var_tags="compiler"
 | 
				
			||||||
 | 
					var_cpu="2"
 | 
				
			||||||
 | 
					var_ram="2048"
 | 
				
			||||||
 | 
					var_disk="10"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					    header_info
 | 
				
			||||||
 | 
					    check_container_storage
 | 
				
			||||||
 | 
					    check_container_resources
 | 
				
			||||||
 | 
					    if [[ ! -d /opt/tasmocompiler ]]; then
 | 
				
			||||||
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    RELEASE=$(curl -s https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					    if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
				
			||||||
 | 
					        msg_info "Stopping $APP"
 | 
				
			||||||
 | 
					        systemctl stop tasmocompiler
 | 
				
			||||||
 | 
					        msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					        msg_info "Updating $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					        cd /opt
 | 
				
			||||||
 | 
					        rm -rf /opt/tasmocompiler
 | 
				
			||||||
 | 
					        RELEASE=$(curl -s https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					        wget -q https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz
 | 
				
			||||||
 | 
					        tar xzf v${RELEASE}.tar.gz
 | 
				
			||||||
 | 
					        mv tasmocompiler-${RELEASE}/ /opt/tasmocompiler/
 | 
				
			||||||
 | 
					        cd /opt/tasmocompiler
 | 
				
			||||||
 | 
					        yarn install &> /dev/null
 | 
				
			||||||
 | 
					        export NODE_OPTIONS=--openssl-legacy-provider
 | 
				
			||||||
 | 
					        npm i &> /dev/null
 | 
				
			||||||
 | 
					        yarn build &> /dev/null
 | 
				
			||||||
 | 
					        msg_ok "Updated $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					        msg_info "Starting $APP"
 | 
				
			||||||
 | 
					        systemctl start tasmocompiler
 | 
				
			||||||
 | 
					        msg_ok "Started $APP"
 | 
				
			||||||
 | 
					        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
				
			||||||
 | 
					        msg_info "Cleaning up"
 | 
				
			||||||
 | 
					        rm -r "/opt/v${RELEASE}.tar.gz"
 | 
				
			||||||
 | 
					        msg_ok "Cleaned"
 | 
				
			||||||
 | 
					        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}"
 | 
				
			||||||
@@ -32,21 +32,30 @@ function update_script() {
 | 
				
			|||||||
        msg_error "No ${APP} Installation Found!"
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
        exit
 | 
					        exit
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
 | 
					    if [[ ! -f /opt/${APP}_version.txt ]]; then touch /opt/${APP}_version.txt
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
				
			||||||
    RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					    RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
 | 
					 | 
				
			||||||
    msg_info "Stopping ${APP}"
 | 
					    msg_info "Stopping ${APP}"
 | 
				
			||||||
    systemctl stop trilium
 | 
					    systemctl stop trilium
 | 
				
			||||||
    sleep 1
 | 
					    sleep 1
 | 
				
			||||||
    msg_ok "Stopped ${APP}"
 | 
					    msg_ok "Stopped ${APP}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Updating to ${RELEASE}"
 | 
					    msg_info "Updating to ${RELEASE}"
 | 
				
			||||||
 | 
					    mkdir -p /opt/trilium_backup
 | 
				
			||||||
 | 
					    mv /opt/trilium/{db,dump-db} /opt/trilium_backup/
 | 
				
			||||||
 | 
					    rm -rf /opt/trilium
 | 
				
			||||||
 | 
					    cd /tmp
 | 
				
			||||||
    wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
					    wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
				
			||||||
    tar -xf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
					    tar -xf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
				
			||||||
    cp -r trilium-linux-x64-server/* /opt/trilium/
 | 
					    mv trilium-linux-x64-server /opt/trilium
 | 
				
			||||||
 | 
					    cp -r /opt/trilium_backup/{db,dump-db} /opt/trilium/
 | 
				
			||||||
 | 
					    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
				
			||||||
    msg_ok "Updated to ${RELEASE}"
 | 
					    msg_ok "Updated to ${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Cleaning up"
 | 
					    msg_info "Cleaning up"
 | 
				
			||||||
    rm -rf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz trilium-linux-x64-server
 | 
					    rm -rf /tmp/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz 
 | 
				
			||||||
 | 
					    rm -rf /opt/trilium_backup
 | 
				
			||||||
    msg_ok "Cleaned"
 | 
					    msg_ok "Cleaned"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    msg_info "Starting ${APP}"
 | 
					    msg_info "Starting ${APP}"
 | 
				
			||||||
@@ -54,7 +63,10 @@ function update_script() {
 | 
				
			|||||||
    sleep 1
 | 
					    sleep 1
 | 
				
			||||||
    msg_ok "Started ${APP}"
 | 
					    msg_ok "Started ${APP}"
 | 
				
			||||||
    msg_ok "Updated Successfully"
 | 
					    msg_ok "Updated Successfully"
 | 
				
			||||||
    exit
 | 
					  else
 | 
				
			||||||
 | 
					    msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					  exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start
 | 
					start
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										80
									
								
								ct/watcharr.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								ct/watcharr.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
				
			|||||||
 | 
					#!/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/sbondCo/Watcharr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					APP="Watcharr"
 | 
				
			||||||
 | 
					var_tags="media"
 | 
				
			||||||
 | 
					var_cpu="1"
 | 
				
			||||||
 | 
					var_ram="1024"
 | 
				
			||||||
 | 
					var_disk="4"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					    header_info
 | 
				
			||||||
 | 
					    check_container_storage
 | 
				
			||||||
 | 
					    check_container_resources
 | 
				
			||||||
 | 
					    if [[ ! -d /opt/watcharr ]]; then
 | 
				
			||||||
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    RELEASE=$(curl -s https://api.github.com/repos/sbondCo/Watcharr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
				
			||||||
 | 
					        msg_info "Updating $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Stopping $APP"
 | 
				
			||||||
 | 
					        systemctl stop watcharr
 | 
				
			||||||
 | 
					        msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Updating $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					        temp_file=$(mktemp)
 | 
				
			||||||
 | 
					        wget -q "https://github.com/sbondCo/Watcharr/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
 | 
				
			||||||
 | 
					        tar -xzf "$temp_file"
 | 
				
			||||||
 | 
					        rm -f /opt/watcharr/server/watcharr
 | 
				
			||||||
 | 
					        rm -rf /opt/watcharr/server/ui
 | 
				
			||||||
 | 
					        mv Watcharr-${RELEASE}/ /opt/watcharr
 | 
				
			||||||
 | 
					        cd /opt/watcharr
 | 
				
			||||||
 | 
					        export GOOS=linux
 | 
				
			||||||
 | 
					        npm i &> /dev/null
 | 
				
			||||||
 | 
					        npm run build &> /dev/null
 | 
				
			||||||
 | 
					        mv ./build ./server/ui
 | 
				
			||||||
 | 
					        cd server
 | 
				
			||||||
 | 
					        go mod download
 | 
				
			||||||
 | 
					        go build -o ./watcharr
 | 
				
			||||||
 | 
					        msg_ok "Updated $APP to v${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Starting $APP"
 | 
				
			||||||
 | 
					        systemctl start watcharr
 | 
				
			||||||
 | 
					        msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Cleaning Up"
 | 
				
			||||||
 | 
					        rm -f ${temp_file}
 | 
				
			||||||
 | 
					        msg_ok "Cleanup Completed"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
				
			||||||
 | 
					        msg_ok "Update Successful"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
				
			||||||
 | 
					    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}:3080${CL}"
 | 
				
			||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#App Default Values
 | 
					#App Default Values
 | 
				
			||||||
APP="Zammad"
 | 
					APP="Zammad"
 | 
				
			||||||
TAGS="webserver;ticket-system"
 | 
					var_tags="webserver;ticket-system"
 | 
				
			||||||
var_disk="8"
 | 
					var_disk="8"
 | 
				
			||||||
var_cpu="2"
 | 
					var_cpu="2"
 | 
				
			||||||
var_ram="4096"
 | 
					var_ram="4096"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										70
									
								
								ct/zitadel.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								ct/zitadel.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
				
			|||||||
 | 
					#!/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: dave-yap (dave-yap)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://zitadel.com/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Default Values
 | 
				
			||||||
 | 
					APP="Zitadel"
 | 
				
			||||||
 | 
					var_tags="identity-provider"
 | 
				
			||||||
 | 
					var_cpu="1"
 | 
				
			||||||
 | 
					var_ram="1024"
 | 
				
			||||||
 | 
					var_disk="8"
 | 
				
			||||||
 | 
					var_os="debian"
 | 
				
			||||||
 | 
					var_version="12"
 | 
				
			||||||
 | 
					var_unprivileged="1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App Output & Base Settings
 | 
				
			||||||
 | 
					header_info "$APP"
 | 
				
			||||||
 | 
					base_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Core
 | 
				
			||||||
 | 
					variables
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function update_script() {
 | 
				
			||||||
 | 
					    header_info
 | 
				
			||||||
 | 
					    check_container_storage
 | 
				
			||||||
 | 
					    check_container_resources
 | 
				
			||||||
 | 
					    if [[ ! -f /etc/systemd/system/zitadel.service ]]; then
 | 
				
			||||||
 | 
					        msg_error "No ${APP} Installation Found!"
 | 
				
			||||||
 | 
					        exit
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    RELEASE=$(curl -si https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r')
 | 
				
			||||||
 | 
					    if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt | grep -oP '\d+\.\d+\.\d+')" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
				
			||||||
 | 
					        msg_info "Stopping $APP"
 | 
				
			||||||
 | 
					        systemctl stop zitadel
 | 
				
			||||||
 | 
					        msg_ok "Stopped $APP"
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        msg_info "Updating $APP to ${RELEASE}"
 | 
				
			||||||
 | 
					        cd /tmp
 | 
				
			||||||
 | 
					        wget -qc https://github.com/zitadel/zitadel/releases/download/$RELEASE/zitadel-linux-amd64.tar.gz -O - | tar -xz
 | 
				
			||||||
 | 
					        mv zitadel-linux-amd64/zitadel /usr/local/bin
 | 
				
			||||||
 | 
					        zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml --init-projections=true &>/dev/null
 | 
				
			||||||
 | 
					        echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
				
			||||||
 | 
					        msg_ok "Updated $APP to ${RELEASE}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Starting $APP"
 | 
				
			||||||
 | 
					        systemctl start zitadel
 | 
				
			||||||
 | 
					        msg_ok "Started $APP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        msg_info "Cleaning Up"
 | 
				
			||||||
 | 
					        rm -rf /tmp/zitadel-linux-amd64
 | 
				
			||||||
 | 
					        msg_ok "Cleanup Completed"
 | 
				
			||||||
 | 
					        msg_ok "Update Successful"
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        msg_ok "No update required. ${APP} is already at ${RELEASE}"
 | 
				
			||||||
 | 
					    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/ui/console${CL}"
 | 
				
			||||||
@@ -64,8 +64,8 @@ function InstallMethod({
 | 
				
			|||||||
            if (key === "type") {
 | 
					            if (key === "type") {
 | 
				
			||||||
              updatedMethod.script =
 | 
					              updatedMethod.script =
 | 
				
			||||||
                value === "alpine"
 | 
					                value === "alpine"
 | 
				
			||||||
                  ? `/${prev.type}/alpine-${prev.slug}.sh`
 | 
					                  ? `${prev.type}/alpine-${prev.slug}.sh`
 | 
				
			||||||
                  : `/${prev.type}/${prev.slug}.sh`;
 | 
					                  : `${prev.type}/${prev.slug}.sh`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              // Set OS to Alpine and reset version if type is alpine
 | 
					              // Set OS to Alpine and reset version if type is alpine
 | 
				
			||||||
              if (value === "alpine") {
 | 
					              if (value === "alpine") {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,8 +76,8 @@ export default function JSONGenerator() {
 | 
				
			|||||||
            ...method,
 | 
					            ...method,
 | 
				
			||||||
            script:
 | 
					            script:
 | 
				
			||||||
              method.type === "alpine"
 | 
					              method.type === "alpine"
 | 
				
			||||||
                ? `/${updated.type}/alpine-${updated.slug}.sh`
 | 
					                ? `${updated.type}/alpine-${updated.slug}.sh`
 | 
				
			||||||
                : `/${updated.type}/${updated.slug}.sh`,
 | 
					                : `${updated.type}/${updated.slug}.sh`,
 | 
				
			||||||
          }));
 | 
					          }));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@ $STD apt-get install -y \
 | 
				
			|||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setup Apache Tomcat"
 | 
					msg_info "Setup Apache Tomcat"
 | 
				
			||||||
RELEASE=$(wget -qO- https://dlcdn.apache.org/tomcat/tomcat-9/ | grep -oP '(?<=href=")v[^"/]+(?=/")' | sed 's/^v//')
 | 
					RELEASE=$(wget -qO- https://dlcdn.apache.org/tomcat/tomcat-9/ | grep -oP '(?<=href=")v[^"/]+(?=/")' | sed 's/^v//' | sort -V | tail -n1)
 | 
				
			||||||
mkdir -p /opt/apache-guacamole/tomcat9
 | 
					mkdir -p /opt/apache-guacamole/tomcat9
 | 
				
			||||||
mkdir -p /opt/apache-guacamole/server
 | 
					mkdir -p /opt/apache-guacamole/server
 | 
				
			||||||
wget -qO- "https://dlcdn.apache.org/tomcat/tomcat-9/v${RELEASE}/bin/apache-tomcat-${RELEASE}.tar.gz" | tar -xz -C /opt/apache-guacamole/tomcat9 --strip-components=1
 | 
					wget -qO- "https://dlcdn.apache.org/tomcat/tomcat-9/v${RELEASE}/bin/apache-tomcat-${RELEASE}.tar.gz" | tar -xz -C /opt/apache-guacamole/tomcat9 --strip-components=1
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										81
									
								
								install/barcode-buddy-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								install/barcode-buddy-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: bvdberg01
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 \
 | 
				
			||||||
 | 
					  curl \
 | 
				
			||||||
 | 
					  sudo \
 | 
				
			||||||
 | 
					  mc \
 | 
				
			||||||
 | 
					  apache2 \
 | 
				
			||||||
 | 
					  redis \
 | 
				
			||||||
 | 
					  php-{curl,date,json,mbstring,redis,sqlite3,sockets} \
 | 
				
			||||||
 | 
					  libapache2-mod-php
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Installing barcodebuddy"
 | 
				
			||||||
 | 
					RELEASE=$(curl -s https://api.github.com/repos/Forceu/barcodebuddy/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					cd /opt
 | 
				
			||||||
 | 
					wget -q "https://github.com/Forceu/barcodebuddy/archive/refs/tags/v${RELEASE}.zip"
 | 
				
			||||||
 | 
					unzip -q "v${RELEASE}.zip"
 | 
				
			||||||
 | 
					mv "/opt/barcodebuddy-${RELEASE}" /opt/barcodebuddy
 | 
				
			||||||
 | 
					chown -R www-data:www-data /opt/barcodebuddy/data
 | 
				
			||||||
 | 
					echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
				
			||||||
 | 
					msg_ok "Installed barcodebuddy"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Creating Services"
 | 
				
			||||||
 | 
					cat <<EOF >/etc/systemd/system/barcodebuddy.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=Run websocket server for barcodebuddy screen feature
 | 
				
			||||||
 | 
					After=network.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					Type=simple
 | 
				
			||||||
 | 
					ExecStart=/usr/bin/php /opt/barcodebuddy/wsserver.php
 | 
				
			||||||
 | 
					StandardOutput=null
 | 
				
			||||||
 | 
					Restart=on-failure
 | 
				
			||||||
 | 
					User=www-data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					cat <<EOF >/etc/apache2/sites-available/barcodebuddy.conf
 | 
				
			||||||
 | 
					<VirtualHost *:80>
 | 
				
			||||||
 | 
					    ServerName barcodebuddy
 | 
				
			||||||
 | 
					    DocumentRoot /opt/barcodebuddy
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <Directory /opt/barcodebuddy>
 | 
				
			||||||
 | 
					        Options FollowSymLinks
 | 
				
			||||||
 | 
					        AllowOverride All
 | 
				
			||||||
 | 
					        Require all granted
 | 
				
			||||||
 | 
					    </Directory>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ErrorLog /var/log/apache2/barcodebuddy_error.log
 | 
				
			||||||
 | 
					    CustomLog /var/log/apache2/barcodebuddy_access.log combined
 | 
				
			||||||
 | 
					</VirtualHost>
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					systemctl enable -q --now barcodebuddy
 | 
				
			||||||
 | 
					$STD a2ensite barcodebuddy
 | 
				
			||||||
 | 
					$STD a2enmod rewrite
 | 
				
			||||||
 | 
					$STD a2dissite 000-default.conf
 | 
				
			||||||
 | 
					$STD systemctl reload apache2
 | 
				
			||||||
 | 
					msg_ok "Created Services"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -rf "/opt/v${RELEASE}.zip"
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
@@ -76,7 +76,10 @@ mkdir /opt/browserless
 | 
				
			|||||||
$STD python3 -m pip install playwright
 | 
					$STD python3 -m pip install playwright
 | 
				
			||||||
$STD git clone https://github.com/browserless/chrome /opt/browserless
 | 
					$STD git clone https://github.com/browserless/chrome /opt/browserless
 | 
				
			||||||
$STD npm install --prefix /opt/browserless
 | 
					$STD npm install --prefix /opt/browserless
 | 
				
			||||||
$STD /opt/browserless/node_modules/playwright-core/cli.js install --with-deps chrome chromium firefox webkit
 | 
					$STD /opt/browserless/node_modules/playwright-core/cli.js install --with-deps &>/dev/null
 | 
				
			||||||
 | 
					$STD /opt/browserless/node_modules/playwright-core/cli.js install --force chrome &>/dev/null
 | 
				
			||||||
 | 
					$STD /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit &>/dev/null
 | 
				
			||||||
 | 
					$STD /opt/browserless/node_modules/playwright-core/cli.js install --force msedge
 | 
				
			||||||
$STD npm run build --prefix /opt/browserless
 | 
					$STD npm run build --prefix /opt/browserless
 | 
				
			||||||
$STD npm run build:function --prefix /opt/browserless
 | 
					$STD npm run build:function --prefix /opt/browserless
 | 
				
			||||||
$STD npm prune production --prefix /opt/browserless
 | 
					$STD npm prune production --prefix /opt/browserless
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ $STD apt-get install -y \
 | 
				
			|||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Install Checkmk"
 | 
					msg_info "Install Checkmk"
 | 
				
			||||||
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | head -n 1)
 | 
					RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | tr ' ' '\n' | grep -v '\-rc' | sort -V | tail -n 1)
 | 
				
			||||||
wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb
 | 
					wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb
 | 
				
			||||||
$STD apt-get install -y /opt/checkmk.deb
 | 
					$STD apt-get install -y /opt/checkmk.deb
 | 
				
			||||||
echo "${RELEASE}" >"/opt/checkmk_version.txt"
 | 
					echo "${RELEASE}" >"/opt/checkmk_version.txt"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										86
									
								
								install/cosmos-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								install/cosmos-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: Michel Roegl-Brunner (michelroegl-brunner)
 | 
				
			||||||
 | 
					# License: MIT
 | 
				
			||||||
 | 
					# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 \
 | 
				
			||||||
 | 
					 curl \
 | 
				
			||||||
 | 
					 mc \
 | 
				
			||||||
 | 
					 sudo \
 | 
				
			||||||
 | 
					 snapraid \
 | 
				
			||||||
 | 
					 avahi-daemon \
 | 
				
			||||||
 | 
					 fdisk
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Install mergerfs"
 | 
				
			||||||
 | 
					MERGERFS_VERSION="2.40.2"
 | 
				
			||||||
 | 
					wget -q "https://github.com/trapexit/mergerfs/releases/download/${MERGERFS_VERSION}/mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb"
 | 
				
			||||||
 | 
					$STD dpkg -i "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb" || $STD apt-get install -f -y
 | 
				
			||||||
 | 
					rm "mergerfs_${MERGERFS_VERSION}.debian-bullseye_amd64.deb"
 | 
				
			||||||
 | 
					msg_ok "Installed mergerfs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Install Docker"
 | 
				
			||||||
 | 
					curl -fsSL https://get.docker.com -o get-docker.sh
 | 
				
			||||||
 | 
					$STD sh get-docker.sh
 | 
				
			||||||
 | 
					rm get-docker.sh
 | 
				
			||||||
 | 
					msg_ok "Installed Docker"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Install Cosmos" 
 | 
				
			||||||
 | 
					mkdir -p /opt/cosmos
 | 
				
			||||||
 | 
					LATEST_RELEASE=$(curl -s https://api.github.com/repos/azukaar/Cosmos-Server/releases/latest | grep "tag_name" | cut -d '"' -f 4)
 | 
				
			||||||
 | 
					ZIP_FILE="cosmos-cloud-${LATEST_RELEASE#v}-amd64.zip"
 | 
				
			||||||
 | 
					curl -sL "https://github.com/azukaar/Cosmos-Server/releases/download/${LATEST_RELEASE}/${ZIP_FILE}" -o "/opt/cosmos/${ZIP_FILE}"
 | 
				
			||||||
 | 
					cd /opt/cosmos
 | 
				
			||||||
 | 
					unzip -o -q "${ZIP_FILE}"
 | 
				
			||||||
 | 
					LATEST_RELEASE_NO_V=${LATEST_RELEASE#v}
 | 
				
			||||||
 | 
					mv /opt/cosmos/cosmos-cloud-${LATEST_RELEASE_NO_V}/* /opt/cosmos/
 | 
				
			||||||
 | 
					rmdir /opt/cosmos/cosmos-cloud-${LATEST_RELEASE_NO_V}
 | 
				
			||||||
 | 
					chmod +x /opt/cosmos/cosmos
 | 
				
			||||||
 | 
					msg_ok "Installed Cosmos"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Creating Service"
 | 
				
			||||||
 | 
					cat <<EOF > /etc/systemd/system/cosmos.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=Cosmos Cloud service
 | 
				
			||||||
 | 
					ConditionFileIsExecutable=/opt/cosmos/start.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					StartLimitInterval=10
 | 
				
			||||||
 | 
					StartLimitBurst=5
 | 
				
			||||||
 | 
					ExecStart=/opt/cosmos/start.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WorkingDirectory=/opt/cosmos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Restart=always
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RestartSec=2
 | 
				
			||||||
 | 
					EnvironmentFile=-/etc/sysconfig/CosmosCloud
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					systemctl enable -q --now cosmos.service
 | 
				
			||||||
 | 
					msg_info "Created Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -f "/opt/cosmos/cosmos-cloud-${LATEST_RELEASE#v}-amd64.zip"
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
@@ -23,13 +23,18 @@ $STD apt-get install -y \
 | 
				
			|||||||
  lsb-release \
 | 
					  lsb-release \
 | 
				
			||||||
  apt-transport-https \
 | 
					  apt-transport-https \
 | 
				
			||||||
  coreutils \
 | 
					  coreutils \
 | 
				
			||||||
  software-properties-common \
 | 
					  software-properties-common
 | 
				
			||||||
  openjdk-17-jdk 
 | 
					 | 
				
			||||||
wget -q https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.deb
 | 
					 | 
				
			||||||
$STD sudo dpkg -i jdk-21_linux-x64_bin.deb
 | 
					 | 
				
			||||||
rm -f jdk-21_linux-x64_bin.deb
 | 
					 | 
				
			||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setting up TemurinJDK"
 | 
				
			||||||
 | 
					mkdir -p /etc/apt/keyrings
 | 
				
			||||||
 | 
					wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | tee /etc/apt/keyrings/adoptium.asc
 | 
				
			||||||
 | 
					echo "deb [signed-by=/etc/apt/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list
 | 
				
			||||||
 | 
					$STD apt-get update
 | 
				
			||||||
 | 
					$STD apt-get install -y temurin-{8,11,17,21}-jre
 | 
				
			||||||
 | 
					sudo update-alternatives --set java /usr/lib/jvm/temurin-21-jre-amd64/bin/java
 | 
				
			||||||
 | 
					msg_ok "Installed TemurinJDK"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setup Python3"
 | 
					msg_info "Setup Python3"
 | 
				
			||||||
$STD apt-get install -y \
 | 
					$STD apt-get install -y \
 | 
				
			||||||
  python3 \
 | 
					  python3 \
 | 
				
			||||||
@@ -39,7 +44,6 @@ $STD apt-get install -y \
 | 
				
			|||||||
rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
					rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
				
			||||||
msg_ok "Setup Python3"
 | 
					msg_ok "Setup Python3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
msg_info "Installing Craty-Controller (Patience)"
 | 
					msg_info "Installing Craty-Controller (Patience)"
 | 
				
			||||||
useradd crafty -m -s /bin/bash
 | 
					useradd crafty -m -s /bin/bash
 | 
				
			||||||
cd /opt
 | 
					cd /opt
 | 
				
			||||||
@@ -71,7 +75,7 @@ After=network.target
 | 
				
			|||||||
Type=simple
 | 
					Type=simple
 | 
				
			||||||
User=crafty
 | 
					User=crafty
 | 
				
			||||||
WorkingDirectory=/opt/crafty-controller/crafty/crafty-4
 | 
					WorkingDirectory=/opt/crafty-controller/crafty/crafty-4
 | 
				
			||||||
Environment=PATH=/opt/crafty-controller/crafty/.venv/bin:$PATH
 | 
					Environment=PATH=/usr/lib/jvm/temurin-21-jre-amd64/bin:/opt/crafty-controller/crafty/.venv/bin:$PATH
 | 
				
			||||||
ExecStart=/opt/crafty-controller/crafty/.venv/bin/python3 main.py -d
 | 
					ExecStart=/opt/crafty-controller/crafty/.venv/bin/python3 main.py -d
 | 
				
			||||||
Restart=on-failure
 | 
					Restart=on-failure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -94,4 +98,4 @@ msg_info "Cleaning up"
 | 
				
			|||||||
rm -rf /opt/crafty-4-v${RELEASE}.zip
 | 
					rm -rf /opt/crafty-4-v${RELEASE}.zip
 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										63
									
								
								install/cross-seed-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								install/cross-seed-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: Jakub Matraszek (jmatraszek)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://www.cross-seed.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 \
 | 
				
			||||||
 | 
					  curl \
 | 
				
			||||||
 | 
					  sudo \
 | 
				
			||||||
 | 
					  mc \
 | 
				
			||||||
 | 
					  gnupg
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setting up Node.js Repository"
 | 
				
			||||||
 | 
					mkdir -p /etc/apt/keyrings
 | 
				
			||||||
 | 
					curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
				
			||||||
 | 
					echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_23.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
				
			||||||
 | 
					msg_ok "Setup Node.js Repository"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setting up Node.js"
 | 
				
			||||||
 | 
					$STD apt-get update
 | 
				
			||||||
 | 
					$STD apt-get install -y nodejs
 | 
				
			||||||
 | 
					msg_ok "Setup Node.js"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Cross-Seed"
 | 
				
			||||||
 | 
					$STD npm install cross-seed@latest -g
 | 
				
			||||||
 | 
					$STD cross-seed gen-config
 | 
				
			||||||
 | 
					msg_ok "Setup Cross-Seed"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Creating Service"
 | 
				
			||||||
 | 
					cat <<EOF >/etc/systemd/system/cross-seed.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=Cross-Seed daemon Service
 | 
				
			||||||
 | 
					After=network.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					ExecStart=cross-seed daemon
 | 
				
			||||||
 | 
					Restart=always
 | 
				
			||||||
 | 
					User=root
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					systemctl enable -q --now cross-seed
 | 
				
			||||||
 | 
					msg_ok "Created Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
							
								
								
									
										73
									
								
								install/excalidraw-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								install/excalidraw-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					#!/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/excalidraw/excalidraw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 \
 | 
				
			||||||
 | 
					  curl \
 | 
				
			||||||
 | 
					  sudo \
 | 
				
			||||||
 | 
					  mc \
 | 
				
			||||||
 | 
					  gnupg \
 | 
				
			||||||
 | 
					  xdg-utils
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Node.js Repository"
 | 
				
			||||||
 | 
					mkdir -p /etc/apt/keyrings
 | 
				
			||||||
 | 
					curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
				
			||||||
 | 
					echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
				
			||||||
 | 
					msg_ok "Setup Node.js Repository"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Node.js"
 | 
				
			||||||
 | 
					$STD apt-get update
 | 
				
			||||||
 | 
					$STD apt-get install -y nodejs
 | 
				
			||||||
 | 
					$STD npm install -g yarn
 | 
				
			||||||
 | 
					msg_ok "Setup Node.js"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Excalidraw"
 | 
				
			||||||
 | 
					temp_file=$(mktemp)
 | 
				
			||||||
 | 
					RELEASE=$(curl -s https://api.github.com/repos/excalidraw/excalidraw/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					wget -q "https://github.com/excalidraw/excalidraw/archive/refs/tags/v${RELEASE}.tar.gz" -O $temp_file
 | 
				
			||||||
 | 
					tar xzf $temp_file
 | 
				
			||||||
 | 
					mv excalidraw-${RELEASE} /opt/excalidraw
 | 
				
			||||||
 | 
					cd /opt/excalidraw
 | 
				
			||||||
 | 
					$STD yarn
 | 
				
			||||||
 | 
					echo "${RELEASE}" >/opt/excalidraw_version.txt
 | 
				
			||||||
 | 
					msg_ok "Setup Excalidraw"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Creating Service"
 | 
				
			||||||
 | 
					cat <<EOF >/etc/systemd/system/excalidraw.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=Excalidraw Service
 | 
				
			||||||
 | 
					After=network.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					Type=simple
 | 
				
			||||||
 | 
					WorkingDirectory=/opt/excalidraw
 | 
				
			||||||
 | 
					ExecStart=/usr/bin/yarn start --host
 | 
				
			||||||
 | 
					Restart=always
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					systemctl enable -q --now excalidraw
 | 
				
			||||||
 | 
					msg_ok "Created Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -f $temp_file
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
							
								
								
									
										84
									
								
								install/freshrss-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								install/freshrss-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: bvdberg01
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 \
 | 
				
			||||||
 | 
					  curl \
 | 
				
			||||||
 | 
					  sudo \
 | 
				
			||||||
 | 
					  mc \
 | 
				
			||||||
 | 
					  postgresql \
 | 
				
			||||||
 | 
					  apache2 \
 | 
				
			||||||
 | 
					  php-{curl,dom,json,ctype,pgsql,gmp,mbstring,iconv,zip} \
 | 
				
			||||||
 | 
					  libapache2-mod-php
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setting up PostgreSQL"
 | 
				
			||||||
 | 
					DB_NAME=freshrss
 | 
				
			||||||
 | 
					DB_USER=freshrss
 | 
				
			||||||
 | 
					DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
 | 
				
			||||||
 | 
					$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
 | 
				
			||||||
 | 
					$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					echo "FreshRSS Credentials"
 | 
				
			||||||
 | 
					echo "FreshRSS Database User: $DB_USER"
 | 
				
			||||||
 | 
					echo "FreshRSS Database Password: $DB_PASS"
 | 
				
			||||||
 | 
					echo "FreshRSS Database Name: $DB_NAME"
 | 
				
			||||||
 | 
					} >> ~/freshrss.creds
 | 
				
			||||||
 | 
					msg_ok "Set up PostgreSQL"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Installing FreshRSS"
 | 
				
			||||||
 | 
					RELEASE=$(curl -s https://api.github.com/repos/FreshRSS/FreshRSS/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
 | 
					cd /opt
 | 
				
			||||||
 | 
					wget -q "https://github.com/FreshRSS/FreshRSS/archive/refs/tags/${RELEASE}.zip"
 | 
				
			||||||
 | 
					unzip -q "${RELEASE}.zip"
 | 
				
			||||||
 | 
					mv "/opt/FreshRSS-${RELEASE}" /opt/freshrss
 | 
				
			||||||
 | 
					cd /opt/freshrss
 | 
				
			||||||
 | 
					chown -R www-data:www-data /opt/freshrss
 | 
				
			||||||
 | 
					chmod -R g+rX /opt/freshrss
 | 
				
			||||||
 | 
					chmod -R g+w /opt/freshrss/data/
 | 
				
			||||||
 | 
					msg_ok "Installed FreshRSS"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Creating Service"
 | 
				
			||||||
 | 
					cat <<EOF >/etc/apache2/sites-available/freshrss.conf
 | 
				
			||||||
 | 
					<VirtualHost *:80>
 | 
				
			||||||
 | 
					    ServerName freshrss
 | 
				
			||||||
 | 
					    DocumentRoot /opt/freshrss/p
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <Directory /opt/freshrss/p>
 | 
				
			||||||
 | 
					        Options FollowSymLinks
 | 
				
			||||||
 | 
					        AllowOverride All
 | 
				
			||||||
 | 
					        Require all granted
 | 
				
			||||||
 | 
					    </Directory>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ErrorLog /var/log/apache2/freshrss_error.log
 | 
				
			||||||
 | 
					    CustomLog /var/log/apache2/freshrss_access.log combined
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AllowEncodedSlashes On
 | 
				
			||||||
 | 
					</VirtualHost>
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					$STD a2ensite freshrss
 | 
				
			||||||
 | 
					$STD a2enmod rewrite
 | 
				
			||||||
 | 
					$STD a2dissite 000-default.conf
 | 
				
			||||||
 | 
					$STD systemctl reload apache2
 | 
				
			||||||
 | 
					msg_ok "Created Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -rf "/opt/${RELEASE}.zip"
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
@@ -48,13 +48,13 @@ if [[ "$CTTYPE" == "0" ]]; then
 | 
				
			|||||||
fi
 | 
					fi
 | 
				
			||||||
msg_ok "Set Up Hardware Acceleration"
 | 
					msg_ok "Set Up Hardware Acceleration"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RELEASE=$(curl -s https://api.github.com/repos/blakeblackshear/frigate/releases/latest | jq -r '.tag_name')
 | 
					#RELEASE=$(curl -s https://api.github.com/repos/blakeblackshear/frigate/releases/latest | jq -r '.tag_name')
 | 
				
			||||||
msg_ok "Stop spinner to prevent segmentation fault"
 | 
					msg_ok "Stop spinner to prevent segmentation fault"
 | 
				
			||||||
msg_info "Installing Frigate $RELEASE (Perseverance)"
 | 
					msg_info "Installing Frigate v0.14.1 (Perseverance)"
 | 
				
			||||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
 | 
					if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
 | 
				
			||||||
cd ~
 | 
					cd ~
 | 
				
			||||||
mkdir -p /opt/frigate/models
 | 
					mkdir -p /opt/frigate/models
 | 
				
			||||||
wget -q https://github.com/blakeblackshear/frigate/archive/refs/tags/${RELEASE}.tar.gz -O frigate.tar.gz
 | 
					wget -q https://github.com/blakeblackshear/frigate/archive/refs/tags/v0.14.1.tar.gz -O frigate.tar.gz
 | 
				
			||||||
tar -xzf frigate.tar.gz -C /opt/frigate --strip-components 1
 | 
					tar -xzf frigate.tar.gz -C /opt/frigate --strip-components 1
 | 
				
			||||||
rm -rf frigate.tar.gz
 | 
					rm -rf frigate.tar.gz
 | 
				
			||||||
cd /opt/frigate
 | 
					cd /opt/frigate
 | 
				
			||||||
@@ -102,7 +102,7 @@ else
 | 
				
			|||||||
  sed -i -e 's/^kvm:x:104:$/render:x:104:frigate/' -e 's/^render:x:105:$/kvm:x:105:/' /etc/group
 | 
					  sed -i -e 's/^kvm:x:104:$/render:x:104:frigate/' -e 's/^render:x:105:$/kvm:x:105:/' /etc/group
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
echo "tmpfs   /tmp/cache      tmpfs   defaults        0       0" >> /etc/fstab
 | 
					echo "tmpfs   /tmp/cache      tmpfs   defaults        0       0" >> /etc/fstab
 | 
				
			||||||
msg_ok "Installed Frigate $RELEASE"
 | 
					msg_ok "Installed Frigate"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if grep -q -o -m1 -E 'avx[^ ]*' /proc/cpuinfo; then
 | 
					if grep -q -o -m1 -E 'avx[^ ]*' /proc/cpuinfo; then
 | 
				
			||||||
  msg_ok "AVX Support Detected"
 | 
					  msg_ok "AVX Support Detected"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										65
									
								
								install/graylog-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								install/graylog-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					#!/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://graylog.org/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 \
 | 
				
			||||||
 | 
					  curl \
 | 
				
			||||||
 | 
					  sudo \
 | 
				
			||||||
 | 
					  mc \
 | 
				
			||||||
 | 
					  gnupg
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup MongoDB"
 | 
				
			||||||
 | 
					curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
 | 
				
			||||||
 | 
					echo "deb [signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg] https://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" >/etc/apt/sources.list.d/mongodb-org-7.0.list
 | 
				
			||||||
 | 
					$STD apt-get update
 | 
				
			||||||
 | 
					$STD apt-get install -y mongodb-org
 | 
				
			||||||
 | 
					$STD apt-mark hold mongodb-org
 | 
				
			||||||
 | 
					systemctl enable -q --now mongod
 | 
				
			||||||
 | 
					msg_ok "Setup MongoDB"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Graylog Data Node"
 | 
				
			||||||
 | 
					PASSWORD_SECRET=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
 | 
				
			||||||
 | 
					wget -q https://packages.graylog2.org/repo/packages/graylog-6.1-repository_latest.deb
 | 
				
			||||||
 | 
					$STD dpkg -i graylog-6.1-repository_latest.deb
 | 
				
			||||||
 | 
					$STD apt-get update
 | 
				
			||||||
 | 
					$STD apt-get install graylog-datanode -y
 | 
				
			||||||
 | 
					sed -i "s/password_secret =/password_secret = $PASSWORD_SECRET/g" /etc/graylog/datanode/datanode.conf
 | 
				
			||||||
 | 
					systemctl enable -q --now graylog-datanode
 | 
				
			||||||
 | 
					msg_ok "Setup Graylog Data Node"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup ${APPLICATION}"
 | 
				
			||||||
 | 
					$STD apt-get install graylog-server
 | 
				
			||||||
 | 
					ROOT_PASSWORD=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c16)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    echo "${APPLICATION} Credentials"
 | 
				
			||||||
 | 
					    echo "Admin User: admin"
 | 
				
			||||||
 | 
					    echo "Admin Password: ${ROOT_PASSWORD}"
 | 
				
			||||||
 | 
					} >> ~/graylog.creds
 | 
				
			||||||
 | 
					ROOT_PASSWORD=$(echo -n $ROOT_PASSWORD | shasum -a 256 | awk '{print $1}')
 | 
				
			||||||
 | 
					sed -i "s/password_secret =/password_secret = $PASSWORD_SECRET/g" /etc/graylog/server/server.conf
 | 
				
			||||||
 | 
					sed -i "s/root_password_sha2 =/root_password_sha2 = $ROOT_PASSWORD/g" /etc/graylog/server/server.conf
 | 
				
			||||||
 | 
					sed -i 's/#http_bind_address = 127.0.0.1.*/http_bind_address = 0.0.0.0:9000/g' /etc/graylog/server/server.conf
 | 
				
			||||||
 | 
					systemctl enable -q --now graylog-server
 | 
				
			||||||
 | 
					msg_ok "Setup ${APPLICATION}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -f graylog-*-repository_latest.deb
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
							
								
								
									
										74
									
								
								install/kometa-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								install/kometa-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
				
			|||||||
 | 
					#!/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/Kometa-Team/Kometa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 \
 | 
				
			||||||
 | 
					    curl \
 | 
				
			||||||
 | 
					    mc \
 | 
				
			||||||
 | 
					    sudo
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Python 3"
 | 
				
			||||||
 | 
					$STD apt-get install python3-pip -y
 | 
				
			||||||
 | 
					rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
 | 
				
			||||||
 | 
					msg_ok "Setup Python 3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Kometa"
 | 
				
			||||||
 | 
					temp_file=$(mktemp)
 | 
				
			||||||
 | 
					RELEASE=$(curl -s https://api.github.com/repos/Kometa-Team/Kometa/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					wget -q "https://github.com/Kometa-Team/Kometa/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
 | 
				
			||||||
 | 
					tar -xzf "$temp_file"
 | 
				
			||||||
 | 
					mv Kometa-${RELEASE} /opt/kometa
 | 
				
			||||||
 | 
					cd /opt/kometa
 | 
				
			||||||
 | 
					$STD pip install -r requirements.txt --ignore-installed
 | 
				
			||||||
 | 
					mkdir -p config/assets
 | 
				
			||||||
 | 
					cp config/config.yml.template config/config.yml
 | 
				
			||||||
 | 
					echo "${RELEASE}" >/opt/kometa_version.txt
 | 
				
			||||||
 | 
					msg_ok "Setup Kometa"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					read -p "Enter your TMDb API key: " TMDBKEY
 | 
				
			||||||
 | 
					read -p "Enter your Plex URL: " PLEXURL
 | 
				
			||||||
 | 
					read -p "Enter your Plex token: " PLEXTOKEN
 | 
				
			||||||
 | 
					sed -i -e "s#url: http://192.168.1.12:32400#url: $PLEXURL#g" /opt/kometa/config/config.yml
 | 
				
			||||||
 | 
					sed -i -e "s/token: ####################/token: $PLEXTOKEN/g" /opt/kometa/config/config.yml
 | 
				
			||||||
 | 
					sed -i -e "s/apikey: ################################/apikey: $TMDBKEY/g" /opt/kometa/config/config.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Creating Service"
 | 
				
			||||||
 | 
					cat <<EOF >/etc/systemd/system/kometa.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=Kometa Service
 | 
				
			||||||
 | 
					After=network-online.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					Type=simple
 | 
				
			||||||
 | 
					WorkingDirectory=/opt/kometa
 | 
				
			||||||
 | 
					ExecStart=/usr/bin/python3 kometa.py
 | 
				
			||||||
 | 
					Restart=always
 | 
				
			||||||
 | 
					RestartSec=30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					systemctl enable --now -q kometa
 | 
				
			||||||
 | 
					msg_ok "Created Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -f $temp_file
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
@@ -1,10 +1,8 @@
 | 
				
			|||||||
#!/usr/bin/env bash
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Copyright (c) 2021-2025 tteck
 | 
					# Copyright (c) 2021-2025 tteck
 | 
				
			||||||
# Author: tteck
 | 
					# Author: MickLesk (Canbiz)
 | 
				
			||||||
# Co-Author: MickLesk (Canbiz)
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
# License: MIT
 | 
					 | 
				
			||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
					 | 
				
			||||||
# Source: https://github.com/gnmyt/myspeed
 | 
					# Source: https://github.com/gnmyt/myspeed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
					source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
				
			||||||
@@ -18,6 +16,9 @@ update_os
 | 
				
			|||||||
msg_info "Installing Dependencies"
 | 
					msg_info "Installing Dependencies"
 | 
				
			||||||
$STD apt-get install -y \
 | 
					$STD apt-get install -y \
 | 
				
			||||||
  curl \
 | 
					  curl \
 | 
				
			||||||
 | 
					  build-essential \
 | 
				
			||||||
 | 
					  g++ \
 | 
				
			||||||
 | 
					  make \
 | 
				
			||||||
  sudo \
 | 
					  sudo \
 | 
				
			||||||
  make \
 | 
					  make \
 | 
				
			||||||
  gpg \
 | 
					  gpg \
 | 
				
			||||||
@@ -73,4 +74,4 @@ msg_info "Cleaning up"
 | 
				
			|||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
rm -rf /opt/MySpeed-$RELEASE.zip
 | 
					rm -rf /opt/MySpeed-$RELEASE.zip
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,11 @@ $STD apt-get install -y \
 | 
				
			|||||||
	curl \
 | 
						curl \
 | 
				
			||||||
	sudo \
 | 
						sudo \
 | 
				
			||||||
	mc \
 | 
						mc \
 | 
				
			||||||
	gpg
 | 
						gpg \
 | 
				
			||||||
 | 
					  make \
 | 
				
			||||||
 | 
					  gcc \
 | 
				
			||||||
 | 
					  g++ \
 | 
				
			||||||
 | 
					  build-essential
 | 
				
			||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setting up Node.js Repository"
 | 
					msg_info "Setting up Node.js Repository"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -62,6 +62,35 @@ PHOTOPRISM_PUBLIC='false'
 | 
				
			|||||||
PHOTOPRISM_DEBUG='false'
 | 
					PHOTOPRISM_DEBUG='false'
 | 
				
			||||||
EOF
 | 
					EOF
 | 
				
			||||||
ln -sf /opt/photoprism/bin/photoprism /usr/local/bin/photoprism
 | 
					ln -sf /opt/photoprism/bin/photoprism /usr/local/bin/photoprism
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir -p /etc/photoprism/
 | 
				
			||||||
 | 
					cat <<EOF >/etc/photoprism/defaults.yml
 | 
				
			||||||
 | 
					ConfigPath: "~/.config/photoprism"
 | 
				
			||||||
 | 
					StoragePath: "/opt/photoprism/storage"
 | 
				
			||||||
 | 
					OriginalsPath: "/opt/photoprism/photos/originals"
 | 
				
			||||||
 | 
					ImportPath: "/media"
 | 
				
			||||||
 | 
					AdminUser: "admin"
 | 
				
			||||||
 | 
					AdminPassword: "changeme"
 | 
				
			||||||
 | 
					AuthMode: "password"
 | 
				
			||||||
 | 
					DatabaseDriver: "sqlite"
 | 
				
			||||||
 | 
					HttpHost: "0.0.0.0"
 | 
				
			||||||
 | 
					HttpPort: 2342
 | 
				
			||||||
 | 
					HttpCompression: "gzip"
 | 
				
			||||||
 | 
					DisableTLS: false
 | 
				
			||||||
 | 
					DefaultTLS: true
 | 
				
			||||||
 | 
					Experimental: false
 | 
				
			||||||
 | 
					DisableWebDAV: false
 | 
				
			||||||
 | 
					DisableSettings: false
 | 
				
			||||||
 | 
					DisableTensorFlow: false
 | 
				
			||||||
 | 
					DisableFaces: false
 | 
				
			||||||
 | 
					DisableClassification: false
 | 
				
			||||||
 | 
					DisableVectors: false
 | 
				
			||||||
 | 
					DisableRaw: false
 | 
				
			||||||
 | 
					RawPresets: false
 | 
				
			||||||
 | 
					JpegQuality: 85
 | 
				
			||||||
 | 
					DetectNSFW: false
 | 
				
			||||||
 | 
					UploadNSFW: true
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
msg_ok "Installed PhotoPrism"
 | 
					msg_ok "Installed PhotoPrism"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Creating Service"
 | 
					msg_info "Creating Service"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										64
									
								
								install/prometheus-paperless-ngx-exporter-install.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										64
									
								
								install/prometheus-paperless-ngx-exporter-install.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,64 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: Andy Grunwald (andygrunwald)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://github.com/hansmi/prometheus-paperless-exporter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 \
 | 
				
			||||||
 | 
					  curl \
 | 
				
			||||||
 | 
					  sudo \
 | 
				
			||||||
 | 
					  mc
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Installing Prometheus Paperless NGX Exporter"
 | 
				
			||||||
 | 
					RELEASE=$(curl -s https://api.github.com/repos/hansmi/prometheus-paperless-exporter/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					wget -q https://github.com/hansmi/prometheus-paperless-exporter/releases/download/v${RELEASE}/prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
 | 
				
			||||||
 | 
					tar -xf prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
 | 
				
			||||||
 | 
					mv prometheus-paperless-exporter_${RELEASE}_linux_amd64/prometheus-paperless-exporter /usr/local/bin/
 | 
				
			||||||
 | 
					mkdir -p /etc/prometheus-paperless-ngx-exporter
 | 
				
			||||||
 | 
					cat <<EOF > /etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
 | 
				
			||||||
 | 
					SECRET_AUTH_TOKEN
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
				
			||||||
 | 
					msg_ok "Installed Prometheus Paperless NGX Exporter"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Creating Service"
 | 
				
			||||||
 | 
					cat <<EOF >/etc/systemd/system/prometheus-paperless-ngx-exporter.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=Prometheus Paperless NGX Exporter
 | 
				
			||||||
 | 
					Wants=network-online.target
 | 
				
			||||||
 | 
					After=network-online.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					User=root
 | 
				
			||||||
 | 
					Restart=always
 | 
				
			||||||
 | 
					Type=simple
 | 
				
			||||||
 | 
					ExecStart=/usr/local/bin/prometheus-paperless-exporter \
 | 
				
			||||||
 | 
					    --paperless_url=http://paperless.example.org \
 | 
				
			||||||
 | 
					    --paperless_auth_token_file=/etc/prometheus-paperless-ngx-exporter/paperless_auth_token_file
 | 
				
			||||||
 | 
					ExecReload=/bin/kill -HUP \$MAINPID
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					systemctl enable -q --now prometheus-paperless-ngx-exporter
 | 
				
			||||||
 | 
					msg_ok "Created Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					rm -rf prometheus-paperless-exporter_${RELEASE}_linux_amd64/ prometheus-paperless-exporter_${RELEASE}_linux_amd64.tar.gz
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
							
								
								
									
										36
									
								
								install/proxmox-mail-gateway-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								install/proxmox-mail-gateway-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: thost96 (thost96)
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 -y install \
 | 
				
			||||||
 | 
					  curl \
 | 
				
			||||||
 | 
					  sudo \
 | 
				
			||||||
 | 
					  mc \
 | 
				
			||||||
 | 
					  wget
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Installing Proxmox Mail Gateway"
 | 
				
			||||||
 | 
					wget -q https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
 | 
				
			||||||
 | 
					echo "deb http://download.proxmox.com/debian/pmg bookworm pmg-no-subscription" > /etc/apt/sources.list.d/pmg.list
 | 
				
			||||||
 | 
					$STD apt-get update 
 | 
				
			||||||
 | 
					$STD apt-get -y install proxmox-mailgateway-container
 | 
				
			||||||
 | 
					msg_ok "Installed Proxmox Mail Gateway"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
							
								
								
									
										116
									
								
								install/searxng-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								install/searxng-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
				
			|||||||
 | 
					#!/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/searxng/searxng
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					verb_ip6
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					setting_up_container
 | 
				
			||||||
 | 
					network_check
 | 
				
			||||||
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Installing Dependencies (Patience)"
 | 
				
			||||||
 | 
					$STD apt-get install -y \
 | 
				
			||||||
 | 
					  redis-server \
 | 
				
			||||||
 | 
					  build-essential \
 | 
				
			||||||
 | 
					  libffi-dev \
 | 
				
			||||||
 | 
					  libssl-dev \
 | 
				
			||||||
 | 
					  curl \
 | 
				
			||||||
 | 
					  sudo \
 | 
				
			||||||
 | 
					  git \
 | 
				
			||||||
 | 
					  mc
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Python3" 
 | 
				
			||||||
 | 
					$STD apt-get install -y \
 | 
				
			||||||
 | 
					  python3 \
 | 
				
			||||||
 | 
					  python3-{pip,venv,yaml,dev} 
 | 
				
			||||||
 | 
					$STD pip install --upgrade pip setuptools wheel 
 | 
				
			||||||
 | 
					$STD pip install pyyaml
 | 
				
			||||||
 | 
					msg_ok "Setup Python3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup SearXNG"
 | 
				
			||||||
 | 
					mkdir -p /usr/local/searxng /etc/searxng
 | 
				
			||||||
 | 
					useradd -d /etc/searxng searxng
 | 
				
			||||||
 | 
					chown searxng:searxng /usr/local/searxng /etc/searxng
 | 
				
			||||||
 | 
					$STD git clone https://github.com/searxng/searxng.git /usr/local/searxng/searxng-src
 | 
				
			||||||
 | 
					cd /usr/local/searxng/
 | 
				
			||||||
 | 
					sudo -u searxng python3 -m venv /usr/local/searxng/searx-pyenv
 | 
				
			||||||
 | 
					source /usr/local/searxng/searx-pyenv/bin/activate
 | 
				
			||||||
 | 
					$STD pip install --upgrade pip setuptools wheel 
 | 
				
			||||||
 | 
					$STD pip install pyyaml
 | 
				
			||||||
 | 
					$STD pip install -e /usr/local/searxng/searxng-src
 | 
				
			||||||
 | 
					SECRET_KEY=$(openssl rand -hex 32)
 | 
				
			||||||
 | 
					cat <<EOF >/etc/searxng/settings.yml
 | 
				
			||||||
 | 
					# SearXNG settings
 | 
				
			||||||
 | 
					use_default_settings: true
 | 
				
			||||||
 | 
					general:
 | 
				
			||||||
 | 
					  debug: false
 | 
				
			||||||
 | 
					  instance_name: "SearXNG"
 | 
				
			||||||
 | 
					  privacypolicy_url: false
 | 
				
			||||||
 | 
					  contact_url: false
 | 
				
			||||||
 | 
					server:
 | 
				
			||||||
 | 
					  bind_address: "0.0.0.0"
 | 
				
			||||||
 | 
					  port: 8888
 | 
				
			||||||
 | 
					  secret_key: "${SECRET_KEY}"
 | 
				
			||||||
 | 
					  limiter: true
 | 
				
			||||||
 | 
					  image_proxy: true
 | 
				
			||||||
 | 
					redis:
 | 
				
			||||||
 | 
					  url: "redis://127.0.0.1:6379/0"
 | 
				
			||||||
 | 
					ui:
 | 
				
			||||||
 | 
					  static_use_hash: true
 | 
				
			||||||
 | 
					enabled_plugins:
 | 
				
			||||||
 | 
					  - 'Hash plugin'
 | 
				
			||||||
 | 
					  - 'Self Information'
 | 
				
			||||||
 | 
					  - 'Tracker URL remover'
 | 
				
			||||||
 | 
					  - 'Ahmia blacklist'
 | 
				
			||||||
 | 
					search:
 | 
				
			||||||
 | 
					  safe_search: 2
 | 
				
			||||||
 | 
					  autocomplete: 'google'
 | 
				
			||||||
 | 
					engines:
 | 
				
			||||||
 | 
					  - name: google
 | 
				
			||||||
 | 
					    engine: google
 | 
				
			||||||
 | 
					    shortcut: gg
 | 
				
			||||||
 | 
					    use_mobile_ui: false
 | 
				
			||||||
 | 
					  - name: duckduckgo
 | 
				
			||||||
 | 
					    engine: duckduckgo
 | 
				
			||||||
 | 
					    shortcut: ddg
 | 
				
			||||||
 | 
					    display_error_messages: true
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					chown searxng:searxng /etc/searxng/settings.yml
 | 
				
			||||||
 | 
					chmod 640 /etc/searxng/settings.yml
 | 
				
			||||||
 | 
					msg_ok "Setup SearXNG"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Set up web services"
 | 
				
			||||||
 | 
					cat <<EOF >/etc/systemd/system/searxng.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=SearXNG service
 | 
				
			||||||
 | 
					After=network.target redis-server.service
 | 
				
			||||||
 | 
					Wants=redis-server.service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					Type=simple
 | 
				
			||||||
 | 
					User=searxng
 | 
				
			||||||
 | 
					Group=searxng
 | 
				
			||||||
 | 
					Environment="SEARXNG_SETTINGS_PATH=/etc/searxng/settings.yml"
 | 
				
			||||||
 | 
					ExecStart=/usr/local/searxng/searx-pyenv/bin/python -m searx.webapp
 | 
				
			||||||
 | 
					WorkingDirectory=/usr/local/searxng/searxng-src
 | 
				
			||||||
 | 
					Restart=always
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					systemctl enable -q --now searxng
 | 
				
			||||||
 | 
					msg_ok "Created Services"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					$STD apt-get autoremove
 | 
				
			||||||
 | 
					$STD apt-get autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
@@ -23,11 +23,13 @@ $STD apt install -y \
 | 
				
			|||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setup SQL Server 2022"
 | 
					msg_info "Setup SQL Server 2022"
 | 
				
			||||||
$STD curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
 | 
					curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
 | 
				
			||||||
$STD curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list
 | 
					curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | sudo tee /etc/apt/sources.list.d/mssql-server-2022.list
 | 
				
			||||||
 | 
					#$STD curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc
 | 
				
			||||||
 | 
					#$STD curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list
 | 
				
			||||||
$STD apt-get clean *
 | 
					$STD apt-get clean *
 | 
				
			||||||
$STD apt-get update -y
 | 
					$STD apt-get update -y
 | 
				
			||||||
$STD apt-get install -y mssql-server
 | 
					apt-get install -y mssql-server
 | 
				
			||||||
msg_ok "Setup Server 2022"
 | 
					msg_ok "Setup Server 2022"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing SQL Server Tools"
 | 
					msg_info "Installing SQL Server Tools"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										53
									
								
								install/suwayomiserver-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								install/suwayomiserver-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: tremor021
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					# Source: https://github.com/Suwayomi/Suwayomi-Server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 \
 | 
				
			||||||
 | 
					  curl \
 | 
				
			||||||
 | 
					  sudo \
 | 
				
			||||||
 | 
					  mc \
 | 
				
			||||||
 | 
					  openjdk-17-jre \
 | 
				
			||||||
 | 
					  libc++-dev
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Settting up Suwayomi-Server"
 | 
				
			||||||
 | 
					URL=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "browser_download_url" | awk '{print substr($2, 2, length($2)-2) }' |  tail -n+2 | head -n 1)
 | 
				
			||||||
 | 
					RELEASE=$(curl -s https://api.github.com/repos/Suwayomi/Suwayomi-Server/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
 | 
					wget -q $URL
 | 
				
			||||||
 | 
					$STD dpkg -i *.deb
 | 
				
			||||||
 | 
					echo ${RELEASE} >/opt/suwayomi-server_version.txt
 | 
				
			||||||
 | 
					msg_ok "Done setting up Suwayomi-Server"
 | 
				
			||||||
 | 
					msg_info "Creating Service"
 | 
				
			||||||
 | 
					cat <<EOF >/etc/systemd/system/suwayomi-server.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=Suwayomi-Server Service
 | 
				
			||||||
 | 
					After=network.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					ExecStart=/usr/bin/suwayomi-server
 | 
				
			||||||
 | 
					Restart=always
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					systemctl enable -q --now suwayomi-server
 | 
				
			||||||
 | 
					msg_ok "Created Service"
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -f *.deb
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
							
								
								
									
										87
									
								
								install/tasmocompiler-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								install/tasmocompiler-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
				
			|||||||
 | 
					#!/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/benzino77/tasmocompiler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Import Functions und Setup
 | 
				
			||||||
 | 
					source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					verb_ip6
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					setting_up_container
 | 
				
			||||||
 | 
					network_check
 | 
				
			||||||
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Installing Dependencies. Patience"
 | 
				
			||||||
 | 
					$STD apt-get install -y \
 | 
				
			||||||
 | 
					  curl \
 | 
				
			||||||
 | 
					  sudo \
 | 
				
			||||||
 | 
					  mc \
 | 
				
			||||||
 | 
					  gnupg \
 | 
				
			||||||
 | 
					  git
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Python3"
 | 
				
			||||||
 | 
					$STD apt-get install -y python3-venv
 | 
				
			||||||
 | 
					msg_ok "Setup Python3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Node.js & yarn"
 | 
				
			||||||
 | 
					mkdir -p /etc/apt/keyrings
 | 
				
			||||||
 | 
					curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
				
			||||||
 | 
					echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
				
			||||||
 | 
					$STD apt-get update
 | 
				
			||||||
 | 
					$STD apt-get install -y nodejs
 | 
				
			||||||
 | 
					$STD npm install -g yarn
 | 
				
			||||||
 | 
					msg_ok "Setup Node.js & yarn"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Platformio"
 | 
				
			||||||
 | 
					curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
 | 
				
			||||||
 | 
					$STD python3 get-platformio.py
 | 
				
			||||||
 | 
					msg_ok "Setup Platformio"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup TasmoCompiler"
 | 
				
			||||||
 | 
					mkdir /tmp/Tasmota
 | 
				
			||||||
 | 
					RELEASE=$(curl -s https://api.github.com/repos/benzino77/tasmocompiler/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					wget -q https://github.com/benzino77/tasmocompiler/archive/refs/tags/v${RELEASE}.tar.gz -O /tmp/v${RELEASE}.tar.gz
 | 
				
			||||||
 | 
					cd /tmp
 | 
				
			||||||
 | 
					tar xzf /tmp/v${RELEASE}.tar.gz
 | 
				
			||||||
 | 
					mv tasmocompiler-${RELEASE}/ /opt/tasmocompiler/
 | 
				
			||||||
 | 
					cd /opt/tasmocompiler
 | 
				
			||||||
 | 
					$STD yarn install
 | 
				
			||||||
 | 
					export NODE_OPTIONS=--openssl-legacy-provider
 | 
				
			||||||
 | 
					$STD npm i
 | 
				
			||||||
 | 
					$STD yarn build
 | 
				
			||||||
 | 
					mkdir -p /usr/local/bin
 | 
				
			||||||
 | 
					ln -s ~/.platformio/penv/bin/platformio /usr/local/bin/platformio
 | 
				
			||||||
 | 
					ln -s ~/.platformio/penv/bin/pio /usr/local/bin/pio
 | 
				
			||||||
 | 
					ln -s ~/.platformio/penv/bin/piodebuggdb /usr/local/bin/piodebuggdb
 | 
				
			||||||
 | 
					echo "${RELEASE}" >"/opt/tasmocompiler_version.txt"
 | 
				
			||||||
 | 
					msg_ok "Setup TasmoCompiler"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Creating Service"
 | 
				
			||||||
 | 
					cat <<EOF >/etc/systemd/system/tasmocompiler.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=TasmoCompiler Service
 | 
				
			||||||
 | 
					After=multi-user.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					Type=simple
 | 
				
			||||||
 | 
					User=root
 | 
				
			||||||
 | 
					ExecStart=/usr/bin/node /opt/tasmocompiler/server/app.js
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					systemctl enable -q --now tasmocompiler
 | 
				
			||||||
 | 
					msg_ok "Created Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -f /tmp/v${RELEASE}.tar.gz
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
@@ -2,8 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Copyright (c) 2021-2025 tteck
 | 
					# Copyright (c) 2021-2025 tteck
 | 
				
			||||||
# Author: tteck (tteckster)
 | 
					# Author: tteck (tteckster)
 | 
				
			||||||
# License: MIT
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
					source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
 | 
				
			||||||
color
 | 
					color
 | 
				
			||||||
@@ -14,23 +13,24 @@ network_check
 | 
				
			|||||||
update_os
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Installing Dependencies"
 | 
					msg_info "Installing Dependencies"
 | 
				
			||||||
$STD apt-get install -y curl
 | 
					$STD apt-get install -y \
 | 
				
			||||||
$STD apt-get install -y sudo
 | 
					  curl \
 | 
				
			||||||
$STD apt-get install -y mc
 | 
					  sudo \
 | 
				
			||||||
 | 
					  mc
 | 
				
			||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup TriliumNext"
 | 
				
			||||||
 | 
					cd /opt
 | 
				
			||||||
RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
					RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
				
			||||||
 | 
					 | 
				
			||||||
msg_info "Installing TriliumNext"
 | 
					 | 
				
			||||||
wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
					wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
				
			||||||
tar -xf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
					tar -xf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
				
			||||||
mv trilium-linux-x64-server /opt/trilium
 | 
					mv trilium-linux-x64-server /opt/trilium
 | 
				
			||||||
msg_ok "Installed TriliumNext"
 | 
					echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
 | 
				
			||||||
 | 
					msg_ok "Setup TriliumNext"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Creating Service"
 | 
					msg_info "Creating Service"
 | 
				
			||||||
service_path="/etc/systemd/system/trilium.service"
 | 
					cat <<EOF >/etc/systemd/system/trilium.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
echo "[Unit]
 | 
					 | 
				
			||||||
Description=Trilium Daemon
 | 
					Description=Trilium Daemon
 | 
				
			||||||
After=syslog.target network.target
 | 
					After=syslog.target network.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -43,7 +43,8 @@ TimeoutStopSec=20
 | 
				
			|||||||
Restart=always
 | 
					Restart=always
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[Install]
 | 
					[Install]
 | 
				
			||||||
WantedBy=multi-user.target" >$service_path
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
systemctl enable --now -q trilium
 | 
					systemctl enable --now -q trilium
 | 
				
			||||||
msg_ok "Created Service"
 | 
					msg_ok "Created Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -51,7 +52,7 @@ motd_ssh
 | 
				
			|||||||
customize
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Cleaning up"
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -rf /opt/TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
				
			||||||
$STD apt-get -y autoremove
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
$STD apt-get -y autoclean
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
rm -rf TriliumNextNotes-linux-x64-${RELEASE}.tar.xz
 | 
					 | 
				
			||||||
msg_ok "Cleaned"
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										93
									
								
								install/watcharr-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								install/watcharr-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					#!/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/sbondCo/Watcharr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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 \
 | 
				
			||||||
 | 
					  curl \
 | 
				
			||||||
 | 
					  sudo \
 | 
				
			||||||
 | 
					  mc \
 | 
				
			||||||
 | 
					  gcc \
 | 
				
			||||||
 | 
					  gnupg
 | 
				
			||||||
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Golang"
 | 
				
			||||||
 | 
					set +o pipefail
 | 
				
			||||||
 | 
					temp_file=$(mktemp)
 | 
				
			||||||
 | 
					golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
 | 
				
			||||||
 | 
					wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
 | 
				
			||||||
 | 
					tar -C /usr/local -xzf "$temp_file"
 | 
				
			||||||
 | 
					ln -sf /usr/local/go/bin/go /usr/local/bin/go
 | 
				
			||||||
 | 
					rm -f "$temp_file"
 | 
				
			||||||
 | 
					set -o pipefail
 | 
				
			||||||
 | 
					msg_ok "Setup Golang"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Node.js"
 | 
				
			||||||
 | 
					mkdir -p /etc/apt/keyrings
 | 
				
			||||||
 | 
					curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
 | 
				
			||||||
 | 
					echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
 | 
				
			||||||
 | 
					$STD apt-get update
 | 
				
			||||||
 | 
					$STD apt-get install -y nodejs
 | 
				
			||||||
 | 
					msg_ok "Setup Node.js"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setup Watcharr"
 | 
				
			||||||
 | 
					temp_file=$(mktemp)
 | 
				
			||||||
 | 
					RELEASE=$(curl -s https://api.github.com/repos/sbondCo/Watcharr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
 | 
				
			||||||
 | 
					wget -q "https://github.com/sbondCo/Watcharr/archive/refs/tags/v${RELEASE}.tar.gz" -O "$temp_file"
 | 
				
			||||||
 | 
					tar -xzf "$temp_file"
 | 
				
			||||||
 | 
					mv Watcharr-${RELEASE}/ /opt/watcharr
 | 
				
			||||||
 | 
					cd /opt/watcharr
 | 
				
			||||||
 | 
					$STD npm i
 | 
				
			||||||
 | 
					$STD npm run build
 | 
				
			||||||
 | 
					mv ./build ./server/ui
 | 
				
			||||||
 | 
					cd server
 | 
				
			||||||
 | 
					export CGO_ENABLED=1 GOOS=linux
 | 
				
			||||||
 | 
					go mod download
 | 
				
			||||||
 | 
					go build -o ./watcharr
 | 
				
			||||||
 | 
					cat <<EOF >/opt/start.sh
 | 
				
			||||||
 | 
					#! /bin/bash
 | 
				
			||||||
 | 
					source ~/.bashrc
 | 
				
			||||||
 | 
					cd /opt/watcharr/server
 | 
				
			||||||
 | 
					./watcharr
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					chmod +x /opt/start.sh
 | 
				
			||||||
 | 
					echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
				
			||||||
 | 
					msg_ok "Setup Watcharr"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Creating Service"
 | 
				
			||||||
 | 
					cat <<EOF >/etc/systemd/system/watcharr.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=Watcharr Service
 | 
				
			||||||
 | 
					After=network.target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					WorkingDirectory=/opt/watcharr/server
 | 
				
			||||||
 | 
					ExecStart=/opt/start.sh
 | 
				
			||||||
 | 
					Restart=always
 | 
				
			||||||
 | 
					User=root
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					systemctl enable -q --now watcharr
 | 
				
			||||||
 | 
					msg_ok "Created Service"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -f "$temp_file"
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
@@ -16,7 +16,8 @@ msg_info "Installing Dependencies"
 | 
				
			|||||||
$STD apt-get install -y \
 | 
					$STD apt-get install -y \
 | 
				
			||||||
  curl \
 | 
					  curl \
 | 
				
			||||||
  mc \
 | 
					  mc \
 | 
				
			||||||
  sudo
 | 
					  sudo \
 | 
				
			||||||
 | 
					  gnupg
 | 
				
			||||||
msg_ok "Installed Dependencies"
 | 
					msg_ok "Installed Dependencies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
msg_info "Setting up Zerotier-One"
 | 
					msg_info "Setting up Zerotier-One"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										155
									
								
								install/zitadel-install.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								install/zitadel-install.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,155 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copyright (c) 2021-2025 community-scripts ORG
 | 
				
			||||||
 | 
					# Author: dave-yap
 | 
				
			||||||
 | 
					# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
 | 
				
			||||||
 | 
					color
 | 
				
			||||||
 | 
					verb_ip6
 | 
				
			||||||
 | 
					catch_errors
 | 
				
			||||||
 | 
					setting_up_container
 | 
				
			||||||
 | 
					network_check
 | 
				
			||||||
 | 
					update_os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Installing Dependencies (Patience)"
 | 
				
			||||||
 | 
					$STD apt-get install -y \
 | 
				
			||||||
 | 
					    curl \
 | 
				
			||||||
 | 
					    sudo \
 | 
				
			||||||
 | 
					    mc \
 | 
				
			||||||
 | 
					    ca-certificates \
 | 
				
			||||||
 | 
					    wget
 | 
				
			||||||
 | 
					msg_ok "Installed Dependecies"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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)
 | 
				
			||||||
 | 
					DB_ADMIN_USER="root"
 | 
				
			||||||
 | 
					DB_ADMIN_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | cut -c1-13)
 | 
				
			||||||
 | 
					systemctl start postgresql
 | 
				
			||||||
 | 
					$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
 | 
				
			||||||
 | 
					$STD sudo -u postgres psql -c "CREATE USER $DB_ADMIN_USER WITH PASSWORD '$DB_ADMIN_PASS' SUPERUSER;"
 | 
				
			||||||
 | 
					$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_ADMIN_USER;"
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    echo "Application Credentials"
 | 
				
			||||||
 | 
					    echo "DB_NAME: $DB_NAME"
 | 
				
			||||||
 | 
					    echo "DB_USER: $DB_USER"
 | 
				
			||||||
 | 
					    echo "DB_PASS: $DB_PASS"
 | 
				
			||||||
 | 
					    echo "DB_ADMIN_USER: $DB_ADMIN_USER"
 | 
				
			||||||
 | 
					    echo "DB_ADMIN_PASS: $DB_ADMIN_PASS"
 | 
				
			||||||
 | 
					} >> ~/zitadel.creds
 | 
				
			||||||
 | 
					msg_ok "Installed PostgreSQL"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Installing Zitadel"
 | 
				
			||||||
 | 
					RELEASE=$(curl -si https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r')
 | 
				
			||||||
 | 
					wget -qc https://github.com/zitadel/zitadel/releases/download/$RELEASE/zitadel-linux-amd64.tar.gz -O - | tar -xz
 | 
				
			||||||
 | 
					mv zitadel-linux-amd64/zitadel /usr/local/bin
 | 
				
			||||||
 | 
					echo "${RELEASE}" >"/opt/zitadel_version.txt"
 | 
				
			||||||
 | 
					msg_ok "Installed Zitadel"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Setting up Zitadel Environments"
 | 
				
			||||||
 | 
					mkdir -p /opt/zitadel
 | 
				
			||||||
 | 
					echo "/opt/zitadel/config.yaml" > "/opt/zitadel/.config"
 | 
				
			||||||
 | 
					head -c 32 < <(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9') > "/opt/zitadel/.masterkey"
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    echo "Config location: $(cat "/opt/zitadel/.config")"
 | 
				
			||||||
 | 
					    echo "Masterkey: $(cat "/opt/zitadel/.masterkey")"
 | 
				
			||||||
 | 
					} >> ~/zitadel.creds
 | 
				
			||||||
 | 
					cat <<EOF >/opt/zitadel/config.yaml
 | 
				
			||||||
 | 
					Port: 8080
 | 
				
			||||||
 | 
					ExternalPort: 8080
 | 
				
			||||||
 | 
					ExternalDomain: localhost
 | 
				
			||||||
 | 
					ExternalSecure: false
 | 
				
			||||||
 | 
					TLS:
 | 
				
			||||||
 | 
					  Enabled: false
 | 
				
			||||||
 | 
					  KeyPath: ""
 | 
				
			||||||
 | 
					  Key: ""
 | 
				
			||||||
 | 
					  CertPath: ""
 | 
				
			||||||
 | 
					  Cert: ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Database:
 | 
				
			||||||
 | 
					  postgres:
 | 
				
			||||||
 | 
					    Host: localhost
 | 
				
			||||||
 | 
					    Port: 5432
 | 
				
			||||||
 | 
					    Database: ${DB_NAME}
 | 
				
			||||||
 | 
					    User:
 | 
				
			||||||
 | 
					      Username: ${DB_USER}
 | 
				
			||||||
 | 
					      Password: ${DB_PASS}
 | 
				
			||||||
 | 
					      SSL:
 | 
				
			||||||
 | 
					        Mode: disable
 | 
				
			||||||
 | 
					        RootCert: ""
 | 
				
			||||||
 | 
					        Cert: ""
 | 
				
			||||||
 | 
					        Key: ""
 | 
				
			||||||
 | 
					    Admin:
 | 
				
			||||||
 | 
					      Username: ${DB_ADMIN_USER}
 | 
				
			||||||
 | 
					      Password: ${DB_ADMIN_PASS}
 | 
				
			||||||
 | 
					      SSL:
 | 
				
			||||||
 | 
					        Mode: disable
 | 
				
			||||||
 | 
					        RootCert: ""
 | 
				
			||||||
 | 
					        Cert: ""
 | 
				
			||||||
 | 
					        Key: ""
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					msg_ok "Installed Zitadel Enviroments"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Creating Services"
 | 
				
			||||||
 | 
					cat <<EOF >/etc/systemd/system/zitadel.service
 | 
				
			||||||
 | 
					[Unit]
 | 
				
			||||||
 | 
					Description=ZITADEL Identiy Server
 | 
				
			||||||
 | 
					After=network.target postgresql.service
 | 
				
			||||||
 | 
					Wants=postgresql.service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Service]
 | 
				
			||||||
 | 
					Type=simple
 | 
				
			||||||
 | 
					User=zitadel
 | 
				
			||||||
 | 
					Group=zitadel
 | 
				
			||||||
 | 
					ExecStart=/usr/local/bin/zitadel start --masterkeyFile "/opt/zitadel/.masterkey" --config "/opt/zitadel/config.yaml"
 | 
				
			||||||
 | 
					Restart=always
 | 
				
			||||||
 | 
					RestartSec=5
 | 
				
			||||||
 | 
					TimeoutStartSec=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Security Hardening options
 | 
				
			||||||
 | 
					ProtectSystem=full
 | 
				
			||||||
 | 
					ProtectHome=true
 | 
				
			||||||
 | 
					PrivateTmp=true
 | 
				
			||||||
 | 
					NoNewPrivileges=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[Install]
 | 
				
			||||||
 | 
					WantedBy=multi-user.target
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					systemctl enable -q zitadel.service
 | 
				
			||||||
 | 
					msg_ok "Created Services"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Zitadel initial setup"
 | 
				
			||||||
 | 
					zitadel start-from-init --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml &>/dev/null &
 | 
				
			||||||
 | 
					sleep 60
 | 
				
			||||||
 | 
					kill $(lsof -i | awk '/zitadel/ {print $2}' | head -n1)
 | 
				
			||||||
 | 
					useradd zitadel
 | 
				
			||||||
 | 
					echo -e "$(zitadel -v | grep -oP 'v\d+\.\d+\.\d+')" > /opt/Zitadel_version.txt
 | 
				
			||||||
 | 
					msg_ok "Zitadel initialized"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Set ExternalDomain to current IP and restart Zitadel"
 | 
				
			||||||
 | 
					IP=$(ip a s dev eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
 | 
				
			||||||
 | 
					sed -i "0,/localhost/s/localhost/${IP}/" /opt/zitadel/config.yaml
 | 
				
			||||||
 | 
					systemctl stop -q zitadel.service
 | 
				
			||||||
 | 
					zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml &>/dev/null 
 | 
				
			||||||
 | 
					systemctl restart -q zitadel.service
 | 
				
			||||||
 | 
					msg_ok "Zitadel restarted with ExternalDomain set to current IP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Create zitadel-rerun.sh"
 | 
				
			||||||
 | 
					cat <<EOF >~/zitadel-rerun.sh
 | 
				
			||||||
 | 
					systemctl stop zitadel.service
 | 
				
			||||||
 | 
					timeout --kill-after=5s 15s zitadel setup --masterkeyFile /opt/zitadel/.masterkey --config /opt/zitadel/config.yaml
 | 
				
			||||||
 | 
					systemctl restart zitadel.service
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					msg_ok "Bash script for rerunning Zitadel after changing Zitadel config.yaml"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					motd_ssh
 | 
				
			||||||
 | 
					customize
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					msg_info "Cleaning up"
 | 
				
			||||||
 | 
					rm -rf ~/zitadel-linux-amd64
 | 
				
			||||||
 | 
					$STD apt-get -y autoremove
 | 
				
			||||||
 | 
					$STD apt-get -y autoclean
 | 
				
			||||||
 | 
					msg_ok "Cleaned"
 | 
				
			||||||
@@ -21,7 +21,7 @@
 | 
				
			|||||||
          "cpu": 1,
 | 
					          "cpu": 1,
 | 
				
			||||||
          "ram": 512,
 | 
					          "ram": 512,
 | 
				
			||||||
          "hdd": 2,
 | 
					          "hdd": 2,
 | 
				
			||||||
          "os": "Debian",
 | 
					          "os": "debian",
 | 
				
			||||||
          "version": "12"
 | 
					          "version": "12"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@
 | 
				
			|||||||
        "cpu": 1,
 | 
					        "cpu": 1,
 | 
				
			||||||
        "ram": 2048,
 | 
					        "ram": 2048,
 | 
				
			||||||
        "hdd": 4,
 | 
					        "hdd": 4,
 | 
				
			||||||
        "os": "Debian",
 | 
					        "os": "debian",
 | 
				
			||||||
        "version": "12"
 | 
					        "version": "12"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								json/barcode-buddy.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								json/barcode-buddy.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "Barcode Buddy",
 | 
				
			||||||
 | 
					  "slug": "barcode-buddy",
 | 
				
			||||||
 | 
					  "categories": [
 | 
				
			||||||
 | 
					    24
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "date_created": "2025-02-08",
 | 
				
			||||||
 | 
					  "type": "ct",
 | 
				
			||||||
 | 
					  "updateable": true,
 | 
				
			||||||
 | 
					  "privileged": false,
 | 
				
			||||||
 | 
					  "interface_port": 80,
 | 
				
			||||||
 | 
					  "documentation": "https://barcodebuddy-documentation.readthedocs.io/en/latest/",
 | 
				
			||||||
 | 
					  "website": "https://github.com/Forceu/barcodebuddy",
 | 
				
			||||||
 | 
					  "logo": "https://raw.githubusercontent.com/Forceu/barcodebuddy/refs/heads/master/incl/img/favicon/android-icon-192x192.png",
 | 
				
			||||||
 | 
					  "description": "Barcode Buddy for Grocy is an extension for Grocy, allowing to pass barcodes to Grocy. It supports barcodes for products and chores. If you own a physical barcode scanner, it can be integrated, so that all barcodes scanned are automatically pushed to BarcodeBuddy/Grocy.",
 | 
				
			||||||
 | 
					  "install_methods": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "type": "default",
 | 
				
			||||||
 | 
					      "script": "ct/barcode-buddy.sh",
 | 
				
			||||||
 | 
					      "resources": {
 | 
				
			||||||
 | 
					        "cpu": 1,
 | 
				
			||||||
 | 
					        "ram": 512,
 | 
				
			||||||
 | 
					        "hdd": 3,
 | 
				
			||||||
 | 
					        "os": "Debian",
 | 
				
			||||||
 | 
					        "version": "12"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "default_credentials": {
 | 
				
			||||||
 | 
					    "username": null,
 | 
				
			||||||
 | 
					    "password": null
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "notes": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "text": "After install enable the option \"Use Redis cache\" on the settings page.",
 | 
				
			||||||
 | 
					      "type": "info"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										35
									
								
								json/cosmos.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								json/cosmos.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "Cosmos",
 | 
				
			||||||
 | 
					  "slug": "cosmos",
 | 
				
			||||||
 | 
					  "categories": [
 | 
				
			||||||
 | 
					    2,
 | 
				
			||||||
 | 
					    3
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "date_created": "2025-02-07",
 | 
				
			||||||
 | 
					  "type": "ct",
 | 
				
			||||||
 | 
					  "updateable": true,
 | 
				
			||||||
 | 
					  "privileged": false,
 | 
				
			||||||
 | 
					  "interface_port": 80,
 | 
				
			||||||
 | 
					  "documentation": "https://cosmos-cloud.io/doc/1%20index/",
 | 
				
			||||||
 | 
					  "website": "https://cosmos-cloud.io/",
 | 
				
			||||||
 | 
					  "logo": "https://cosmos-cloud.io/Logo.png",
 | 
				
			||||||
 | 
					  "description": "Cosmos Cloud is a self-hosting platform that automates maintenance and security. It offers an app marketplace, reverse proxy management, container control, VPN integration, real-time monitoring, and disk management. Security features include SSO, anti-DDoS, and encryption. It simplifies self-hosting for all users.",
 | 
				
			||||||
 | 
					  "install_methods": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "type": "default",
 | 
				
			||||||
 | 
					      "script": "ct/cosmos.sh",
 | 
				
			||||||
 | 
					      "resources": {
 | 
				
			||||||
 | 
					        "cpu": 2,
 | 
				
			||||||
 | 
					        "ram": 2048,
 | 
				
			||||||
 | 
					        "hdd": 8,
 | 
				
			||||||
 | 
					        "os": "Debian",
 | 
				
			||||||
 | 
					        "version": "12"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "default_credentials": {
 | 
				
			||||||
 | 
					    "username": null,
 | 
				
			||||||
 | 
					    "password": null
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "notes": []
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										39
									
								
								json/cross-seed.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								json/cross-seed.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "name": "cross-seed",
 | 
				
			||||||
 | 
					    "slug": "cross-seed",
 | 
				
			||||||
 | 
					    "categories": [
 | 
				
			||||||
 | 
					        14
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "date_created": "2025-02-07",
 | 
				
			||||||
 | 
					    "type": "ct",
 | 
				
			||||||
 | 
					    "updateable": true,
 | 
				
			||||||
 | 
					    "privileged": false,
 | 
				
			||||||
 | 
					    "interface_port": 2468,
 | 
				
			||||||
 | 
					    "documentation": "https://www.cross-seed.org/docs/category/basics",
 | 
				
			||||||
 | 
					    "website": "https://www.cross-seed.org/",
 | 
				
			||||||
 | 
					    "logo": "https://www.cross-seed.org/img/cross-seed.svg",
 | 
				
			||||||
 | 
					    "description": "cross-seed is an app designed to help you download torrents that you can cross seed based on your existing torrents. It is designed to match conservatively to minimize manual intervention.",
 | 
				
			||||||
 | 
					    "install_methods": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "type": "default",
 | 
				
			||||||
 | 
					            "script": "ct/cross-seed.sh",
 | 
				
			||||||
 | 
					            "resources": {
 | 
				
			||||||
 | 
					                "cpu": 1,
 | 
				
			||||||
 | 
					                "ram": 1024,
 | 
				
			||||||
 | 
					                "hdd": 2,
 | 
				
			||||||
 | 
					                "os": "debian",
 | 
				
			||||||
 | 
					                "version": "12"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "default_credentials": {
 | 
				
			||||||
 | 
					        "username": null,
 | 
				
			||||||
 | 
					        "password": null
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "notes": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "text": "After the installation cross-seed will fail to start with an empty configuration. To fix this, edit `~/.cross-seed/config.js` to properly configure cross-seed, then restart by running `systemctl restart cross-seed`.",
 | 
				
			||||||
 | 
					        "type": "info"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -30,5 +30,10 @@
 | 
				
			|||||||
        "username": null,
 | 
					        "username": null,
 | 
				
			||||||
        "password": null
 | 
					        "password": null
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "notes": []
 | 
					      "notes": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "text": "after installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/836´",
 | 
				
			||||||
 | 
					      "type": "info"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,8 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "notes": [
 | 
					    "notes": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "text": "entering `evcc configure` in the LXC terminal will guide you through the creation of a configuration file for evcc.",
 | 
					            "text": "To configure evcc, type `cd /etc` followed by `evcc configure` in the evcc LXC shell",
 | 
				
			||||||
            "type": "info"
 | 
					            "type": "info"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										34
									
								
								json/excalidraw.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								json/excalidraw.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "name": "Excalidraw",
 | 
				
			||||||
 | 
					    "slug": "excalidraw",
 | 
				
			||||||
 | 
					    "categories": [
 | 
				
			||||||
 | 
					        12
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "date_created": "2025-02-12",
 | 
				
			||||||
 | 
					    "type": "ct",
 | 
				
			||||||
 | 
					    "updateable": true,
 | 
				
			||||||
 | 
					    "privileged": false,
 | 
				
			||||||
 | 
					    "interface_port": 3000,
 | 
				
			||||||
 | 
					    "documentation": "https://docs.excalidraw.com/docs",
 | 
				
			||||||
 | 
					    "website": "https://excalidraw.com/",
 | 
				
			||||||
 | 
					    "logo": "https://docs.excalidraw.com/img/logo.svg",
 | 
				
			||||||
 | 
					    "description": "An open source virtual hand-drawn style whiteboard. Collaborative and end-to-end encrypted.",
 | 
				
			||||||
 | 
					    "install_methods": [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        "type": "default",
 | 
				
			||||||
 | 
					        "script": "ct/excalidraw.sh",
 | 
				
			||||||
 | 
					        "resources": {
 | 
				
			||||||
 | 
					          "cpu": 2,
 | 
				
			||||||
 | 
					          "ram": 3072,
 | 
				
			||||||
 | 
					          "hdd": 6,
 | 
				
			||||||
 | 
					          "os": "debian",
 | 
				
			||||||
 | 
					          "version": "12"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "default_credentials": {
 | 
				
			||||||
 | 
					      "username": null,
 | 
				
			||||||
 | 
					      "password": null
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "notes": []
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
@@ -21,7 +21,7 @@
 | 
				
			|||||||
        "cpu": 1,
 | 
					        "cpu": 1,
 | 
				
			||||||
        "ram": 1024,
 | 
					        "ram": 1024,
 | 
				
			||||||
        "hdd": 2,
 | 
					        "hdd": 2,
 | 
				
			||||||
        "os": "Debian",
 | 
					        "os": "debian",
 | 
				
			||||||
        "version": "12"
 | 
					        "version": "12"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								json/freshrss.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								json/freshrss.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "FreshRSS",
 | 
				
			||||||
 | 
					  "slug": "freshrss",
 | 
				
			||||||
 | 
					  "categories": [
 | 
				
			||||||
 | 
					    12
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "date_created": "2025-02-10",
 | 
				
			||||||
 | 
					  "type": "ct",
 | 
				
			||||||
 | 
					  "updateable": true,
 | 
				
			||||||
 | 
					  "privileged": false,
 | 
				
			||||||
 | 
					  "interface_port": 80,
 | 
				
			||||||
 | 
					  "documentation": "https://freshrss.github.io/FreshRSS/en/",
 | 
				
			||||||
 | 
					  "website": "https://freshrss.org/",
 | 
				
			||||||
 | 
					  "logo": "https://freshrss.org/images/icon.svg",
 | 
				
			||||||
 | 
					  "description": "FreshRSS is a self-hosted RSS and Atom feed aggregator that lets users collect, organize, and read from multiple sources in one place. It is lightweight, easy to work with, powerful, and customizable.",
 | 
				
			||||||
 | 
					  "install_methods": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "type": "default",
 | 
				
			||||||
 | 
					      "script": "ct/freshrss.sh",
 | 
				
			||||||
 | 
					      "resources": {
 | 
				
			||||||
 | 
					        "cpu": 2,
 | 
				
			||||||
 | 
					        "ram": 1024,
 | 
				
			||||||
 | 
					        "hdd": 4,
 | 
				
			||||||
 | 
					        "os": "Debian",
 | 
				
			||||||
 | 
					        "version": "12"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "default_credentials": {
 | 
				
			||||||
 | 
					    "username": null,
 | 
				
			||||||
 | 
					    "password": null
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "notes": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "text": "Database credentials: `cat ~/freshrss.creds`",
 | 
				
			||||||
 | 
					      "type": "info"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										43
									
								
								json/graylog.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								json/graylog.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "name": "Graylog",
 | 
				
			||||||
 | 
					    "slug": "graylog",
 | 
				
			||||||
 | 
					    "categories": [
 | 
				
			||||||
 | 
					        9
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "date_created": "2025-02-12",
 | 
				
			||||||
 | 
					    "type": "ct",
 | 
				
			||||||
 | 
					    "updateable": true,
 | 
				
			||||||
 | 
					    "privileged": false,
 | 
				
			||||||
 | 
					    "interface_port": 9000,
 | 
				
			||||||
 | 
					    "documentation": "https://go2docs.graylog.org/current/home.htm",
 | 
				
			||||||
 | 
					    "website": "https://graylog.org/",
 | 
				
			||||||
 | 
					    "logo": "https://graylog.org/wp-content/uploads/2023/11/gl-logo-horiz-all-white-1200w-300x96.png.webp",
 | 
				
			||||||
 | 
					    "description": "Graylog is a free and open log management platform.",
 | 
				
			||||||
 | 
					    "install_methods": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "type": "default",
 | 
				
			||||||
 | 
					            "script": "ct/graylog.sh",
 | 
				
			||||||
 | 
					            "resources": {
 | 
				
			||||||
 | 
					                "cpu": 2,
 | 
				
			||||||
 | 
					                "ram": 8192,
 | 
				
			||||||
 | 
					                "hdd": 30,
 | 
				
			||||||
 | 
					                "os": "debian",
 | 
				
			||||||
 | 
					                "version": "12"
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "default_credentials": {
 | 
				
			||||||
 | 
					        "username": null,
 | 
				
			||||||
 | 
					        "password": null
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "notes": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					        "text": "Initial Setup credentials: `tail /var/log/graylog-server/server.log` after the server starts for the first time.",
 | 
				
			||||||
 | 
					        "type": "info"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					        "text": "Type `cat ~/graylog.creds` to get admin password that you use to log in AFTER the Initial Setup",
 | 
				
			||||||
 | 
					        "type": "info"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -21,7 +21,7 @@
 | 
				
			|||||||
          "cpu": 2,
 | 
					          "cpu": 2,
 | 
				
			||||||
          "ram": 1024,
 | 
					          "ram": 1024,
 | 
				
			||||||
          "hdd": 4,
 | 
					          "hdd": 4,
 | 
				
			||||||
          "os": "Debian",
 | 
					          "os": "debian",
 | 
				
			||||||
          "version": "12"
 | 
					          "version": "12"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user