mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-07-01 19:47:38 +00:00
Compare commits
58 Commits
2025-02-01
...
2025-02-04
Author | SHA1 | Date | |
---|---|---|---|
62dac32400 | |||
401a9e1a45 | |||
569d0ac374 | |||
e75312007d | |||
103a5371e6 | |||
abfe17ce74 | |||
86295fcf67 | |||
c9012c54df | |||
fd051552f3 | |||
169076e68e | |||
971aa5ba16 | |||
6be54478f4 | |||
6b225058de | |||
78d96fdaa2 | |||
8129e3cf39 | |||
0e5f663df5 | |||
de45527d45 | |||
d7b3f33030 | |||
88daaed113 | |||
41744c0ab6 | |||
c3cd5314fe | |||
6f29ab8942 | |||
bd5db081c1 | |||
c5a69d6e8b | |||
a75c0e1562 | |||
a97d76f428 | |||
0e0539af3f | |||
8d46f7266e | |||
7f5ee39b25 | |||
85333212b0 | |||
577a415f10 | |||
db24bf4d02 | |||
21e0e0df98 | |||
83015c8cff | |||
7ca1ed019c | |||
fb8f911c49 | |||
b4a0b74bfd | |||
99556bdbd2 | |||
ec3b70e8fd | |||
50ffcd4734 | |||
55c1f2f3dc | |||
99e04e1ded | |||
884428e113 | |||
00f58d71d6 | |||
fa4ab5c8a3 | |||
1528c46f0b | |||
c5b9e4db64 | |||
36f2fb3e52 | |||
e379db8baf | |||
91ba5cd412 | |||
745d1f9444 | |||
76f12fc596 | |||
995906f299 | |||
05ec444e2d | |||
19911f5b81 | |||
57b37b1e16 | |||
91a3fd10e0 | |||
6f0ebac209 |
2
.github/CONTRIBUTING.md
vendored
2
.github/CONTRIBUTING.md
vendored
@ -80,7 +80,7 @@ git switch -c your-feature-branch
|
||||
```
|
||||
|
||||
### 4. Change paths in build.func install.func and AppName.sh
|
||||
To be able to develop from your own branch you need to change `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main` to `https://raw.githubusercontent.com/[USER]/[REPOSITORY]/refs/head/[BRANCH]`. You need to make this change atleast in misc/build.func misc/install.func and in your ct/AppName.sh. This change is only for testing. Before opening a Pull Request you should change this line change all this back to point to `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main`.
|
||||
To be able to develop from your own branch you need to change `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main` to `https://raw.githubusercontent.com/[USER]/[REPOSITORY]/refs/heads/[BRANCH]`. You need to make this change atleast in misc/build.func misc/install.func and in your ct/AppName.sh. This change is only for testing. Before opening a Pull Request you should change this line change all this back to point to `https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main`.
|
||||
|
||||
### 4. Commit changes (without build.func and install.func!)
|
||||
```bash
|
||||
|
2
.github/CONTRIBUTOR_GUIDE/ct/AppName.sh
vendored
2
.github/CONTRIBUTOR_GUIDE/ct/AppName.sh
vendored
@ -1,6 +1,6 @@
|
||||
#!/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
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: [YourUserName]
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: [SOURCE_URL]
|
||||
|
@ -1,8 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2024 community-scripts ORG
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: [YourUserName]
|
||||
# License: MIT
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: [SOURCE_URL]
|
||||
|
||||
# Import Functions und Setup
|
||||
|
@ -17,7 +17,7 @@ find ./ct -type f -name "*.sh" | sort | while read -r script; do
|
||||
output_file="${headers_dir}/$(basename "${script%.*}")"
|
||||
|
||||
# Generate figlet output
|
||||
figlet_output=$(figlet -f slant "$app_name")
|
||||
figlet_output=$(figlet -w 500 -f slant "$app_name")
|
||||
|
||||
# Check if figlet output is not empty
|
||||
if [[ -n "$figlet_output" ]]; then
|
||||
|
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"*.func": "shellscript"
|
||||
}
|
||||
}
|
74
CHANGELOG.md
74
CHANGELOG.md
@ -17,6 +17,80 @@ All LXC instances created using this repository come pre-installed with Midnight
|
||||
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
|
||||
|
||||
|
||||
## 2025-02-04
|
||||
|
||||
### Changed
|
||||
|
||||
### 💥 Breaking Changes
|
||||
|
||||
- Rename & Optimize: Proxmox Backup Server (Renaming & Update fix) [@thost96](https://github.com/thost96) ([#2012](https://github.com/community-scripts/ProxmoxVE/pull/2012))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Fix: Authentik - Remove deprecated GO-Remove in Footer [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2020](https://github.com/community-scripts/ProxmoxVE/pull/2020))
|
||||
- Fix: Authentik Fix wrong HDD Size [@thost96](https://github.com/thost96) ([#2001](https://github.com/community-scripts/ProxmoxVE/pull/2001))
|
||||
- Fix: Tandoor - node Version [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#2010](https://github.com/community-scripts/ProxmoxVE/pull/2010))
|
||||
- Fix actual update - missing hidden files, downloaded release cleanup [@maciejmatczak](https://github.com/maciejmatczak) ([#2027](https://github.com/community-scripts/ProxmoxVE/pull/2027))
|
||||
- Fix Script: post-pmg-install.sh [@thost96](https://github.com/thost96) ([#2022](https://github.com/community-scripts/ProxmoxVE/pull/2022))
|
||||
- Fix Tianji: Add heap-space value for nodejs [@MickLesk](https://github.com/MickLesk) ([#2011](https://github.com/community-scripts/ProxmoxVE/pull/2011))
|
||||
- Fix: Ghost LXC - Use Node20 [@MickLesk](https://github.com/MickLesk) ([#2006](https://github.com/community-scripts/ProxmoxVE/pull/2006))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- [API] Massive update to api (remove many, optimize website for users) [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1990](https://github.com/community-scripts/ProxmoxVE/pull/1990))
|
||||
|
||||
### 🧰 Maintenance
|
||||
|
||||
- Fix header comments on contributor templates [@tremor021](https://github.com/tremor021) ([#2029](https://github.com/community-scripts/ProxmoxVE/pull/2029))
|
||||
- [Fix]: Headername of Proxmox-Datacenter-Manager not in CamelCase [@MickLesk](https://github.com/MickLesk) ([#2017](https://github.com/community-scripts/ProxmoxVE/pull/2017))
|
||||
- [Fix] Header breaks at long title - add width for figlet github action [@MickLesk](https://github.com/MickLesk) ([#2015](https://github.com/community-scripts/ProxmoxVE/pull/2015))
|
||||
|
||||
## 2025-02-03
|
||||
|
||||
### Changed
|
||||
|
||||
### ✨ New Scripts
|
||||
|
||||
- New Script: Element Synapse [@tremor021](https://github.com/tremor021) ([#1955](https://github.com/community-scripts/ProxmoxVE/pull/1955))
|
||||
- New Script: Privatebin [@opastorello](https://github.com/opastorello) ([#1925](https://github.com/community-scripts/ProxmoxVE/pull/1925))
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Fix: Monica Install with nodejs [@MickLesk](https://github.com/MickLesk) ([#1996](https://github.com/community-scripts/ProxmoxVE/pull/1996))
|
||||
- Element Synapse sed fix [@tremor021](https://github.com/tremor021) ([#1994](https://github.com/community-scripts/ProxmoxVE/pull/1994))
|
||||
- Fix Hoarder corepack install/update error [@vhsdream](https://github.com/vhsdream) ([#1957](https://github.com/community-scripts/ProxmoxVE/pull/1957))
|
||||
- [Security & Maintenance] Update NodeJS Repo to 22 for new Installs [@MickLesk](https://github.com/MickLesk) ([#1984](https://github.com/community-scripts/ProxmoxVE/pull/1984))
|
||||
- [Standardization]: Same Setup for GoLang on all LXC's & Clear Tarball [@MickLesk](https://github.com/MickLesk) ([#1977](https://github.com/community-scripts/ProxmoxVE/pull/1977))
|
||||
- Feature: urbackupserver Include fuse&nesting features during install [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1968](https://github.com/community-scripts/ProxmoxVE/pull/1968))
|
||||
- Fix: MSSQL-Server: Better gpg handling [@MickLesk](https://github.com/MickLesk) ([#1962](https://github.com/community-scripts/ProxmoxVE/pull/1962))
|
||||
- Fix: Grist ran into a heap space during the update [@MickLesk](https://github.com/MickLesk) ([#1964](https://github.com/community-scripts/ProxmoxVE/pull/1964))
|
||||
- Fix: FS-Trim Cancel / Error-Button [@MickLesk](https://github.com/MickLesk) ([#1965](https://github.com/community-scripts/ProxmoxVE/pull/1965))
|
||||
- Fix: Increase HDD Space for Hoarder [@MickLesk](https://github.com/MickLesk) ([#1970](https://github.com/community-scripts/ProxmoxVE/pull/1970))
|
||||
- Feature: Clean Orphan LVM without CEPH [@MickLesk](https://github.com/MickLesk) ([#1974](https://github.com/community-scripts/ProxmoxVE/pull/1974))
|
||||
- [Standardization] Fix Spelling for "Setup Python3" [@MickLesk](https://github.com/MickLesk) ([#1975](https://github.com/community-scripts/ProxmoxVE/pull/1975))
|
||||
|
||||
### 🌐 Website
|
||||
|
||||
- [Website] update data/page.tsx [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1969](https://github.com/community-scripts/ProxmoxVE/pull/1969))
|
||||
- Prometheus Proxmox VE Exporter: Set correct website slug [@andygrunwald](https://github.com/andygrunwald) ([#1961](https://github.com/community-scripts/ProxmoxVE/pull/1961))
|
||||
|
||||
### 🧰 Maintenance
|
||||
|
||||
- [API] Remove Hostname, Verbose, SSH and TAGS [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1967](https://github.com/community-scripts/ProxmoxVE/pull/1967))
|
||||
|
||||
## 2025-02-02
|
||||
|
||||
### Changed
|
||||
|
||||
### 🚀 Updated Scripts
|
||||
|
||||
- Prometheus PVE Exporter: Add `--default-timeout=300` to pip install commands [@andygrunwald](https://github.com/andygrunwald) ([#1950](https://github.com/community-scripts/ProxmoxVE/pull/1950))
|
||||
- fix z2m update function to 2.1.0 [@MickLesk](https://github.com/MickLesk) ([#1938](https://github.com/community-scripts/ProxmoxVE/pull/1938))
|
||||
|
||||
### 🧰 Maintenance
|
||||
|
||||
- VSCode: Add Shellscript Syntax highlighting for *.func files [@andygrunwald](https://github.com/andygrunwald) ([#1948](https://github.com/community-scripts/ProxmoxVE/pull/1948))
|
||||
|
||||
## 2025-02-01
|
||||
|
||||
### Changed
|
||||
|
@ -44,9 +44,8 @@ function update_script() {
|
||||
cd /tmp
|
||||
wget -q https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz
|
||||
mv /opt/actualbudget /opt/actualbudget_bak
|
||||
mkdir -p /opt/actualbudget/
|
||||
tar -xzf v${RELEASE}.tar.gz >/dev/null 2>&1
|
||||
mv *ctual-server-*/* /opt/actualbudget
|
||||
mv *ctual-server-* /opt/actualbudget
|
||||
rm -rf /opt/actualbudget/.env
|
||||
mv /opt/actualbudget_bak/.env /opt/actualbudget
|
||||
mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
|
||||
@ -61,7 +60,7 @@ function update_script() {
|
||||
|
||||
msg_info "Cleaning Up"
|
||||
rm -rf /opt/actualbudget_bak
|
||||
rm -rf /tmp/actual-server.tar.gz
|
||||
rm -rf /tmp/v${RELEASE}.tar.gz
|
||||
msg_ok "Cleaned"
|
||||
msg_ok "Updated Successfully"
|
||||
else
|
||||
|
@ -8,7 +8,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
||||
# App Default Values
|
||||
APP="Authentik"
|
||||
var_tags="identity-provider"
|
||||
var_disk="15"
|
||||
var_disk="12"
|
||||
var_cpu="6"
|
||||
var_ram="8192"
|
||||
var_os="debian"
|
||||
|
@ -73,7 +73,7 @@ function update_script() {
|
||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
49
ct/elementsynapse.sh
Normal file
49
ct/elementsynapse.sh
Normal file
@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: tremor021
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://github.com/element-hq/synapse
|
||||
|
||||
# App Default Values
|
||||
APP="Element Synapse"
|
||||
var_tags="server"
|
||||
var_cpu="1"
|
||||
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 /etc/matrix-synapse ]]; 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}:8008${CL}"
|
@ -5,9 +5,9 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
||||
# App Default Values
|
||||
APP="Grist"
|
||||
var_tags="database;spreadsheet"
|
||||
var_cpu="1"
|
||||
var_ram="2048"
|
||||
var_disk="4"
|
||||
var_cpu="2"
|
||||
var_ram="3072"
|
||||
var_disk="6"
|
||||
var_os="debian"
|
||||
var_version="12"
|
||||
var_unprivileged="1"
|
||||
|
@ -1,12 +1,6 @@
|
||||
___ __ _ _ __ __ __
|
||||
/ | / /___ (_)___ ___ / | / /__ _ __/ /______/ /___ __ __
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ |/ / _ \| |/_/ __/ ___/ / __ \/ / / /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /| / __/> </ /_/ /__/ / /_/ / /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_/\___/_/|_|\__/\___/_/\____/\__,_/
|
||||
/_/
|
||||
__
|
||||
____/ /
|
||||
/ __ /
|
||||
/ /_/ /
|
||||
\__,_/
|
||||
|
||||
___ __ _ _ __ __ __ __
|
||||
/ | / /___ (_)___ ___ / | / /__ _ __/ /______/ /___ __ ______/ /
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ |/ / _ \| |/_/ __/ ___/ / __ \/ / / / __ /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /| / __/> </ /_/ /__/ / /_/ / /_/ / /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /_/ |_/\___/_/|_|\__/\___/_/\____/\__,_/\__,_/
|
||||
/_/
|
||||
|
@ -1,12 +1,6 @@
|
||||
___ __ _ _ __ ____
|
||||
/ | / /___ (_)___ ___ | | / /___ ___ __/ / /__ ______ _
|
||||
/ /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / / / / __/ | /| / / __ `/
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ |/ / /_/ / /_/ / / /_ | |/ |/ / /_/ /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ |___/\__,_/\__,_/_/\__/ |__/|__/\__,_/
|
||||
/_/
|
||||
__
|
||||
_________/ /__ ____
|
||||
/ ___/ __ / _ \/ __ \
|
||||
/ / / /_/ / __/ / / /
|
||||
/_/ \__,_/\___/_/ /_/
|
||||
|
||||
___ __ _ _ __ ____ __
|
||||
/ | / /___ (_)___ ___ | | / /___ ___ __/ / /__ ______ __________/ /__ ____
|
||||
/ /| | / / __ \/ / __ \/ _ \_____| | / / __ `/ / / / / __/ | /| / / __ `/ ___/ __ / _ \/ __ \
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ |/ / /_/ / /_/ / / /_ | |/ |/ / /_/ / / / /_/ / __/ / / /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ |___/\__,_/\__,_/_/\__/ |__/|__/\__,_/_/ \__,_/\___/_/ /_/
|
||||
/_/
|
||||
|
@ -1,12 +1,6 @@
|
||||
___ __ _ _____ _ __ ___ __ ___
|
||||
/ | / /___ (_)___ ___ /__ / (_)___ _/ /_ ___ ___ |__ \ / |/ /
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / / __ `/ __ \/ _ \/ _ \__/ // /|_/ /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /__/ / /_/ / /_/ / __/ __/ __// / / /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /____/_/\__, /_.___/\___/\___/____/_/ /_/
|
||||
/_/ /____/
|
||||
____ ____________
|
||||
/ __ \/_ __/_ __/
|
||||
/ / / / / / / /
|
||||
/ /_/ / / / / /
|
||||
\___\_\/_/ /_/
|
||||
|
||||
___ __ _ _____ _ __ ___ __ _______ ____________
|
||||
/ | / /___ (_)___ ___ /__ / (_)___ _/ /_ ___ ___ |__ \ / |/ / __ \/_ __/_ __/
|
||||
/ /| | / / __ \/ / __ \/ _ \______/ / / / __ `/ __ \/ _ \/ _ \__/ // /|_/ / / / / / / / /
|
||||
/ ___ |/ / /_/ / / / / / __/_____/ /__/ / /_/ / /_/ / __/ __/ __// / / / /_/ / / / / /
|
||||
/_/ |_/_/ .___/_/_/ /_/\___/ /____/_/\__, /_.___/\___/\___/____/_/ /_/\___\_\/_/ /_/
|
||||
/_/ /____/
|
||||
|
@ -1,12 +1,6 @@
|
||||
___ __ ______
|
||||
/ | ____ ____ ______/ /_ ___ / ____/___ _______________ _____
|
||||
/ /| | / __ \/ __ `/ ___/ __ \/ _ \______/ / / __ `/ ___/ ___/ __ `/ __ \
|
||||
/ ___ |/ /_/ / /_/ / /__/ / / / __/_____/ /___/ /_/ (__ |__ ) /_/ / / / /
|
||||
/_/ |_/ .___/\__,_/\___/_/ /_/\___/ \____/\__,_/____/____/\__,_/_/ /_/
|
||||
/_/
|
||||
__
|
||||
____/ /________ _
|
||||
/ __ / ___/ __ `/
|
||||
/ /_/ / / / /_/ /
|
||||
\__,_/_/ \__,_/
|
||||
|
||||
___ __ ______ __
|
||||
/ | ____ ____ ______/ /_ ___ / ____/___ _______________ _____ ____/ /________ _
|
||||
/ /| | / __ \/ __ `/ ___/ __ \/ _ \______/ / / __ `/ ___/ ___/ __ `/ __ \/ __ / ___/ __ `/
|
||||
/ ___ |/ /_/ / /_/ / /__/ / / / __/_____/ /___/ /_/ (__ |__ ) /_/ / / / / /_/ / / / /_/ /
|
||||
/_/ |_/ .___/\__,_/\___/_/ /_/\___/ \____/\__,_/____/____/\__,_/_/ /_/\__,_/_/ \__,_/
|
||||
/_/
|
||||
|
@ -1,12 +1,6 @@
|
||||
___ __ ______ __ ____
|
||||
/ | ____ ____ ______/ /_ ___ / ____/___ __ _______/ /_ / __ \
|
||||
/ /| | / __ \/ __ `/ ___/ __ \/ _ \______/ / / __ \/ / / / ___/ __ \/ / / /
|
||||
/ ___ |/ /_/ / /_/ / /__/ / / / __/_____/ /___/ /_/ / /_/ / /__/ / / / /_/ /
|
||||
/_/ |_/ .___/\__,_/\___/_/ /_/\___/ \____/\____/\__,_/\___/_/ /_/_____/
|
||||
/_/
|
||||
____
|
||||
/ __ )
|
||||
/ __ |
|
||||
/ /_/ /
|
||||
/_____/
|
||||
|
||||
___ __ ______ __ ____ ____
|
||||
/ | ____ ____ ______/ /_ ___ / ____/___ __ _______/ /_ / __ \/ __ )
|
||||
/ /| | / __ \/ __ `/ ___/ __ \/ _ \______/ / / __ \/ / / / ___/ __ \/ / / / __ |
|
||||
/ ___ |/ /_/ / /_/ / /__/ / / / __/_____/ /___/ /_/ / /_/ / /__/ / / / /_/ / /_/ /
|
||||
/_/ |_/ .___/\__,_/\___/_/ /_/\___/ \____/\____/\__,_/\___/_/ /_/_____/_____/
|
||||
/_/
|
||||
|
@ -1,12 +1,6 @@
|
||||
___ __ ______
|
||||
/ | ____ ____ ______/ /_ ___ / ____/_ ______ __________ _
|
||||
/ /| | / __ \/ __ `/ ___/ __ \/ _ \______/ / __/ / / / __ `/ ___/ __ `/
|
||||
/ ___ |/ /_/ / /_/ / /__/ / / / __/_____/ /_/ / /_/ / /_/ / /__/ /_/ /
|
||||
/_/ |_/ .___/\__,_/\___/_/ /_/\___/ \____/\__,_/\__,_/\___/\__,_/
|
||||
/_/
|
||||
__
|
||||
____ ___ ____ / /__
|
||||
/ __ `__ \/ __ \/ / _ \
|
||||
/ / / / / / /_/ / / __/
|
||||
/_/ /_/ /_/\____/_/\___/
|
||||
|
||||
___ __ ______ __
|
||||
/ | ____ ____ ______/ /_ ___ / ____/_ ______ __________ _____ ___ ____ / /__
|
||||
/ /| | / __ \/ __ `/ ___/ __ \/ _ \______/ / __/ / / / __ `/ ___/ __ `/ __ `__ \/ __ \/ / _ \
|
||||
/ ___ |/ /_/ / /_/ / /__/ / / / __/_____/ /_/ / /_/ / /_/ / /__/ /_/ / / / / / / /_/ / / __/
|
||||
/_/ |_/ .___/\__,_/\___/_/ /_/\___/ \____/\__,_/\__,_/\___/\__,_/_/ /_/ /_/\____/_/\___/
|
||||
/_/
|
||||
|
@ -1,12 +1,6 @@
|
||||
________
|
||||
/ ____/ /_ ____ _____ ____ ____
|
||||
/ / / __ \/ __ `/ __ \/ __ `/ _ \
|
||||
/ /___/ / / / /_/ / / / / /_/ / __/
|
||||
\____/_/ /_/\__,_/_/ /_/\__, /\___/
|
||||
/____/
|
||||
____ __ __ _
|
||||
/ __ \___ / /____ _____/ /_(_)___ ____
|
||||
/ / / / _ \/ __/ _ \/ ___/ __/ / __ \/ __ \
|
||||
/ /_/ / __/ /_/ __/ /__/ /_/ / /_/ / / / /
|
||||
/_____/\___/\__/\___/\___/\__/_/\____/_/ /_/
|
||||
|
||||
________ ____ __ __ _
|
||||
/ ____/ /_ ____ _____ ____ ____ / __ \___ / /____ _____/ /_(_)___ ____
|
||||
/ / / __ \/ __ `/ __ \/ __ `/ _ \ / / / / _ \/ __/ _ \/ ___/ __/ / __ \/ __ \
|
||||
/ /___/ / / / /_/ / / / / /_/ / __/ / /_/ / __/ /_/ __/ /__/ /_/ / /_/ / / / /
|
||||
\____/_/ /_/\__,_/_/ /_/\__, /\___/ /_____/\___/\__/\___/\___/\__/_/\____/_/ /_/
|
||||
/____/
|
||||
|
@ -1,12 +1,6 @@
|
||||
____ __ __ ___ _____ ____ _ __ __
|
||||
/ __ \____ / /_____ ___ / /_ / | / ___// __ \ | | / /__ / /_
|
||||
/ / / / __ \/ __/ __ \/ _ \/ __/ / /| | \__ \/ /_/ / | | /| / / _ \/ __ \
|
||||
/ /_/ / /_/ / /_/ / / / __/ /_ / ___ |___/ / ____/ | |/ |/ / __/ /_/ /
|
||||
/_____/\____/\__/_/ /_/\___/\__/ /_/ |_/____/_/ |__/|__/\___/_.___/
|
||||
|
||||
___ ____ ____
|
||||
/ | / __ \/ _/
|
||||
/ /| | / /_/ // /
|
||||
/ ___ |/ ____// /
|
||||
/_/ |_/_/ /___/
|
||||
|
||||
____ __ __ ___ _____ ____ _ __ __ ___ ____ ____
|
||||
/ __ \____ / /_____ ___ / /_ / | / ___// __ \ | | / /__ / /_ / | / __ \/ _/
|
||||
/ / / / __ \/ __/ __ \/ _ \/ __/ / /| | \__ \/ /_/ / | | /| / / _ \/ __ \ / /| | / /_/ // /
|
||||
/ /_/ / /_/ / /_/ / / / __/ /_ / ___ |___/ / ____/ | |/ |/ / __/ /_/ / / ___ |/ ____// /
|
||||
/_____/\____/\__/_/ /_/\___/\__/ /_/ |_/____/_/ |__/|__/\___/_.___/ /_/ |_/_/ /___/
|
||||
|
||||
|
6
ct/headers/elementsynapse
Normal file
6
ct/headers/elementsynapse
Normal file
@ -0,0 +1,6 @@
|
||||
________ __ _____
|
||||
/ ____/ /__ ____ ___ ___ ____ / /_ / ___/__ ______ ____ _____ ________
|
||||
/ __/ / / _ \/ __ `__ \/ _ \/ __ \/ __/ \__ \/ / / / __ \/ __ `/ __ \/ ___/ _ \
|
||||
/ /___/ / __/ / / / / / __/ / / / /_ ___/ / /_/ / / / / /_/ / /_/ (__ ) __/
|
||||
/_____/_/\___/_/ /_/ /_/\___/_/ /_/\__/ /____/\__, /_/ /_/\__,_/ .___/____/\___/
|
||||
/____/ /_/
|
@ -1,12 +1,6 @@
|
||||
__ __ _ __ ____ ____ __ __
|
||||
/ / / /__ (_)___ ___ ____/ /___ _/ / / / __ \____ ______/ /_ / /_
|
||||
/ /_/ / _ \/ / __ `__ \/ __ / __ `/ / /_____/ / / / __ `/ ___/ __ \/ __ \
|
||||
/ __ / __/ / / / / / / /_/ / /_/ / / /_____/ /_/ / /_/ (__ ) / / / /_/ /
|
||||
/_/ /_/\___/_/_/ /_/ /_/\__,_/\__,_/_/_/ /_____/\__,_/____/_/ /_/_.___/
|
||||
|
||||
__
|
||||
____ ____ __________/ /
|
||||
/ __ \/ __ `/ ___/ __ /
|
||||
/ /_/ / /_/ / / / /_/ /
|
||||
\____/\__,_/_/ \__,_/
|
||||
|
||||
__ __ _ __ ____ ____ __ __ __
|
||||
/ / / /__ (_)___ ___ ____/ /___ _/ / / / __ \____ ______/ /_ / /_ ____ ____ __________/ /
|
||||
/ /_/ / _ \/ / __ `__ \/ __ / __ `/ / /_____/ / / / __ `/ ___/ __ \/ __ \/ __ \/ __ `/ ___/ __ /
|
||||
/ __ / __/ / / / / / / /_/ / /_/ / / /_____/ /_/ / /_/ (__ ) / / / /_/ / /_/ / /_/ / / / /_/ /
|
||||
/_/ /_/\___/_/_/ /_/ /_/\__,_/\__,_/_/_/ /_____/\__,_/____/_/ /_/_.___/\____/\__,_/_/ \__,_/
|
||||
|
||||
|
@ -1,12 +1,6 @@
|
||||
__ __
|
||||
/ / / /___ ____ ___ ___
|
||||
/ /_/ / __ \/ __ `__ \/ _ \
|
||||
/ __ / /_/ / / / / / / __/
|
||||
/_/ /_/\____/_/ /_/ /_/\___/
|
||||
|
||||
___ _ __ __ ______
|
||||
/ | __________(_)____/ /_____ _____ / /_ / ____/___ ________
|
||||
/ /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ / / __ \/ ___/ _ \
|
||||
/ ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / / / __/
|
||||
/_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ \____/\____/_/ \___/
|
||||
|
||||
__ __ ___ _ __ __ ______
|
||||
/ / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____ / /_ / ____/___ ________
|
||||
/ /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/_____/ / / __ \/ ___/ _ \
|
||||
/ __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_/_____/ /___/ /_/ / / / __/
|
||||
/_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/ \____/\____/_/ \___/
|
||||
|
||||
|
@ -1,12 +1,6 @@
|
||||
_ __ _ ____
|
||||
/ | / /___ _(_)___ _ __ / __ \_________ _ ____ __
|
||||
/ |/ / __ `/ / __ \| |/_/ / /_/ / ___/ __ \| |/_/ / / /
|
||||
/ /| / /_/ / / / / /> < / ____/ / / /_/ /> </ /_/ /
|
||||
/_/ |_/\__, /_/_/ /_/_/|_| /_/ /_/ \____/_/|_|\__, /
|
||||
/____/ /____/
|
||||
__ ___
|
||||
/ |/ /___ _____ ____ _____ ____ _____
|
||||
/ /|_/ / __ `/ __ \/ __ `/ __ `/ _ \/ ___/
|
||||
/ / / / /_/ / / / / /_/ / /_/ / __/ /
|
||||
/_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/
|
||||
/____/
|
||||
_ __ _ ____ __ ___
|
||||
/ | / /___ _(_)___ _ __ / __ \_________ _ ____ __ / |/ /___ _____ ____ _____ ____ _____
|
||||
/ |/ / __ `/ / __ \| |/_/ / /_/ / ___/ __ \| |/_/ / / / / /|_/ / __ `/ __ \/ __ `/ __ `/ _ \/ ___/
|
||||
/ /| / /_/ / / / / /> < / ____/ / / /_/ /> </ /_/ / / / / / /_/ / / / / /_/ / /_/ / __/ /
|
||||
/_/ |_/\__, /_/_/ /_/_/|_| /_/ /_/ \____/_/|_|\__, / /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/
|
||||
/____/ /____/ /____/
|
||||
|
@ -1,6 +0,0 @@
|
||||
____ ____ _____
|
||||
/ __ \/ __ ) ___/
|
||||
/ /_/ / __ \__ \
|
||||
/ ____/ /_/ /__/ /
|
||||
/_/ /_____/____/
|
||||
|
@ -1,12 +1,6 @@
|
||||
____ __ __ __
|
||||
/ __ \____ ____/ /___ ___ ____ _____ / / / /___ ____ ___ ___
|
||||
/ /_/ / __ \/ __ / __ `__ \/ __ `/ __ \______/ /_/ / __ \/ __ `__ \/ _ \
|
||||
/ ____/ /_/ / /_/ / / / / / / /_/ / / / /_____/ __ / /_/ / / / / / / __/
|
||||
/_/ \____/\__,_/_/ /_/ /_/\__,_/_/ /_/ /_/ /_/\____/_/ /_/ /_/\___/
|
||||
|
||||
___ _ __ __
|
||||
/ | __________(_)____/ /_____ _____ / /_
|
||||
/ /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/
|
||||
/ ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_
|
||||
/_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/
|
||||
|
||||
____ __ __ __ ___ _ __ __
|
||||
/ __ \____ ____/ /___ ___ ____ _____ / / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____ / /_
|
||||
/ /_/ / __ \/ __ / __ `__ \/ __ `/ __ \______/ /_/ / __ \/ __ `__ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ `/ __ \/ __/
|
||||
/ ____/ /_/ / /_/ / / / / / / /_/ / / / /_____/ __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_
|
||||
/_/ \____/\__,_/_/ /_/ /_/\__,_/_/ /_/ /_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/
|
||||
|
||||
|
6
ct/headers/privatebin
Normal file
6
ct/headers/privatebin
Normal file
@ -0,0 +1,6 @@
|
||||
____ _ __ ____ _
|
||||
/ __ \_____(_) ______ _/ /____ / __ )(_)___
|
||||
/ /_/ / ___/ / | / / __ `/ __/ _ \/ __ / / __ \
|
||||
/ ____/ / / /| |/ / /_/ / /_/ __/ /_/ / / / / /
|
||||
/_/ /_/ /_/ |___/\__,_/\__/\___/_____/_/_/ /_/
|
||||
|
@ -1,12 +1,6 @@
|
||||
____ __ __ ___ __
|
||||
/ __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ / | / /
|
||||
/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /| | / /
|
||||
/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ ___ |/ /
|
||||
/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ /_/ |_/_/
|
||||
|
||||
__
|
||||
___ _____/ /_____ ___ ____ _____ ____ _____ ____ _____
|
||||
/ _ \/ ___/ __/ __ `__ \/ __ `/ __ \/ __ `/ __ `/ _ \/ ___/
|
||||
/ __/ / / /_/ / / / / / /_/ / / / / /_/ / /_/ / __/ /
|
||||
\___/_/ \__/_/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/
|
||||
/____/
|
||||
____ __ __ ___ __ __
|
||||
/ __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ / | / /__ _____/ /_____ ___ ____ _____ ____ _____ ____ _____
|
||||
/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /| | / / _ \/ ___/ __/ __ `__ \/ __ `/ __ \/ __ `/ __ `/ _ \/ ___/
|
||||
/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ ___ |/ / __/ / / /_/ / / / / / /_/ / / / / /_/ / /_/ / __/ /
|
||||
/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ /_/ |_/_/\___/_/ \__/_/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/
|
||||
/____/
|
||||
|
@ -1,12 +1,6 @@
|
||||
____ __ __ ____
|
||||
/ __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ / __ \
|
||||
/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /_/ /
|
||||
/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ ____/
|
||||
/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ /_/
|
||||
|
||||
_ ________ ______ __
|
||||
| | / / ____/ / ____/ ______ ____ _____/ /____ _____
|
||||
| | / / __/______/ __/ | |/_/ __ \/ __ \/ ___/ __/ _ \/ ___/
|
||||
| |/ / /__/_____/ /____> </ /_/ / /_/ / / / /_/ __/ /
|
||||
|___/_____/ /_____/_/|_/ .___/\____/_/ \__/\___/_/
|
||||
/_/
|
||||
____ __ __ ____ _ ________ ______ __
|
||||
/ __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______ / __ \ | / / ____/ / ____/ ______ ____ _____/ /____ _____
|
||||
/ /_/ / ___/ __ \/ __ `__ \/ _ \/ __/ __ \/ _ \/ / / / ___/_____/ /_/ / | / / __/______/ __/ | |/_/ __ \/ __ \/ ___/ __/ _ \/ ___/
|
||||
/ ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )_____/ ____/| |/ / /__/_____/ /____> </ /_/ / /_/ / / / /_/ __/ /
|
||||
/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/ /_/ |___/_____/ /_____/_/|_/ .___/\____/_/ \__/\___/_/
|
||||
/_/
|
||||
|
6
ct/headers/proxmox-backup-server
Normal file
6
ct/headers/proxmox-backup-server
Normal file
@ -0,0 +1,6 @@
|
||||
____ ____ __ _____
|
||||
/ __ \_________ _ ______ ___ ____ _ __ / __ )____ ______/ /____ ______ / ___/___ ______ _____ _____
|
||||
/ /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ __ / __ `/ ___/ //_/ / / / __ \______\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||
/ ____/ / / /_/ /> </ / / / / / /_/ /> </_____/ /_/ / /_/ / /__/ ,< / /_/ / /_/ /_____/__/ / __/ / | |/ / __/ /
|
||||
/_/ /_/ \____/_/|_/_/ /_/ /_/\____/_/|_| /_____/\__,_/\___/_/|_|\__,_/ .___/ /____/\___/_/ |___/\___/_/
|
||||
/_/
|
@ -1,18 +1,6 @@
|
||||
__ __
|
||||
____ _________ _ ______ ___ ____ _ __ ____/ /___ _/ /_____ _
|
||||
/ __ \/ ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ __ / __ `/ __/ __ `/
|
||||
/ /_/ / / / /_/ /> </ / / / / / /_/ /> </_____/ /_/ / /_/ / /_/ /_/ /
|
||||
/ .___/_/ \____/_/|_/_/ /_/ /_/\____/_/|_| \__,_/\__,_/\__/\__,_/
|
||||
/_/
|
||||
__
|
||||
________ ____ / /____ _____ ____ ___ ____ _____ ____ _____ ____
|
||||
/ ___/ _ \/ __ \/ __/ _ \/ ___/_____/ __ `__ \/ __ `/ __ \/ __ `/ __ `/ _ \
|
||||
/ /__/ __/ / / / /_/ __/ / /_____/ / / / / / /_/ / / / / /_/ / /_/ / __/
|
||||
\___/\___/_/ /_/\__/\___/_/ /_/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/
|
||||
/____/
|
||||
|
||||
_____
|
||||
/ ___/
|
||||
/ /
|
||||
/_/
|
||||
|
||||
____ ____ __ __ __ ___
|
||||
/ __ \_________ _ ______ ___ ____ _ __ / __ \____ _/ /_____ _________ ____ / /____ _____ / |/ /___ _____ ____ _____ ____ _____
|
||||
/ /_/ / ___/ __ \| |/_/ __ `__ \/ __ \| |/_/_____/ / / / __ `/ __/ __ `/ ___/ _ \/ __ \/ __/ _ \/ ___/_____/ /|_/ / __ `/ __ \/ __ `/ __ `/ _ \/ ___/
|
||||
/ ____/ / / /_/ /> </ / / / / / /_/ /> </_____/ /_/ / /_/ / /_/ /_/ / /__/ __/ / / / /_/ __/ / /_____/ / / / /_/ / / / / /_/ / /_/ / __/ /
|
||||
/_/ /_/ \____/_/|_/_/ /_/ /_/\____/_/|_| /_____/\__,_/\__/\__,_/\___/\___/_/ /_/\__/\___/_/ /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/
|
||||
/____/
|
||||
|
@ -1,12 +1,6 @@
|
||||
_____ ____ __ _____
|
||||
/ ___// __ \ / / / ___/___ ______ _____ _____
|
||||
\__ \/ / / / / / \__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||
___/ / /_/ / / /___ ___/ / __/ / | |/ / __/ /
|
||||
/____/\___\_\/_____/ /____/\___/_/ |___/\___/_/
|
||||
|
||||
___ ____ ___ ___
|
||||
|__ \ / __ \__ \|__ \
|
||||
__/ // / / /_/ /__/ /
|
||||
/ __// /_/ / __// __/
|
||||
/____/\____/____/____/
|
||||
|
||||
_____ ____ __ _____ ___ ____ ___ ___
|
||||
/ ___// __ \ / / / ___/___ ______ _____ _____ |__ \ / __ \__ \|__ \
|
||||
\__ \/ / / / / / \__ \/ _ \/ ___/ | / / _ \/ ___/ __/ // / / /_/ /__/ /
|
||||
___/ / /_/ / / /___ ___/ / __/ / | |/ / __/ / / __// /_/ / __// __/
|
||||
/____/\___\_\/_____/ /____/\___/_/ |___/\___/_/ /____/\____/____/____/
|
||||
|
||||
|
@ -1,12 +1,6 @@
|
||||
__ __ ____ __
|
||||
/ / / /____/ __ )____ ______/ /____ ______
|
||||
/ / / / ___/ __ / __ `/ ___/ //_/ / / / __ \
|
||||
/ /_/ / / / /_/ / /_/ / /__/ ,< / /_/ / /_/ /
|
||||
\____/_/ /_____/\__,_/\___/_/|_|\__,_/ .___/
|
||||
/_/
|
||||
_____
|
||||
/ ___/___ ______ _____ _____
|
||||
\__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||
___/ / __/ / | |/ / __/ /
|
||||
/____/\___/_/ |___/\___/_/
|
||||
|
||||
__ __ ____ __ _____
|
||||
/ / / /____/ __ )____ ______/ /____ ______ / ___/___ ______ _____ _____
|
||||
/ / / / ___/ __ / __ `/ ___/ //_/ / / / __ \ \__ \/ _ \/ ___/ | / / _ \/ ___/
|
||||
/ /_/ / / / /_/ / /_/ / /__/ ,< / /_/ / /_/ / ___/ / __/ / | |/ / __/ /
|
||||
\____/_/ /_____/\__,_/\___/_/|_|\__,_/ .___/ /____/\___/_/ |___/\___/_/
|
||||
/_/
|
||||
|
@ -10,7 +10,7 @@ APP="Hoarder"
|
||||
var_tags="bookmark"
|
||||
var_cpu="2"
|
||||
var_ram="4096"
|
||||
var_disk="8"
|
||||
var_disk="10"
|
||||
var_os="debian"
|
||||
var_version="12"
|
||||
var_unprivileged="1"
|
||||
@ -39,6 +39,9 @@ function update_script() {
|
||||
systemctl stop hoarder-web hoarder-workers hoarder-browser
|
||||
msg_ok "Stopped Services"
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
if [[ $(corepack -v) < "0.31.0" ]]; then
|
||||
npm install -g corepack@0.31.0 &>/dev/null
|
||||
fi
|
||||
cd /opt
|
||||
if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
|
||||
mkdir -p /etc/hoarder
|
||||
|
64
ct/privatebin.sh
Normal file
64
ct/privatebin.sh
Normal file
@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Nícolas Pastorello (opastorello)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
# App Default Values
|
||||
APP="PrivateBin"
|
||||
var_tags="paste;secure"
|
||||
var_cpu="1"
|
||||
var_ram="1024"
|
||||
var_disk="4"
|
||||
var_os="debian"
|
||||
var_version="12"
|
||||
var_unprivileged="1"
|
||||
|
||||
# App Output & Base Settings
|
||||
header_info "$APP"
|
||||
base_settings
|
||||
|
||||
# Core
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /opt/privatebin ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
RELEASE=$(curl -s https://api.github.com/repos/PrivateBin/PrivateBin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
cp -f /opt/privatebin/cfg/conf.php /tmp/privatebin_conf.bak
|
||||
wget -q "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q ${RELEASE}.zip
|
||||
rm -rf /opt/privatebin/*
|
||||
mv PrivateBin-${RELEASE}/* /opt/privatebin/
|
||||
mv /tmp/privatebin_conf.bak /opt/privatebin/cfg/conf.php
|
||||
chown -R www-data:www-data /opt/privatebin
|
||||
chmod -R 0755 /opt/privatebin/data
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
rm -rf ${RELEASE}.zip PrivateBin-${RELEASE}
|
||||
systemctl reload nginx php8.2-fpm
|
||||
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}https://${IP}${CL}"
|
@ -37,7 +37,7 @@ function update_script() {
|
||||
msg_ok "Stopped ${APP}"
|
||||
|
||||
msg_info "Updating ${APP}"
|
||||
pip install prometheus-pve-exporter --upgrade --root-user-action=ignore &>/dev/null
|
||||
pip install prometheus-pve-exporter --default-timeout=300 --upgrade --root-user-action=ignore &>/dev/null
|
||||
msg_ok "Updated ${APP}"
|
||||
|
||||
msg_info "Starting ${APP}"
|
||||
|
@ -16,7 +16,7 @@ cat <<"EOF"
|
||||
EOF
|
||||
}
|
||||
header_info
|
||||
APP="PBS"
|
||||
APP="Proxmox-Backup-Server"
|
||||
var_tags="backup"
|
||||
var_cpu="2"
|
||||
var_ram="2048"
|
||||
@ -37,7 +37,7 @@ function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
|
||||
if [[ ! -e /usr/sbin/proxmox-backup-manager ]]; 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
|
@ -6,7 +6,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
||||
# Source: Proxmox Server Solution GmbH
|
||||
|
||||
# App Default Values
|
||||
APP="proxmox-datacenter-manager"
|
||||
APP="Proxmox-Datacenter-Manager"
|
||||
var_tags="datacenter"
|
||||
var_cpu="2"
|
||||
var_ram="2048"
|
||||
|
@ -45,6 +45,7 @@ function update_script() {
|
||||
unzip -q v${RELEASE}.zip
|
||||
mv tianji-${RELEASE} /opt/tianji
|
||||
cd tianji
|
||||
export NODE_OPTIONS="--max_old_space_size=4096"
|
||||
pnpm install --filter @tianji/client... --config.dedupe-peer-dependents=false --frozen-lockfile >/dev/null 2>&1
|
||||
pnpm build:static >/dev/null 2>&1
|
||||
pnpm install --filter @tianji/server... --config.dedupe-peer-dependents=false >/dev/null 2>&1
|
||||
|
@ -43,6 +43,9 @@ start
|
||||
build_container
|
||||
description
|
||||
|
||||
pct set $CTID -features fuse=1,nesting=1
|
||||
pct reboot $CTID
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
||||
|
@ -39,24 +39,33 @@ function update_script() {
|
||||
msg_ok "Stopped Service"
|
||||
|
||||
msg_info "Creating Backup"
|
||||
mkdir -p /opt/z2m_backup
|
||||
tar -czf /opt/z2m_backup/${APP}_backup_$(date +%Y%m%d%H%M%S).tar.gz -C /opt zigbee2mqtt &>/dev/null
|
||||
mv /opt/zigbee2mqtt/data /opt/z2m_backup
|
||||
rm -rf /opt/${APP}_backup*.tar.gz
|
||||
mkdir -p /opt/z2m_backup
|
||||
tar -czf /opt/z2m_backup/${APP}_backup_$(date +%Y%m%d%H%M%S).tar.gz -C /opt zigbee2mqtt &>/dev/null
|
||||
mv /opt/zigbee2mqtt/data /opt/z2m_backup
|
||||
msg_ok "Backup Created"
|
||||
|
||||
msg_info "Updating ${APP} to v${RELEASE}"
|
||||
cd /opt
|
||||
wget -q "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q ${RELEASE}.zip
|
||||
mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt
|
||||
rm -rf /opt/zigbee2mqtt/data
|
||||
mv /opt/z2m_backup/data /opt/zigbee2mqtt
|
||||
cd /opt/zigbee2mqtt
|
||||
pnpm install --frozen-lockfile &>/dev/null
|
||||
pnpm build &>/dev/null
|
||||
cd /opt
|
||||
wget -q "https://github.com/Koenkk/zigbee2mqtt/archive/refs/tags/${RELEASE}.zip"
|
||||
unzip -q ${RELEASE}.zip
|
||||
rm -rf /opt/zigbee2mqtt
|
||||
mv zigbee2mqtt-${RELEASE} /opt/zigbee2mqtt
|
||||
rm -rf /opt/zigbee2mqtt/data
|
||||
mv /opt/z2m_backup/data /opt/zigbee2mqtt
|
||||
cd /opt/zigbee2mqtt
|
||||
pnpm install --frozen-lockfile &>/dev/null
|
||||
pnpm build &>/dev/null
|
||||
msg_ok "Updated Zigbee2MQTT"
|
||||
|
||||
msg_info "Starting Service"
|
||||
systemctl start zigbee2mqtt
|
||||
systemctl start zigbee2mqtt
|
||||
msg_ok "Started Service"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/z2m_backup
|
||||
rm -rf /opt/${RELEASE}.zip
|
||||
msg_ok "Cleaned up"
|
||||
echo "${RELEASE}" >/opt/${APP}_version.txt
|
||||
else
|
||||
msg_ok "No update required. ${APP} is already at v${RELEASE}."
|
||||
|
@ -1,33 +1,9 @@
|
||||
"use client";
|
||||
|
||||
import ApplicationChart from "@/components/ApplicationChart";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Calendar } from "@/components/ui/calendar";
|
||||
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import {
|
||||
Popover,
|
||||
PopoverContent,
|
||||
PopoverTrigger,
|
||||
} from "@/components/ui/popover";
|
||||
import {
|
||||
Select,
|
||||
SelectContent,
|
||||
SelectItem,
|
||||
SelectTrigger,
|
||||
SelectValue,
|
||||
} from "@/components/ui/select";
|
||||
import {
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableHead,
|
||||
TableHeader,
|
||||
TableRow,
|
||||
} from "@/components/ui/table";
|
||||
import { format } from "date-fns";
|
||||
import { Calendar as CalendarIcon } from "lucide-react";
|
||||
import React, { useCallback, useEffect, useState } from "react";
|
||||
import React, { useEffect, useState } from "react";
|
||||
import DatePicker from 'react-datepicker';
|
||||
import 'react-datepicker/dist/react-datepicker.css';
|
||||
import ApplicationChart from "../../components/ApplicationChart";
|
||||
|
||||
interface DataModel {
|
||||
id: number;
|
||||
@ -35,18 +11,16 @@ interface DataModel {
|
||||
disk_size: number;
|
||||
core_count: number;
|
||||
ram_size: number;
|
||||
verbose: string;
|
||||
os_type: string;
|
||||
os_version: string;
|
||||
hn: string;
|
||||
disableip6: string;
|
||||
ssh: string;
|
||||
tags: string;
|
||||
nsapp: string;
|
||||
created_at: string;
|
||||
method: string;
|
||||
pve_version: string;
|
||||
status: string;
|
||||
error: string;
|
||||
type: string;
|
||||
}
|
||||
|
||||
|
||||
@ -60,45 +34,27 @@ const DataFetcher: React.FC = () => {
|
||||
const [sortConfig, setSortConfig] = useState<{ key: keyof DataModel | null, direction: 'ascending' | 'descending' }>({ key: 'id', direction: 'descending' });
|
||||
const [itemsPerPage, setItemsPerPage] = useState(25);
|
||||
const [currentPage, setCurrentPage] = useState(1);
|
||||
const [interval, setIntervalTime] = useState<number>(10); // Default interval 10 seconds
|
||||
const [reloadInterval, setReloadInterval] = useState<NodeJS.Timeout | null>(null);
|
||||
|
||||
const [showErrorRow, setShowErrorRow] = useState<number | null>(null);
|
||||
|
||||
|
||||
const fetchData = useCallback(async () => {
|
||||
try {
|
||||
const response = await fetch("https://api.htl-braunau.at/data/json");
|
||||
if (!response.ok) throw new Error(`Failed to fetch data: ${response.statusText}`);
|
||||
const result: DataModel[] = await response.json();
|
||||
setData(result);
|
||||
setLoading(false);
|
||||
} catch (err) {
|
||||
setError((err as Error).message);
|
||||
setLoading(false);
|
||||
}
|
||||
useEffect(() => {
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
const response = await fetch("https://api.htl-braunau.at/data/json");
|
||||
if (!response.ok) throw new Error("Failed to fetch data: ${response.statusText}");
|
||||
const result: DataModel[] = await response.json();
|
||||
setData(result);
|
||||
} catch (err) {
|
||||
setError((err as Error).message);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
fetchData();
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
fetchData();
|
||||
const storedInterval = localStorage.getItem('reloadInterval');
|
||||
if (storedInterval) {
|
||||
setIntervalTime(Number(storedInterval));
|
||||
}
|
||||
}, [fetchData]);
|
||||
|
||||
useEffect(() => {
|
||||
let intervalId: NodeJS.Timeout | null = null;
|
||||
|
||||
if (interval > 0) {
|
||||
intervalId = setInterval(fetchData, Math.max(interval, 10) * 1000);
|
||||
localStorage.setItem('reloadInterval', interval.toString());
|
||||
} else {
|
||||
localStorage.removeItem('reloadInterval');
|
||||
}
|
||||
|
||||
return () => {
|
||||
if (intervalId) clearInterval(intervalId);
|
||||
};
|
||||
}, [interval, fetchData]);
|
||||
|
||||
const filteredData = data.filter(item => {
|
||||
const matchesSearchQuery = Object.values(item).some(value =>
|
||||
@ -153,194 +109,176 @@ const DataFetcher: React.FC = () => {
|
||||
return `${day}.${month}.${year} ${hours}:${minutes} ${timezoneOffset} GMT`;
|
||||
};
|
||||
|
||||
const handleItemsPerPageChange = (event: React.ChangeEvent<HTMLSelectElement>) => {
|
||||
setItemsPerPage(Number(event.target.value));
|
||||
setCurrentPage(1);
|
||||
};
|
||||
|
||||
const paginatedData = sortedData.slice((currentPage - 1) * itemsPerPage, currentPage * itemsPerPage);
|
||||
|
||||
const statusCounts = data.reduce((acc, item) => {
|
||||
const status = item.status;
|
||||
acc[status] = (acc[status] || 0) + 1;
|
||||
return acc;
|
||||
}, {} as Record<string, number>);
|
||||
|
||||
if (loading) return <div className="flex justify-center items-center h-screen">Loading...</div>;
|
||||
if (error) return <div className="flex justify-center items-center h-screen text-red-500">Error: {error}</div>;
|
||||
if (loading) return <p>Loading...</p>;
|
||||
if (error) return <p>Error: {error}</p>;
|
||||
|
||||
var installingCounts: number = 0;
|
||||
var failedCounts: number = 0;
|
||||
var doneCounts: number = 0
|
||||
var unknownCounts: number = 0;
|
||||
data.forEach((item) => {
|
||||
if (item.status === "installing") {
|
||||
installingCounts += 1;
|
||||
} else if (item.status === "failed") {
|
||||
failedCounts += 1;
|
||||
}
|
||||
else if (item.status === "done") {
|
||||
doneCounts += 1;
|
||||
}
|
||||
else {
|
||||
unknownCounts += 1;
|
||||
}
|
||||
});
|
||||
|
||||
return (
|
||||
<div className="container mx-auto p-6 pt-20 space-y-6">
|
||||
<h1 className="text-3xl font-bold text-center">Created LXCs</h1>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
|
||||
<Card>
|
||||
<CardHeader className="pb-2">
|
||||
<CardTitle className="text-sm font-medium">Search</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<Input
|
||||
placeholder="Search..."
|
||||
value={searchQuery}
|
||||
onChange={e => setSearchQuery(e.target.value)}
|
||||
/>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<Card>
|
||||
<CardHeader className="pb-2">
|
||||
<CardTitle className="text-sm font-medium">Start Date</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<Popover>
|
||||
<PopoverTrigger asChild>
|
||||
<Button variant="outline" className="w-full justify-start text-left font-normal">
|
||||
<CalendarIcon className="mr-2 h-4 w-4" />
|
||||
{startDate ? format(startDate, "PPP") : "Pick a date"}
|
||||
</Button>
|
||||
</PopoverTrigger>
|
||||
<PopoverContent className="w-auto p-0">
|
||||
<Calendar
|
||||
mode="single"
|
||||
selected={startDate || undefined}
|
||||
onSelect={(date: Date | undefined) => setStartDate(date || null)}
|
||||
initialFocus
|
||||
/>
|
||||
</PopoverContent>
|
||||
</Popover>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<Card>
|
||||
<CardHeader className="pb-2">
|
||||
<CardTitle className="text-sm font-medium">End Date</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<Popover>
|
||||
<PopoverTrigger asChild>
|
||||
<Button variant="outline" className="w-full justify-start text-left font-normal">
|
||||
<CalendarIcon className="mr-2 h-4 w-4" />
|
||||
{endDate ? format(endDate, "PPP") : "Pick a date"}
|
||||
</Button>
|
||||
</PopoverTrigger>
|
||||
<PopoverContent className="w-auto p-0">
|
||||
<Calendar
|
||||
mode="single"
|
||||
selected={endDate || undefined}
|
||||
onSelect={(date: Date | undefined) => setEndDate(date || null)}
|
||||
initialFocus
|
||||
/>
|
||||
</PopoverContent>
|
||||
</Popover>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<Card>
|
||||
<CardHeader className="pb-2">
|
||||
<CardTitle className="text-sm font-medium">Reload Interval</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<Input
|
||||
type="number"
|
||||
value={interval}
|
||||
onChange={e => setIntervalTime(Number(e.target.value))}
|
||||
placeholder="Interval (seconds)"
|
||||
/>
|
||||
</CardContent>
|
||||
</Card>
|
||||
</div>
|
||||
|
||||
<ApplicationChart data={filteredData} />
|
||||
|
||||
<div className="flex justify-between items-center">
|
||||
<p className="text-lg font-medium">{filteredData.length} results found</p>
|
||||
<div className="flex gap-2 items-center">
|
||||
<span>🔄 Installing: {statusCounts.installing || 0}</span>
|
||||
<span>✔️ Completed: {statusCounts.done || 0}</span>
|
||||
<span>❌ Failed: {statusCounts.failed || 0}</span>
|
||||
<span>❓ Unknown: {statusCounts.unknown || 0}</span>
|
||||
<div className="p-6 mt-20">
|
||||
<h1 className="text-2xl font-bold mb-4 text-center">Created LXCs</h1>
|
||||
<div className="mb-4 flex space-x-4">
|
||||
<div>
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Search..."
|
||||
value={searchQuery}
|
||||
onChange={e => setSearchQuery(e.target.value)}
|
||||
className="p-2 border"
|
||||
/>
|
||||
<label className="text-sm text-gray-600 mt-1 block">Search by keyword</label>
|
||||
</div>
|
||||
<div>
|
||||
<DatePicker
|
||||
selected={startDate}
|
||||
onChange={date => setStartDate(date)}
|
||||
selectsStart
|
||||
startDate={startDate}
|
||||
endDate={endDate}
|
||||
placeholderText="Start date"
|
||||
className="p-2 border"
|
||||
/>
|
||||
<label className="text-sm text-gray-600 mt-1 block">Set a start date</label>
|
||||
</div>
|
||||
<Select value={itemsPerPage.toString()} onValueChange={(value) => setItemsPerPage(Number(value))}>
|
||||
<SelectTrigger className="w-[180px]">
|
||||
<SelectValue placeholder="Items per page" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
{[25, 50, 100, 200].map(value => (
|
||||
<SelectItem key={value} value={value.toString()}>
|
||||
{value} items
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</div>
|
||||
|
||||
<div className="rounded-md border">
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableRow>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('status')}>Status</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('nsapp')}>Application</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('os_type')}>OS</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('os_version')}>OS Version</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('disk_size')}>Disk Size</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('core_count')}>Core Count</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('ram_size')}>RAM Size</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('hn')}>Hostname</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('ssh')}>SSH</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('verbose')}>Verb</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('tags')}>Tags</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('method')}>Method</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('pve_version')}>PVE Version</TableHead>
|
||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('created_at')}>Created At</TableHead>
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
{paginatedData.map((item, index) => (
|
||||
<TableRow key={index}>
|
||||
<TableCell className="px-4 py-2 border-b">{item.status === "done" ? (
|
||||
"✔️"
|
||||
) : item.status === "failed" ? (
|
||||
"❌"
|
||||
) : item.status === "installing" ? (
|
||||
"🔄"
|
||||
) : (
|
||||
item.status
|
||||
)}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.nsapp}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.os_type}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.os_version}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.disk_size}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.core_count}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.ram_size}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.hn}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.ssh}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.verbose}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.tags.replace(/;/g, ' ')}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.method}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{item.pve_version}</TableCell>
|
||||
<TableCell className="px-4 py-2 border-b">{formatDate(item.created_at)}</TableCell>
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
<div>
|
||||
<DatePicker
|
||||
selected={endDate}
|
||||
onChange={date => setEndDate(date)}
|
||||
selectsEnd
|
||||
startDate={startDate}
|
||||
endDate={endDate}
|
||||
placeholderText="End date"
|
||||
className="p-2 border"
|
||||
/>
|
||||
<label className="text-sm text-gray-600 mt-1 block">Set a end date</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center justify-center space-x-2">
|
||||
<Button
|
||||
variant="outline"
|
||||
<ApplicationChart data={filteredData} />
|
||||
<div className="mb-4 flex justify-between items-center">
|
||||
<p className="text-lg font-bold">{filteredData.length} results found</p>
|
||||
<p className="text-lg font">Status Legend: 🔄 installing {installingCounts} | ✔️ completetd {doneCounts} | ❌ failed {failedCounts} | ❓ unknown {unknownCounts}</p>
|
||||
<select value={itemsPerPage} onChange={handleItemsPerPageChange} className="p-2 border">
|
||||
<option value={25}>25</option>
|
||||
<option value={50}>50</option>
|
||||
<option value={100}>100</option>
|
||||
<option value={200}>200</option>
|
||||
</select>
|
||||
</div>
|
||||
<div className="overflow-x-auto">
|
||||
<div className="overflow-y-auto lg:overflow-y-visible">
|
||||
<table className="min-w-full table-auto border-collapse">
|
||||
<thead>
|
||||
<tr>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('status')}>Status</th>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('type')}>Type</th>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('nsapp')}>Application</th>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('os_type')}>OS</th>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('os_version')}>OS Version</th>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('disk_size')}>Disk Size</th>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('core_count')}>Core Count</th>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('ram_size')}>RAM Size</th>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('method')}>Method</th>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('pve_version')}>PVE Version</th>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('error')}>Error Message</th>
|
||||
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('created_at')}>Created At</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{paginatedData.map((item, index) => (
|
||||
<tr key={index}>
|
||||
<td className="px-4 py-2 border-b">
|
||||
{item.status === "done" ? (
|
||||
"✔️"
|
||||
) : item.status === "failed" ? (
|
||||
"❌"
|
||||
) : item.status === "installing" ? (
|
||||
"🔄"
|
||||
) : (
|
||||
item.status
|
||||
)}
|
||||
</td>
|
||||
<td className="px-4 py-2 border-b">{item.type === "lxc" ? (
|
||||
"📦"
|
||||
) : item.type === "vm" ? (
|
||||
"🖥️"
|
||||
) : (
|
||||
item.type
|
||||
)}</td>
|
||||
<td className="px-4 py-2 border-b">{item.nsapp}</td>
|
||||
<td className="px-4 py-2 border-b">{item.os_type}</td>
|
||||
<td className="px-4 py-2 border-b">{item.os_version}</td>
|
||||
<td className="px-4 py-2 border-b">{item.disk_size}</td>
|
||||
<td className="px-4 py-2 border-b">{item.core_count}</td>
|
||||
<td className="px-4 py-2 border-b">{item.ram_size}</td>
|
||||
<td className="px-4 py-2 border-b">{item.method}</td>
|
||||
<td className="px-4 py-2 border-b">{item.pve_version}</td>
|
||||
<td className="px-4 py-2 border-b">
|
||||
{item.error && item.error !== "none" ? (
|
||||
showErrorRow === index ? (
|
||||
<>
|
||||
{item.error}
|
||||
<button onClick={() => setShowErrorRow(null)}>{item.error}</button>
|
||||
</>
|
||||
) : (
|
||||
<button onClick={() => setShowErrorRow(index)}>Click to show error</button>
|
||||
)
|
||||
) : (
|
||||
"none"
|
||||
)}
|
||||
</td>
|
||||
<td className="px-4 py-2 border-b">{formatDate(item.created_at)}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div className="mt-4 flex justify-between items-center">
|
||||
<button
|
||||
onClick={() => setCurrentPage(prev => Math.max(prev - 1, 1))}
|
||||
disabled={currentPage === 1}
|
||||
className="p-2 border"
|
||||
>
|
||||
Previous
|
||||
</Button>
|
||||
<span className="text-sm">
|
||||
Page {currentPage} of {Math.ceil(sortedData.length / itemsPerPage)}
|
||||
</span>
|
||||
<Button
|
||||
variant="outline"
|
||||
</button>
|
||||
<span>Page {currentPage}</span>
|
||||
<button
|
||||
onClick={() => setCurrentPage(prev => (prev * itemsPerPage < sortedData.length ? prev + 1 : prev))}
|
||||
disabled={currentPage * itemsPerPage >= sortedData.length}
|
||||
className="p-2 border"
|
||||
>
|
||||
Next
|
||||
</Button>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
|
||||
export default DataFetcher;
|
||||
|
@ -31,7 +31,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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 "Setting up PostgreSQL Repository"
|
||||
|
@ -39,7 +39,7 @@ msg_ok "Installed Python Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -81,12 +81,13 @@ $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
|
||||
temp_file=$(mktemp)
|
||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||
tar -C /usr/local -xzf "$temp_file"
|
||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
|
||||
rm -f "$temp_file"
|
||||
set -o pipefail
|
||||
msg_ok "Installed Golang"
|
||||
|
||||
@ -186,7 +187,6 @@ 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
|
||||
|
@ -4,7 +4,7 @@
|
||||
# Author: tteck (tteckster) | Co-Author: MickLesk (CanbiZ)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
|
||||
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
||||
color
|
||||
verb_ip6
|
||||
catch_errors
|
||||
@ -33,16 +33,16 @@ msg_ok "Installed Caddy"
|
||||
read -r -p "Would you like to install xCaddy Addon? <y/N> " prompt
|
||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||
msg_info "Installing Golang"
|
||||
cd /opt
|
||||
set +o pipefail
|
||||
GOLANG=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-amd64.tar.gz" | head -n 1)
|
||||
wget -q https://golang.org/dl/$GOLANG
|
||||
tar -xzf $GOLANG -C /usr/local
|
||||
ln -s /usr/local/go/bin/go /usr/local/bin/go
|
||||
temp_file=$(mktemp)
|
||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||
tar -C /usr/local -xzf "$temp_file"
|
||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
|
||||
rm -f "$temp_file"
|
||||
set -o pipefail
|
||||
rm -rf /opt/go*
|
||||
msg_ok "Installed Golang"
|
||||
|
||||
|
||||
msg_info "Setup xCaddy"
|
||||
cd /opt
|
||||
RELEASE=$(curl -s https://api.github.com/repos/caddyserver/xcaddy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
|
||||
|
@ -58,7 +58,7 @@ msg_ok "Setup Python3"
|
||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -23,7 +23,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
44
install/elementsynapse-install.sh
Normal file
44
install/elementsynapse-install.sh
Normal file
@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: tremor021
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
source /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 \
|
||||
sudo \
|
||||
curl \
|
||||
mc \
|
||||
lsb-release \
|
||||
wget \
|
||||
apt-transport-https \
|
||||
debconf-utils
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Element Synapse"
|
||||
wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
|
||||
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/matrix-org.list
|
||||
$STD apt-get update
|
||||
echo "matrix-synapse-py3 matrix-synapse/server-name string matrix" | debconf-set-selections
|
||||
echo "matrix-synapse-py3 matrix-synapse/report-stats boolean false" | debconf-set-selections
|
||||
$STD apt-get install matrix-synapse-py3 -y
|
||||
sed -i 's/127.0.0.1/0.0.0.0/g' /etc/matrix-synapse/homeserver.yaml
|
||||
sed -i 's/'\''::1'\'', //g' /etc/matrix-synapse/homeserver.yaml
|
||||
systemctl enable -q --now matrix-synapse
|
||||
msg_ok "Installed Element Synapse"
|
||||
|
||||
motd_ssh
|
||||
customize
|
||||
|
||||
msg_info "Cleaning up"
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
@ -23,7 +23,7 @@ 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
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
msg_ok "Installed Node.js"
|
||||
|
@ -26,7 +26,7 @@ msg_ok "Setup Python3"
|
||||
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
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
msg_ok "Installed Node.js"
|
||||
|
@ -29,7 +29,7 @@ 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
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
$STD npm install -g yarn
|
||||
|
@ -56,6 +56,7 @@ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dea
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
$STD npm install -g corepack@0.31.0
|
||||
msg_ok "Installed Node.js"
|
||||
|
||||
msg_info "Installing Hoarder"
|
||||
|
@ -23,7 +23,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -26,7 +26,7 @@ $STD apt-get install -y \
|
||||
imagemagick
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Python3 Dependencies"
|
||||
msg_info "Setup Python3"
|
||||
$STD apt-get install -y \
|
||||
pip \
|
||||
python3-irc
|
||||
@ -34,7 +34,7 @@ $STD pip install jaraco.stream
|
||||
$STD pip install python-Levenshtein
|
||||
$STD pip install soupsieve
|
||||
$STD pip install pypdf
|
||||
msg_ok "Installed Python3 Dependencies"
|
||||
msg_ok "Setup Python3"
|
||||
|
||||
msg_info "Installing LazyLibrarian"
|
||||
$STD git clone https://gitlab.com/LazyLibrarian/LazyLibrarian /opt/LazyLibrarian
|
||||
|
@ -28,7 +28,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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/Yarn"
|
||||
|
@ -27,7 +27,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -28,7 +28,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
@ -42,10 +42,12 @@ msg_ok "Installed pnpm"
|
||||
|
||||
msg_info "Installing Golang"
|
||||
set +o pipefail
|
||||
GOLANG=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-amd64.tar.gz" | head -n 1)
|
||||
wget -q https://golang.org/dl/$GOLANG
|
||||
tar -xzf $GOLANG -C /usr/local
|
||||
ln -s /usr/local/go/bin/go /usr/local/bin/go
|
||||
temp_file=$(mktemp)
|
||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||
tar -C /usr/local -xzf "$temp_file"
|
||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
|
||||
rm -f "$temp_file"
|
||||
set -o pipefail
|
||||
msg_ok "Installed Golang"
|
||||
|
||||
|
@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -33,18 +33,18 @@ $STD apt-get install -y --no-install-recommends \
|
||||
mc
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Python3"
|
||||
msg_info "Setup Python3"
|
||||
$STD apt-get install -y \
|
||||
python3 \
|
||||
python3-dev \
|
||||
python3-pip \
|
||||
python3-venv
|
||||
msg_ok "Installed Python3"
|
||||
msg_ok "Setup Python3"
|
||||
|
||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -28,7 +28,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -26,10 +26,14 @@ $STD apt-get install -y cmake
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Golang"
|
||||
$STD wget https://golang.org/dl/go1.23.2.linux-amd64.tar.gz
|
||||
$STD tar -xzf go1.23.2.linux-amd64.tar.gz -C /usr/local
|
||||
$STD ln -s /usr/local/go/bin/go /usr/local/bin/go
|
||||
rm -rf go1.23.2.linux-amd64.tar.gz
|
||||
set +o pipefail
|
||||
temp_file=$(mktemp)
|
||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||
tar -C /usr/local -xzf "$temp_file"
|
||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
|
||||
rm -f "$temp_file"
|
||||
set -o pipefail
|
||||
msg_ok "Installed Golang"
|
||||
|
||||
msg_info "Setting up Intel® Repositories"
|
||||
|
@ -24,16 +24,16 @@ $STD apt-get install -y \
|
||||
ffmpeg
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Python3 Dependencies"
|
||||
msg_info "Setup Python3"
|
||||
$STD apt-get install -y --no-install-recommends \
|
||||
python3 \
|
||||
python3-pip
|
||||
msg_ok "Installed Python3 Dependencies"
|
||||
msg_ok "Setup Python3"
|
||||
|
||||
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_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -40,14 +40,14 @@ $STD apt-get install -y \
|
||||
mc
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Python3 Dependencies (Patience)"
|
||||
msg_info "Setup Python3"
|
||||
$STD apt-get install -y \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-dev \
|
||||
python3-setuptools \
|
||||
python3-wheel
|
||||
msg_ok "Installed Python3 Dependencies"
|
||||
msg_ok "Setup Python3"
|
||||
|
||||
msg_info "Installing OCR Dependencies (Patience)"
|
||||
$STD apt-get install -y \
|
||||
|
@ -46,7 +46,7 @@ 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
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
$STD npm install -g npm@latest
|
||||
|
@ -24,7 +24,7 @@ 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
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
msg_ok "Installed Node.js"
|
||||
|
@ -26,7 +26,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -35,12 +35,13 @@ $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
|
||||
temp_file=$(mktemp)
|
||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||
tar -C /usr/local -xzf "$temp_file"
|
||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
|
||||
rm -f "$temp_file"
|
||||
set -o pipefail
|
||||
msg_ok "Installed Golang"
|
||||
|
||||
|
110
install/privatebin-install.sh
Normal file
110
install/privatebin-install.sh
Normal file
@ -0,0 +1,110 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: Nícolas Pastorello (opastorello)
|
||||
# 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 \
|
||||
nginx \
|
||||
php8.2-fpm \
|
||||
php8.2-{common,cli,gd,mbstring,xml,fpm,curl,zip} \
|
||||
unzip \
|
||||
openssl
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing PrivateBin"
|
||||
RELEASE=$(curl -s https://api.github.com/repos/PrivateBin/PrivateBin/releases/latest | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
|
||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
|
||||
mkdir -p /opt/privatebin
|
||||
cd /opt/privatebin
|
||||
wget -q "https://github.com/PrivateBin/PrivateBin/archive/refs/tags/${RELEASE}.zip"
|
||||
$STD unzip -q ${RELEASE}.zip
|
||||
mv PrivateBin-${RELEASE}/* .
|
||||
msg_ok "Installed PrivateBin"
|
||||
|
||||
msg_info "Generating Universal SSL Certificate"
|
||||
mkdir -p /etc/ssl/privatebin
|
||||
$STD openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
|
||||
-keyout /etc/ssl/privatebin/key.pem \
|
||||
-out /etc/ssl/privatebin/cert.pem \
|
||||
-subj "/CN=PrivateBin"
|
||||
msg_ok "Certificate Generated"
|
||||
|
||||
msg_info "Configuring Environment"
|
||||
mkdir -p /opt/privatebin/data
|
||||
cp cfg/conf.sample.php /opt/privatebin/cfg/conf.php
|
||||
sed -i "s|// 'traffic'|'traffic'|g" /opt/privatebin/cfg/conf.php
|
||||
chown -R www-data:www-data /opt/privatebin
|
||||
chmod -R 0755 /opt/privatebin/data
|
||||
msg_ok "Configured Environment"
|
||||
|
||||
msg_info "Configuring PHP"
|
||||
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/8.2/fpm/php.ini
|
||||
systemctl restart php8.2-fpm
|
||||
msg_ok "Configured PHP"
|
||||
|
||||
msg_info "Configuring Universal Nginx"
|
||||
cat <<EOF >/etc/nginx/sites-available/privatebin.conf
|
||||
server {
|
||||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
return 301 https://\$host\$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl default_server;
|
||||
listen [::]:443 ssl default_server;
|
||||
|
||||
ssl_certificate /etc/ssl/privatebin/cert.pem;
|
||||
ssl_certificate_key /etc/ssl/privatebin/key.pem;
|
||||
|
||||
root /opt/privatebin;
|
||||
index index.php;
|
||||
|
||||
location / {
|
||||
try_files \$uri \$uri/ /index.php\$is_args\$args;
|
||||
}
|
||||
|
||||
location ~ \.php\$ {
|
||||
include snippets/fastcgi-php.conf;
|
||||
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
|
||||
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
|
||||
include fastcgi_params;
|
||||
}
|
||||
|
||||
location ~ /\.ht {
|
||||
deny all;
|
||||
}
|
||||
|
||||
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
add_header X-Frame-Options "SAMEORIGIN";
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
}
|
||||
EOF
|
||||
ln -s /etc/nginx/sites-available/privatebin.conf /etc/nginx/sites-enabled/
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
systemctl reload nginx
|
||||
msg_ok "Nginx Configured"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf /opt/privatebin/${RELEASE}.zip
|
||||
rm -rf /opt/privatebin/PrivateBin-${RELEASE}
|
||||
$STD apt-get -y autoremove
|
||||
$STD apt-get -y autoclean
|
||||
msg_ok "Cleaned"
|
||||
|
||||
motd_ssh
|
||||
customize
|
@ -28,7 +28,7 @@ rm -rf /usr/lib/python3.*/EXTERNALLY-MANAGED
|
||||
msg_ok "Setup Python3"
|
||||
|
||||
msg_info "Installing Prometheus Proxmox VE Exporter"
|
||||
python3 -m pip install --quiet --root-user-action=ignore prometheus-pve-exporter
|
||||
python3 -m pip install --default-timeout=300 --quiet --root-user-action=ignore prometheus-pve-exporter
|
||||
mkdir -p /opt/prometheus-pve-exporter
|
||||
cat <<EOF > /opt/prometheus-pve-exporter/pve.yml
|
||||
default:
|
||||
|
@ -14,9 +14,11 @@ network_check
|
||||
update_os
|
||||
|
||||
msg_info "Installing Dependencies"
|
||||
$STD apt-get install -y curl
|
||||
$STD apt-get install -y sudo
|
||||
$STD apt-get install -y mc
|
||||
$STD apt-get install -y \
|
||||
curl \
|
||||
sudo \
|
||||
gpg \
|
||||
mc
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Proxmox Backup Server"
|
@ -21,10 +21,14 @@ $STD apt-get install -y mc
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Golang"
|
||||
$STD wget https://golang.org/dl/go1.20.1.linux-amd64.tar.gz
|
||||
$STD tar -xzf go1.20.1.linux-amd64.tar.gz -C /usr/local
|
||||
$STD ln -s /usr/local/go/bin/go /usr/local/bin/go
|
||||
rm -rf go1.20.1.linux-amd64.tar.gz
|
||||
set +o pipefail
|
||||
temp_file=$(mktemp)
|
||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||
tar -C /usr/local -xzf "$temp_file"
|
||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
|
||||
rm -f "$temp_file"
|
||||
set -o pipefail
|
||||
msg_ok "Installed Golang"
|
||||
|
||||
msg_info "Installing RTSPtoWeb"
|
||||
|
@ -23,10 +23,12 @@ msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Golang"
|
||||
set +o pipefail
|
||||
RELEASE=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-amd64.tar.gz" | head -n 1)
|
||||
wget -q https://golang.org/dl/$RELEASE
|
||||
tar -xzf $RELEASE -C /usr/local
|
||||
$STD ln -s /usr/local/go/bin/go /usr/local/bin/go
|
||||
temp_file=$(mktemp)
|
||||
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||
tar -C /usr/local -xzf "$temp_file"
|
||||
ln -sf /usr/local/go/bin/go /usr/local/bin/go
|
||||
rm -f "$temp_file"
|
||||
set -o pipefail
|
||||
msg_ok "Installed Golang"
|
||||
|
||||
|
@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -27,13 +27,13 @@ $STD apt-get install -y \
|
||||
mc
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Installing Python3"
|
||||
msg_info "Setup Python3"
|
||||
$STD apt-get install -y \
|
||||
python3-dev \
|
||||
python3-setuptools \
|
||||
python3-wheel \
|
||||
python3-pip
|
||||
msg_ok "Installed Python3"
|
||||
msg_ok "Setup Python3"
|
||||
|
||||
msg_info "Installing Spoolman"
|
||||
RELEASE=$(wget -q https://github.com/Donkie/Spoolman/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
|
||||
|
@ -23,8 +23,7 @@ $STD apt install -y \
|
||||
msg_ok "Installed Dependencies"
|
||||
|
||||
msg_info "Setup SQL Server 2022"
|
||||
$STD curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
|
||||
$STD curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc
|
||||
$STD curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
|
||||
$STD curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list
|
||||
$STD apt-get clean *
|
||||
$STD apt-get update -y
|
||||
|
@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -34,7 +34,7 @@ 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
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
$STD apt-get update
|
||||
$STD apt-get install -y nodejs
|
||||
$STD npm install -g pnpm@9.7.1
|
||||
|
@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
@ -27,7 +27,7 @@ msg_ok "Installed Dependencies"
|
||||
msg_info "Setting up Node.js Repository"
|
||||
mkdir -p /etc/apt/keyrings
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
||||
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
|
||||
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"
|
||||
|
34
json/elementsynapse.json
Normal file
34
json/elementsynapse.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"name": "Element Synapse",
|
||||
"slug": "elementsynapse",
|
||||
"categories": [
|
||||
4
|
||||
],
|
||||
"date_created": "2025-02-02",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8008,
|
||||
"documentation": "https://element-hq.github.io/synapse/latest/welcome_and_overview.html",
|
||||
"website": "https://element.io/",
|
||||
"logo": "https://element.io/images/logo-mark-primary.svg",
|
||||
"description": "Synapse is an open source Matrix homeserver implementation, written and maintained by Element. Matrix is the open standard for secure and interoperable real time communications. You can directly run and manage the source code in this repository, available under an AGPL license. There is no support provided from Element unless you have a subscription.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/elementsynapse.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "Debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
@ -18,9 +18,9 @@
|
||||
"type": "default",
|
||||
"script": "ct/grist.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"cpu": 2,
|
||||
"ram": 3072,
|
||||
"hdd": 6,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
|
@ -20,7 +20,7 @@
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 4096,
|
||||
"hdd": 8,
|
||||
"hdd": 10,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
|
34
json/privatebin.json
Normal file
34
json/privatebin.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"name": "PrivateBin",
|
||||
"slug": "privatebin",
|
||||
"categories": [
|
||||
12
|
||||
],
|
||||
"date_created": "2025-01-29",
|
||||
"type": "ct",
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 80,
|
||||
"documentation": "https://github.com/PrivateBin/PrivateBin/wiki",
|
||||
"website": "https://github.com/PrivateBin/PrivateBin",
|
||||
"logo": "https://raw.githubusercontent.com/PrivateBin/PrivateBin/refs/heads/master/img/icon.svg",
|
||||
"description": "PrivateBin is a minimalist, open-source pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256-bit AES.",
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/privatebin.sh",
|
||||
"resources": {
|
||||
"cpu": 1,
|
||||
"ram": 1024,
|
||||
"hdd": 4,
|
||||
"os": "debian",
|
||||
"version": "12"
|
||||
}
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"password": null
|
||||
},
|
||||
"notes": []
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Prometheus Proxmox VE Exporter",
|
||||
"slug": "prometheus-proxmox-ve-exporter",
|
||||
"slug": "prometheus-pve-exporter",
|
||||
"categories": [
|
||||
1,
|
||||
9
|
||||
|
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "Proxmox Backup Server",
|
||||
"slug": "pbs",
|
||||
"slug": "proxmox-backup-server",
|
||||
"categories": [
|
||||
1
|
||||
],
|
||||
"date_created": "2024-05-02",
|
||||
"type": "ct",
|
||||
"updateable": false,
|
||||
"updateable": true,
|
||||
"privileged": false,
|
||||
"interface_port": 8007,
|
||||
"documentation": "https://pbs.proxmox.com/docs/",
|
||||
@ -16,7 +16,7 @@
|
||||
"install_methods": [
|
||||
{
|
||||
"type": "default",
|
||||
"script": "ct/pbs.sh",
|
||||
"script": "ct/proxmox-backup-server.sh",
|
||||
"resources": {
|
||||
"cpu": 2,
|
||||
"ram": 2048,
|
||||
@ -27,12 +27,12 @@
|
||||
}
|
||||
],
|
||||
"default_credentials": {
|
||||
"username": null,
|
||||
"username": "root",
|
||||
"password": null
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"text": "Set a root password if using autologin. This will be the PBS password. `sudo passwd root`",
|
||||
"text": "Set a root password if using autologin. This will be the PBS password. `passwd root`",
|
||||
"type": "warning"
|
||||
}
|
||||
]
|
125
misc/api.func
Normal file
125
misc/api.func
Normal file
@ -0,0 +1,125 @@
|
||||
# Copyright (c) 2021-2025 community-scripts ORG
|
||||
# Author: michelroegl-brunner
|
||||
# License: MIT | https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/LICENSE
|
||||
|
||||
post_to_api() {
|
||||
|
||||
if ! command -v curl &> /dev/null; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$DIAGNOSTICS" = "no" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -z "$RANDOM_UUID" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
local API_URL="http://api.community-scripts.org/upload"
|
||||
local pve_version="not found"
|
||||
pve_version=$(pveversion | awk -F'[/ ]' '{print $2}')
|
||||
|
||||
JSON_PAYLOAD=$(cat <<EOF
|
||||
{
|
||||
"ct_type": $CT_TYPE,
|
||||
"type":"lxc",
|
||||
"disk_size": $DISK_SIZE,
|
||||
"core_count": $CORE_COUNT,
|
||||
"ram_size": $RAM_SIZE,
|
||||
"os_type": "$var_os",
|
||||
"os_version": "$var_version",
|
||||
"disableip6": "$DISABLEIP6",
|
||||
"nsapp": "$NSAPP",
|
||||
"method": "$METHOD",
|
||||
"pve_version": "$pve_version",
|
||||
"status": "installing",
|
||||
"random_id": "$RANDOM_UUID"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
RESPONSE=$(curl -s -o response.txt -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$JSON_PAYLOAD") || true
|
||||
|
||||
|
||||
}
|
||||
|
||||
post_to_api_vm() {
|
||||
|
||||
DIAGNOSTICS=$(grep -i "^DIAGNOSTICS=" /usr/local/community-scripts/diagnostics | awk -F'=' '{print $2}')
|
||||
|
||||
if ! command -v curl &> /dev/null; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$DIAGNOSTICS" = "no" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
if [ -z "$RANDOM_UUID" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
local API_URL="http://api.community-scripts.org/upload"
|
||||
local pve_version="not found"
|
||||
pve_version=$(pveversion | awk -F'[/ ]' '{print $2}')
|
||||
|
||||
DISK_SIZE_API=${DISK_SIZE%G}
|
||||
|
||||
JSON_PAYLOAD=$(cat <<EOF
|
||||
{
|
||||
"ct_type": 2,
|
||||
"type":"vm",
|
||||
"disk_size": $DISK_SIZE_API,
|
||||
"core_count": $CORE_COUNT,
|
||||
"ram_size": $RAM_SIZE,
|
||||
"os_type": "$var_os",
|
||||
"os_version": "$var_version",
|
||||
"disableip6": "",
|
||||
"nsapp": "$NSAPP",
|
||||
"method": "$METHOD",
|
||||
"pve_version": "$pve_version",
|
||||
"status": "installing",
|
||||
"random_id": "$RANDOM_UUID"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
RESPONSE=$(curl -s -o response.txt -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$JSON_PAYLOAD") || true
|
||||
|
||||
}
|
||||
|
||||
POST_UPDATE_DONE=false
|
||||
post_update_to_api() {
|
||||
|
||||
if ! command -v curl &> /dev/null; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$POST_UPDATE_DONE" = true ]; then
|
||||
return 0
|
||||
fi
|
||||
local API_URL="http://api.community-scripts.org/upload/updatestatus"
|
||||
local status="${1:-failed}"
|
||||
local error="${2:-unknown}"
|
||||
|
||||
JSON_PAYLOAD=$(cat <<EOF
|
||||
{
|
||||
"status": "$status",
|
||||
"error": "$error",
|
||||
"random_id": "$RANDOM_UUID"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
RESPONSE=$(curl -s -o response.txt -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$JSON_PAYLOAD") || true
|
||||
|
||||
POST_UPDATE_DONE=true
|
||||
}
|
@ -11,8 +11,9 @@ variables() {
|
||||
PVEHOST_NAME=$(hostname) # gets the Proxmox Hostname and sets it to Uppercase
|
||||
DIAGNOSTICS="yes" # sets the DIAGNOSTICS variable to "yes", used for the API call.
|
||||
METHOD="default" # sets the METHOD variable to "default", used for the API call.
|
||||
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" # generates a random UUID and sets it to the RANDOM_UUDI variable.
|
||||
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)" # generates a random UUID and sets it to the RANDOM_UUID variable.
|
||||
}
|
||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||
|
||||
# This function sets various color variables using ANSI escape codes for formatting text in the terminal.
|
||||
color() {
|
||||
@ -791,78 +792,6 @@ advanced_settings() {
|
||||
fi
|
||||
}
|
||||
|
||||
post_to_api() {
|
||||
if [ "$DIAGNOSTICS" = "no" ]; then
|
||||
return 0
|
||||
fi
|
||||
local API_URL="http://api.community-scripts.org/upload"
|
||||
local pve_version="not found"
|
||||
pve_version=$(pveversion | awk -F'[/ ]' '{print $2}')
|
||||
|
||||
JSON_PAYLOAD=$(cat <<EOF
|
||||
{
|
||||
"ct_type": $CT_TYPE,
|
||||
"disk_size": $DISK_SIZE,
|
||||
"core_count": $CORE_COUNT,
|
||||
"ram_size": $RAM_SIZE,
|
||||
"verbose": "$VERBOSE",
|
||||
"os_type": "$var_os",
|
||||
"os_version": "$var_version",
|
||||
"hn": "$HN",
|
||||
"disableip6": "$DISABLEIP6",
|
||||
"ssh": "$SSH",
|
||||
"tags": "$TAGS",
|
||||
"nsapp": "$NSAPP",
|
||||
"method": "$METHOD",
|
||||
"pve_version": "$pve_version",
|
||||
"status": "installing",
|
||||
"random_id": "$RANDOM_UUID"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
RESPONSE=$(curl -s -o response.txt -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$JSON_PAYLOAD")
|
||||
|
||||
if [ "$RESPONSE" -ne 201 ] && [ "$RESPONSE" -ne 302 ]; then
|
||||
msg_error "API request failed with HTTP code $RESPONSE"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
POST_UPDATE_DONE=false
|
||||
post_update_to_api() {
|
||||
if [ "$DIAGNOSTICS" = "no" ]; then
|
||||
return 0
|
||||
fi
|
||||
if [ "$POST_UPDATE_DONE" = true ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
local API_URL="http://api.community-scripts.org/upload/updatestatus"
|
||||
local status="${1:-failed}"
|
||||
|
||||
JSON_PAYLOAD=$(cat <<EOF
|
||||
{
|
||||
"status": "$status",
|
||||
"random_id": "$RANDOM_UUID"
|
||||
}
|
||||
EOF
|
||||
)
|
||||
|
||||
RESPONSE=$(curl -s -o response.txt -w "%{http_code}" -L -X POST "$API_URL" --post301 --post302 \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$JSON_PAYLOAD")
|
||||
|
||||
if [ "$RESPONSE" -ne 201 ] && [ "$RESPONSE" -ne 302 ]; then
|
||||
msg_error "API UPDATE request failed with HTTP code $RESPONSE"
|
||||
fi
|
||||
|
||||
POST_UPDATE_DONE=true
|
||||
}
|
||||
|
||||
|
||||
diagnostics_check(){
|
||||
if ! [ -d "/usr/local/community-scripts" ]; then
|
||||
mkdir -p /usr/local/community-scripts
|
||||
@ -886,16 +815,13 @@ DIAGNOSTICS=yes
|
||||
#"disk_size"
|
||||
#"core_count"
|
||||
#"ram_size"
|
||||
#"verbose"
|
||||
#"os_type"
|
||||
#"os_version"
|
||||
#"hn"
|
||||
#"disableip6"
|
||||
#"ssh"
|
||||
#"tags"
|
||||
#"nsapp"
|
||||
#"method"
|
||||
#"pve_version"
|
||||
#"status"
|
||||
#If you have any concerns, please review the source code at /misc/build.func
|
||||
EOF
|
||||
DIAGNOSTICS="yes"
|
||||
@ -916,16 +842,13 @@ DIAGNOSTICS=no
|
||||
#"disk_size"
|
||||
#"core_count"
|
||||
#"ram_size"
|
||||
#"verbose"
|
||||
#"os_type"
|
||||
#"os_version"
|
||||
#"hn"
|
||||
#"disableip6"
|
||||
#"ssh"
|
||||
#"tags"
|
||||
#"nsapp"
|
||||
#"method"
|
||||
#"pve_version"
|
||||
#"status"
|
||||
#If you have any concerns, please review the source code at /misc/build.func
|
||||
EOF
|
||||
DIAGNOSTICS="no"
|
||||
@ -1101,6 +1024,7 @@ build_container() {
|
||||
else
|
||||
export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/install.func)"
|
||||
fi
|
||||
export RANDOM_UUID="$RANDOM_UUID"
|
||||
export CACHER="$APT_CACHER"
|
||||
export CACHER_IP="$APT_CACHER_IP"
|
||||
export tz="$timezone"
|
||||
@ -1239,10 +1163,10 @@ EOF
|
||||
systemctl start ping-instances.service
|
||||
fi
|
||||
|
||||
post_update_to_api "done"
|
||||
post_update_to_api "done" "none"
|
||||
}
|
||||
|
||||
trap 'post_update_to_api "failed"' EXIT
|
||||
trap 'post_update_to_api "failed"' SIGINT
|
||||
trap 'post_update_to_api "failed"' SIGTERM
|
||||
trap 'post_update_to_api "failed" "unknown error"' EXIT
|
||||
trap 'post_update_to_api "failed" "SIG INTERUPT"' SIGINT
|
||||
trap 'post_update_to_api "failed" "SIG TERM"' SIGTERM
|
||||
|
||||
|
@ -22,26 +22,18 @@ function find_orphaned_lvm {
|
||||
|
||||
orphaned_volumes=()
|
||||
while read -r lv vg size; do
|
||||
container_id=$(echo "$lv" | grep -oE "[0-9]+" | head -1)
|
||||
|
||||
# Exclude system-critical LVs
|
||||
if [[ "$lv" == "data" || "$lv" == "root" || "$lv" == "swap" ]]; then
|
||||
# Exclude system-critical LVs and Ceph OSDs
|
||||
if [[ "$lv" == "data" || "$lv" == "root" || "$lv" == "swap" || "$lv" =~ ^osd-block- ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
container_id=$(echo "$lv" | grep -oE "[0-9]+" | head -1)
|
||||
# Check if the ID exists as a VM or LXC container
|
||||
if [ -f "/etc/pve/lxc/${container_id}.conf" ] || [ -f "/etc/pve/qemu-server/${container_id}.conf" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
orphaned_volumes+=("$lv" "$vg" "$size")
|
||||
done < <(lvs --noheadings -o lv_name,vg_name,lv_size --separator ' ' | awk '{print $1, $2, $3}')
|
||||
|
||||
if [ ${#orphaned_volumes[@]} -eq 0 ]; then
|
||||
echo -e "✅ No orphaned LVM volumes found.\n"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Display orphaned volumes
|
||||
echo -e "❗ The following orphaned LVM volumes were found:\n"
|
||||
printf "%-25s %-10s %-10s\n" "LV Name" "VG" "Size"
|
||||
|
@ -2,8 +2,9 @@
|
||||
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT
|
||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
|
||||
set -o pipefail
|
||||
|
||||
function header_info() {
|
||||
clear
|
||||
@ -16,11 +17,13 @@ function header_info() {
|
||||
/____/
|
||||
EOF
|
||||
}
|
||||
|
||||
BL=$(echo "\033[36m")
|
||||
RD=$(echo "\033[01;31m")
|
||||
CM='\xE2\x9C\x94\033'
|
||||
GN=$(echo "\033[1;92m")
|
||||
CL=$(echo "\033[m")
|
||||
|
||||
header_info
|
||||
echo "Loading..."
|
||||
|
||||
@ -29,50 +32,66 @@ if [ "$ROOT_FS" != "ext4" ]; then
|
||||
echo "Root filesystem is not ext4. Exiting script."
|
||||
exit 1
|
||||
fi
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" \
|
||||
--title "Proxmox VE LXC Filesystem Trim" \
|
||||
--yesno "The LXC containers will undergo the fstrim command. Proceed?" 10 58 || exit
|
||||
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --title "Proxmox VE LXC Filesystem Trim" --yesno "The LXC containers will undergo the fstrim command. Proceed?" 10 58 || exit
|
||||
NODE=$(hostname)
|
||||
EXCLUDE_MENU=()
|
||||
MSG_MAX_LENGTH=0
|
||||
|
||||
while read -r TAG ITEM; do
|
||||
OFFSET=2
|
||||
((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET
|
||||
EXCLUDE_MENU+=("$TAG" "$ITEM " "OFF")
|
||||
done < <(pct list | awk 'NR>1')
|
||||
excluded_containers=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "Containers on $NODE" --checklist "\nSelect containers to skip from trimming:\n" \
|
||||
16 $((MSG_MAX_LENGTH + 23)) 6 "${EXCLUDE_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit
|
||||
|
||||
excluded_containers_raw=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
|
||||
--title "Containers on $NODE" \
|
||||
--checklist "\nSelect containers to skip from trimming:\n" \
|
||||
16 $((MSG_MAX_LENGTH + 23)) 6 "${EXCLUDE_MENU[@]}" 3>&1 1>&2 2>&3)
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
excluded_containers=$(echo "$excluded_containers_raw" | tr -d '"')
|
||||
|
||||
function trim_container() {
|
||||
local container=$1
|
||||
header_info
|
||||
echo -e "${BL}[Info]${GN} Trimming ${BL}$container${CL} \n"
|
||||
local before_trim=$(lvs | awk -F '[[:space:]]+' 'NR>1 && (/Data%|'"vm-$container"'/) {gsub(/%/, "", $7); print $7}')
|
||||
|
||||
local before_trim
|
||||
before_trim=$(lvs | awk -F '[[:space:]]+' 'NR>1 && (/Data%|'"vm-$container"'/) {gsub(/%/, "", $7); print $7}')
|
||||
echo -e "${RD}Data before trim $before_trim%${CL}"
|
||||
pct fstrim $container
|
||||
local after_trim=$(lvs | awk -F '[[:space:]]+' 'NR>1 && (/Data%|'"vm-$container"'/) {gsub(/%/, "", $7); print $7}')
|
||||
|
||||
pct fstrim "$container"
|
||||
|
||||
local after_trim
|
||||
after_trim=$(lvs | awk -F '[[:space:]]+' 'NR>1 && (/Data%|'"vm-$container"'/) {gsub(/%/, "", $7); print $7}')
|
||||
echo -e "${GN}Data after trim $after_trim%${CL}"
|
||||
|
||||
sleep 1.5
|
||||
}
|
||||
|
||||
|
||||
|
||||
for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
||||
if [[ " ${excluded_containers[@]} " =~ " $container " ]]; then
|
||||
if [[ " ${excluded_containers} " =~ " $container " ]]; then
|
||||
header_info
|
||||
echo -e "${BL}[Info]${GN} Skipping ${BL}$container${CL}"
|
||||
sleep 1
|
||||
else
|
||||
template=$(pct config $container | grep -q "template:" && echo "true" || echo "false")
|
||||
template=$(pct config "$container" | grep -q "template:" && echo "true" || echo "false")
|
||||
if [ "$template" == "true" ]; then
|
||||
header_info
|
||||
echo -e "${BL}[Info]${GN} Skipping ${container} ${RD}$container is a template ${CL} \n"
|
||||
sleep 1
|
||||
continue
|
||||
fi
|
||||
trim_container $container
|
||||
trim_container "$container"
|
||||
fi
|
||||
done
|
||||
|
||||
wait
|
||||
header_info
|
||||
echo -e "${GN} Finished, LXC Containers Trimmed. ${CL} \n"
|
||||
echo -e "${GN}Finished, LXC Containers Trimmed.${CL} \n"
|
||||
|
@ -56,6 +56,7 @@ catch_errors() {
|
||||
|
||||
# This function handles errors
|
||||
error_handler() {
|
||||
source <(wget -qLO - https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func)
|
||||
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
|
||||
printf "\e[?25h"
|
||||
local exit_code="$?"
|
||||
@ -63,8 +64,11 @@ error_handler() {
|
||||
local command="$2"
|
||||
local error_message="${RD}[ERROR]${CL} in line ${RD}$line_number${CL}: exit code ${RD}$exit_code${CL}: while executing command ${YW}$command${CL}"
|
||||
echo -e "\n$error_message"
|
||||
if [[ "$line_number" -eq 23 ]]; then
|
||||
if [[ "$line_number" -eq 44 ]]; then
|
||||
echo -e "The silent function has suppressed the error, run the script with verbose mode enabled, which will provide more detailed output.\n"
|
||||
post_update_to_api "failed" "No error message, script ran in silent mode"
|
||||
else
|
||||
post_update_to_api "failed" "${command}"
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -121,9 +121,9 @@ EOF
|
||||
whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "Support Subscriptions" "Supporting the software's development team is essential. Check their official website's Support Subscriptions for pricing. Without their dedicated work, we wouldn't have this exceptional software." 10 58
|
||||
msg_info "Disabling subscription nag"
|
||||
# Normal GUI:
|
||||
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script
|
||||
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from UI...'; sed -i '/.*data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script
|
||||
# JS-Library used when accessing via mobile device browser
|
||||
echo "DPkg::Post-Invoke { \"dpkg -V pmg-gui | grep -q '/pmgmanagerlib-mobile\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from Mobile UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; }; fi\"; };" >/etc/apt/apt.conf.d/no-nag-script
|
||||
echo "DPkg::Post-Invoke { \"dpkg -V pmg-gui | grep -q '/pmgmanagerlib-mobile\.js$'; if [ \$? -eq 1 ]; then { echo 'Removing subscription nag from Mobile UI...'; sed -i '/data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' /usr/share/javascript/pmg-gui/js/pmgmanagerlib-mobile.js; }; fi\"; };" >>/etc/apt/apt.conf.d/no-nag-script
|
||||
apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null
|
||||
msg_ok "Disabled subscription nag (Delete browser cache)"
|
||||
;;
|
||||
|
Reference in New Issue
Block a user