mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-04 18:32:51 +00:00
Compare commits
150 Commits
2024-12-16
...
2024-12-31
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf53f57e10 | ||
|
|
70f2a50955 | ||
|
|
10634a77c7 | ||
|
|
0aeec14025 | ||
|
|
19c3b1dee0 | ||
|
|
af4b833aa4 | ||
|
|
72f844ddc6 | ||
|
|
68aad8e152 | ||
|
|
4f517de2d1 | ||
|
|
f2d11ea48c | ||
|
|
a77ce0bad0 | ||
|
|
2479ceeb99 | ||
|
|
dc314990f8 | ||
|
|
3543d10d35 | ||
|
|
c9f4391df0 | ||
|
|
69ae09346f | ||
|
|
13175efbd8 | ||
|
|
4a8239b2ce | ||
|
|
e319355859 | ||
|
|
21d857e7ad | ||
|
|
df3919b904 | ||
|
|
96f30bf51f | ||
|
|
2832a1e2c4 | ||
|
|
415f99e3eb | ||
|
|
aa7e8e0810 | ||
|
|
8717a0fcf1 | ||
|
|
30bc16072e | ||
|
|
464fa283ad | ||
|
|
024480d0a4 | ||
|
|
c754f4e243 | ||
|
|
152eb6b2bb | ||
|
|
3424e9a86e | ||
|
|
13a52878ab | ||
|
|
5f39bb66a5 | ||
|
|
773b2fcc79 | ||
|
|
938f0f76fa | ||
|
|
611a14b55f | ||
|
|
304db812a8 | ||
|
|
678206768c | ||
|
|
92d2e421ee | ||
|
|
fe3ff916b6 | ||
|
|
d4c95779bf | ||
|
|
8c0794c2bb | ||
|
|
cdb121a55f | ||
|
|
b22d66da1b | ||
|
|
87ff677ed7 | ||
|
|
d3eaf6eaf5 | ||
|
|
26e4017d76 | ||
|
|
406bb57d74 | ||
|
|
f97e932205 | ||
|
|
395d1086ea | ||
|
|
517b19a62b | ||
|
|
ab292927e6 | ||
|
|
6bae0d71ea | ||
|
|
1378e9a2e9 | ||
|
|
71d21f3bfe | ||
|
|
12f087932f | ||
|
|
8d96c5135d | ||
|
|
0c31f43789 | ||
|
|
943e6967f4 | ||
|
|
e253fe6cee | ||
|
|
4b0fff5a88 | ||
|
|
ff3d2026a5 | ||
|
|
1b57be94fd | ||
|
|
b1dc0bc20f | ||
|
|
8f243c74ff | ||
|
|
b30e8c534f | ||
|
|
9b07fe4178 | ||
|
|
be66aefd9a | ||
|
|
7aca36a3f0 | ||
|
|
cf8dd2bfac | ||
|
|
ee62a56cb9 | ||
|
|
b8885e8d6c | ||
|
|
55e02d8bdd | ||
|
|
72df7e432d | ||
|
|
0f2e49fbeb | ||
|
|
d71bf7bcdf | ||
|
|
4ed5bf0c12 | ||
|
|
6debf20d19 | ||
|
|
88120fcbcc | ||
|
|
b65d55282f | ||
|
|
ae67ee8768 | ||
|
|
9523491c0a | ||
|
|
b0a523aac3 | ||
|
|
67a0c06b80 | ||
|
|
1c4c3b71e3 | ||
|
|
e98d96a232 | ||
|
|
48e86b063b | ||
|
|
53fcbb46be | ||
|
|
5e22f990d2 | ||
|
|
d74ad31e72 | ||
|
|
8c989eee8e | ||
|
|
326f706672 | ||
|
|
e715adf3ba | ||
|
|
57b881db45 | ||
|
|
f40c606808 | ||
|
|
4c042c180f | ||
|
|
abb0e0f96d | ||
|
|
8e1644ab6e | ||
|
|
2892762a80 | ||
|
|
45c1a73eda | ||
|
|
6efc6504d4 | ||
|
|
af30823bef | ||
|
|
d283d0a1cb | ||
|
|
5214c3d531 | ||
|
|
7f86418cf5 | ||
|
|
949ec3d181 | ||
|
|
9379ac4032 | ||
|
|
2326e11699 | ||
|
|
94b51fefeb | ||
|
|
6487885f4b | ||
|
|
700902ba2e | ||
|
|
23d7587f04 | ||
|
|
4c04a33a29 | ||
|
|
9da79b9a97 | ||
|
|
785d745b22 | ||
|
|
a5d6023da8 | ||
|
|
773e3ba983 | ||
|
|
ba76b4fe37 | ||
|
|
08f6042f65 | ||
|
|
25049290b0 | ||
|
|
94d81fdf5c | ||
|
|
c0ac8a7fab | ||
|
|
bda30403da | ||
|
|
6f96aebc27 | ||
|
|
a9a640bb75 | ||
|
|
056d8902fb | ||
|
|
fe3faccc42 | ||
|
|
9236f97009 | ||
|
|
17eaedf335 | ||
|
|
d0f2c71038 | ||
|
|
22c0757b4d | ||
|
|
cd374c296f | ||
|
|
07508d10d0 | ||
|
|
29dcf19c04 | ||
|
|
3e60e43d05 | ||
|
|
f199366867 | ||
|
|
9efb421b5c | ||
|
|
d65d64e59e | ||
|
|
47307be181 | ||
|
|
a6f3771214 | ||
|
|
7261affcc2 | ||
|
|
c60b16229b | ||
|
|
b18b49ef6f | ||
|
|
870313cc58 | ||
|
|
e9c0ca8579 | ||
|
|
73d5794086 | ||
|
|
a46e66fd9a | ||
|
|
79d597297c | ||
|
|
f511d88502 |
16
.editorconfig
Normal file
16
.editorconfig
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
; editorconfig.org
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
continuation_indent_size = 2
|
||||||
|
end_of_line = lf
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
max_line_length = 120
|
||||||
|
tab_width = 2
|
||||||
|
; trim_trailing_whitespace = true ; disabled until files are cleaned up
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
6
.github/pull_request_template.md
vendored
6
.github/pull_request_template.md
vendored
@@ -7,13 +7,13 @@
|
|||||||
## ✍️ Description
|
## ✍️ Description
|
||||||
Provide a summary of the changes made and/or reference the issue being addressed.
|
Provide a summary of the changes made and/or reference the issue being addressed.
|
||||||
|
|
||||||
-
|
|
||||||
|
|
||||||
- - -
|
- - -
|
||||||
|
**_Please remove unneeded lines!_**
|
||||||
- Related Issue: # (issue number, if applicable)
|
- Related Issue: # (issue number, if applicable)
|
||||||
- Related PR: # (if applicable)
|
- Related PR: # (if applicable)
|
||||||
- Related Discussion: [Link](https://github.com/community-scripts/ProxmoxVE/discussions)
|
- Related Discussion: []()(if applicable)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
25
.github/workflows/shellcheck.yml
vendored
Normal file
25
.github/workflows/shellcheck.yml
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
name: Shellcheck
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: "5 1 * * *"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
shellcheck:
|
||||||
|
name: Shellcheck
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Run ShellCheck
|
||||||
|
uses: ludeeus/action-shellcheck@master
|
||||||
|
with:
|
||||||
|
ignore_paths: >-
|
||||||
|
frontend
|
||||||
|
json
|
||||||
216
CHANGELOG.md
216
CHANGELOG.md
@@ -16,6 +16,222 @@ All LXC instances created using this repository come pre-installed with Midnight
|
|||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
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
|
||||||
|
|
||||||
|
## 2024-12-31 - Happy new Year! 🎉✨
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Add ExecReload to prometheus.service [@BasixKOR](https://github.com/BasixKOR) ([#1131](https://github.com/community-scripts/ProxmoxVE/pull/1131))
|
||||||
|
- Fix: Figlet Version & Font Check [@MickLesk](https://github.com/MickLesk) ([#1133](https://github.com/community-scripts/ProxmoxVE/pull/1133))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix: Copy issue after update in Bookstack LXC [@MickLesk](https://github.com/MickLesk) ([#1137](https://github.com/community-scripts/ProxmoxVE/pull/1137))
|
||||||
|
- Omada: Switch Base-URL to prevent issues [@MickLesk](https://github.com/MickLesk) ([#1135](https://github.com/community-scripts/ProxmoxVE/pull/1135))
|
||||||
|
- fix: guacd service not start during Apache-Guacamole script installation process [@PhoenixEmik](https://github.com/PhoenixEmik) ([#1122](https://github.com/community-scripts/ProxmoxVE/pull/1122))
|
||||||
|
- Fix Homepage-Script: Installation/Update [@MickLesk](https://github.com/MickLesk) ([#1129](https://github.com/community-scripts/ProxmoxVE/pull/1129))
|
||||||
|
- Netbox: Updating URL to https [@surajsbmn](https://github.com/surajsbmn) ([#1124](https://github.com/community-scripts/ProxmoxVE/pull/1124))
|
||||||
|
|
||||||
|
## 2024-12-30
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- [Archivebox] Fix wrong port being printed post install. [@Strana-Mechty](https://github.com/Strana-Mechty) ([#1105](https://github.com/community-scripts/ProxmoxVE/pull/1105))
|
||||||
|
- fix: add homepage version during build step [@se-bastiaan](https://github.com/se-bastiaan) ([#1107](https://github.com/community-scripts/ProxmoxVE/pull/1107))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Fix Trilium Website to TriliumNext [@tmkis2](https://github.com/tmkis2) ([#1103](https://github.com/community-scripts/ProxmoxVE/pull/1103))
|
||||||
|
|
||||||
|
## 2024-12-29
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: Grist [@cfurrow](https://github.com/cfurrow) ([#1076](https://github.com/community-scripts/ProxmoxVE/pull/1076))
|
||||||
|
- New Script: TeddyCloud Server [@dsiebel](https://github.com/dsiebel) ([#1064](https://github.com/community-scripts/ProxmoxVE/pull/1064))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix Install / Update on Grist Script [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1091](https://github.com/community-scripts/ProxmoxVE/pull/1091))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- fix: Update add-lxc-iptag.json warn to warning [@BramSuurdje](https://github.com/BramSuurdje) ([#1094](https://github.com/community-scripts/ProxmoxVE/pull/1094))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- Introduce editorconfig for more consistent formatting [@dsiebel](https://github.com/dsiebel) ([#1073](https://github.com/community-scripts/ProxmoxVE/pull/1073))
|
||||||
|
|
||||||
|
## 2024-12-28
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### 💥 Breaking Changes
|
||||||
|
|
||||||
|
- Add Figlet into Repo | Creation of local ASCII Header [@MickLesk](https://github.com/MickLesk) ([#1072](https://github.com/community-scripts/ProxmoxVE/pull/1072))
|
||||||
|
- Add an IP-Update for MOTD if IP Changed [@MickLesk](https://github.com/MickLesk) ([#1067](https://github.com/community-scripts/ProxmoxVE/pull/1067))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Zabbix: Fix SQL Path for 7.2 [@MickLesk](https://github.com/MickLesk) ([#1069](https://github.com/community-scripts/ProxmoxVE/pull/1069))
|
||||||
|
- Authentik: added missing port to access url [@TheRealVira](https://github.com/TheRealVira) ([#1065](https://github.com/community-scripts/ProxmoxVE/pull/1065))
|
||||||
|
|
||||||
|
## 2024-12-27
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- new scripts for Authentik [@remz1337](https://github.com/remz1337) ([#291](https://github.com/community-scripts/ProxmoxVE/pull/291))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Add 8.0 for MongoDB Installation [@MickLesk](https://github.com/MickLesk) ([#1046](https://github.com/community-scripts/ProxmoxVE/pull/1046))
|
||||||
|
- Update Zabbix to 7.2. Release [@MickLesk](https://github.com/MickLesk) ([#1048](https://github.com/community-scripts/ProxmoxVE/pull/1048))
|
||||||
|
- Apache-Guacamole script bug fix [@sannier3](https://github.com/sannier3) ([#1039](https://github.com/community-scripts/ProxmoxVE/pull/1039))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Updated SAB documentation based on RAM increase [@TheRealVira](https://github.com/TheRealVira) ([#1035](https://github.com/community-scripts/ProxmoxVE/pull/1035))
|
||||||
|
|
||||||
|
### ❔ Unlabelled
|
||||||
|
|
||||||
|
- Patch Figlet Repo if missing [@MickLesk](https://github.com/MickLesk) ([#1044](https://github.com/community-scripts/ProxmoxVE/pull/1044))
|
||||||
|
- fix Tags for Advanced Settings [@MickLesk](https://github.com/MickLesk) ([#1042](https://github.com/community-scripts/ProxmoxVE/pull/1042))
|
||||||
|
|
||||||
|
## 2024-12-26
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: Jenkins [@quantumryuu](https://github.com/quantumryuu) ([#1019](https://github.com/community-scripts/ProxmoxVE/pull/1019))
|
||||||
|
- New Script: 2FAuth [@jkrgr0](https://github.com/jkrgr0) ([#943](https://github.com/community-scripts/ProxmoxVE/pull/943))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- ChangeDetection Update: Update also Browsers [@Niklas04](https://github.com/Niklas04) ([#1027](https://github.com/community-scripts/ProxmoxVE/pull/1027))
|
||||||
|
- ensure all RFC1918 local Ipv4 addresses are in iptag script [@AskAlice](https://github.com/AskAlice) ([#992](https://github.com/community-scripts/ProxmoxVE/pull/992))
|
||||||
|
- Fix Proxmox DataCenter: incorrect build.func url [@rbradley0](https://github.com/rbradley0) ([#1013](https://github.com/community-scripts/ProxmoxVE/pull/1013))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- [GitHub Actions] Introduce Shellcheck to check bash code [@andygrunwald](https://github.com/andygrunwald) ([#1018](https://github.com/community-scripts/ProxmoxVE/pull/1018))
|
||||||
|
|
||||||
|
## 2024-12-25
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- add: pve-datacenter-manager [@CrazyWolf13](https://github.com/CrazyWolf13) ([#947](https://github.com/community-scripts/ProxmoxVE/pull/947))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix Script: Alpine Nextcloud Upload File Size Limit [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#933](https://github.com/community-scripts/ProxmoxVE/pull/933))
|
||||||
|
- Doubled RAM for SAB [@TheRealVira](https://github.com/TheRealVira) ([#1007](https://github.com/community-scripts/ProxmoxVE/pull/1007))
|
||||||
|
|
||||||
|
## 2024-12-23
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix Navidrome Update & Install [@MickLesk](https://github.com/MickLesk) ([#991](https://github.com/community-scripts/ProxmoxVE/pull/991))
|
||||||
|
- Update emby.sh to correct port [@Rageplant](https://github.com/Rageplant) ([#989](https://github.com/community-scripts/ProxmoxVE/pull/989))
|
||||||
|
|
||||||
|
## 2024-12-21
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- update Port in homeassistant-core CT [@fraefel](https://github.com/fraefel) ([#961](https://github.com/community-scripts/ProxmoxVE/pull/961))
|
||||||
|
|
||||||
|
## 2024-12-20
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New Script: Apache Guacamole [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#657](https://github.com/community-scripts/ProxmoxVE/pull/657))
|
||||||
|
- New Script: silverbullet [@dsiebel](https://github.com/dsiebel) ([#659](https://github.com/community-scripts/ProxmoxVE/pull/659))
|
||||||
|
- New Script: Zammad [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#640](https://github.com/community-scripts/ProxmoxVE/pull/640))
|
||||||
|
- New Script: CheckMk [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#926](https://github.com/community-scripts/ProxmoxVE/pull/926))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix: Remove PHP Key generation in Bookstack Update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#948](https://github.com/community-scripts/ProxmoxVE/pull/948))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Update checkmk description [@BramSuurdje](https://github.com/BramSuurdje) ([#954](https://github.com/community-scripts/ProxmoxVE/pull/954))
|
||||||
|
- Add Login Note for Checkmk [@MickLesk](https://github.com/MickLesk) ([#940](https://github.com/community-scripts/ProxmoxVE/pull/940))
|
||||||
|
|
||||||
|
### ❔ Unlabelled
|
||||||
|
|
||||||
|
- Update build.func to display the Proxmox Hostname [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#894](https://github.com/community-scripts/ProxmoxVE/pull/894))
|
||||||
|
|
||||||
|
## 2024-12-19
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix: Bookstack Update Function [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#844](https://github.com/community-scripts/ProxmoxVE/pull/844))
|
||||||
|
- mysql not showing ip after install [@snow2k9](https://github.com/snow2k9) ([#924](https://github.com/community-scripts/ProxmoxVE/pull/924))
|
||||||
|
- Fix Omada - Crawling latest version [@MickLesk](https://github.com/MickLesk) ([#918](https://github.com/community-scripts/ProxmoxVE/pull/918))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- Fix script path formatting in InstallMethod component [@BramSuurdje](https://github.com/BramSuurdje) ([#909](https://github.com/community-scripts/ProxmoxVE/pull/909))
|
||||||
|
- Fix Part-DB Docu (cred command) [@EvilBlood](https://github.com/EvilBlood) ([#898](https://github.com/community-scripts/ProxmoxVE/pull/898))
|
||||||
|
- Enhance Tooltip component by adding CircleHelp icon and fix instructions in script component [@BramSuurdje](https://github.com/BramSuurdje) ([#910](https://github.com/community-scripts/ProxmoxVE/pull/910))
|
||||||
|
|
||||||
|
## 2024-12-18
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### ✨ New Scripts
|
||||||
|
|
||||||
|
- New script: Part-DB LXC [@bvdberg01](https://github.com/bvdberg01) ([#591](https://github.com/community-scripts/ProxmoxVE/pull/591))
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix Kernel-Clean for Proxmox 8.x [@MickLesk](https://github.com/MickLesk) ([#904](https://github.com/community-scripts/ProxmoxVE/pull/904))
|
||||||
|
- [Frigate] Remove SSE 4.2 from instruction set supporting OpenVino [@remz1337](https://github.com/remz1337) ([#902](https://github.com/community-scripts/ProxmoxVE/pull/902))
|
||||||
|
|
||||||
|
### 🌐 Website
|
||||||
|
|
||||||
|
- New Metadata Category: "Coding & AI" [@newzealandpaul](https://github.com/newzealandpaul) ([#890](https://github.com/community-scripts/ProxmoxVE/pull/890))
|
||||||
|
- Moved Webmin to "Server & Networking" [@newzealandpaul](https://github.com/newzealandpaul) ([#891](https://github.com/community-scripts/ProxmoxVE/pull/891))
|
||||||
|
|
||||||
|
## 2024-12-17
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
### 🚀 Updated Scripts
|
||||||
|
|
||||||
|
- Fix Alpine-Nextcloud: Bump PHP Version to 8.3 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#865](https://github.com/community-scripts/ProxmoxVE/pull/865))
|
||||||
|
- Correction of Jellyfin CT Port [@mneten](https://github.com/mneten) ([#884](https://github.com/community-scripts/ProxmoxVE/pull/884))
|
||||||
|
- fix spinner on lxc-ip-tag [@MickLesk](https://github.com/MickLesk) ([#876](https://github.com/community-scripts/ProxmoxVE/pull/876))
|
||||||
|
- Fix Keycloak Installation [@MickLesk](https://github.com/MickLesk) ([#874](https://github.com/community-scripts/ProxmoxVE/pull/874))
|
||||||
|
- Fix ports ressources [@MickLesk](https://github.com/MickLesk) ([#867](https://github.com/community-scripts/ProxmoxVE/pull/867))
|
||||||
|
|
||||||
|
### 🧰 Maintenance
|
||||||
|
|
||||||
|
- Small Changes to the PR Template [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#862](https://github.com/community-scripts/ProxmoxVE/pull/862))
|
||||||
|
|
||||||
|
### ❔ Unlabelled
|
||||||
|
|
||||||
|
- calculate terminal size for header_info [@MickLesk](https://github.com/MickLesk) ([#879](https://github.com/community-scripts/ProxmoxVE/pull/879))
|
||||||
|
- Fix header creation with figlet for alpine [@MickLesk](https://github.com/MickLesk) ([#869](https://github.com/community-scripts/ProxmoxVE/pull/869))
|
||||||
|
|
||||||
## 2024-12-16
|
## 2024-12-16
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
90
ct/2fauth.sh
Normal file
90
ct/2fauth.sh
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: jkrgr0
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://docs.2fauth.app/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="2FAuth"
|
||||||
|
TAGS="2fa;authenticator"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="512"
|
||||||
|
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
|
||||||
|
|
||||||
|
# Check if installation is present | -f for file, -d for folder
|
||||||
|
if [[ ! -d "/opt/2fauth" ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Crawling the new version and checking whether an update is required
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/2fauth_version.txt)" ]] || [[ ! -f /opt/2fauth_version.txt ]]; then
|
||||||
|
msg_info "Updating $APP to ${RELEASE}"
|
||||||
|
|
||||||
|
apt-get update &>/dev/null
|
||||||
|
apt-get -y upgrade &>/dev/null
|
||||||
|
|
||||||
|
# Creating Backup
|
||||||
|
msg_info "Creating Backup"
|
||||||
|
mv "/opt/2fauth" "/opt/2fauth-backup"
|
||||||
|
msg_ok "Backup Created"
|
||||||
|
|
||||||
|
# Execute Update
|
||||||
|
wget -q "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip"
|
||||||
|
unzip -q "${RELEASE}.zip"
|
||||||
|
mv "2FAuth-${RELEASE//v}/" "/opt/2fauth"
|
||||||
|
mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
|
||||||
|
mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
|
||||||
|
cd "/opt/2fauth" || return
|
||||||
|
|
||||||
|
chown -R www-data: "/opt/2fauth"
|
||||||
|
chmod -R 755 "/opt/2fauth"
|
||||||
|
|
||||||
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
|
composer install --no-dev --prefer-source &>/dev/null
|
||||||
|
|
||||||
|
php artisan 2fauth:install
|
||||||
|
|
||||||
|
# Cleaning up
|
||||||
|
msg_info "Cleaning Up"
|
||||||
|
rm -rf "v${RELEASE}.zip"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleanup Completed"
|
||||||
|
|
||||||
|
# Last Action
|
||||||
|
echo "${RELEASE}" >/opt/2fauth_version.txt
|
||||||
|
msg_ok "Updated $APP to ${RELEASE}"
|
||||||
|
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}:80${CL}"
|
||||||
@@ -8,9 +8,9 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
# App Default Values
|
# App Default Values
|
||||||
APP="Adguard"
|
APP="Adguard"
|
||||||
var_tags="adblock"
|
var_tags="adblock"
|
||||||
var_cpu="2"
|
var_cpu="1"
|
||||||
var_ram="2048"
|
var_ram="512"
|
||||||
var_disk="4"
|
var_disk="2"
|
||||||
var_os="debian"
|
var_os="debian"
|
||||||
var_version="12"
|
var_version="12"
|
||||||
var_unprivileged="1"
|
var_unprivileged="1"
|
||||||
@@ -43,4 +43,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
|
|||||||
47
ct/apache-guacamole.sh
Normal file
47
ct/apache-guacamole.sh
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/refs/heads/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: Michel Roegl-Brunner (michelroegl-brunner)
|
||||||
|
# License: | MIT https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://guacamole.apache.org/
|
||||||
|
|
||||||
|
#App Default Values
|
||||||
|
APP="Apache-Guacamole"
|
||||||
|
TAGS="webserver;remote"
|
||||||
|
var_disk="4"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="2048"
|
||||||
|
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/apache-guacamole ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_error "Ther is currently no automatic update function for ${APP}."
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/guacamole${CL}"
|
||||||
|
|
||||||
@@ -57,4 +57,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/admin/login${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000/admin/login${CL}"
|
||||||
|
|||||||
85
ct/authentik.sh
Normal file
85
ct/authentik.sh
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: remz1337
|
||||||
|
# License: MIT
|
||||||
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Authentik"
|
||||||
|
var_tags="identity-provider"
|
||||||
|
var_disk="15"
|
||||||
|
var_cpu="6"
|
||||||
|
var_ram="8192"
|
||||||
|
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/authentik-server.service ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}')
|
||||||
|
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
systemctl stop authentik-server
|
||||||
|
systemctl stop authentik-worker
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
msg_info "Building ${APP} website"
|
||||||
|
mkdir -p /opt/authentik
|
||||||
|
wget -qO authentik.tar.gz "${RELEASE}"
|
||||||
|
tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite
|
||||||
|
rm -rf authentik.tar.gz
|
||||||
|
cd /opt/authentik/website
|
||||||
|
npm install &>/dev/null
|
||||||
|
npm run build-bundled &>/dev/null
|
||||||
|
cd /opt/authentik/web
|
||||||
|
npm install &>/dev/null
|
||||||
|
npm run build &>/dev/null
|
||||||
|
msg_ok "Built ${APP} website"
|
||||||
|
|
||||||
|
msg_info "Installing Python Dependencies"
|
||||||
|
cd /opt/authentik
|
||||||
|
poetry install --only=main --no-ansi --no-interaction --no-root &>/dev/null
|
||||||
|
poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt &>/dev/null
|
||||||
|
pip install --no-cache-dir -r requirements.txt &>/dev/null
|
||||||
|
pip install . &>/dev/null
|
||||||
|
msg_ok "Installed Python Dependencies"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE} (Patience)"
|
||||||
|
cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints
|
||||||
|
bash /opt/authentik/lifecycle/ak migrate &>/dev/null
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start authentik-server
|
||||||
|
systemctl start authentik-worker
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
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/if/flow/initial-setup/${CL}"
|
||||||
@@ -38,32 +38,40 @@ function update_script() {
|
|||||||
systemctl stop apache2
|
systemctl stop apache2
|
||||||
msg_ok "Services Stopped"
|
msg_ok "Services Stopped"
|
||||||
|
|
||||||
msg_info "Updating ${APP} to ${RELEASE}"
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
cp /opt/bookstack/.env /opt/.env
|
mv /opt/bookstack /opt/bookstack-backup
|
||||||
wget -q "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip"
|
wget -q --directory-prefix=/opt "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip"
|
||||||
unzip -q v${RELEASE}.zip
|
unzip -q /opt/v${RELEASE}.zip -d /opt
|
||||||
mv BookStack-${RELEASE} /opt/bookstack
|
mv /opt/BookStack-${RELEASE} /opt/bookstack
|
||||||
mv /opt/.env /opt/bookstack/.env
|
cp /opt/bookstack-backup/.env /opt/bookstack/.env
|
||||||
|
cp -r /opt/bookstack-backup/public/uploads/* /opt/bookstack/public/uploads/
|
||||||
|
cp -r /opt/bookstack-backup/storage/uploads/* /opt/bookstack/storage/uploads/
|
||||||
|
cp -r /opt/bookstack-backup/themes/* /opt/bookstack/themes/
|
||||||
cd /opt/bookstack
|
cd /opt/bookstack
|
||||||
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev &>/dev/null
|
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev &>/dev/null
|
||||||
php artisan key:generate --force &>/dev/null
|
|
||||||
php artisan migrate --force &>/dev/null
|
php artisan migrate --force &>/dev/null
|
||||||
|
chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
||||||
|
chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
|
||||||
|
chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
|
||||||
|
chmod -R 640 /opt/bookstack/.env
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
msg_info "Starting Apache2"
|
msg_info "Starting Apache2"
|
||||||
systemctl start apache2
|
systemctl start apache2
|
||||||
msg_ok "Started Apache2"
|
msg_ok "Started Apache2"
|
||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -rf v${RELEASE}.zip
|
rm -rf /opt/bookstack-backup
|
||||||
|
rm -rf /opt/v${RELEASE}.zip
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
build_container
|
build_container
|
||||||
description
|
description
|
||||||
|
|||||||
@@ -41,13 +41,13 @@ function update_script() {
|
|||||||
rm -rf kepubify-linux-64bit
|
rm -rf kepubify-linux-64bit
|
||||||
curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit
|
curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit
|
||||||
chmod +x kepubify-linux-64bit
|
chmod +x kepubify-linux-64bit
|
||||||
menu_array=("1" "Enables gdrive as storage backend for your ebooks" OFF
|
menu_array=("1" "Enables gdrive as storage backend for your ebooks" OFF \
|
||||||
"2" "Enables sending emails via a googlemail account without enabling insecure apps" OFF
|
"2" "Enables sending emails via a googlemail account without enabling insecure apps" OFF \
|
||||||
"3" "Enables displaying of additional author infos on the authors page" OFF
|
"3" "Enables displaying of additional author infos on the authors page" OFF \
|
||||||
"4" "Enables login via LDAP server" OFF
|
"4" "Enables login via LDAP server" OFF \
|
||||||
"5" "Enables login via google or github oauth" OFF
|
"5" "Enables login via google or github oauth" OFF \
|
||||||
"6" "Enables extracting of metadata from epub, fb2, pdf files, and also extraction of covers from cbr, cbz, cbt files" OFF
|
"6" "Enables extracting of metadata from epub, fb2, pdf files, and also extraction of covers from cbr, cbz, cbt files" OFF \
|
||||||
"7" "Enables extracting of metadata from cbr, cbz, cbt files" OFF
|
"7" "Enables extracting of metadata from cbr, cbz, cbt files" OFF \
|
||||||
"8" "Enables syncing with your kobo reader" OFF)
|
"8" "Enables syncing with your kobo reader" OFF)
|
||||||
if [ -f "/opt/calibre-web/options.txt" ]; then
|
if [ -f "/opt/calibre-web/options.txt" ]; then
|
||||||
cps_options="$(cat /opt/calibre-web/options.txt)"
|
cps_options="$(cat /opt/calibre-web/options.txt)"
|
||||||
@@ -140,4 +140,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}"
|
||||||
|
|||||||
@@ -28,28 +28,45 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
|
|
||||||
if [[ ! -f /etc/systemd/system/changedetection.service ]]; then
|
if [[ ! -f /etc/systemd/system/changedetection.service ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
msg_info "Updating ${APP} LXC"
|
|
||||||
if ! dpkg -s libjpeg-dev >/dev/null 2>&1; then
|
if ! dpkg -s libjpeg-dev >/dev/null 2>&1; then
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get install -y libjpeg-dev
|
apt-get install -y libjpeg-dev
|
||||||
|
msg_ok "Updated Dependencies"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
pip3 install changedetection.io --upgrade &>/dev/null
|
pip3 install changedetection.io --upgrade &>/dev/null
|
||||||
|
msg_ok "Updated ${APP}"
|
||||||
|
|
||||||
|
msg_info "Updating Playwright"
|
||||||
pip3 install playwright --upgrade &>/dev/null
|
pip3 install playwright --upgrade &>/dev/null
|
||||||
|
msg_ok "Updated Playwright"
|
||||||
|
|
||||||
if [[ -f /etc/systemd/system/browserless.service ]]; then
|
if [[ -f /etc/systemd/system/browserless.service ]]; then
|
||||||
|
msg_info "Updating Browserless (Patience)"
|
||||||
git -C /opt/browserless/ fetch --all &>/dev/null
|
git -C /opt/browserless/ fetch --all &>/dev/null
|
||||||
git -C /opt/browserless/ reset --hard origin/main &>/dev/null
|
git -C /opt/browserless/ reset --hard origin/main &>/dev/null
|
||||||
npm update --prefix /opt/browserless &>/dev/null
|
npm update --prefix /opt/browserless &>/dev/null
|
||||||
|
/opt/browserless/node_modules/playwright-core/cli.js install --with-deps &>/dev/null
|
||||||
|
# Update Chrome separately, as it has to be done with the force option. Otherwise the installation of other browsers will not be done if Chrome is already installed.
|
||||||
|
/opt/browserless/node_modules/playwright-core/cli.js install --force chrome &>/dev/null
|
||||||
|
/opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit &>/dev/null
|
||||||
npm run build --prefix /opt/browserless &>/dev/null
|
npm run build --prefix /opt/browserless &>/dev/null
|
||||||
npm run build:function --prefix /opt/browserless &>/dev/null
|
npm run build:function --prefix /opt/browserless &>/dev/null
|
||||||
npm prune production --prefix /opt/browserless &>/dev/null
|
npm prune production --prefix /opt/browserless &>/dev/null
|
||||||
systemctl restart browserless
|
systemctl restart browserless
|
||||||
|
msg_ok "Updated Browserless"
|
||||||
else
|
else
|
||||||
msg_error "No Browserless Installation Found!"
|
msg_error "No Browserless Installation Found!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
systemctl restart changedetection
|
systemctl restart changedetection
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
exit
|
exit
|
||||||
@@ -62,4 +79,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
|
||||||
|
|||||||
59
ct/checkmk.sh
Normal file
59
ct/checkmk.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-2024 community-scripts ORG
|
||||||
|
# Author: Michel Roegl-Brunner (michelroegl-brunner)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://checkmk.com/
|
||||||
|
|
||||||
|
APP="checkmk"
|
||||||
|
var_tags="monitoring"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="2048"
|
||||||
|
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/checkmk_version.txt ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | grep -v "*-rc" | tail -n +2 | head -n 1)
|
||||||
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
omd stop monitoring &>/dev/null
|
||||||
|
omd cp monitoring monitoringbackup &>/dev/null
|
||||||
|
wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb
|
||||||
|
apt-get install -y /opt/checkmk.deb &>/dev/null
|
||||||
|
omd --force -V ${RELEASE}.cre update --conflict=install monitoring &>/dev/null
|
||||||
|
omd start monitoring &>/dev/null
|
||||||
|
omd -f rm monitoringbackup &>/dev/null
|
||||||
|
omd cleanup &>/dev/null
|
||||||
|
rm -rf /opt/checkmk.deb
|
||||||
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
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}/monitoring${CL}"
|
||||||
@@ -57,4 +57,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8086${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8096${CL}"
|
||||||
|
|||||||
78
ct/grist.sh
Normal file
78
ct/grist.sh
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Source: https://github.com/gristlabs/grist-core
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Grist"
|
||||||
|
var_tags="database;spreadsheet"
|
||||||
|
var_cpu="1"
|
||||||
|
var_ram="2048"
|
||||||
|
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/grist ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/gristlabs/grist-core/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
|
||||||
|
msg_info "Stopping ${APP} Service"
|
||||||
|
systemctl stop grist
|
||||||
|
msg_ok "Stopped ${APP} Service"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
cd /opt
|
||||||
|
rm -rf grist_bak
|
||||||
|
mv grist grist_bak
|
||||||
|
wget -q https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip
|
||||||
|
unzip -q v$RELEASE.zip
|
||||||
|
mv grist-core-${RELEASE} grist
|
||||||
|
cp -n /opt/grist_bak/.env /opt/grist/.env
|
||||||
|
cd grist
|
||||||
|
yarn install >/dev/null 2>&1
|
||||||
|
yarn run build:prod >/dev/null 2>&1
|
||||||
|
yarn run install:python >/dev/null 2>&1
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP} Service"
|
||||||
|
systemctl start grist
|
||||||
|
msg_ok "Started ${APP} Service"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf /opt/v$RELEASE.zip
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
|
||||||
|
msg_ok "Updated Successfully!\n"
|
||||||
|
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}Grist: http://${IP}:8484${CL}"
|
||||||
@@ -128,4 +128,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8132${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
|
||||||
|
|||||||
@@ -50,14 +50,14 @@ function update_script() {
|
|||||||
cp -r homepage-${RELEASE}/* /opt/homepage/
|
cp -r homepage-${RELEASE}/* /opt/homepage/
|
||||||
rm -rf homepage-${RELEASE}
|
rm -rf homepage-${RELEASE}
|
||||||
cd /opt/homepage
|
cd /opt/homepage
|
||||||
npx update-browserslist-db@latest
|
npx update-browserslist-db@latest >/dev/null 2>&1
|
||||||
pnpm install
|
pnpm install >/dev/null 2>&1
|
||||||
pnpm build
|
pnpm build >/dev/null 2>&1
|
||||||
systemctl start homepage
|
systemctl start homepage
|
||||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
msg_ok "Updated Homepage to v${RELEASE}"
|
msg_ok "Updated Homepage to v${RELEASE}"
|
||||||
else
|
else
|
||||||
msg_ok "No update required. ${APP} is already at ${RELEASE}"
|
msg_ok "No update required. ${APP} is already at v${RELEASE}"
|
||||||
fi
|
fi
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
@@ -69,4 +69,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
|
|
||||||
# App Default Values
|
# App Default Values
|
||||||
APP="Hyperion"
|
APP="Hyperion"
|
||||||
var_tags="ambient lightning"
|
var_tags="ambient-lightning"
|
||||||
var_cpu="1"
|
var_cpu="1"
|
||||||
var_ram="512"
|
var_ram="512"
|
||||||
var_disk="2"
|
var_disk="2"
|
||||||
|
|||||||
@@ -47,4 +47,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8086${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8096${CL}"
|
||||||
|
|||||||
50
ct/jenkins.sh
Normal file
50
ct/jenkins.sh
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: kristocopani
|
||||||
|
# License: MIT
|
||||||
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://www.jenkins.io/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Jenkins"
|
||||||
|
var_tags="automation"
|
||||||
|
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 /var/lib/jenkins ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating $APP LXC"
|
||||||
|
apt-get update &>/dev/null
|
||||||
|
apt-get -y upgrade &>/dev/null
|
||||||
|
msg_ok "Updated $APP LXC"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
start
|
||||||
|
build_container
|
||||||
|
description
|
||||||
|
|
||||||
|
msg_ok "Completed Successfully!\n"
|
||||||
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
|
||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
|
|
||||||
# App Default Values
|
# App Default Values
|
||||||
APP="Keycloak"
|
APP="Keycloak"
|
||||||
var_tags="access management"
|
var_tags="access-management"
|
||||||
var_cpu="2"
|
var_cpu="2"
|
||||||
var_ram="2048"
|
var_ram="2048"
|
||||||
var_disk="4"
|
var_disk="4"
|
||||||
@@ -25,38 +25,38 @@ color
|
|||||||
catch_errors
|
catch_errors
|
||||||
|
|
||||||
function update_script() {
|
function update_script() {
|
||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /etc/systemd/system/keycloak.service ]]; then
|
if [[ ! -f /etc/systemd/system/keycloak.service ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
|
||||||
fi
|
|
||||||
msg_info "Updating ${APP} LXC"
|
|
||||||
|
|
||||||
msg_info "Updating packages"
|
|
||||||
apt-get update &>/dev/null
|
|
||||||
apt-get -y upgrade &>/dev/null
|
|
||||||
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
|
||||||
msg_info "Updating Keycloak to v$RELEASE"
|
|
||||||
cd /opt
|
|
||||||
wget -q https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz
|
|
||||||
mv keycloak keycloak.old
|
|
||||||
tar -xzf keycloak-$RELEASE.tar.gz
|
|
||||||
cp -r keycloak.old/conf keycloak-$RELEASE
|
|
||||||
cp -r keycloak.old/providers keycloak-$RELEASE
|
|
||||||
cp -r keycloak.old/themes keycloak-$RELEASE
|
|
||||||
mv keycloak-$RELEASE keycloak
|
|
||||||
|
|
||||||
msg_info "Delete temporary installation files"
|
|
||||||
rm keycloak-$RELEASE.tar.gz
|
|
||||||
rm -rf keycloak.old
|
|
||||||
|
|
||||||
msg_info "Restating Keycloak"
|
|
||||||
systemctl restart keycloak
|
|
||||||
msg_ok "Updated Successfully"
|
|
||||||
exit
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Updating ${APP} LXC"
|
||||||
|
|
||||||
|
msg_info "Updating packages"
|
||||||
|
apt-get update &>/dev/null
|
||||||
|
apt-get -y upgrade &>/dev/null
|
||||||
|
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
msg_info "Updating Keycloak to v$RELEASE"
|
||||||
|
cd /opt
|
||||||
|
wget -q https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz
|
||||||
|
mv keycloak keycloak.old
|
||||||
|
tar -xzf keycloak-$RELEASE.tar.gz
|
||||||
|
cp -r keycloak.old/conf keycloak-$RELEASE
|
||||||
|
cp -r keycloak.old/providers keycloak-$RELEASE
|
||||||
|
cp -r keycloak.old/themes keycloak-$RELEASE
|
||||||
|
mv keycloak-$RELEASE keycloak
|
||||||
|
|
||||||
|
msg_info "Delete temporary installation files"
|
||||||
|
rm keycloak-$RELEASE.tar.gz
|
||||||
|
rm -rf keycloak.old
|
||||||
|
|
||||||
|
msg_info "Restating Keycloak"
|
||||||
|
systemctl restart keycloak
|
||||||
|
msg_ok "Updated Successfully"
|
||||||
|
exit
|
||||||
}
|
}
|
||||||
|
|
||||||
start
|
start
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
|
|
||||||
# App Default Values
|
# App Default Values
|
||||||
APP="Kimai"
|
APP="Kimai"
|
||||||
var_tags="time tracking"
|
var_tags="time-tracking"
|
||||||
var_cpu="2"
|
var_cpu="2"
|
||||||
var_ram="2048"
|
var_ram="2048"
|
||||||
var_disk="7"
|
var_disk="7"
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /etc/apt/sources.list.d/mariadb.list ]]; then
|
if [[ ! -d /etc/mysql/mariadb.conf.d ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
|
|
||||||
# App Default Values
|
# App Default Values
|
||||||
APP="MeshCentral"
|
APP="MeshCentral"
|
||||||
var_tags="remote management"
|
var_tags="remote-management"
|
||||||
var_cpu="1"
|
var_cpu="1"
|
||||||
var_ram="512"
|
var_ram="512"
|
||||||
var_disk="2"
|
var_disk="2"
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
check_container_resources
|
||||||
if [[ ! -f /etc/apt/sources.list.d/mongodb-org-7.0.list ]]; then
|
if [[ ! -f /etc/apt/sources.list.d/mongodb-org-7.0.list && ! -f /etc/apt/sources.list.d/mongodb-org-8.0.list ]]; then
|
||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
@@ -44,4 +44,4 @@ build_container
|
|||||||
description
|
description
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
|
|||||||
@@ -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}:3306${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}${IP}:3306${CL}"
|
||||||
|
|||||||
@@ -34,16 +34,18 @@ function update_script() {
|
|||||||
fi
|
fi
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
RELEASE=$(curl -s https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
msg_info "Stopping ${APP}"
|
msg_info "Stopping ${APP}"
|
||||||
systemctl stop navidrome.service
|
systemctl stop navidrome
|
||||||
msg_ok "Stopped Navidrome"
|
msg_ok "Stopped Navidrome"
|
||||||
|
|
||||||
msg_info "Updating to v${RELEASE}"
|
msg_info "Updating to v${RELEASE}"
|
||||||
wget https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_amd64.tar.gz -O Navidrome.tar.gz &>/dev/null
|
cd /opt
|
||||||
|
wget -q https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_amd64.tar.gz -O Navidrome.tar.gz
|
||||||
tar -xvzf Navidrome.tar.gz -C /opt/navidrome/ &>/dev/null
|
tar -xvzf Navidrome.tar.gz -C /opt/navidrome/ &>/dev/null
|
||||||
|
chmod +x /opt/navidrome/navidrome
|
||||||
msg_ok "Updated ${APP}"
|
msg_ok "Updated ${APP}"
|
||||||
rm Navidrome.tar.gz
|
rm -rf /opt/Navidrome.tar.gz
|
||||||
|
|
||||||
msg_info "${GN} Starting ${APP}"
|
msg_info "Starting ${APP}"
|
||||||
systemctl start navidrome.service
|
systemctl start navidrome.service
|
||||||
msg_ok "Started ${APP}"
|
msg_ok "Started ${APP}"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
@@ -57,4 +59,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4533${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4533${CL}"
|
||||||
|
|||||||
@@ -87,4 +87,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}${CL}"
|
||||||
@@ -32,8 +32,8 @@ function update_script() {
|
|||||||
msg_error "No ${APP} Installation Found!"
|
msg_error "No ${APP} Installation Found!"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
latest_url=$(curl -fsSL "https://www.tp-link.com/en/support/download/omada-software-controller/" | grep -o 'https://.*x64.deb' | head -n1)
|
latest_url=$(curl -s "https://support.omadanetworks.com/en/product/omada-software-controller/?resourceType=download" | grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' | head -n 1)
|
||||||
latest_version=$(basename "${latest_url}")
|
latest_version=$(basename "$latest_url")
|
||||||
if [ -z "${latest_version}" ]; then
|
if [ -z "${latest_version}" ]; then
|
||||||
msg_error "It seems that the server (tp-link.com) might be down. Please try again at a later time."
|
msg_error "It seems that the server (tp-link.com) might be down. Please try again at a later time."
|
||||||
exit
|
exit
|
||||||
@@ -53,4 +53,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8043${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:8043${CL}"
|
||||||
|
|||||||
85
ct/part-db.sh
Normal file
85
ct/part-db.sh
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: bvdberg01
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://docs.part-db.de/
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="Part-DB"
|
||||||
|
var_tags="inventory;parts"
|
||||||
|
var_cpu="2"
|
||||||
|
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 [[ ! -d /opt/partdb ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop apache2
|
||||||
|
msg_ok "Stopped Service"
|
||||||
|
|
||||||
|
msg_info "Updating $APP to v${RELEASE}"
|
||||||
|
cd /opt
|
||||||
|
mv /opt/partdb/ /opt/partdb-backup
|
||||||
|
wget -q "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip"
|
||||||
|
unzip -q "v${RELEASE}.zip"
|
||||||
|
mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb
|
||||||
|
|
||||||
|
cd /opt/partdb/
|
||||||
|
cp -r "/opt/partdb-backup/.env.local" /opt/partdb/
|
||||||
|
cp -r "/opt/partdb-backup/public/media" /opt/partdb/public/
|
||||||
|
cp -r "/opt/partdb-backup/config/banner.md" /opt/partdb/config/
|
||||||
|
|
||||||
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
|
composer install --no-dev -o --no-interaction &>/dev/null
|
||||||
|
yarn install &>/dev/null
|
||||||
|
yarn build &>/dev/null
|
||||||
|
php bin/console cache:clear &>/dev/null
|
||||||
|
php bin/console doctrine:migrations:migrate -n &>/dev/null
|
||||||
|
chown -R www-data:www-data /opt/partdb
|
||||||
|
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||||
|
msg_ok "Updated $APP to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start apache2
|
||||||
|
msg_ok "Started Service"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -r "/opt/v${RELEASE}.zip"
|
||||||
|
rm -r /opt/partdb-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}"
|
||||||
@@ -57,4 +57,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:23400/web${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:32400/web${CL}"
|
||||||
|
|||||||
46
ct/proxmox-datacenter-manager.sh
Normal file
46
ct/proxmox-datacenter-manager.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-2024 community-scripts ORG
|
||||||
|
# Author: CrazyWolf13
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: Proxmox Server Solution GmbH
|
||||||
|
|
||||||
|
# App Default Values
|
||||||
|
APP="proxmox-datacenter-manager"
|
||||||
|
var_tags="datacenter"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="2048"
|
||||||
|
var_disk="10"
|
||||||
|
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 [[ ! -e /usr/sbin/proxmox-datacenter-manager-admin ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
|
||||||
|
msg_info "Updating $APP LXC"
|
||||||
|
apt-get update &>/dev/null
|
||||||
|
apt-get -y upgrade &>/dev/null
|
||||||
|
msg_ok "Updated $APP LXC"
|
||||||
|
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}:8443${CL}"
|
||||||
@@ -9,7 +9,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
APP="SABnzbd"
|
APP="SABnzbd"
|
||||||
var_tags="downloader"
|
var_tags="downloader"
|
||||||
var_cpu="2"
|
var_cpu="2"
|
||||||
var_ram="2048"
|
var_ram="4096"
|
||||||
var_disk="8"
|
var_disk="8"
|
||||||
var_os="debian"
|
var_os="debian"
|
||||||
var_version="12"
|
var_version="12"
|
||||||
@@ -57,4 +57,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7777${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7777${CL}"
|
||||||
|
|||||||
61
ct/silverbullet.sh
Normal file
61
ct/silverbullet.sh
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: Dominik Siebel (dsiebel)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://silverbullet.md
|
||||||
|
|
||||||
|
# App default values
|
||||||
|
APP="Silverbullet"
|
||||||
|
var_tags="notes"
|
||||||
|
var_cpu="1"
|
||||||
|
var_disk="2"
|
||||||
|
var_ram="512"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
|
||||||
|
# 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/silverbullet ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
if [[ ! -f "/opt/${APP}_version.txt" || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
systemctl stop silverbullet
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${RELEASE}"
|
||||||
|
wget -q https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip
|
||||||
|
unzip -q silverbullet-server-linux-x86_64.zip
|
||||||
|
mv silverbullet /opt/silverbullet/bin/
|
||||||
|
chmod +x /opt/silverbullet/bin/silverbullet
|
||||||
|
echo "${RELEASE}" >/opt/silverbullet/${APP}_version.txt
|
||||||
|
msg_ok "Updated ${APP} to v${RELEASE}"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start silverbullet
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
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}"
|
||||||
70
ct/teddycloud.sh
Normal file
70
ct/teddycloud.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-2024 community-scripts ORG
|
||||||
|
# Author: Dominik Siebel (dsiebel)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/toniebox-reverse-engineering/teddycloud
|
||||||
|
|
||||||
|
# App default values
|
||||||
|
APP="TeddyCloud"
|
||||||
|
var_tags="media"
|
||||||
|
var_cpu="2"
|
||||||
|
var_disk="8"
|
||||||
|
var_ram="1024"
|
||||||
|
var_os="debian"
|
||||||
|
var_version="12"
|
||||||
|
|
||||||
|
# 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/teddycloud ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
|
||||||
|
RELEASE="$(curl -s https://api.github.com/repos/toniebox-reverse-engineering/teddycloud/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
|
||||||
|
VERSION="${RELEASE#tc_v}"
|
||||||
|
if [[ ! -f "/opt/${APP}_version.txt" || "${VERSION}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||||
|
msg_info "Stopping ${APP}"
|
||||||
|
systemctl stop teddycloud
|
||||||
|
msg_ok "Stopped ${APP}"
|
||||||
|
|
||||||
|
msg_info "Updating ${APP} to v${VERSION}"
|
||||||
|
PREVIOUS_VERSION="$(readlink -f /opt/teddycloud)"
|
||||||
|
wget -q "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip"
|
||||||
|
unzip -q -d "/opt/teddycloud-${VERSION}" "teddycloud.amd64.release_v${VERSION}.zip"
|
||||||
|
ln -fns "/opt/teddycloud-${VERSION}" /opt/teddycloud
|
||||||
|
echo "${VERSION}" >"/opt/${APP}_version.txt"
|
||||||
|
cp -R "${PREVIOUS_VERSION}/certs" /opt/teddycloud
|
||||||
|
cp -R "${PREVIOUS_VERSION}/config" /opt/teddycloud
|
||||||
|
cp -R "${PREVIOUS_VERSION}/data" /opt/teddycloud
|
||||||
|
msg_ok "Updated ${APP} to v${VERSION}"
|
||||||
|
|
||||||
|
msg_info "Starting ${APP}"
|
||||||
|
systemctl start teddycloud
|
||||||
|
msg_ok "Started ${APP}"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm "teddycloud.amd64.release_v${VERSION}.zip"
|
||||||
|
rm -rf "${PREVIOUS_VERSION}"
|
||||||
|
msg_ok "Cleaned"
|
||||||
|
else
|
||||||
|
msg_ok "No update required. ${APP} is already at v${VERSION}"
|
||||||
|
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}"
|
||||||
@@ -44,7 +44,7 @@ function update_script() {
|
|||||||
cp -R /usr/share/zabbix-* /opt/zabbix-backup/
|
cp -R /usr/share/zabbix-* /opt/zabbix-backup/
|
||||||
rm -Rf /etc/apt/sources.list.d/zabbix.list
|
rm -Rf /etc/apt/sources.list.d/zabbix.list
|
||||||
cd /tmp
|
cd /tmp
|
||||||
wget -q https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb
|
wget -q https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb
|
||||||
dpkg -i zabbix-release_latest+debian12_all.deb &>/dev/null
|
dpkg -i zabbix-release_latest+debian12_all.deb &>/dev/null
|
||||||
apt-get update &>/dev/null
|
apt-get update &>/dev/null
|
||||||
apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-* &>/dev/null
|
apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-* &>/dev/null
|
||||||
@@ -68,4 +68,4 @@ description
|
|||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/zabbix${CL}"
|
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/zabbix${CL}"
|
||||||
|
|||||||
56
ct/zammad.sh
Normal file
56
ct/zammad.sh
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: Michel Roegl-Brunner (michelroegl-brunner)
|
||||||
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://zammad.com
|
||||||
|
|
||||||
|
#App Default Values
|
||||||
|
APP="Zammad"
|
||||||
|
TAGS="webserver;ticket-system"
|
||||||
|
var_disk="8"
|
||||||
|
var_cpu="2"
|
||||||
|
var_ram="4096"
|
||||||
|
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/zamad ]]; then
|
||||||
|
msg_error "No ${APP} Installation Found!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
msg_info "Stopping Service"
|
||||||
|
systemctl stop zammad &>/dev/null
|
||||||
|
msg_info "Updating ${APP}"
|
||||||
|
apt-get update &>/dev/null
|
||||||
|
apt-mark hold zammad &>/dev/null
|
||||||
|
apt-get -y upgrade &>/dev/null
|
||||||
|
apt-mark unhold zammad &>/dev/null
|
||||||
|
apt-get -y upgrade &>/dev/null
|
||||||
|
msg_info "Starting Service"
|
||||||
|
systemctl start zammad &>/dev/null
|
||||||
|
msg_ok "Updated ${APP} LXC"
|
||||||
|
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}"
|
||||||
@@ -34,7 +34,7 @@ function InstallMethod({
|
|||||||
setScript((prev) => {
|
setScript((prev) => {
|
||||||
const method = InstallMethodSchema.parse({
|
const method = InstallMethodSchema.parse({
|
||||||
type: "default",
|
type: "default",
|
||||||
script: `/${prev.type}/${prev.slug}.sh`,
|
script: `${prev.type}/${prev.slug}.sh`,
|
||||||
resources: {
|
resources: {
|
||||||
cpu: null,
|
cpu: null,
|
||||||
ram: null,
|
ram: null,
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ function ScriptItem({
|
|||||||
<div className="mt-4 rounded-lg border bg-accent/50">
|
<div className="mt-4 rounded-lg border bg-accent/50">
|
||||||
<div className="flex gap-3 px-4 py-2">
|
<div className="flex gap-3 px-4 py-2">
|
||||||
<h2 className="text-lg font-semibold">
|
<h2 className="text-lg font-semibold">
|
||||||
How to {item.type ? "install" : "use"}
|
How to {item.type == "misc" ? "use" : "install"}
|
||||||
</h2>
|
</h2>
|
||||||
<Tooltips item={item} />
|
<Tooltips item={item} />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -28,15 +28,16 @@ export default function InstallCommand({ item }: { item: Script }) {
|
|||||||
time and minimal system resource usage. You are also obliged to
|
time and minimal system resource usage. You are also obliged to
|
||||||
adhere to updates provided by the package maintainer.
|
adhere to updates provided by the package maintainer.
|
||||||
</>
|
</>
|
||||||
) : item.type ? (
|
) : item.type == "misc" ? (
|
||||||
<>
|
<>
|
||||||
To create a new Proxmox VE {item.name}{" "}
|
To use the {item.name} script, run the command below in the shell.
|
||||||
{getDisplayValueFromType(item.type)}, run the command below in the
|
|
||||||
Proxmox VE Shell.
|
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
To use the {item.name} script, run the command below in the shell.
|
{" "}
|
||||||
|
To create a new Proxmox VE {item.name}{" "}
|
||||||
|
{getDisplayValueFromType(item.type)}, run the command below in the
|
||||||
|
Proxmox VE Shell.
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import {
|
|||||||
TooltipTrigger,
|
TooltipTrigger,
|
||||||
} from "@/components/ui/tooltip";
|
} from "@/components/ui/tooltip";
|
||||||
import { Script } from "@/lib/types";
|
import { Script } from "@/lib/types";
|
||||||
|
import { CircleHelp } from "lucide-react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
interface TooltipProps {
|
interface TooltipProps {
|
||||||
@@ -18,9 +19,11 @@ const TooltipBadge: React.FC<TooltipProps> = ({ variant, label, content }) => (
|
|||||||
<TooltipProvider>
|
<TooltipProvider>
|
||||||
<Tooltip delayDuration={100}>
|
<Tooltip delayDuration={100}>
|
||||||
<TooltipTrigger className="flex items-center">
|
<TooltipTrigger className="flex items-center">
|
||||||
<Badge variant={variant}>{label}</Badge>
|
<Badge variant={variant} className="flex items-center gap-1">
|
||||||
|
{label} <CircleHelp className="size-3" />
|
||||||
|
</Badge>
|
||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent side="bottom" className="text-sm">
|
<TooltipContent side="bottom" className="text-sm max-w-64">
|
||||||
{content}
|
{content}
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|||||||
123
install/2fauth-install.sh
Normal file
123
install/2fauth-install.sh
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: jkrgr0
|
||||||
|
# License: MIT
|
||||||
|
# Source: https://docs.2fauth.app/
|
||||||
|
|
||||||
|
# Import Functions und Setup
|
||||||
|
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||||
|
color
|
||||||
|
verb_ip6
|
||||||
|
catch_errors
|
||||||
|
setting_up_container
|
||||||
|
network_check
|
||||||
|
update_os
|
||||||
|
|
||||||
|
# Installing Dependencies with the 3 core dependencies (curl;sudo;mc)
|
||||||
|
msg_info "Installing Dependencies"
|
||||||
|
$STD apt-get install -y \
|
||||||
|
curl \
|
||||||
|
sudo \
|
||||||
|
mc \
|
||||||
|
nginx \
|
||||||
|
composer \
|
||||||
|
php8.2-{bcmath,common,ctype,curl,fileinfo,fpm,gd,mbstring,mysql,xml,cli} \
|
||||||
|
mariadb-server
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
# Template: MySQL Database
|
||||||
|
msg_info "Setting up Database"
|
||||||
|
DB_NAME=2fauth_db
|
||||||
|
DB_USER=2fauth
|
||||||
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
|
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||||
|
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||||
|
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||||
|
{
|
||||||
|
echo "2FAuth Credentials"
|
||||||
|
echo "Database User: $DB_USER"
|
||||||
|
echo "Database Password: $DB_PASS"
|
||||||
|
echo "Database Name: $DB_NAME"
|
||||||
|
} >> ~/2FAuth.creds
|
||||||
|
msg_ok "Set up Database"
|
||||||
|
|
||||||
|
# Setup App
|
||||||
|
msg_info "Setup 2FAuth"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
wget -q "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip"
|
||||||
|
unzip -q "${RELEASE}.zip"
|
||||||
|
mv "2FAuth-${RELEASE//v}/" /opt/2fauth
|
||||||
|
|
||||||
|
cd "/opt/2fauth" || return
|
||||||
|
cp .env.example .env
|
||||||
|
IPADDRESS=$(hostname -I | awk '{print $1}')
|
||||||
|
|
||||||
|
sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
|
||||||
|
-e "s|^DB_CONNECTION=$|DB_CONNECTION=mysql|" \
|
||||||
|
-e "s|^DB_DATABASE=$|DB_DATABASE=$DB_NAME|" \
|
||||||
|
-e "s|^DB_HOST=$|DB_HOST=127.0.0.1|" \
|
||||||
|
-e "s|^DB_PORT=$|DB_PORT=3306|" \
|
||||||
|
-e "s|^DB_USERNAME=$|DB_USERNAME=$DB_USER|" \
|
||||||
|
-e "s|^DB_PASSWORD=$|DB_PASSWORD=$DB_PASS|" .env
|
||||||
|
|
||||||
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
|
$STD composer update --no-plugins --no-scripts
|
||||||
|
$STD composer install --no-dev --prefer-source --no-plugins --no-scripts
|
||||||
|
|
||||||
|
$STD php artisan key:generate --force
|
||||||
|
|
||||||
|
$STD php artisan migrate:refresh
|
||||||
|
$STD php artisan passport:install -q -n
|
||||||
|
$STD php artisan storage:link
|
||||||
|
$STD php artisan config:cache
|
||||||
|
|
||||||
|
chown -R www-data: /opt/2fauth
|
||||||
|
chmod -R 755 /opt/2fauth
|
||||||
|
|
||||||
|
echo "${RELEASE}" >"/opt/2fauth_version.txt"
|
||||||
|
msg_ok "Setup 2fauth"
|
||||||
|
|
||||||
|
# Configure Service (NGINX)
|
||||||
|
msg_info "Configure Service"
|
||||||
|
cat <<EOF >/etc/nginx/conf.d/2fauth.conf
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
root /opt/2fauth/public;
|
||||||
|
server_name $IPADDRESS;
|
||||||
|
index index.php;
|
||||||
|
charset utf-8;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files \$uri \$uri/ /index.php?\$query_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
location = /favicon.ico { access_log off; log_not_found off; }
|
||||||
|
location = /robots.txt { access_log off; log_not_found off; }
|
||||||
|
|
||||||
|
error_page 404 /index.php;
|
||||||
|
|
||||||
|
location ~ \.php\$ {
|
||||||
|
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
|
||||||
|
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
|
||||||
|
include fastcgi_params;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ /\.(?!well-known).* {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl reload nginx
|
||||||
|
msg_ok "Configured Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -f "/opt/v${RELEASE}.zip"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -24,18 +24,18 @@ $STD apk add nginx
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing PHP/Redis"
|
msg_info "Installing PHP/Redis"
|
||||||
$STD apk add php82-opcache
|
$STD apk add php83-opcache
|
||||||
$STD apk add php82-redis
|
$STD apk add php83-redis
|
||||||
$STD apk add php82-apcu
|
$STD apk add php83-apcu
|
||||||
$STD apk add php82-fpm
|
$STD apk add php83-fpm
|
||||||
$STD apk add php82-sysvsem
|
$STD apk add php83-sysvsem
|
||||||
$STD apk add php82-ftp
|
$STD apk add php83-ftp
|
||||||
$STD apk add php82-pecl-smbclient
|
$STD apk add php83-pecl-smbclient
|
||||||
$STD apk add php82-pecl-imagick
|
$STD apk add php83-pecl-imagick
|
||||||
$STD apk add php82-pecl-vips
|
$STD apk add php83-pecl-vips
|
||||||
$STD apk add php82-exif
|
$STD apk add php83-exif
|
||||||
$STD apk add php82-sodium
|
$STD apk add php83-sodium
|
||||||
$STD apk add php82-bz2
|
$STD apk add php83-bz2
|
||||||
$STD apk add redis
|
$STD apk add redis
|
||||||
msg_ok "Installed PHP/Redis"
|
msg_ok "Installed PHP/Redis"
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ echo -e "Nextcloud Database Username: \e[32m$DB_USER\e[0m" >>~/nextcloud.creds
|
|||||||
echo -e "Nextcloud Database Password: \e[32m$DB_PASS\e[0m" >>~/nextcloud.creds
|
echo -e "Nextcloud Database Password: \e[32m$DB_PASS\e[0m" >>~/nextcloud.creds
|
||||||
echo -e "Nextcloud Database Name: \e[32m$DB_NAME\e[0m" >>~/nextcloud.creds
|
echo -e "Nextcloud Database Name: \e[32m$DB_NAME\e[0m" >>~/nextcloud.creds
|
||||||
$STD apk add nextcloud-mysql mariadb mariadb-client
|
$STD apk add nextcloud-mysql mariadb mariadb-client
|
||||||
$STD mysql_install_db --user=mysql --datadir=/var/lib/mysql
|
$STD mariadb-install-db --user=mysql --datadir=/var/lib/mysql
|
||||||
$STD service mariadb start
|
$STD service mariadb start
|
||||||
$STD rc-update add mariadb
|
$STD rc-update add mariadb
|
||||||
mysql -uroot -p"$ADMIN_PASS" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '$ADMIN_PASS' WITH GRANT OPTION; DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'; CREATE DATABASE $DB_NAME; GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS'; GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost.localdomain' IDENTIFIED BY '$DB_PASS'; FLUSH PRIVILEGES;"
|
mysql -uroot -p"$ADMIN_PASS" -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '$ADMIN_PASS' WITH GRANT OPTION; DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'; CREATE DATABASE $DB_NAME; GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS'; GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost.localdomain' IDENTIFIED BY '$DB_PASS'; FLUSH PRIVILEGES;"
|
||||||
@@ -103,6 +103,8 @@ server {
|
|||||||
listen 80;
|
listen 80;
|
||||||
return 301 https://$host$request_uri;
|
return 301 https://$host$request_uri;
|
||||||
server_name localhost;
|
server_name localhost;
|
||||||
|
client_max_body_size 16G;
|
||||||
|
fastcgi_read_timeout 120s;
|
||||||
}
|
}
|
||||||
server {
|
server {
|
||||||
listen 443 ssl http2;
|
listen 443 ssl http2;
|
||||||
@@ -127,6 +129,8 @@ server {
|
|||||||
fastcgi_pass unix:/run/nextcloud/fastcgi.sock; # From the nextcloud-initscript package
|
fastcgi_pass unix:/run/nextcloud/fastcgi.sock; # From the nextcloud-initscript package
|
||||||
fastcgi_index index.php;
|
fastcgi_index index.php;
|
||||||
include fastcgi.conf;
|
include fastcgi.conf;
|
||||||
|
fastcgi_read_timeout 120s;
|
||||||
|
client_max_body_size 16G;
|
||||||
}
|
}
|
||||||
location ^~ /.well-known/carddav { return 301 /remote.php/dav/; }
|
location ^~ /.well-known/carddav { return 301 /remote.php/dav/; }
|
||||||
location ^~ /.well-known/caldav { return 301 /remote.php/dav/; }
|
location ^~ /.well-known/caldav { return 301 /remote.php/dav/; }
|
||||||
@@ -134,11 +138,13 @@ server {
|
|||||||
location ^~ /.well-known/nodeinfo { return 301 /index.php/.well-known/nodeinfo; }
|
location ^~ /.well-known/nodeinfo { return 301 /index.php/.well-known/nodeinfo; }
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
sed -i -e 's|memory_limit = 128M|memory_limit = 512M|; $aapc.enable_cli=1' /etc/php82/php.ini
|
sed -i -e 's|memory_limit = 128M|memory_limit = 512M|; $aapc.enable_cli=1' /etc/php83/php.ini
|
||||||
sed -i -E '/^php_admin_(flag|value)\[opcache/s/^/;/' /etc/php82/php-fpm.d/nextcloud.conf
|
sed -i -e 's|upload_max_file_size = 2M|upload_max_file_size = 16G|' /etc/php83/php.ini
|
||||||
|
sed -i -E '/^php_admin_(flag|value)\[opcache/s/^/;/' /etc/php83/php-fpm.d/nextcloud.conf
|
||||||
msg_ok "Installed Nextcloud"
|
msg_ok "Installed Nextcloud"
|
||||||
|
|
||||||
msg_info "Adding Additional Nextcloud Packages"
|
msg_info "Adding Additional Nextcloud Packages"
|
||||||
|
$STD apk add nextcloud-occ
|
||||||
$STD apk add nextcloud-default-apps
|
$STD apk add nextcloud-default-apps
|
||||||
$STD apk add nextcloud-activity
|
$STD apk add nextcloud-activity
|
||||||
$STD apk add nextcloud-admin_audit
|
$STD apk add nextcloud-admin_audit
|
||||||
@@ -163,9 +169,10 @@ msg_ok "Added Additional Nextcloud Packages"
|
|||||||
msg_info "Starting Services"
|
msg_info "Starting Services"
|
||||||
$STD rc-service redis start
|
$STD rc-service redis start
|
||||||
$STD rc-update add redis default
|
$STD rc-update add redis default
|
||||||
$STD rc-service php-fpm82 start
|
$STD rc-service php-fpm83 start
|
||||||
chown -R nextcloud:www-data /var/log/nextcloud/
|
chown -R nextcloud:www-data /var/log/nextcloud/
|
||||||
$STD rc-service php-fpm82 restart
|
chown -R nextcloud:www-data /usr/share/webapps/nextcloud/
|
||||||
|
$STD rc-service php-fpm83 restart
|
||||||
$STD rc-service nginx start
|
$STD rc-service nginx start
|
||||||
$STD rc-service nextcloud start
|
$STD rc-service nextcloud start
|
||||||
$STD rc-update add nginx default
|
$STD rc-update add nginx default
|
||||||
@@ -175,16 +182,16 @@ msg_ok "Started Services"
|
|||||||
msg_info "Start Nextcloud Setup-Wizard"
|
msg_info "Start Nextcloud Setup-Wizard"
|
||||||
echo -e "export VISUAL=nano\nexport EDITOR=nano" >>/etc/profile
|
echo -e "export VISUAL=nano\nexport EDITOR=nano" >>/etc/profile
|
||||||
cd /usr/share/webapps/nextcloud
|
cd /usr/share/webapps/nextcloud
|
||||||
$STD su nextcloud -s /bin/sh -c "php82 occ maintenance:install \
|
$STD su nextcloud -s /bin/sh -c "php83 occ maintenance:install \
|
||||||
--database='mysql' --database-name $DB_NAME \
|
--database='mysql' --database-name $DB_NAME \
|
||||||
--database-user '$DB_USER' --database-pass '$DB_PASS' \
|
--database-user '$DB_USER' --database-pass '$DB_PASS' \
|
||||||
--admin-user '$ADMIN_USER' --admin-pass '$ADMIN_PASS' \
|
--admin-user '$ADMIN_USER' --admin-pass '$ADMIN_PASS' \
|
||||||
--data-dir '/var/lib/nextcloud/data'"
|
--data-dir '/var/lib/nextcloud/data'"
|
||||||
$STD su nextcloud -s /bin/sh -c 'php82 occ background:cron'
|
$STD su nextcloud -s /bin/sh -c 'php83 occ background:cron'
|
||||||
rm -rf /usr/share/webapps/nextcloud/apps/serverinfo
|
rm -rf /usr/share/webapps/nextcloud/apps/serverinfo
|
||||||
IP4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
|
IP4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
|
||||||
sed -i "/0 => \'localhost\',/a \ \1 => '$IP4'," /usr/share/webapps/nextcloud/config/config.php
|
sed -i "/0 => \'localhost\',/a \ \1 => '$IP4'," /usr/share/webapps/nextcloud/config/config.php
|
||||||
su nextcloud -s /bin/sh -c 'php82 -f /usr/share/webapps/nextcloud/cron.php'
|
su nextcloud -s /bin/sh -c 'php83 -f /usr/share/webapps/nextcloud/cron.php'
|
||||||
msg_ok "Finished Nextcloud Setup-Wizard"
|
msg_ok "Finished Nextcloud Setup-Wizard"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
|
|||||||
154
install/apache-guacamole-install.sh
Normal file
154
install/apache-guacamole-install.sh
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: Michel Roegl-Brunner (michelroegl-brunner) | MickLesk (CanbiZ)
|
||||||
|
# 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 \
|
||||||
|
build-essential \
|
||||||
|
curl \
|
||||||
|
jq \
|
||||||
|
libcairo2-dev \
|
||||||
|
libturbojpeg0 \
|
||||||
|
libpng-dev \
|
||||||
|
libtool-bin \
|
||||||
|
libossp-uuid-dev \
|
||||||
|
libvncserver-dev \
|
||||||
|
freerdp2-dev \
|
||||||
|
libssh2-1-dev \
|
||||||
|
libtelnet-dev \
|
||||||
|
libwebsockets-dev \
|
||||||
|
libpulse-dev \
|
||||||
|
libvorbis-dev \
|
||||||
|
libwebp-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libpango1.0-dev \
|
||||||
|
libswscale-dev \
|
||||||
|
libavcodec-dev \
|
||||||
|
libavutil-dev \
|
||||||
|
libavformat-dev \
|
||||||
|
mariadb-server \
|
||||||
|
default-jdk
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup Apache Tomcat"
|
||||||
|
RELEASE=$(wget -qO- https://dlcdn.apache.org/tomcat/tomcat-9/ | grep -oP '(?<=href=")v[^"/]+(?=/")' | sed 's/^v//')
|
||||||
|
mkdir -p /opt/apache-guacamole/tomcat9
|
||||||
|
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
|
||||||
|
useradd -r -d /opt/apache-guacamole/tomcat9 -s /bin/false tomcat
|
||||||
|
chown -R tomcat: /opt/apache-guacamole/tomcat9
|
||||||
|
chmod -R g+r /opt/apache-guacamole/tomcat9/conf
|
||||||
|
chmod g+x /opt/apache-guacamole/tomcat9/conf
|
||||||
|
msg_ok "Setup Apache Tomcat"
|
||||||
|
|
||||||
|
msg_info "Setup Apache Guacamole"
|
||||||
|
mkdir -p /etc/guacamole/{extensions,lib}
|
||||||
|
RELEASE_SERVER=$(curl -sL https://api.github.com/repos/apache/guacamole-server/tags | jq -r '.[0].name')
|
||||||
|
wget -qO- https://api.github.com/repos/apache/guacamole-server/tarball/refs/tags/${RELEASE_SERVER} | tar -xz --strip-components=1 -C /opt/apache-guacamole/server
|
||||||
|
cd /opt/apache-guacamole/server
|
||||||
|
$STD autoreconf -fi
|
||||||
|
$STD ./configure --with-init-dir=/etc/init.d --enable-allow-freerdp-snapshots
|
||||||
|
$STD make
|
||||||
|
$STD make install
|
||||||
|
$STD ldconfig
|
||||||
|
RELEASE_CLIENT=$(curl -sL https://api.github.com/repos/apache/guacamole-client/tags | jq -r '.[0].name')
|
||||||
|
wget -q -O /opt/apache-guacamole/tomcat9/webapps/guacamole.war https://downloads.apache.org/guacamole/${RELEASE_CLIENT}/binary/guacamole-${RELEASE_CLIENT}.war
|
||||||
|
cd /root
|
||||||
|
wget -q --directory-prefix=/root/ https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.26.tar.gz
|
||||||
|
$STD tar -xf ~/mysql-connector-java-8.0.26.tar.gz
|
||||||
|
mv ~/mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar /etc/guacamole/lib/
|
||||||
|
wget -q --directory-prefix=/root/ https://downloads.apache.org/guacamole/1.5.5/binary/guacamole-auth-jdbc-1.5.5.tar.gz
|
||||||
|
$STD tar -xf ~/guacamole-auth-jdbc-1.5.5.tar.gz
|
||||||
|
mv ~/guacamole-auth-jdbc-1.5.5/mysql/guacamole-auth-jdbc-mysql-1.5.5.jar /etc/guacamole/extensions/
|
||||||
|
msg_ok "Setup Apache Guacamole"
|
||||||
|
|
||||||
|
msg_info "Setup Database"
|
||||||
|
DB_NAME=guacamole_db
|
||||||
|
DB_USER=guacamole_user
|
||||||
|
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
|
||||||
|
mysql -u root -e "CREATE DATABASE $DB_NAME;"
|
||||||
|
mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
|
||||||
|
mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
|
||||||
|
{
|
||||||
|
echo "Guacamole-Credentials"
|
||||||
|
echo "Database User: $DB_USER"
|
||||||
|
echo "Database Password: $DB_PASS"
|
||||||
|
echo "Database Name: $DB_NAME"
|
||||||
|
} >> ~/guacamole.creds
|
||||||
|
cd guacamole-auth-jdbc-1.5.5/mysql/schema
|
||||||
|
cat *.sql | mysql -u root ${DB_NAME}
|
||||||
|
{
|
||||||
|
echo "mysql-hostname: 127.0.0.1"
|
||||||
|
echo "mysql-port: 3306"
|
||||||
|
echo "mysql-database: $DB_NAME"
|
||||||
|
echo "mysql-username: $DB_USER"
|
||||||
|
echo "mysql-password: $DB_PASS"
|
||||||
|
|
||||||
|
} >> /etc/guacamole/guacamole.properties
|
||||||
|
msg_ok "Setup Database"
|
||||||
|
|
||||||
|
msg_info "Setup Service"
|
||||||
|
cat <<EOF >/etc/guacamole/guacd.conf
|
||||||
|
[server]
|
||||||
|
bind_host = 127.0.0.1
|
||||||
|
bind_port = 4822
|
||||||
|
EOF
|
||||||
|
JAVA_HOME=$(update-alternatives --query javadoc | grep Value: | head -n1 | sed 's/Value: //' | sed 's@bin/javadoc$@@')
|
||||||
|
cat <<EOF >/etc/systemd/system/tomcat.service
|
||||||
|
[Unit]
|
||||||
|
Description=Apache Tomcat Web Application Container
|
||||||
|
After=network.target
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
Environment="JAVA_HOME=${JAVA_HOME}"
|
||||||
|
Environment="CATALINA_PID=/opt/apache-guacamole/tomcat9/temp/tomcat.pid"
|
||||||
|
Environment="CATALINA_HOME=/opt/apache-guacamole/tomcat9/"
|
||||||
|
Environment="CATALINA_BASE=/opt/apache-guacamole/tomcat9/"
|
||||||
|
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
|
||||||
|
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"
|
||||||
|
ExecStart=/opt/apache-guacamole/tomcat9/bin/startup.sh
|
||||||
|
ExecStop=/opt/apache-guacamole/tomcat9/bin/shutdown.sh
|
||||||
|
User=tomcat
|
||||||
|
Group=tomcat
|
||||||
|
UMask=0007
|
||||||
|
RestartSec=10
|
||||||
|
Restart=always
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
cat <<EOF >/etc/systemd/system/guacd.service
|
||||||
|
[Unit]
|
||||||
|
Description=Guacamole Proxy Daemon (guacd)
|
||||||
|
After=mysql.service tomcat.service
|
||||||
|
Requires=mysql.service tomcat.service
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
ExecStart=/etc/init.d/guacd start
|
||||||
|
ExecStop=/etc/init.d/guacd stop
|
||||||
|
ExecReload=/etc/init.d/guacd restart
|
||||||
|
PIDFile=/var/run/guacd.pid
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl -q enable --now mysql tomcat guacd
|
||||||
|
msg_ok "Setup Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf ~/mysql-connector-java-8.0.26{,.tar.gz}
|
||||||
|
rm -rf ~/guacamole-auth-jdbc-1.5.5{,.tar.gz}
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
195
install/authentik-install.sh
Normal file
195
install/authentik-install.sh
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: remz1337
|
||||||
|
# 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 \
|
||||||
|
gpg \
|
||||||
|
pkg-config \
|
||||||
|
libffi-dev \
|
||||||
|
build-essential \
|
||||||
|
libpq-dev \
|
||||||
|
libkrb5-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libsqlite3-dev \
|
||||||
|
tk-dev \
|
||||||
|
libgdbm-dev \
|
||||||
|
libc6-dev \
|
||||||
|
libbz2-dev \
|
||||||
|
zlib1g-dev \
|
||||||
|
libxmlsec1 \
|
||||||
|
libxmlsec1-dev \
|
||||||
|
libxmlsec1-openssl \
|
||||||
|
libmaxminddb0 \
|
||||||
|
python3-pip \
|
||||||
|
git
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing yq"
|
||||||
|
cd /tmp
|
||||||
|
YQ_LATEST="$(wget -qO- "https://api.github.com/repos/mikefarah/yq/releases/latest" | grep -Po '"tag_name": "\K.*?(?=")')"
|
||||||
|
wget -q "https://github.com/mikefarah/yq/releases/download/${YQ_LATEST}/yq_linux_amd64" -qO /usr/bin/yq
|
||||||
|
chmod +x /usr/bin/yq
|
||||||
|
msg_ok "Installed yq"
|
||||||
|
|
||||||
|
msg_info "Installing GeoIP"
|
||||||
|
cd /tmp
|
||||||
|
GEOIP_RELEASE=$(curl -s https://api.github.com/repos/maxmind/geoipupdate/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
wget -qO geoipupdate.deb https://github.com/maxmind/geoipupdate/releases/download/v${GEOIP_RELEASE}/geoipupdate_${GEOIP_RELEASE}_linux_amd64.deb
|
||||||
|
$STD dpkg -i geoipupdate.deb
|
||||||
|
cat <<EOF >/etc/GeoIP.conf
|
||||||
|
#GEOIPUPDATE_EDITION_IDS="GeoLite2-City GeoLite2-ASN"
|
||||||
|
#GEOIPUPDATE_VERBOSE="1"
|
||||||
|
#GEOIPUPDATE_ACCOUNT_ID_FILE="/run/secrets/GEOIPUPDATE_ACCOUNT_ID"
|
||||||
|
#GEOIPUPDATE_LICENSE_KEY_FILE="/run/secrets/GEOIPUPDATE_LICENSE_KEY"
|
||||||
|
EOF
|
||||||
|
msg_ok "Installed GeoIP"
|
||||||
|
|
||||||
|
msg_info "Setting up Python 3"
|
||||||
|
cd /tmp
|
||||||
|
wget -q https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz -O Python.tgz
|
||||||
|
tar -zxf Python.tgz
|
||||||
|
cd Python-3.12.1
|
||||||
|
$STD ./configure --enable-optimizations
|
||||||
|
$STD make altinstall
|
||||||
|
cd ~
|
||||||
|
$STD update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.12 1
|
||||||
|
msg_ok "Setup Python 3"
|
||||||
|
|
||||||
|
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_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||||
|
msg_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
|
msg_info "Installing Node.js"
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y nodejs
|
||||||
|
msg_ok "Installed Node.js"
|
||||||
|
|
||||||
|
msg_info "Installing Golang"
|
||||||
|
cd /tmp
|
||||||
|
set +o pipefail
|
||||||
|
GO_RELEASE=$(curl -s https://go.dev/dl/ | grep -o -m 1 "go.*\linux-amd64.tar.gz")
|
||||||
|
wget -q https://golang.org/dl/${GO_RELEASE}
|
||||||
|
tar -xzf ${GO_RELEASE} -C /usr/local
|
||||||
|
ln -s /usr/local/go/bin/go /usr/bin/go
|
||||||
|
set -o pipefail
|
||||||
|
msg_ok "Installed Golang"
|
||||||
|
|
||||||
|
msg_info "Installing Redis"
|
||||||
|
$STD apt-get install -y redis-server
|
||||||
|
systemctl enable -q --now redis-server
|
||||||
|
msg_ok "Installed Redis"
|
||||||
|
|
||||||
|
msg_info "Installing PostgreSQL"
|
||||||
|
$STD apt-get install -y postgresql postgresql-contrib
|
||||||
|
DB_NAME="authentik"
|
||||||
|
DB_USER="authentik"
|
||||||
|
DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME;"
|
||||||
|
$STD sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';"
|
||||||
|
$STD sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER DATABASE $DB_NAME OWNER TO $DB_USER;"
|
||||||
|
$STD sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;"
|
||||||
|
msg_ok "Installed PostgreSQL"
|
||||||
|
|
||||||
|
msg_info "Installing authentik"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}')
|
||||||
|
mkdir -p /opt/authentik
|
||||||
|
wget -qO authentik.tar.gz "${RELEASE}"
|
||||||
|
tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite
|
||||||
|
cd /opt/authentik/website
|
||||||
|
$STD npm install
|
||||||
|
$STD npm run build-bundled
|
||||||
|
cd /opt/authentik/web
|
||||||
|
$STD npm install
|
||||||
|
$STD npm run build
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
cd /opt/authentik
|
||||||
|
$STD go mod download
|
||||||
|
$STD go build -o /go/authentik ./cmd/server
|
||||||
|
$STD go build -o /opt/authentik/authentik-server /opt/authentik/cmd/server/
|
||||||
|
cd /opt/authentik
|
||||||
|
$STD pip3 install --upgrade pip
|
||||||
|
$STD pip3 install poetry poetry-plugin-export
|
||||||
|
ln -s /usr/local/bin/poetry /usr/bin/poetry
|
||||||
|
$STD poetry install --only=main --no-ansi --no-interaction --no-root
|
||||||
|
$STD poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt
|
||||||
|
$STD pip install --no-cache-dir -r requirements.txt
|
||||||
|
$STD pip install .
|
||||||
|
mkdir -p /etc/authentik
|
||||||
|
mv /opt/authentik/authentik/lib/default.yml /etc/authentik/config.yml
|
||||||
|
$STD yq -i ".secret_key = \"$(openssl rand -hex 32)\"" /etc/authentik/config.yml
|
||||||
|
$STD yq -i ".postgresql.password = \"${DB_PASS}\"" /etc/authentik/config.yml
|
||||||
|
$STD yq -i ".geoip = \"/opt/authentik/tests/GeoLite2-City-Test.mmdb\"" /etc/authentik/config.yml
|
||||||
|
cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints
|
||||||
|
$STD yq -i ".blueprints_dir = \"/opt/authentik/blueprints\"" /etc/authentik/config.yml
|
||||||
|
ln -s /usr/bin/python3 /usr/bin/python
|
||||||
|
ln -s /usr/local/bin/gunicorn /usr/bin/gunicorn
|
||||||
|
ln -s /usr/local/bin/celery /usr/bin/celery
|
||||||
|
$STD bash /opt/authentik/lifecycle/ak migrate
|
||||||
|
cd ~
|
||||||
|
msg_ok "Installed authentik"
|
||||||
|
|
||||||
|
msg_info "Creating Services"
|
||||||
|
cat <<EOF >/etc/systemd/system/authentik-server.service
|
||||||
|
[Unit]
|
||||||
|
Description = authentik Server
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/opt/authentik/authentik-server
|
||||||
|
WorkingDirectory=/opt/authentik/
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/authentik-worker.service
|
||||||
|
[Unit]
|
||||||
|
Description = authentik Worker
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Environment=DJANGO_SETTINGS_MODULE="authentik.root.settings"
|
||||||
|
ExecStart=celery -A authentik.root.celery worker -Ofair --max-tasks-per-child=1 --autoscale 3,1 -E -B -s /tmp/celerybeat-schedule -Q authentik,authentik_scheduled,authentik_events
|
||||||
|
WorkingDirectory=/opt/authentik/authentik
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable -q --now authentik-server
|
||||||
|
sleep 2
|
||||||
|
systemctl enable -q --now authentik-worker
|
||||||
|
msg_ok "Created Services"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf /tmp/Python-3.12.1
|
||||||
|
rm -rf /tmp/Python.tgz
|
||||||
|
rm -rf go/
|
||||||
|
rm -rf /tmp/${GO_RELEASE}
|
||||||
|
rm -rf /tmp/geoipupdate.deb
|
||||||
|
rm -rf authentik.tar.gz
|
||||||
|
$STD apt-get -y remove yq
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
48
install/checkmk-install.sh
Normal file
48
install/checkmk-install.sh
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#Copyright (c) 2021-2024 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 \
|
||||||
|
sudo \
|
||||||
|
mc
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
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) }' | grep -v "*-rc" | tail -n +2 | head -n 1)
|
||||||
|
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
|
||||||
|
echo "${RELEASE}" >"/opt/checkmk_version.txt"
|
||||||
|
msg_ok "Installed Checkmk"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
PASSWORD=$(omd create monitoring | grep "password:" | awk '{print $NF}')
|
||||||
|
$STD omd start
|
||||||
|
{
|
||||||
|
echo "Application-Credentials"
|
||||||
|
echo "Username: cmkadmin"
|
||||||
|
echo "Password: $PASSWORD"
|
||||||
|
} >> ~/checkmk.creds
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf /opt/checkmk.deb
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -104,8 +104,8 @@ 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 $RELEASE"
|
||||||
|
|
||||||
if grep -q -o -m1 -E 'avx[^ ]* | sse4_2' /proc/cpuinfo; then
|
if grep -q -o -m1 -E 'avx[^ ]*' /proc/cpuinfo; then
|
||||||
msg_ok "AVX or SSE 4.2 Support Detected"
|
msg_ok "AVX Support Detected"
|
||||||
msg_info "Installing Openvino Object Detection Model (Resilience)"
|
msg_info "Installing Openvino Object Detection Model (Resilience)"
|
||||||
$STD pip install -r /opt/frigate/docker/main/requirements-ov.txt
|
$STD pip install -r /opt/frigate/docker/main/requirements-ov.txt
|
||||||
cd /opt/frigate/models
|
cd /opt/frigate/models
|
||||||
|
|||||||
83
install/grist-install.sh
Normal file
83
install/grist-install.sh
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: cfurrow
|
||||||
|
# License: MIT
|
||||||
|
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
|
# Source: https://github.com/gristlabs/grist-core
|
||||||
|
|
||||||
|
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 \
|
||||||
|
make \
|
||||||
|
gnupg \
|
||||||
|
ca-certificates \
|
||||||
|
mc \
|
||||||
|
unzip \
|
||||||
|
python3.11-venv
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing 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_20.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 "Installed Node.js"
|
||||||
|
|
||||||
|
msg_info "Installing Grist"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/gristlabs/grist-core/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
export CYPRESS_INSTALL_BINARY=0
|
||||||
|
export NODE_OPTIONS="--max-old-space-size=2048"
|
||||||
|
cd /opt
|
||||||
|
wget -q https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip
|
||||||
|
unzip -q v$RELEASE.zip
|
||||||
|
mv grist-core-${RELEASE} grist
|
||||||
|
cd grist
|
||||||
|
$STD yarn install
|
||||||
|
$STD yarn run build:prod
|
||||||
|
$STD yarn run install:python
|
||||||
|
cat <<EOF >/opt/grist/.env
|
||||||
|
NODE_ENV=production
|
||||||
|
GRIST_HOST=0.0.0.0
|
||||||
|
EOF
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Installed Grist"
|
||||||
|
|
||||||
|
msg_info "Create Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/grist.service
|
||||||
|
[Unit]
|
||||||
|
Description=Grist
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=exec
|
||||||
|
WorkingDirectory=/opt/grist
|
||||||
|
ExecStart=/usr/bin/yarn run start:prod
|
||||||
|
EnvironmentFile=-/opt/grist/.env
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl enable -q --now grist.service
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
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"
|
||||||
36
install/jenkins-install.sh
Normal file
36
install/jenkins-install.sh
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: kristocopani
|
||||||
|
# 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 \
|
||||||
|
openjdk-17-jre
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setup Jenkins"
|
||||||
|
wget -qO /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian/jenkins.io-2023.key
|
||||||
|
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" https://pkg.jenkins.io/debian binary/ >/etc/apt/sources.list.d/jenkins.list
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y jenkins
|
||||||
|
msg_ok "Setup Jenkins"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2024 tteck
|
# Copyright (c) 2021-2024 tteck
|
||||||
@@ -20,14 +21,22 @@ $STD apt-get install -y sudo
|
|||||||
$STD apt-get install -y mc
|
$STD apt-get install -y mc
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing MongoDB"
|
# Abfrage für die MongoDB-Version
|
||||||
wget -qO- https://www.mongodb.org/static/pgp/server-7.0.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-7.0.gpg
|
read -p "Do you want to install MongoDB 8.0 instead of 7.0? [y/N]: " install_mongodb_8
|
||||||
echo "deb [signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg] http://repo.mongodb.org/apt/debian $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/7.0 main" >/etc/apt/sources.list.d/mongodb-org-7.0.list
|
if [[ "$install_mongodb_8" =~ ^[Yy]$ ]]; then
|
||||||
|
MONGODB_VERSION="8.0"
|
||||||
|
else
|
||||||
|
MONGODB_VERSION="7.0"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg_info "Installing MongoDB $MONGODB_VERSION"
|
||||||
|
wget -qO- https://www.mongodb.org/static/pgp/server-${MONGODB_VERSION}.asc | gpg --dearmor >/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg
|
||||||
|
echo "deb [signed-by=/usr/share/keyrings/mongodb-server-${MONGODB_VERSION}.gpg] http://repo.mongodb.org/apt/debian $(grep '^VERSION_CODENAME=' /etc/os-release | cut -d'=' -f2)/mongodb-org/${MONGODB_VERSION} main" >/etc/apt/sources.list.d/mongodb-org-${MONGODB_VERSION}.list
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get install -y mongodb-org
|
$STD apt-get install -y mongodb-org
|
||||||
sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf
|
sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf
|
||||||
systemctl enable -q --now mongod.service
|
systemctl enable -q --now mongod.service
|
||||||
msg_ok "Installed MongoDB"
|
msg_ok "Installed MongoDB $MONGODB_VERSION"
|
||||||
|
|
||||||
motd_ssh
|
motd_ssh
|
||||||
customize
|
customize
|
||||||
|
|||||||
@@ -20,14 +20,14 @@ $STD apt-get install -y mc
|
|||||||
$STD apt-get install -y ffmpeg
|
$STD apt-get install -y ffmpeg
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
RELEASE=$(curl -s https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
|
||||||
|
|
||||||
msg_info "Installing Navidrome"
|
msg_info "Installing Navidrome"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
install -d -o root -g root /opt/navidrome
|
install -d -o root -g root /opt/navidrome
|
||||||
install -d -o root -g root /var/lib/navidrome
|
install -d -o root -g root /var/lib/navidrome
|
||||||
wget -q https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_amd64.tar.gz -O Navidrome.tar.gz
|
wget -q https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_amd64.tar.gz -O Navidrome.tar.gz
|
||||||
$STD tar -xvzf Navidrome.tar.gz -C /opt/navidrome/
|
$STD tar -xvzf Navidrome.tar.gz -C /opt/navidrome/
|
||||||
chown -R root:root /opt/navidrome
|
chown -R root:root /opt/navidrome
|
||||||
|
chmod +x /opt/navidrome/navidrome
|
||||||
mkdir -p /music
|
mkdir -p /music
|
||||||
cat <<EOF >/var/lib/navidrome/navidrome.toml
|
cat <<EOF >/var/lib/navidrome/navidrome.toml
|
||||||
MusicFolder = '/music'
|
MusicFolder = '/music'
|
||||||
|
|||||||
@@ -14,11 +14,12 @@ 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 \
|
||||||
$STD apt-get install -y gnupg
|
mc \
|
||||||
$STD apt-get install -y jsvc
|
gnupg \
|
||||||
|
jsvc
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Azul Zulu"
|
msg_info "Installing Azul Zulu"
|
||||||
@@ -37,7 +38,7 @@ wget -qL https://repo.mongodb.org/apt/ubuntu/dists/bionic/mongodb-org/3.6/multiv
|
|||||||
$STD dpkg -i mongodb-org-server_3.6.23_amd64.deb
|
$STD dpkg -i mongodb-org-server_3.6.23_amd64.deb
|
||||||
msg_ok "Installed MongoDB"
|
msg_ok "Installed MongoDB"
|
||||||
|
|
||||||
latest_url=$(curl -fsSL "https://www.tp-link.com/en/support/download/omada-software-controller/" | grep -o 'https://.*x64.deb' | head -n1)
|
latest_url=$(curl -s "https://support.omadanetworks.com/en/product/omada-software-controller/?resourceType=download" | grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' | head -n 1)
|
||||||
latest_version=$(basename "$latest_url")
|
latest_version=$(basename "$latest_url")
|
||||||
|
|
||||||
msg_info "Installing Omada Controller"
|
msg_info "Installing Omada Controller"
|
||||||
|
|||||||
112
install/part-db-install.sh
Normal file
112
install/part-db-install.sh
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2024 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 \
|
||||||
|
zip \
|
||||||
|
ca-certificates \
|
||||||
|
software-properties-common \
|
||||||
|
apt-transport-https \
|
||||||
|
lsb-release \
|
||||||
|
php-{opcache,curl,gd,mbstring,xml,bcmath,intl,zip,xsl,pgsql} \
|
||||||
|
libapache2-mod-php \
|
||||||
|
composer \
|
||||||
|
postgresql
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up PostgreSQL"
|
||||||
|
DB_NAME=partdb
|
||||||
|
DB_USER=partdb
|
||||||
|
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 "Part-DB Credentials"
|
||||||
|
echo "Part-DB Database User: $DB_USER"
|
||||||
|
echo "Part-DB Database Password: $DB_PASS"
|
||||||
|
echo "Part-DB Database Name: $DB_NAME"
|
||||||
|
} >> ~/partdb.creds
|
||||||
|
msg_ok "Set up PostgreSQL"
|
||||||
|
|
||||||
|
msg_info "Setting up 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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y nodejs
|
||||||
|
$STD npm install -g npm@latest
|
||||||
|
$STD npm install -g yarn
|
||||||
|
msg_ok "Installed Node.js/Yarn"
|
||||||
|
|
||||||
|
msg_info "Installing Part-DB (Patience)"
|
||||||
|
cd /opt
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
|
||||||
|
wget -q "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip"
|
||||||
|
unzip -q "v${RELEASE}.zip"
|
||||||
|
mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb
|
||||||
|
|
||||||
|
cd /opt/partdb/
|
||||||
|
cp .env .env.local
|
||||||
|
sed -i "s|DATABASE_URL=\"sqlite:///%kernel.project_dir%/var/app.db\"|DATABASE_URL=\"postgresql://${DB_USER}:${DB_PASS}@127.0.0.1:5432/${DB_NAME}?serverVersion=12.19&charset=utf8\"|" .env.local
|
||||||
|
|
||||||
|
export COMPOSER_ALLOW_SUPERUSER=1
|
||||||
|
$STD composer install --no-dev -o --no-interaction
|
||||||
|
$STD yarn install
|
||||||
|
$STD yarn build
|
||||||
|
$STD php bin/console cache:clear
|
||||||
|
php bin/console doctrine:migrations:migrate -n > ~/database-migration-output
|
||||||
|
chown -R www-data:www-data /opt/partdb
|
||||||
|
ADMIN_PASS=$(grep -oP 'The initial password for the "admin" user is: \K\w+' ~/database-migration-output)
|
||||||
|
{
|
||||||
|
echo ""
|
||||||
|
echo "Part-DB Admin User: admin"
|
||||||
|
echo "Part-DB Admin Password: $ADMIN_PASS"
|
||||||
|
} >> ~/partdb.creds
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Installed Part-DB"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/apache2/sites-available/partdb.conf
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName partdb
|
||||||
|
DocumentRoot /opt/partdb/public
|
||||||
|
<Directory /opt/partdb/public>
|
||||||
|
Options FollowSymLinks
|
||||||
|
AllowOverride All
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
ErrorLog /var/log/apache2/partdb_error.log
|
||||||
|
CustomLog /var/log/apache2/partdb_access.log combined
|
||||||
|
</VirtualHost>
|
||||||
|
EOF
|
||||||
|
$STD a2ensite partdb
|
||||||
|
$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 ~/database-migration-output
|
||||||
|
rm -rf "/opt/v${RELEASE}.zip"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -46,6 +46,7 @@ ExecStart=/usr/local/bin/prometheus \
|
|||||||
--config.file=/etc/prometheus/prometheus.yml \
|
--config.file=/etc/prometheus/prometheus.yml \
|
||||||
--storage.tsdb.path=/var/lib/prometheus/ \
|
--storage.tsdb.path=/var/lib/prometheus/ \
|
||||||
--web.listen-address=0.0.0.0:9090
|
--web.listen-address=0.0.0.0:9090
|
||||||
|
ExecReload=/bin/kill -HUP \$MAINPID
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target" >$service_path
|
WantedBy=multi-user.target" >$service_path
|
||||||
|
|||||||
39
install/proxmox-datacenter-manager-install.sh
Normal file
39
install/proxmox-datacenter-manager-install.sh
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: CrazyWolf13
|
||||||
|
# License: MIT
|
||||||
|
# Source: Proxmox Server Solution GmbH
|
||||||
|
|
||||||
|
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 \
|
||||||
|
gpg \
|
||||||
|
mc
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing Proxmox Datacenter Manager"
|
||||||
|
curl -fsSL https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg | gpg --dearmor -o /etc/apt/keyrings/proxmox-release-bookworm.gpg
|
||||||
|
echo "deb [signed-by=/etc/apt/keyrings/proxmox-release-bookworm.gpg] http://download.proxmox.com/debian/pdm bookworm pdm-test " >/etc/apt/sources.list.d/proxmox-release-bookworm.list
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get install -y \
|
||||||
|
proxmox-datacenter-manager \
|
||||||
|
proxmox-datacenter-manager-ui
|
||||||
|
msg_ok "Installed Proxmox Datacenter Manager"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
59
install/silverbullet-install.sh
Normal file
59
install/silverbullet-install.sh
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: Dominik Siebel (dsiebel)
|
||||||
|
# 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
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing Silverbullet"
|
||||||
|
RELEASE=$(curl -s https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||||
|
mkdir -p /opt/silverbullet/bin /opt/silverbullet/space
|
||||||
|
wget -q https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip
|
||||||
|
unzip -oq -d /opt/silverbullet/bin/ silverbullet-server-linux-x86_64.zip
|
||||||
|
chmod +x /opt/silverbullet/bin/silverbullet
|
||||||
|
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||||
|
msg_ok "Installed Silverbullet"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
|
||||||
|
cat <<EOF >/etc/systemd/system/silverbullet.service
|
||||||
|
[Unit]
|
||||||
|
Description=Silverbullet Daemon
|
||||||
|
After=syslog.target network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/opt/silverbullet/bin/silverbullet --hostname 0.0.0.0 --port 3000 /opt/silverbullet/space
|
||||||
|
WorkingDirectory=/opt/silverbullet
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable --now -q silverbullet
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
rm -rf silverbullet-server-linux-x86_64.zip
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
62
install/teddycloud-install.sh
Normal file
62
install/teddycloud-install.sh
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright (c) 2021-2024 community-scripts ORG
|
||||||
|
# Author: Dominik Siebel (dsiebel)
|
||||||
|
# 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 \
|
||||||
|
libubsan1 \
|
||||||
|
ffmpeg \
|
||||||
|
curl \
|
||||||
|
ca-certificates
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Installing TeddyCloud"
|
||||||
|
RELEASE="$(curl -s https://api.github.com/repos/toniebox-reverse-engineering/teddycloud/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
|
||||||
|
VERSION="${RELEASE#tc_v}"
|
||||||
|
wget -q "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip"
|
||||||
|
unzip -q -d "/opt/teddycloud-${VERSION}" "teddycloud.amd64.release_v${VERSION}.zip"
|
||||||
|
ln -fns "/opt/teddycloud-${VERSION}" /opt/teddycloud
|
||||||
|
echo "${VERSION}" >"/opt/${APPLICATION}_version.txt"
|
||||||
|
msg_ok "Installed TeddyCloud"
|
||||||
|
|
||||||
|
msg_info "Creating Service"
|
||||||
|
cat <<EOF >/etc/systemd/system/teddycloud.service
|
||||||
|
[Unit]
|
||||||
|
Description=TeddyCloud Server
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/opt/teddycloud/teddycloud
|
||||||
|
WorkingDirectory=/opt/teddycloud
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
systemctl enable --now -q teddycloud
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get --yes autoremove
|
||||||
|
$STD apt-get --yes autoclean
|
||||||
|
rm -rf "teddycloud.amd64.release_v${VERSION}.zip"
|
||||||
|
msg_ok "Cleaned"
|
||||||
@@ -22,7 +22,7 @@ msg_ok "Installed Dependencies"
|
|||||||
|
|
||||||
msg_info "Installing Zabbix"
|
msg_info "Installing Zabbix"
|
||||||
cd /tmp
|
cd /tmp
|
||||||
wget -q https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb
|
wget -q https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb
|
||||||
$STD dpkg -i /tmp/zabbix-release_latest+debian12_all.deb
|
$STD dpkg -i /tmp/zabbix-release_latest+debian12_all.deb
|
||||||
$STD apt-get update
|
$STD apt-get update
|
||||||
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts
|
$STD apt-get install -y zabbix-server-pgsql zabbix-frontend-php php8.2-pgsql zabbix-apache-conf zabbix-sql-scripts
|
||||||
@@ -39,7 +39,7 @@ $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCO
|
|||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';"
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';"
|
||||||
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'"
|
||||||
zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u $DB_USER psql $DB_NAME &>/dev/null
|
zcat /usr/share/zabbix/sql-scripts/postgresql/server.sql.gz | sudo -u $DB_USER psql $DB_NAME &>/dev/null
|
||||||
sed -i "s/^DBName=.*/DBName=$DB_NAME/" /etc/zabbix/zabbix_server.conf
|
sed -i "s/^DBName=.*/DBName=$DB_NAME/" /etc/zabbix/zabbix_server.conf
|
||||||
sed -i "s/^DBUser=.*/DBUser=$DB_USER/" /etc/zabbix/zabbix_server.conf
|
sed -i "s/^DBUser=.*/DBUser=$DB_USER/" /etc/zabbix/zabbix_server.conf
|
||||||
sed -i "s/^# DBPassword=.*/DBPassword=$DB_PASS/" /etc/zabbix/zabbix_server.conf
|
sed -i "s/^# DBPassword=.*/DBPassword=$DB_PASS/" /etc/zabbix/zabbix_server.conf
|
||||||
|
|||||||
61
install/zammad-install.sh
Normal file
61
install/zammad-install.sh
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
#Copyright (c) 2021-2024 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 \
|
||||||
|
git \
|
||||||
|
sudo \
|
||||||
|
gpg \
|
||||||
|
wget \
|
||||||
|
nginx \
|
||||||
|
apt-transport-https \
|
||||||
|
gnupg
|
||||||
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
|
msg_info "Setting up Elasticsearch"
|
||||||
|
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
|
||||||
|
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list >/dev/null
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get -y install elasticsearch
|
||||||
|
echo "-Xms2g" >>/etc/elasticsearch/jvm.options
|
||||||
|
echo "-Xmx2g" >>/etc/elasticsearch/jvm.options
|
||||||
|
$STD /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment -b
|
||||||
|
systemctl -q restart elasticsearch
|
||||||
|
msg_ok "Setup Elasticsearch"
|
||||||
|
|
||||||
|
msg_info "Installing Zammad"
|
||||||
|
curl -fsSL https://dl.packager.io/srv/zammad/zammad/key | gpg --dearmor | sudo tee /etc/apt/keyrings/pkgr-zammad.gpg >/dev/null
|
||||||
|
echo "deb [signed-by=/etc/apt/keyrings/pkgr-zammad.gpg] https://dl.packager.io/srv/deb/zammad/zammad/stable/debian 12 main" | sudo tee /etc/apt/sources.list.d/zammad.list >/dev/null
|
||||||
|
$STD apt-get update
|
||||||
|
$STD apt-get -y install zammad
|
||||||
|
$STD zammad run rails r "Setting.set('es_url', 'http://localhost:9200')"
|
||||||
|
$STD zammad run rake zammad:searchindex:rebuild
|
||||||
|
msg_ok "Installed Zammad"
|
||||||
|
|
||||||
|
msg_info "Setup Services"
|
||||||
|
cp /opt/zammad/contrib/nginx/zammad.conf /etc/nginx/sites-available/zammad.conf
|
||||||
|
IPADDRESS=$(hostname -I | awk '{print $1}')
|
||||||
|
sed -i "s/server_name localhost;/server_name $IPADDRESS;/g" /etc/nginx/sites-available/zammad.conf
|
||||||
|
$STD systemctl reload nginx
|
||||||
|
msg_ok "Created Service"
|
||||||
|
|
||||||
|
motd_ssh
|
||||||
|
customize
|
||||||
|
|
||||||
|
msg_info "Cleaning up"
|
||||||
|
$STD apt-get -y autoremove
|
||||||
|
$STD apt-get -y autoclean
|
||||||
|
msg_ok "Cleaned"
|
||||||
43
json/2fauth.json
Normal file
43
json/2fauth.json
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"name": "2FAuth",
|
||||||
|
"slug": "2fauth",
|
||||||
|
"categories": [
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"date_created": "2024-12-20",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": null,
|
||||||
|
"website": "https://docs.2fauth.app/",
|
||||||
|
"logo": "https://raw.githubusercontent.com/Bubka/2FAuth/refs/heads/master/public/logo.svg",
|
||||||
|
"description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop. It aims to ease you perform your 2FA authentication steps whatever the device you handle, with a clean and suitable interface.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/2fauth.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 2,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Database credentials: `cat ~/2FAuth.creds`",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "The very first account created is automatically set up as an administrator account.",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -33,11 +33,15 @@
|
|||||||
"notes": [
|
"notes": [
|
||||||
{
|
{
|
||||||
"text": "Execute within the Proxmox shell",
|
"text": "Execute within the Proxmox shell",
|
||||||
"type": "Info"
|
"type": "info"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"text": "Configuration: `nano /opt/lxc-iptag/iptag.conf`. iptag.service must be restarted after change.",
|
"text": "Configuration: `nano /opt/lxc-iptag/iptag.conf`. iptag.service must be restarted after change.",
|
||||||
"type": "Info"
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "The Proxmox Node must contain ipcalc and net-tools. `apt-get install -y ipcalc net-tools`",
|
||||||
|
"type": "warning"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
34
json/apache-guacamole.json
Normal file
34
json/apache-guacamole.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "Apache Guacamole",
|
||||||
|
"slug": "apache-guacamole",
|
||||||
|
"categories": [
|
||||||
|
11
|
||||||
|
],
|
||||||
|
"date_created": "2024-12-19",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": false,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8080,
|
||||||
|
"documentation": null,
|
||||||
|
"website": "https://guacamole.apache.org/",
|
||||||
|
"logo": "https://guacamole.apache.org/images/logos/guac-tricolor-logo.svg",
|
||||||
|
"description": "Apache Guacamole is a clientless remote desktop gateway. It supports standard protocols like VNC, RDP, and SSH.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/apache-guacamole.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": "guacadmin",
|
||||||
|
"password": "guacadmin"
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
39
json/authentik.json
Normal file
39
json/authentik.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "authentik",
|
||||||
|
"slug": "authentik",
|
||||||
|
"categories": [
|
||||||
|
11
|
||||||
|
],
|
||||||
|
"date_created": "2024-12-27",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 9000,
|
||||||
|
"documentation": "https://docs.goauthentik.io/docs/",
|
||||||
|
"website": "https://goauthentik.io/",
|
||||||
|
"logo": "https://raw.githubusercontent.com/goauthentik/authentik/refs/heads/main/website/static/img/icon.png",
|
||||||
|
"description": "authentik is an IdP (Identity Provider) and SSO (single sign on) that is built with security at the forefront of every piece of code, every feature, with an emphasis on flexibility and versatility.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/authentik.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 6,
|
||||||
|
"ram": 8192,
|
||||||
|
"hdd": 12,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Authentik is very resource-heavy, it is recommended to use at least 8GB RAM anytime!",
|
||||||
|
"type": "warning"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
39
json/checkmk.json
Normal file
39
json/checkmk.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "Checkmk",
|
||||||
|
"slug": "checkmk",
|
||||||
|
"categories": [
|
||||||
|
7
|
||||||
|
],
|
||||||
|
"date_created": "2024-12-19",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://docs.checkmk.com/",
|
||||||
|
"website": "https://checkmk.com/",
|
||||||
|
"logo": "https://checkmk.com/application/files/cache/thumbnails/67fc39c599afdf20557d538416e3efd3.png",
|
||||||
|
"description": "Checkmk is an IT monitoring software that tracks the health and performance of your systems, networks, servers, applications, and cloud services. It provides real-time insights, alerts for issues, and tools for troubleshooting, helping ensure smooth operations across your infrastructure.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/checkmk.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": null,
|
||||||
|
"version": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Login Credentials : `cat ~/checkmk.creds`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "VS Code Server",
|
"name": "VS Code Server",
|
||||||
"slug": "code-server",
|
"slug": "code-server",
|
||||||
"categories": [
|
"categories": [
|
||||||
16
|
19
|
||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "misc",
|
"type": "misc",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "FlowiseAI",
|
"name": "FlowiseAI",
|
||||||
"slug": "flowiseai",
|
"slug": "flowiseai",
|
||||||
"categories": [
|
"categories": [
|
||||||
0
|
19
|
||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "Forgejo",
|
"name": "Forgejo",
|
||||||
"slug": "forgejo",
|
"slug": "forgejo",
|
||||||
"categories": [
|
"categories": [
|
||||||
16
|
19
|
||||||
],
|
],
|
||||||
"date_created": "2024-06-12",
|
"date_created": "2024-06-12",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "Gitea",
|
"name": "Gitea",
|
||||||
"slug": "gitea",
|
"slug": "gitea",
|
||||||
"categories": [
|
"categories": [
|
||||||
16
|
19
|
||||||
],
|
],
|
||||||
"date_created": "2024-07-26",
|
"date_created": "2024-07-26",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
|
|||||||
34
json/grist.json
Normal file
34
json/grist.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "Grist",
|
||||||
|
"slug": "grist",
|
||||||
|
"categories": [
|
||||||
|
5
|
||||||
|
],
|
||||||
|
"date_created": "2024-12-27",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8484,
|
||||||
|
"documentation": null,
|
||||||
|
"website": "https://www.getgrist.com/",
|
||||||
|
"logo": "https://github.com/gristlabs/grist-core/blob/main/static/img/logo-grist.png?raw=true",
|
||||||
|
"description": "Grist is a modern, open source spreadsheet that goes beyond the grid",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/grist.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
34
json/jenkins.json
Normal file
34
json/jenkins.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "Jenkins",
|
||||||
|
"slug": "jenkins",
|
||||||
|
"categories": [
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"date_created": "2024-12-26",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": false,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8080,
|
||||||
|
"documentation": "https://www.jenkins.io/doc/",
|
||||||
|
"website": "https://www.jenkins.io/",
|
||||||
|
"logo": "https://www.jenkins.io/images/logos/jenkins/jenkins.svg",
|
||||||
|
"description": "Jenkins provides hundreds of plugins to support building, deploying and automating any project. ",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/jenkins.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 4,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -5,11 +5,12 @@
|
|||||||
{"name": "AdBlocker & DNS", "id": 13, "sort_order": 2.0},
|
{"name": "AdBlocker & DNS", "id": 13, "sort_order": 2.0},
|
||||||
{"name": "*Arr Suite", "id": 18, "sort_order": 3.0},
|
{"name": "*Arr Suite", "id": 18, "sort_order": 3.0},
|
||||||
{"name": "Automation", "id": 3, "sort_order": 4.0},
|
{"name": "Automation", "id": 3, "sort_order": 4.0},
|
||||||
|
{"name": "Coding & AI", "id": 19, "sort_order": 5.0},
|
||||||
{"name": "Dashboards", "id": 15, "sort_order": 5.0},
|
{"name": "Dashboards", "id": 15, "sort_order": 5.0},
|
||||||
{"name": "Database", "id": 5, "sort_order": 6.0},
|
{"name": "Database", "id": 5, "sort_order": 6.0},
|
||||||
{"name": "Docker & Kubernetes", "id": 8, "sort_order": 7.0},
|
{"name": "Docker & Kubernetes", "id": 8, "sort_order": 7.0},
|
||||||
{"name": "Document & Notes", "id": 14, "sort_order": 8.0},
|
{"name": "Document & Notes", "id": 14, "sort_order": 8.0},
|
||||||
{"name": "File & Code", "id": 16, "sort_order": 9.0},
|
{"name": "File & Downloads", "id": 16, "sort_order": 9.0},
|
||||||
{"name": "Home Assistant", "id": 2, "sort_order": 10.0},
|
{"name": "Home Assistant", "id": 2, "sort_order": 10.0},
|
||||||
{"name": "Media & Photo", "id": 12, "sort_order": 11.0},
|
{"name": "Media & Photo", "id": 12, "sort_order": 11.0},
|
||||||
{"name": "Monitoring & Analytics", "id": 7, "sort_order": 12.0},
|
{"name": "Monitoring & Analytics", "id": 7, "sort_order": 12.0},
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "Open WebUI",
|
"name": "Open WebUI",
|
||||||
"slug": "openwebui",
|
"slug": "openwebui",
|
||||||
"categories": [
|
"categories": [
|
||||||
0
|
19
|
||||||
],
|
],
|
||||||
"date_created": "2024-10-24",
|
"date_created": "2024-10-24",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
|
|||||||
39
json/part-db.json
Normal file
39
json/part-db.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "Part-DB",
|
||||||
|
"slug": "part-db",
|
||||||
|
"categories": [
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"date_created": "2024-12-18",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://docs.part-db.de/",
|
||||||
|
"website": "https://github.com/Part-DB/Part-DB-server",
|
||||||
|
"logo": "https://avatars.githubusercontent.com/u/36010898?s=48&v=4",
|
||||||
|
"description": "Part-DB is an Open source inventory management system for your electronic components",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/part-db.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Show login and database credentials: `cat partdb.creds`",
|
||||||
|
"type": "info"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
"script": "ct/photoprism.sh",
|
"script": "ct/photoprism.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 3072,
|
||||||
"hdd": 8,
|
"hdd": 8,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
@@ -36,4 +36,4 @@
|
|||||||
"type": "warning"
|
"type": "warning"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
43
json/proxmox-datacenter-manager.json
Normal file
43
json/proxmox-datacenter-manager.json
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"name": "Proxmox Datacenter Manager",
|
||||||
|
"slug": "proxmox-datacenter-manager",
|
||||||
|
"categories": [
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"date_created": "2024-12-25",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 8443,
|
||||||
|
"documentation": "https://pve.proxmox.com/wiki/Proxmox_Datacenter_Manager_Roadmap",
|
||||||
|
"website": "https://pve.proxmox.com/wiki/Proxmox_Datacenter_Manager_Roadmap",
|
||||||
|
"logo": "https://raw.githubusercontent.com/home-assistant/brands/master/core_integrations/proxmoxve/icon.png",
|
||||||
|
"description": "The Proxmox Datacenter Manager project has been developed with the objective of providing a centralized overview of all your individual nodes and clusters. It also enables basic management like migrations of virtual guests without any cluster network requirements. ",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/proxmox-datacenter-manager.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 2048,
|
||||||
|
"hdd": 10,
|
||||||
|
"os": "Debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "Set a root password if using autologin. This will be the Proxmox-Datacenter-Manager password. `sudo passwd root`",
|
||||||
|
"type": "info"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"text": "Proxmox Datacenter Manager is in an alpha stage of development. Use it cautiously, as bugs, incomplete features, and potential instabilities are expected.",
|
||||||
|
"type": "warning"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
"script": "ct/sabnzbd.sh",
|
"script": "ct/sabnzbd.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 4096,
|
||||||
"hdd": 8,
|
"hdd": 8,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
@@ -31,4 +31,4 @@
|
|||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": []
|
||||||
}
|
}
|
||||||
|
|||||||
34
json/silverbullet.json
Normal file
34
json/silverbullet.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "Silverbullet",
|
||||||
|
"slug": "silverbullet",
|
||||||
|
"categories": [
|
||||||
|
14
|
||||||
|
],
|
||||||
|
"date_created": "2024-12-03",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 3000,
|
||||||
|
"documentation": "https://silverbullet.md/Manual",
|
||||||
|
"website": "https://silverbullet.md",
|
||||||
|
"logo": "https://silverbullet.md/.client/logo.png",
|
||||||
|
"description": "SilverBullet is a note-taking application optimized for people with a hacker mindset.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/silverbullet.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 1,
|
||||||
|
"ram": 512,
|
||||||
|
"hdd": 2,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
39
json/teddycloud.json
Normal file
39
json/teddycloud.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "TeddyCloud",
|
||||||
|
"slug": "teddycloud",
|
||||||
|
"categories": [
|
||||||
|
12
|
||||||
|
],
|
||||||
|
"date_created": "2024-12-28",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": 80,
|
||||||
|
"documentation": "https://tonies-wiki.revvox.de/docs/tools/teddycloud/",
|
||||||
|
"website": "https://tonies-wiki.revvox.de/docs/tools/teddycloud/",
|
||||||
|
"logo": "https://avatars.githubusercontent.com/u/57543015",
|
||||||
|
"description": "TeddyCloud is an open source server replacement for the Boxine Cloud.",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/teddycloud.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 1024,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
{
|
||||||
|
"text": "First start of the service can take some time due to certificate generation.",
|
||||||
|
"type": "warn"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -10,8 +10,8 @@
|
|||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8080,
|
"interface_port": 8080,
|
||||||
"documentation": null,
|
"documentation": null,
|
||||||
"website": "https://github.com/zadam/trilium#trilium-notes",
|
"website": "https://github.com/TriliumNext/Notes",
|
||||||
"logo": "https://raw.githubusercontent.com/zadam/trilium/master/images/app-icons/png/128x128.png?raw=true",
|
"logo": "https://github.com/TriliumNext/Notes/blob/develop/images/app-icons/png/128x128.png?raw=true",
|
||||||
"description": "Trilium is an open-source note-taking and personal knowledge management application. It allows users to organize and manage their notes, ideas, and information in a single place, using a hierarchical tree-like structure. Trilium offers a range of features, including rich text formatting, links, images, and attachments, making it easy to create and structure notes. The software is designed to be flexible and customizable, with a range of customization options and plugins available, including themes, export options, and more. Trilium is a self-hosted solution, and can be run on a local machine or a cloud-based server, providing users with full control over their notes and information.",
|
"description": "Trilium is an open-source note-taking and personal knowledge management application. It allows users to organize and manage their notes, ideas, and information in a single place, using a hierarchical tree-like structure. Trilium offers a range of features, including rich text formatting, links, images, and attachments, making it easy to create and structure notes. The software is designed to be flexible and customizable, with a range of customization options and plugins available, including themes, export options, and more. Trilium is a self-hosted solution, and can be run on a local machine or a cloud-based server, providing users with full control over their notes and information.",
|
||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
@@ -31,4 +31,4 @@
|
|||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": []
|
"notes": []
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "Webmin System Administration",
|
"name": "Webmin System Administration",
|
||||||
"slug": "webmin",
|
"slug": "webmin",
|
||||||
"categories": [
|
"categories": [
|
||||||
16
|
11
|
||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "misc",
|
"type": "misc",
|
||||||
|
|||||||
34
json/zammad.json
Normal file
34
json/zammad.json
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "Zammad",
|
||||||
|
"slug": "zammad",
|
||||||
|
"categories": [
|
||||||
|
11
|
||||||
|
],
|
||||||
|
"date_created": "2024-12-18",
|
||||||
|
"type": "ct",
|
||||||
|
"updateable": true,
|
||||||
|
"privileged": false,
|
||||||
|
"interface_port": null,
|
||||||
|
"documentation": "https://docs.zammad.org/en/latest/",
|
||||||
|
"website": "https://zammad.com/",
|
||||||
|
"logo": "https://raw.githubusercontent.com/zammad/zammad/refs/heads/develop/public/assets/images/logo.svg",
|
||||||
|
"description": "Zammad is a web based open source helpdesk/customer support system with many features to manage customer communication via several channels like telephone, facebook, twitter, chat and emails. It is distributed under version 3 of the GNU AFFERO General Public License (GNU AGPLv3).",
|
||||||
|
"install_methods": [
|
||||||
|
{
|
||||||
|
"type": "default",
|
||||||
|
"script": "ct/zammad.sh",
|
||||||
|
"resources": {
|
||||||
|
"cpu": 2,
|
||||||
|
"ram": 4096,
|
||||||
|
"hdd": 8,
|
||||||
|
"os": "debian",
|
||||||
|
"version": "12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"default_credentials": {
|
||||||
|
"username": null,
|
||||||
|
"password": null
|
||||||
|
},
|
||||||
|
"notes": []
|
||||||
|
}
|
||||||
@@ -7,8 +7,8 @@
|
|||||||
# Source: https://github.com/gitsang/lxc-iptag
|
# Source: https://github.com/gitsang/lxc-iptag
|
||||||
|
|
||||||
function header_info {
|
function header_info {
|
||||||
clear
|
clear
|
||||||
cat <<"EOF"
|
cat <<"EOF"
|
||||||
__ _ ________ ________ ______
|
__ _ ________ ________ ______
|
||||||
/ / | |/ / ____/ / _/ __ \ /_ __/___ _____ _
|
/ / | |/ / ____/ / _/ __ \ /_ __/___ _____ _
|
||||||
/ / | / / / // /_/ /_____/ / / __ `/ __ `/
|
/ / | / / / // /_/ /_____/ / / __ `/ __ `/
|
||||||
@@ -41,7 +41,7 @@ catch_errors() {
|
|||||||
|
|
||||||
# This function is called when an error occurs. It receives the exit code, line number, and command that caused the error, and displays an error message.
|
# This function is called when an error occurs. It receives the exit code, line number, and command that caused the error, and displays an error message.
|
||||||
error_handler() {
|
error_handler() {
|
||||||
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
|
||||||
printf "\e[?25h"
|
printf "\e[?25h"
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
local line_number="$1"
|
local line_number="$1"
|
||||||
@@ -50,51 +50,56 @@ error_handler() {
|
|||||||
echo -e "\n$error_message\n"
|
echo -e "\n$error_message\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# This function displays a spinner.
|
||||||
spinner() {
|
spinner() {
|
||||||
local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
|
local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
|
||||||
local spin_i=0
|
local spin_i=0
|
||||||
local interval=0.1
|
local interval=0.1
|
||||||
printf "\e[?25l"
|
printf "\e[?25l"
|
||||||
local orange="\e[38;5;214m"
|
|
||||||
|
|
||||||
while true; do
|
local color="${YWB}"
|
||||||
printf "\r ${orange}%s\e[0m " "${frames[spin_i]}"
|
|
||||||
spin_i=$(( (spin_i + 1) % ${#frames[@]} ))
|
while true; do
|
||||||
sleep "$interval"
|
printf "\r ${color}%s${CL}" "${frames[spin_i]}"
|
||||||
done
|
spin_i=$(((spin_i + 1) % ${#frames[@]}))
|
||||||
|
sleep "$interval"
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# This function displays an informational message with a yellow color.
|
# This function displays an informational message with a yellow color.
|
||||||
msg_info() {
|
msg_info() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -ne " ${HOLD} ${YW}${msg} "
|
echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
|
||||||
spinner &
|
spinner &
|
||||||
SPINNER_PID=$!
|
SPINNER_PID=$!
|
||||||
}
|
}
|
||||||
|
|
||||||
# This function displays a success message with a green color.
|
# This function displays a success message with a green color.
|
||||||
msg_ok() {
|
msg_ok() {
|
||||||
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
|
||||||
printf "\e[?25h"
|
printf "\e[?25h"
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR}${CM} ${GN}${msg}${CL}"
|
echo -e "${BFR}${CM}${GN}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# This function displays a error message with a red color.
|
# This function displays a error message with a red color.
|
||||||
msg_error() {
|
msg_error() {
|
||||||
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
|
||||||
printf "\e[?25h"
|
printf "\e[?25h"
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -e "${BFR}${CROSS} ${RD}${msg}${CL}"
|
echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
read -p "This will install ${APP} on ${hostname}. Proceed? (y/n): " yn
|
read -p "This will install ${APP} on ${hostname}. Proceed? (y/n): " yn
|
||||||
case $yn in
|
case $yn in
|
||||||
[Yy]*) break ;;
|
[Yy]*) break ;;
|
||||||
[Nn]*) msg_info "Installation cancelled."; exit ;;
|
[Nn]*)
|
||||||
*) msg_info "Please answer yes or no." ;;
|
msg_error "Installation cancelled."
|
||||||
esac
|
exit
|
||||||
|
;;
|
||||||
|
*) msg_error "Please answer yes or no." ;;
|
||||||
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
if ! pveversion | grep -Eq "pve-manager/8.[0-3]"; then
|
if ! pveversion | grep -Eq "pve-manager/8.[0-3]"; then
|
||||||
@@ -118,17 +123,19 @@ msg_ok "Installed Dependencies"
|
|||||||
|
|
||||||
msg_info "Setting up IP-Tag Scripts"
|
msg_info "Setting up IP-Tag Scripts"
|
||||||
mkdir -p /opt/lxc-iptag
|
mkdir -p /opt/lxc-iptag
|
||||||
|
msg_ok "Setup IP-Tag Scripts"
|
||||||
|
|
||||||
msg_info "Setup Default Config"
|
msg_info "Setup Default Config"
|
||||||
if [[ ! -f /opt/lxc-iptag/iptag.conf ]]; then
|
if [[ ! -f /opt/lxc-iptag/iptag.conf ]]; then
|
||||||
cat <<EOF > /opt/lxc-iptag/iptag.conf
|
cat <<EOF >/opt/lxc-iptag/iptag.conf
|
||||||
# Configuration file for LXC IP tagging
|
# Configuration file for LXC IP tagging
|
||||||
|
|
||||||
# List of allowed CIDRs
|
# List of allowed CIDRs
|
||||||
CIDR_LIST=(
|
CIDR_LIST=(
|
||||||
192.168.0.0/16
|
192.168.0.0/16
|
||||||
100.64.0.0/10
|
172.16.0.0/12
|
||||||
10.0.0.0/8
|
10.0.0.0/8
|
||||||
|
100.64.0.0/10
|
||||||
)
|
)
|
||||||
|
|
||||||
# Interval settings (in seconds)
|
# Interval settings (in seconds)
|
||||||
@@ -137,14 +144,14 @@ FW_NET_INTERFACE_CHECK_INTERVAL=60
|
|||||||
LXC_STATUS_CHECK_INTERVAL=-1
|
LXC_STATUS_CHECK_INTERVAL=-1
|
||||||
FORCE_UPDATE_INTERVAL=1800
|
FORCE_UPDATE_INTERVAL=1800
|
||||||
EOF
|
EOF
|
||||||
msg_ok "Setup default config"
|
msg_ok "Setup default config"
|
||||||
else
|
else
|
||||||
msg_ok "Default config already exists"
|
msg_ok "Default config already exists"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Setup Main Function"
|
msg_info "Setup Main Function"
|
||||||
if [[ ! -f /opt/lxc-iptag/iptag ]]; then
|
if [[ ! -f /opt/lxc-iptag/iptag ]]; then
|
||||||
cat <<'EOF' > /opt/lxc-iptag/iptag
|
cat <<'EOF' >/opt/lxc-iptag/iptag
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# =============== CONFIGURATION =============== #
|
# =============== CONFIGURATION =============== #
|
||||||
@@ -153,177 +160,176 @@ CONFIG_FILE="/opt/lxc-iptag/iptag.conf"
|
|||||||
|
|
||||||
# Load the configuration file if it exists
|
# Load the configuration file if it exists
|
||||||
if [ -f "$CONFIG_FILE" ]; then
|
if [ -f "$CONFIG_FILE" ]; then
|
||||||
# shellcheck source=./lxc-iptag.conf
|
# shellcheck source=./lxc-iptag.conf
|
||||||
source "$CONFIG_FILE"
|
source "$CONFIG_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Convert IP to integer for comparison
|
# Convert IP to integer for comparison
|
||||||
ip_to_int() {
|
ip_to_int() {
|
||||||
local ip="${1}"
|
local ip="${1}"
|
||||||
local a b c d
|
local a b c d
|
||||||
|
|
||||||
IFS=. read -r a b c d <<< "${ip}"
|
IFS=. read -r a b c d <<< "${ip}"
|
||||||
echo "$((a << 24 | b << 16 | c << 8 | d))"
|
echo "$((a << 24 | b << 16 | c << 8 | d))"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if IP is in CIDR
|
# Check if IP is in CIDR
|
||||||
ip_in_cidr() {
|
ip_in_cidr() {
|
||||||
local ip="${1}"
|
local ip="${1}"
|
||||||
local cidr="${2}"
|
local cidr="${2}"
|
||||||
|
|
||||||
ip_int=$(ip_to_int "${ip}")
|
ip_int=$(ip_to_int "${ip}")
|
||||||
netmask_int=$(ip_to_int "$(ipcalc -b "${cidr}" | grep Broadcast | awk '{print $2}')")
|
netmask_int=$(ip_to_int "$(ipcalc -b "${cidr}" | grep Broadcast | awk '{print $2}')")
|
||||||
masked_ip_int=$(( "${ip_int}" & "${netmask_int}" ))
|
masked_ip_int=$(( "${ip_int}" & "${netmask_int}" ))
|
||||||
[[ ${ip_int} -eq ${masked_ip_int} ]] && return 0 || return 1
|
[[ ${ip_int} -eq ${masked_ip_int} ]] && return 0 || return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if IP is in any CIDRs
|
# Check if IP is in any CIDRs
|
||||||
ip_in_cidrs() {
|
ip_in_cidrs() {
|
||||||
local ip="${1}"
|
local ip="${1}"
|
||||||
local cidrs=()
|
local cidrs=()
|
||||||
|
|
||||||
mapfile -t cidrs < <(echo "${2}" | tr ' ' '\n')
|
mapfile -t cidrs < <(echo "${2}" | tr ' ' '\n')
|
||||||
for cidr in "${cidrs[@]}"; do
|
for cidr in "${cidrs[@]}"; do
|
||||||
ip_in_cidr "${ip}" "${cidr}" && return 0
|
ip_in_cidr "${ip}" "${cidr}" && return 0
|
||||||
done
|
done
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if IP is valid
|
# Check if IP is valid
|
||||||
is_valid_ipv4() {
|
is_valid_ipv4() {
|
||||||
local ip=$1
|
local ip=$1
|
||||||
local regex="^([0-9]{1,3}\.){3}[0-9]{1,3}$"
|
local regex="^([0-9]{1,3}\.){3}[0-9]{1,3}$"
|
||||||
|
|
||||||
if [[ $ip =~ $regex ]]; then
|
if [[ $ip =~ $regex ]]; then
|
||||||
IFS='.' read -r -a parts <<< "$ip"
|
IFS='.' read -r -a parts <<< "$ip"
|
||||||
for part in "${parts[@]}"; do
|
for part in "${parts[@]}"; do
|
||||||
if ! [[ $part =~ ^[0-9]+$ ]] || ((part < 0 || part > 255)); then
|
if ! [[ $part =~ ^[0-9]+$ ]] || ((part < 0 || part > 255)); then
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
lxc_status_changed() {
|
lxc_status_changed() {
|
||||||
current_lxc_status=$(pct list 2>/dev/null)
|
current_lxc_status=$(pct list 2>/dev/null)
|
||||||
if [ "${last_lxc_status}" == "${current_lxc_status}" ]; then
|
if [ "${last_lxc_status}" == "${current_lxc_status}" ]; then
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
last_lxc_status="${current_lxc_status}"
|
last_lxc_status="${current_lxc_status}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
fw_net_interface_changed() {
|
fw_net_interface_changed() {
|
||||||
current_net_interface=$(ifconfig | grep "^fw")
|
current_net_interface=$(ifconfig | grep "^fw")
|
||||||
if [ "${last_net_interface}" == "${current_net_interface}" ]; then
|
if [ "${last_net_interface}" == "${current_net_interface}" ]; then
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
last_net_interface="${current_net_interface}"
|
last_net_interface="${current_net_interface}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# =============== MAIN =============== #
|
# =============== MAIN =============== #
|
||||||
|
|
||||||
update_lxc_iptags() {
|
update_lxc_iptags() {
|
||||||
vmid_list=$(pct list 2>/dev/null | grep -v VMID | awk '{print $1}')
|
vmid_list=$(pct list 2>/dev/null | grep -v VMID | awk '{print $1}')
|
||||||
for vmid in ${vmid_list}; do
|
for vmid in ${vmid_list}; do
|
||||||
last_tagged_ips=()
|
last_tagged_ips=()
|
||||||
current_valid_ips=()
|
current_valid_ips=()
|
||||||
next_tags=()
|
next_tags=()
|
||||||
|
|
||||||
# Parse current tags
|
# Parse current tags
|
||||||
mapfile -t current_tags < <(pct config "${vmid}" | grep tags | awk '{print $2}' | sed 's/;/\n/g')
|
mapfile -t current_tags < <(pct config "${vmid}" | grep tags | awk '{print $2}' | sed 's/;/\n/g')
|
||||||
for current_tag in "${current_tags[@]}"; do
|
for current_tag in "${current_tags[@]}"; do
|
||||||
if is_valid_ipv4 "${current_tag}"; then
|
if is_valid_ipv4 "${current_tag}"; then
|
||||||
last_tagged_ips+=("${current_tag}")
|
last_tagged_ips+=("${current_tag}")
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
next_tags+=("${current_tag}")
|
next_tags+=("${current_tag}")
|
||||||
done
|
|
||||||
|
|
||||||
# Get current IPs
|
|
||||||
current_ips_full=$(lxc-info -n "${vmid}" -i | awk '{print $2}')
|
|
||||||
for ip in ${current_ips_full}; do
|
|
||||||
if is_valid_ipv4 "${ip}" && ip_in_cidrs "${ip}" "${CIDR_LIST[*]}"; then
|
|
||||||
current_valid_ips+=("${ip}")
|
|
||||||
next_tags+=("${ip}")
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Skip if no ip change
|
|
||||||
if [[ "$(echo "${last_tagged_ips[@]}" | tr ' ' '\n' | sort -u)" == "$(echo "${current_valid_ips[@]}" | tr ' ' '\n' | sort -u)" ]]; then
|
|
||||||
echo "Skipping ${vmid} cause ip no changes"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set tags
|
|
||||||
echo "Setting ${vmid} tags from ${current_tags[*]} to ${next_tags[*]}"
|
|
||||||
pct set "${vmid}" -tags "$(IFS=';'; echo "${next_tags[*]}")"
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Get current IPs
|
||||||
|
current_ips_full=$(lxc-info -n "${vmid}" -i | awk '{print $2}')
|
||||||
|
for ip in ${current_ips_full}; do
|
||||||
|
if is_valid_ipv4 "${ip}" && ip_in_cidrs "${ip}" "${CIDR_LIST[*]}"; then
|
||||||
|
current_valid_ips+=("${ip}")
|
||||||
|
next_tags+=("${ip}")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Skip if no ip change
|
||||||
|
if [[ "$(echo "${last_tagged_ips[@]}" | tr ' ' '\n' | sort -u)" == "$(echo "${current_valid_ips[@]}" | tr ' ' '\n' | sort -u)" ]]; then
|
||||||
|
echo "Skipping ${vmid} cause ip no changes"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set tags
|
||||||
|
echo "Setting ${vmid} tags from ${current_tags[*]} to ${next_tags[*]}"
|
||||||
|
pct set "${vmid}" -tags "$(IFS=';'; echo "${next_tags[*]}")"
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
check() {
|
check() {
|
||||||
current_time=$(date +%s)
|
current_time=$(date +%s)
|
||||||
|
|
||||||
time_since_last_lxc_status_check=$((current_time - last_lxc_status_check_time))
|
time_since_last_lxc_status_check=$((current_time - last_lxc_status_check_time))
|
||||||
if [[ "${LXC_STATUS_CHECK_INTERVAL}" -gt 0 ]] \
|
if [[ "${LXC_STATUS_CHECK_INTERVAL}" -gt 0 ]] \
|
||||||
&& [[ "${time_since_last_lxc_status_check}" -ge "${STATUS_CHECK_INTERVAL}" ]]; then
|
&& [[ "${time_since_last_lxc_status_check}" -ge "${STATUS_CHECK_INTERVAL}" ]]; then
|
||||||
echo "Checking lxc status..."
|
echo "Checking lxc status..."
|
||||||
last_lxc_status_check_time=${current_time}
|
last_lxc_status_check_time=${current_time}
|
||||||
if lxc_status_changed; then
|
if lxc_status_changed; then
|
||||||
update_lxc_iptags
|
update_lxc_iptags
|
||||||
last_update_time=${current_time}
|
last_update_time=${current_time}
|
||||||
return
|
return
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
time_since_last_fw_net_interface_check=$((current_time - last_fw_net_interface_check_time))
|
time_since_last_fw_net_interface_check=$((current_time - last_fw_net_interface_check_time))
|
||||||
if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL}" -gt 0 ]] \
|
if [[ "${FW_NET_INTERFACE_CHECK_INTERVAL}" -gt 0 ]] \
|
||||||
&& [[ "${time_since_last_fw_net_interface_check}" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL}" ]]; then
|
&& [[ "${time_since_last_fw_net_interface_check}" -ge "${FW_NET_INTERFACE_CHECK_INTERVAL}" ]]; then
|
||||||
echo "Checking fw net interface..."
|
echo "Checking fw net interface..."
|
||||||
last_fw_net_interface_check_time=${current_time}
|
last_fw_net_interface_check_time=${current_time}
|
||||||
if fw_net_interface_changed; then
|
if fw_net_interface_changed; then
|
||||||
update_lxc_iptags
|
update_lxc_iptags
|
||||||
last_update_time=${current_time}
|
last_update_time=${current_time}
|
||||||
return
|
return
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
time_since_last_update=$((current_time - last_update_time))
|
time_since_last_update=$((current_time - last_update_time))
|
||||||
if [ ${time_since_last_update} -ge ${FORCE_UPDATE_INTERVAL} ]; then
|
if [ ${time_since_last_update} -ge ${FORCE_UPDATE_INTERVAL} ]; then
|
||||||
echo "Force updating lxc iptags..."
|
echo "Force updating lxc iptags..."
|
||||||
update_lxc_iptags
|
update_lxc_iptags
|
||||||
last_update_time=${current_time}
|
last_update_time=${current_time}
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# main: Set the IP tags for all LXC containers
|
# main: Set the IP tags for all LXC containers
|
||||||
main() {
|
main() {
|
||||||
while true; do
|
while true; do
|
||||||
check
|
check
|
||||||
sleep "${LOOP_INTERVAL}"
|
sleep "${LOOP_INTERVAL}"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
main
|
main
|
||||||
EOF
|
EOF
|
||||||
msg_ok "Setup Main Function"
|
msg_ok "Setup Main Function"
|
||||||
else
|
else
|
||||||
msg_ok "Main Function already exists"
|
msg_ok "Main Function already exists"
|
||||||
fi
|
fi
|
||||||
chmod +x /opt/lxc-iptag/iptag
|
chmod +x /opt/lxc-iptag/iptag
|
||||||
|
|
||||||
msg_info "Creating Service"
|
msg_info "Creating Service"
|
||||||
if [[ ! -f /lib/systemd/system/iptag.service ]]; then
|
if [[ ! -f /lib/systemd/system/iptag.service ]]; then
|
||||||
echo "Systemd service file not found. Creating it now..."
|
cat <<EOF >/lib/systemd/system/iptag.service
|
||||||
cat <<EOF > /lib/systemd/system/iptag.service
|
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=LXC IP-Tag service
|
Description=LXC IP-Tag service
|
||||||
After=network.target
|
After=network.target
|
||||||
@@ -336,9 +342,9 @@ Restart=always
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
msg_ok "Created Service"
|
msg_ok "Created Service"
|
||||||
else
|
else
|
||||||
msg_ok "Service already exists."
|
msg_ok "Service already exists."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_ok "Setup IP-Tag Scripts"
|
msg_ok "Setup IP-Tag Scripts"
|
||||||
@@ -347,5 +353,5 @@ msg_info "Starting Service"
|
|||||||
systemctl daemon-reload &>/dev/null
|
systemctl daemon-reload &>/dev/null
|
||||||
systemctl enable -q --now iptag.service &>/dev/null
|
systemctl enable -q --now iptag.service &>/dev/null
|
||||||
msg_ok "Started Service"
|
msg_ok "Started Service"
|
||||||
|
SPINNER_PID=""
|
||||||
echo -e "\n${APP} installation completed successfully! ${CL}\n"
|
echo -e "\n${APP} installation completed successfully! ${CL}\n"
|
||||||
|
|||||||
103
misc/build.func
103
misc/build.func
@@ -8,6 +8,7 @@ variables() {
|
|||||||
NSAPP=$(echo ${APP,,} | tr -d ' ') # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces.
|
NSAPP=$(echo ${APP,,} | tr -d ' ') # This function sets the NSAPP variable by converting the value of the APP variable to lowercase and removing any spaces.
|
||||||
var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP.
|
var_install="${NSAPP}-install" # sets the var_install variable by appending "-install" to the value of NSAPP.
|
||||||
INTEGER='^[0-9]+([.][0-9]+)?$' # it defines the INTEGER regular expression pattern.
|
INTEGER='^[0-9]+([.][0-9]+)?$' # it defines the INTEGER regular expression pattern.
|
||||||
|
PVEHOST_NAME=$(hostname) # gets the Proxmox Hostname and sets it to Uppercase
|
||||||
}
|
}
|
||||||
|
|
||||||
# This function sets various color variables using ANSI escape codes for formatting text in the terminal.
|
# This function sets various color variables using ANSI escape codes for formatting text in the terminal.
|
||||||
@@ -156,14 +157,95 @@ arch_check() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Function to get the current IP address based on the distribution
|
||||||
|
get_current_ip() {
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
# Check for Debian/Ubuntu (uses hostname -I)
|
||||||
|
if grep -qE 'ID=debian|ID=ubuntu' /etc/os-release; then
|
||||||
|
CURRENT_IP=$(hostname -I | awk '{print $1}')
|
||||||
|
# Check for Alpine (uses ip command)
|
||||||
|
elif grep -q 'ID=alpine' /etc/os-release; then
|
||||||
|
CURRENT_IP=$(ip -4 addr show eth0 | awk '/inet / {print $2}' | cut -d/ -f1 | head -n 1)
|
||||||
|
else
|
||||||
|
CURRENT_IP="Unknown"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "$CURRENT_IP"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to update the IP address in the MOTD file
|
||||||
|
update_motd_ip() {
|
||||||
|
MOTD_FILE="/etc/motd"
|
||||||
|
|
||||||
|
if [ -f "$MOTD_FILE" ]; then
|
||||||
|
# Remove existing IP Address lines to prevent duplication
|
||||||
|
sed -i '/IP Address:/d' "$MOTD_FILE"
|
||||||
|
|
||||||
|
IP=$(get_current_ip)
|
||||||
|
# Add the new IP address
|
||||||
|
echo -e "${TAB}${NETWORK}${YW} IP Address: ${GN}${IP}${CL}" >> "$MOTD_FILE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# This function sets the APP-Name into an ASCII Header in Slant, figlet needed on proxmox main node.
|
# This function sets the APP-Name into an ASCII Header in Slant, figlet needed on proxmox main node.
|
||||||
header_info() {
|
header_info() {
|
||||||
apt-get install -y figlet &> /dev/null
|
# Helper function: Install FIGlet and download fonts
|
||||||
ascii_art=$(figlet -f slant "$APP")
|
install_figlet() {
|
||||||
|
echo -e "${INFO}${BOLD}${DGN}Installing FIGlet...${CL}"
|
||||||
|
|
||||||
|
temp_dir=$(mktemp -d)
|
||||||
|
curl -sL https://github.com/community-scripts/ProxmoxVE/raw/refs/heads/main/misc/figlet.tar.xz -o "$temp_dir/figlet.tar.xz"
|
||||||
|
mkdir -p /tmp/figlet
|
||||||
|
tar -xf "$temp_dir/figlet.tar.xz" -C /tmp/figlet --strip-components=1
|
||||||
|
cd /tmp/figlet
|
||||||
|
make >/dev/null
|
||||||
|
|
||||||
|
if [ -f "figlet" ]; then
|
||||||
|
chmod +x figlet
|
||||||
|
mv figlet /usr/local/bin/
|
||||||
|
mkdir -p /usr/local/share/figlet
|
||||||
|
cp -r /tmp/figlet/fonts/*.flf /usr/local/share/figlet/
|
||||||
|
echo -e "${CM}${BOLD}${DGN}FIGlet successfully installed.${CL}"
|
||||||
|
else
|
||||||
|
echo -e "${ERR}${BOLD}${RED}Failed to install FIGlet.${CL}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
rm -rf "$temp_dir"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if figlet and the slant font are available
|
||||||
|
if ! figlet -f slant "Test" &>/dev/null; then
|
||||||
|
echo -e "${INFO}${BOLD}${DGN}FIGlet or the slant font is missing. Installing...${CL}"
|
||||||
|
|
||||||
|
if [ -f /etc/debian_version ] || [ -f /etc/lsb-release ]; then
|
||||||
|
# Debian/Ubuntu-based systems
|
||||||
|
apt-get update -y &>/dev/null
|
||||||
|
apt-get install -y wget build-essential &>/dev/null
|
||||||
|
install_figlet
|
||||||
|
|
||||||
|
elif [ -f /etc/alpine-release ]; then
|
||||||
|
# Alpine-based systems
|
||||||
|
apk add --no-cache tar xz build-base wget &>/dev/null
|
||||||
|
export TERM=xterm
|
||||||
|
install_figlet
|
||||||
|
|
||||||
|
else
|
||||||
|
echo -e "${ERR}${BOLD}${RED}Unsupported operating system.${CL}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure the slant font is available
|
||||||
|
if [ ! -f "/usr/share/figlet/slant.flf" ]; then
|
||||||
|
echo -e "${INFO}${BOLD}${DGN}Downloading slant font...${CL}"
|
||||||
|
wget -qO /usr/share/figlet/slant.flf "http://www.figlet.org/fonts/slant.flf"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Display ASCII header
|
||||||
|
term_width=$(tput cols 2>/dev/null || echo 120)
|
||||||
|
ascii_art=$(figlet -f slant -w "$term_width" "$APP")
|
||||||
clear
|
clear
|
||||||
cat <<EOF
|
echo "$ascii_art"
|
||||||
$ascii_art
|
|
||||||
EOF
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# This function checks if the script is running through SSH and prompts the user to confirm if they want to proceed or exit.
|
# This function checks if the script is running through SSH and prompts the user to confirm if they want to proceed or exit.
|
||||||
@@ -303,9 +385,8 @@ advanced_settings() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Setting Default Tag for Advanced Settings
|
# Setting Default Tag for Advanced Settings
|
||||||
TAGS="community-script;"
|
TAGS="community-script;${var_tags:-}"
|
||||||
|
|
||||||
CT_TYPE=""
|
CT_TYPE=""
|
||||||
while [ -z "$CT_TYPE" ]; do
|
while [ -z "$CT_TYPE" ]; do
|
||||||
@@ -569,7 +650,7 @@ advanced_settings() {
|
|||||||
else
|
else
|
||||||
clear
|
clear
|
||||||
header_info
|
header_info
|
||||||
echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
|
echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings on node $PVEHOST_NAME${CL}"
|
||||||
advanced_settings
|
advanced_settings
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -603,7 +684,7 @@ install_script() {
|
|||||||
case $CHOICE in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
header_info
|
header_info
|
||||||
echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings${CL}"
|
echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME${CL}"
|
||||||
VERB="no"
|
VERB="no"
|
||||||
base_settings "$VERB"
|
base_settings "$VERB"
|
||||||
echo_default
|
echo_default
|
||||||
@@ -611,7 +692,7 @@ install_script() {
|
|||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
header_info
|
header_info
|
||||||
echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings (${SEARCH}${BOLD}${BL} Verbose)${CL}"
|
echo -e "${DEFAULT}${BOLD}${BL}Using Default Settings on node $PVEHOST_NAME (${SEARCH}${BL}Verbose)${CL}"
|
||||||
VERB="yes"
|
VERB="yes"
|
||||||
base_settings "$VERB"
|
base_settings "$VERB"
|
||||||
echo_default
|
echo_default
|
||||||
@@ -619,7 +700,7 @@ install_script() {
|
|||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
header_info
|
header_info
|
||||||
echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings${CL}"
|
echo -e "${ADVANCED}${BOLD}${RD}Using Advanced Settings on node $PVEHOST_NAME${CL}"
|
||||||
advanced_settings
|
advanced_settings
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
|
|||||||
BIN
misc/figlet.tar.xz
Normal file
BIN
misc/figlet.tar.xz
Normal file
Binary file not shown.
@@ -16,6 +16,8 @@ function header_info {
|
|||||||
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Color variables for output
|
||||||
YW=$(echo "\033[33m")
|
YW=$(echo "\033[33m")
|
||||||
RD=$(echo "\033[01;31m")
|
RD=$(echo "\033[01;31m")
|
||||||
GN=$(echo "\033[1;92m")
|
GN=$(echo "\033[1;92m")
|
||||||
@@ -23,10 +25,8 @@ CL=$(echo "\033[m")
|
|||||||
BFR="\\r\\033[K"
|
BFR="\\r\\033[K"
|
||||||
HOLD="-"
|
HOLD="-"
|
||||||
CM="${GN}✓${CL}"
|
CM="${GN}✓${CL}"
|
||||||
current_kernel=$(uname -r)
|
|
||||||
available_kernels=$(dpkg --list | grep 'kernel-.*-pve' | awk '{print $2}' | grep -v "$current_kernel" | sort -V)
|
|
||||||
header_info
|
|
||||||
|
|
||||||
|
# Functions for logging messages
|
||||||
function msg_info() {
|
function msg_info() {
|
||||||
local msg="$1"
|
local msg="$1"
|
||||||
echo -ne " ${HOLD} ${YW}${msg}..."
|
echo -ne " ${HOLD} ${YW}${msg}..."
|
||||||
@@ -37,39 +37,84 @@ function msg_ok() {
|
|||||||
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
|
||||||
}
|
}
|
||||||
|
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE Kernel Clean" --yesno "This will Clean Unused Kernel Images, USE AT YOUR OWN RISK. Proceed?" 10 68 || exit
|
# Detect current kernel
|
||||||
|
current_kernel=$(uname -r)
|
||||||
|
|
||||||
|
# Detect all installed kernels except the current one
|
||||||
|
available_kernels=$(dpkg --list | grep 'kernel-.*-pve' | awk '{print $2}' | grep -v "$current_kernel" | sort -V)
|
||||||
|
|
||||||
|
header_info
|
||||||
|
|
||||||
|
# If no old kernels are available, exit with a message
|
||||||
if [ -z "$available_kernels" ]; then
|
if [ -z "$available_kernels" ]; then
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Old Kernels" --msgbox "It appears there are no old Kernels on your system. \nCurrent kernel ($current_kernel)." 10 68
|
whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Old Kernels" \
|
||||||
|
--msgbox "It appears there are no old kernels on your system.\nCurrent kernel: $current_kernel" 10 68
|
||||||
echo "Exiting..."
|
echo "Exiting..."
|
||||||
sleep 2
|
sleep 2
|
||||||
clear
|
clear
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
KERNEL_MENU=()
|
|
||||||
MSG_MAX_LENGTH=0
|
# Prepare kernel options for selection
|
||||||
|
KERNEL_MENU=()
|
||||||
while read -r TAG ITEM; do
|
while read -r TAG ITEM; do
|
||||||
OFFSET=2
|
OFFSET=2
|
||||||
((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET
|
MSG_MAX_LENGTH=$((MSG_MAX_LENGTH < ${#ITEM} + OFFSET ? ${#ITEM} + OFFSET : MSG_MAX_LENGTH))
|
||||||
KERNEL_MENU+=("$TAG" "$ITEM " "OFF")
|
KERNEL_MENU+=("$TAG" "$ITEM " "OFF")
|
||||||
done < <(echo "$available_kernels")
|
done < <(echo "$available_kernels")
|
||||||
|
|
||||||
remove_kernels=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Current Kernel $current_kernel" --checklist "\nSelect Kernels to remove:\n" 16 $((MSG_MAX_LENGTH + 58)) 6 "${KERNEL_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit
|
# Display checklist to select kernels for removal
|
||||||
|
remove_kernels=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
|
||||||
|
--title "Current Kernel: $current_kernel" \
|
||||||
|
--checklist "\nSelect kernels to remove:\n" \
|
||||||
|
16 $((MSG_MAX_LENGTH + 58)) 6 "${KERNEL_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit
|
||||||
|
|
||||||
|
# Exit if no kernel was selected
|
||||||
[ -z "$remove_kernels" ] && {
|
[ -z "$remove_kernels" ] && {
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Kernel Selected" --msgbox "It appears that no Kernel was selected" 10 68
|
whiptail --backtitle "Proxmox VE Helper Scripts" --title "No Kernel Selected" \
|
||||||
|
--msgbox "It appears no kernel was selected." 10 68
|
||||||
echo "Exiting..."
|
echo "Exiting..."
|
||||||
sleep 2
|
sleep 2
|
||||||
clear
|
clear
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Remove Kernels" --yesno "Would you like to remove the $(echo $remove_kernels | awk '{print NF}') previously selected Kernels?" 10 68 || exit
|
|
||||||
|
|
||||||
msg_info "Removing ${CL}${RD}$(echo $remove_kernels | awk '{print NF}') ${CL}${YW}old Kernels${CL}"
|
# Confirm removal
|
||||||
/usr/bin/apt purge -y $remove_kernels >/dev/null 2>&1
|
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Remove Kernels" \
|
||||||
msg_ok "Successfully Removed Kernels"
|
--yesno "Would you like to remove the $(echo $remove_kernels | awk '{print NF}') selected kernels?" 10 68 || exit
|
||||||
|
|
||||||
|
# Process kernel removal
|
||||||
|
msg_info "Removing ${RD}$(echo $remove_kernels | awk '{print NF}') ${YW}old kernels${CL}"
|
||||||
|
for kernel in $remove_kernels; do
|
||||||
|
if [[ $kernel == *"-signed" ]]; then
|
||||||
|
# Handle signed kernels with dependencies
|
||||||
|
touch /please-remove-proxmox-ve # Temporarily bypass Proxmox warnings
|
||||||
|
if sudo apt-get purge -y "$kernel" >/dev/null 2>&1; then
|
||||||
|
msg_ok "Removed kernel: $kernel"
|
||||||
|
else
|
||||||
|
msg_info "Failed to remove kernel: $kernel. Check dependencies or manual removal."
|
||||||
|
fi
|
||||||
|
rm -f /please-remove-proxmox-ve # Clean up bypass file
|
||||||
|
else
|
||||||
|
# Standard kernel removal
|
||||||
|
if sudo apt-get purge -y "$kernel" >/dev/null 2>&1; then
|
||||||
|
msg_ok "Removed kernel: $kernel"
|
||||||
|
else
|
||||||
|
msg_info "Failed to remove kernel: $kernel. Check dependencies or manual removal."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
# Update GRUB configuration
|
||||||
msg_info "Updating GRUB"
|
msg_info "Updating GRUB"
|
||||||
/usr/sbin/update-grub >/dev/null 2>&1
|
if /usr/sbin/update-grub >/dev/null 2>&1; then
|
||||||
msg_ok "Successfully Updated GRUB"
|
msg_ok "GRUB updated successfully"
|
||||||
|
else
|
||||||
|
msg_info "Failed to update GRUB"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Completion message
|
||||||
msg_info "Exiting"
|
msg_info "Exiting"
|
||||||
sleep 2
|
sleep 2
|
||||||
msg_ok "Finished"
|
msg_ok "Finished"
|
||||||
|
|||||||
Reference in New Issue
Block a user