mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-11-05 02:42:50 +00:00
Compare commits
53 Commits
2025-02-02
...
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 |
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
|
### 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!)
|
### 4. Commit changes (without build.func and install.func!)
|
||||||
```bash
|
```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
|
#!/usr/bin/env bash
|
||||||
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
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]
|
# Author: [YourUserName]
|
||||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: [SOURCE_URL]
|
# Source: [SOURCE_URL]
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright (c) 2021-2024 community-scripts ORG
|
# Copyright (c) 2021-2025 community-scripts ORG
|
||||||
# Author: [YourUserName]
|
# Author: [YourUserName]
|
||||||
# License: MIT
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# Source: [SOURCE_URL]
|
# Source: [SOURCE_URL]
|
||||||
|
|
||||||
# Import Functions und Setup
|
# 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%.*}")"
|
output_file="${headers_dir}/$(basename "${script%.*}")"
|
||||||
|
|
||||||
# Generate figlet output
|
# 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
|
# Check if figlet output is not empty
|
||||||
if [[ -n "$figlet_output" ]]; then
|
if [[ -n "$figlet_output" ]]; then
|
||||||
|
|||||||
61
CHANGELOG.md
61
CHANGELOG.md
@@ -17,6 +17,67 @@ All LXC instances created using this repository come pre-installed with Midnight
|
|||||||
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
|
Do not break established syntax in this file, as it is automatically updated by a Github Workflow
|
||||||
|
|
||||||
|
|
||||||
|
## 2025-02-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
|
## 2025-02-02
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
@@ -44,9 +44,8 @@ function update_script() {
|
|||||||
cd /tmp
|
cd /tmp
|
||||||
wget -q https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz
|
wget -q https://github.com/actualbudget/actual-server/archive/refs/tags/v${RELEASE}.tar.gz
|
||||||
mv /opt/actualbudget /opt/actualbudget_bak
|
mv /opt/actualbudget /opt/actualbudget_bak
|
||||||
mkdir -p /opt/actualbudget/
|
|
||||||
tar -xzf v${RELEASE}.tar.gz >/dev/null 2>&1
|
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
|
rm -rf /opt/actualbudget/.env
|
||||||
mv /opt/actualbudget_bak/.env /opt/actualbudget
|
mv /opt/actualbudget_bak/.env /opt/actualbudget
|
||||||
mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
|
mv /opt/actualbudget_bak/server-files /opt/actualbudget/server-files
|
||||||
@@ -61,7 +60,7 @@ function update_script() {
|
|||||||
|
|
||||||
msg_info "Cleaning Up"
|
msg_info "Cleaning Up"
|
||||||
rm -rf /opt/actualbudget_bak
|
rm -rf /opt/actualbudget_bak
|
||||||
rm -rf /tmp/actual-server.tar.gz
|
rm -rf /tmp/v${RELEASE}.tar.gz
|
||||||
msg_ok "Cleaned"
|
msg_ok "Cleaned"
|
||||||
msg_ok "Updated Successfully"
|
msg_ok "Updated Successfully"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/m
|
|||||||
# App Default Values
|
# App Default Values
|
||||||
APP="Authentik"
|
APP="Authentik"
|
||||||
var_tags="identity-provider"
|
var_tags="identity-provider"
|
||||||
var_disk="15"
|
var_disk="12"
|
||||||
var_cpu="6"
|
var_cpu="6"
|
||||||
var_ram="8192"
|
var_ram="8192"
|
||||||
var_os="debian"
|
var_os="debian"
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ function update_script() {
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
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 Default Values
|
||||||
APP="Grist"
|
APP="Grist"
|
||||||
var_tags="database;spreadsheet"
|
var_tags="database;spreadsheet"
|
||||||
var_cpu="1"
|
var_cpu="2"
|
||||||
var_ram="2048"
|
var_ram="3072"
|
||||||
var_disk="4"
|
var_disk="6"
|
||||||
var_os="debian"
|
var_os="debian"
|
||||||
var_version="12"
|
var_version="12"
|
||||||
var_unprivileged="1"
|
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_tags="bookmark"
|
||||||
var_cpu="2"
|
var_cpu="2"
|
||||||
var_ram="4096"
|
var_ram="4096"
|
||||||
var_disk="8"
|
var_disk="10"
|
||||||
var_os="debian"
|
var_os="debian"
|
||||||
var_version="12"
|
var_version="12"
|
||||||
var_unprivileged="1"
|
var_unprivileged="1"
|
||||||
@@ -39,6 +39,9 @@ function update_script() {
|
|||||||
systemctl stop hoarder-web hoarder-workers hoarder-browser
|
systemctl stop hoarder-web hoarder-workers hoarder-browser
|
||||||
msg_ok "Stopped Services"
|
msg_ok "Stopped Services"
|
||||||
msg_info "Updating ${APP} to v${RELEASE}"
|
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
|
cd /opt
|
||||||
if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
|
if [[ -f /opt/hoarder/.env ]] && [[ ! -f /etc/hoarder/hoarder.env ]]; then
|
||||||
mkdir -p /etc/hoarder
|
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}"
|
||||||
@@ -16,7 +16,7 @@ cat <<"EOF"
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
header_info
|
header_info
|
||||||
APP="PBS"
|
APP="Proxmox-Backup-Server"
|
||||||
var_tags="backup"
|
var_tags="backup"
|
||||||
var_cpu="2"
|
var_cpu="2"
|
||||||
var_ram="2048"
|
var_ram="2048"
|
||||||
@@ -37,7 +37,7 @@ function update_script() {
|
|||||||
header_info
|
header_info
|
||||||
check_container_storage
|
check_container_storage
|
||||||
check_container_resources
|
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"
|
msg_info "Updating $APP LXC"
|
||||||
apt-get update &>/dev/null
|
apt-get update &>/dev/null
|
||||||
apt-get -y upgrade &>/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
|
# Source: Proxmox Server Solution GmbH
|
||||||
|
|
||||||
# App Default Values
|
# App Default Values
|
||||||
APP="proxmox-datacenter-manager"
|
APP="Proxmox-Datacenter-Manager"
|
||||||
var_tags="datacenter"
|
var_tags="datacenter"
|
||||||
var_cpu="2"
|
var_cpu="2"
|
||||||
var_ram="2048"
|
var_ram="2048"
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ function update_script() {
|
|||||||
unzip -q v${RELEASE}.zip
|
unzip -q v${RELEASE}.zip
|
||||||
mv tianji-${RELEASE} /opt/tianji
|
mv tianji-${RELEASE} /opt/tianji
|
||||||
cd 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 install --filter @tianji/client... --config.dedupe-peer-dependents=false --frozen-lockfile >/dev/null 2>&1
|
||||||
pnpm build:static >/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
|
pnpm install --filter @tianji/server... --config.dedupe-peer-dependents=false >/dev/null 2>&1
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ start
|
|||||||
build_container
|
build_container
|
||||||
description
|
description
|
||||||
|
|
||||||
|
pct set $CTID -features fuse=1,nesting=1
|
||||||
|
pct reboot $CTID
|
||||||
|
|
||||||
msg_ok "Completed Successfully!\n"
|
msg_ok "Completed Successfully!\n"
|
||||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
|
||||||
|
|||||||
@@ -1,33 +1,9 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import ApplicationChart from "@/components/ApplicationChart";
|
import React, { useEffect, useState } from "react";
|
||||||
import { Button } from "@/components/ui/button";
|
import DatePicker from 'react-datepicker';
|
||||||
import { Calendar } from "@/components/ui/calendar";
|
import 'react-datepicker/dist/react-datepicker.css';
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
|
import ApplicationChart from "../../components/ApplicationChart";
|
||||||
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";
|
|
||||||
|
|
||||||
interface DataModel {
|
interface DataModel {
|
||||||
id: number;
|
id: number;
|
||||||
@@ -35,18 +11,16 @@ interface DataModel {
|
|||||||
disk_size: number;
|
disk_size: number;
|
||||||
core_count: number;
|
core_count: number;
|
||||||
ram_size: number;
|
ram_size: number;
|
||||||
verbose: string;
|
|
||||||
os_type: string;
|
os_type: string;
|
||||||
os_version: string;
|
os_version: string;
|
||||||
hn: string;
|
|
||||||
disableip6: string;
|
disableip6: string;
|
||||||
ssh: string;
|
|
||||||
tags: string;
|
|
||||||
nsapp: string;
|
nsapp: string;
|
||||||
created_at: string;
|
created_at: string;
|
||||||
method: string;
|
method: string;
|
||||||
pve_version: string;
|
pve_version: string;
|
||||||
status: 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 [sortConfig, setSortConfig] = useState<{ key: keyof DataModel | null, direction: 'ascending' | 'descending' }>({ key: 'id', direction: 'descending' });
|
||||||
const [itemsPerPage, setItemsPerPage] = useState(25);
|
const [itemsPerPage, setItemsPerPage] = useState(25);
|
||||||
const [currentPage, setCurrentPage] = useState(1);
|
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 () => {
|
useEffect(() => {
|
||||||
|
const fetchData = async () => {
|
||||||
try {
|
try {
|
||||||
const response = await fetch("https://api.htl-braunau.at/data/json");
|
const response = await fetch("https://api.htl-braunau.at/data/json");
|
||||||
if (!response.ok) throw new Error(`Failed to fetch data: ${response.statusText}`);
|
if (!response.ok) throw new Error("Failed to fetch data: ${response.statusText}");
|
||||||
const result: DataModel[] = await response.json();
|
const result: DataModel[] = await response.json();
|
||||||
setData(result);
|
setData(result);
|
||||||
setLoading(false);
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setError((err as Error).message);
|
setError((err as Error).message);
|
||||||
|
} finally {
|
||||||
setLoading(false);
|
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 filteredData = data.filter(item => {
|
||||||
const matchesSearchQuery = Object.values(item).some(value =>
|
const matchesSearchQuery = Object.values(item).some(value =>
|
||||||
@@ -153,146 +109,110 @@ const DataFetcher: React.FC = () => {
|
|||||||
return `${day}.${month}.${year} ${hours}:${minutes} ${timezoneOffset} GMT`;
|
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 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 (loading) return <p>Loading...</p>;
|
||||||
if (error) return <div className="flex justify-center items-center h-screen text-red-500">Error: {error}</div>;
|
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 (
|
return (
|
||||||
<div className="container mx-auto p-6 pt-20 space-y-6">
|
<div className="p-6 mt-20">
|
||||||
<h1 className="text-3xl font-bold text-center">Created LXCs</h1>
|
<h1 className="text-2xl font-bold mb-4 text-center">Created LXCs</h1>
|
||||||
|
<div className="mb-4 flex space-x-4">
|
||||||
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
|
<div>
|
||||||
<Card>
|
<input
|
||||||
<CardHeader className="pb-2">
|
type="text"
|
||||||
<CardTitle className="text-sm font-medium">Search</CardTitle>
|
|
||||||
</CardHeader>
|
|
||||||
<CardContent>
|
|
||||||
<Input
|
|
||||||
placeholder="Search..."
|
placeholder="Search..."
|
||||||
value={searchQuery}
|
value={searchQuery}
|
||||||
onChange={e => setSearchQuery(e.target.value)}
|
onChange={e => setSearchQuery(e.target.value)}
|
||||||
|
className="p-2 border"
|
||||||
/>
|
/>
|
||||||
</CardContent>
|
<label className="text-sm text-gray-600 mt-1 block">Search by keyword</label>
|
||||||
</Card>
|
</div>
|
||||||
|
<div>
|
||||||
<Card>
|
<DatePicker
|
||||||
<CardHeader className="pb-2">
|
selected={startDate}
|
||||||
<CardTitle className="text-sm font-medium">Start Date</CardTitle>
|
onChange={date => setStartDate(date)}
|
||||||
</CardHeader>
|
selectsStart
|
||||||
<CardContent>
|
startDate={startDate}
|
||||||
<Popover>
|
endDate={endDate}
|
||||||
<PopoverTrigger asChild>
|
placeholderText="Start date"
|
||||||
<Button variant="outline" className="w-full justify-start text-left font-normal">
|
className="p-2 border"
|
||||||
<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>
|
<label className="text-sm text-gray-600 mt-1 block">Set a start date</label>
|
||||||
</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>
|
</div>
|
||||||
|
|
||||||
|
<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>
|
||||||
<ApplicationChart data={filteredData} />
|
<ApplicationChart data={filteredData} />
|
||||||
|
<div className="mb-4 flex justify-between items-center">
|
||||||
<div className="flex justify-between items-center">
|
<p className="text-lg font-bold">{filteredData.length} results found</p>
|
||||||
<p className="text-lg font-medium">{filteredData.length} results found</p>
|
<p className="text-lg font">Status Legend: 🔄 installing {installingCounts} | ✔️ completetd {doneCounts} | ❌ failed {failedCounts} | ❓ unknown {unknownCounts}</p>
|
||||||
<div className="flex gap-2 items-center">
|
<select value={itemsPerPage} onChange={handleItemsPerPageChange} className="p-2 border">
|
||||||
<span>🔄 Installing: {statusCounts.installing || 0}</span>
|
<option value={25}>25</option>
|
||||||
<span>✔️ Completed: {statusCounts.done || 0}</span>
|
<option value={50}>50</option>
|
||||||
<span>❌ Failed: {statusCounts.failed || 0}</span>
|
<option value={100}>100</option>
|
||||||
<span>❓ Unknown: {statusCounts.unknown || 0}</span>
|
<option value={200}>200</option>
|
||||||
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<Select value={itemsPerPage.toString()} onValueChange={(value) => setItemsPerPage(Number(value))}>
|
<div className="overflow-x-auto">
|
||||||
<SelectTrigger className="w-[180px]">
|
<div className="overflow-y-auto lg:overflow-y-visible">
|
||||||
<SelectValue placeholder="Items per page" />
|
<table className="min-w-full table-auto border-collapse">
|
||||||
</SelectTrigger>
|
<thead>
|
||||||
<SelectContent>
|
<tr>
|
||||||
{[25, 50, 100, 200].map(value => (
|
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('status')}>Status</th>
|
||||||
<SelectItem key={value} value={value.toString()}>
|
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('type')}>Type</th>
|
||||||
{value} items
|
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('nsapp')}>Application</th>
|
||||||
</SelectItem>
|
<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>
|
||||||
</SelectContent>
|
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('disk_size')}>Disk Size</th>
|
||||||
</Select>
|
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('core_count')}>Core Count</th>
|
||||||
</div>
|
<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>
|
||||||
<div className="rounded-md border">
|
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('pve_version')}>PVE Version</th>
|
||||||
<Table>
|
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('error')}>Error Message</th>
|
||||||
<TableHeader>
|
<th className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('created_at')}>Created At</th>
|
||||||
<TableRow>
|
</tr>
|
||||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('status')}>Status</TableHead>
|
</thead>
|
||||||
<TableHead className="px-4 py-2 border-b cursor-pointer" onClick={() => requestSort('nsapp')}>Application</TableHead>
|
<tbody>
|
||||||
<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) => (
|
{paginatedData.map((item, index) => (
|
||||||
<TableRow key={index}>
|
<tr key={index}>
|
||||||
<TableCell className="px-4 py-2 border-b">{item.status === "done" ? (
|
<td className="px-4 py-2 border-b">
|
||||||
|
{item.status === "done" ? (
|
||||||
"✔️"
|
"✔️"
|
||||||
) : item.status === "failed" ? (
|
) : item.status === "failed" ? (
|
||||||
"❌"
|
"❌"
|
||||||
@@ -300,47 +220,65 @@ const DataFetcher: React.FC = () => {
|
|||||||
"🔄"
|
"🔄"
|
||||||
) : (
|
) : (
|
||||||
item.status
|
item.status
|
||||||
)}</TableCell>
|
)}
|
||||||
<TableCell className="px-4 py-2 border-b">{item.nsapp}</TableCell>
|
</td>
|
||||||
<TableCell className="px-4 py-2 border-b">{item.os_type}</TableCell>
|
<td className="px-4 py-2 border-b">{item.type === "lxc" ? (
|
||||||
<TableCell className="px-4 py-2 border-b">{item.os_version}</TableCell>
|
"📦"
|
||||||
<TableCell className="px-4 py-2 border-b">{item.disk_size}</TableCell>
|
) : item.type === "vm" ? (
|
||||||
<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>
|
item.type
|
||||||
<TableCell className="px-4 py-2 border-b">{item.ssh}</TableCell>
|
)}</td>
|
||||||
<TableCell className="px-4 py-2 border-b">{item.verbose}</TableCell>
|
<td className="px-4 py-2 border-b">{item.nsapp}</td>
|
||||||
<TableCell className="px-4 py-2 border-b">{item.tags.replace(/;/g, ' ')}</TableCell>
|
<td className="px-4 py-2 border-b">{item.os_type}</td>
|
||||||
<TableCell className="px-4 py-2 border-b">{item.method}</TableCell>
|
<td className="px-4 py-2 border-b">{item.os_version}</td>
|
||||||
<TableCell className="px-4 py-2 border-b">{item.pve_version}</TableCell>
|
<td className="px-4 py-2 border-b">{item.disk_size}</td>
|
||||||
<TableCell className="px-4 py-2 border-b">{formatDate(item.created_at)}</TableCell>
|
<td className="px-4 py-2 border-b">{item.core_count}</td>
|
||||||
</TableRow>
|
<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>
|
||||||
))}
|
))}
|
||||||
</TableBody>
|
</tbody>
|
||||||
</Table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div className="flex items-center justify-center space-x-2">
|
<div className="mt-4 flex justify-between items-center">
|
||||||
<Button
|
<button
|
||||||
variant="outline"
|
|
||||||
onClick={() => setCurrentPage(prev => Math.max(prev - 1, 1))}
|
onClick={() => setCurrentPage(prev => Math.max(prev - 1, 1))}
|
||||||
disabled={currentPage === 1}
|
disabled={currentPage === 1}
|
||||||
|
className="p-2 border"
|
||||||
>
|
>
|
||||||
Previous
|
Previous
|
||||||
</Button>
|
</button>
|
||||||
<span className="text-sm">
|
<span>Page {currentPage}</span>
|
||||||
Page {currentPage} of {Math.ceil(sortedData.length / itemsPerPage)}
|
<button
|
||||||
</span>
|
|
||||||
<Button
|
|
||||||
variant="outline"
|
|
||||||
onClick={() => setCurrentPage(prev => (prev * itemsPerPage < sortedData.length ? prev + 1 : prev))}
|
onClick={() => setCurrentPage(prev => (prev * itemsPerPage < sortedData.length ? prev + 1 : prev))}
|
||||||
disabled={currentPage * itemsPerPage >= sortedData.length}
|
disabled={currentPage * itemsPerPage >= sortedData.length}
|
||||||
|
className="p-2 border"
|
||||||
>
|
>
|
||||||
Next
|
Next
|
||||||
</Button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export default DataFetcher;
|
export default DataFetcher;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Setting up PostgreSQL Repository"
|
msg_info "Setting up PostgreSQL Repository"
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ msg_ok "Installed Python Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -81,12 +81,13 @@ $STD apt-get install -y nodejs
|
|||||||
msg_ok "Installed Node.js"
|
msg_ok "Installed Node.js"
|
||||||
|
|
||||||
msg_info "Installing Golang"
|
msg_info "Installing Golang"
|
||||||
cd /tmp
|
|
||||||
set +o pipefail
|
set +o pipefail
|
||||||
GO_RELEASE=$(curl -s https://go.dev/dl/ | grep -o -m 1 "go.*\linux-amd64.tar.gz")
|
temp_file=$(mktemp)
|
||||||
wget -q https://golang.org/dl/${GO_RELEASE}
|
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||||
tar -xzf ${GO_RELEASE} -C /usr/local
|
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||||
ln -s /usr/local/go/bin/go /usr/bin/go
|
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
|
set -o pipefail
|
||||||
msg_ok "Installed Golang"
|
msg_ok "Installed Golang"
|
||||||
|
|
||||||
@@ -186,7 +187,6 @@ msg_info "Cleaning up"
|
|||||||
rm -rf /tmp/Python-3.12.1
|
rm -rf /tmp/Python-3.12.1
|
||||||
rm -rf /tmp/Python.tgz
|
rm -rf /tmp/Python.tgz
|
||||||
rm -rf go/
|
rm -rf go/
|
||||||
rm -rf /tmp/${GO_RELEASE}
|
|
||||||
rm -rf /tmp/geoipupdate.deb
|
rm -rf /tmp/geoipupdate.deb
|
||||||
rm -rf authentik.tar.gz
|
rm -rf authentik.tar.gz
|
||||||
$STD apt-get -y remove yq
|
$STD apt-get -y remove yq
|
||||||
|
|||||||
@@ -33,14 +33,14 @@ msg_ok "Installed Caddy"
|
|||||||
read -r -p "Would you like to install xCaddy Addon? <y/N> " prompt
|
read -r -p "Would you like to install xCaddy Addon? <y/N> " prompt
|
||||||
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
|
||||||
msg_info "Installing Golang"
|
msg_info "Installing Golang"
|
||||||
cd /opt
|
|
||||||
set +o pipefail
|
set +o pipefail
|
||||||
GOLANG=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-amd64.tar.gz" | head -n 1)
|
temp_file=$(mktemp)
|
||||||
wget -q https://golang.org/dl/$GOLANG
|
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||||
tar -xzf $GOLANG -C /usr/local
|
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||||
ln -s /usr/local/go/bin/go /usr/local/bin/go
|
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
|
set -o pipefail
|
||||||
rm -rf /opt/go*
|
|
||||||
msg_ok "Installed Golang"
|
msg_ok "Installed Golang"
|
||||||
|
|
||||||
msg_info "Setup xCaddy"
|
msg_info "Setup xCaddy"
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ msg_ok "Setup Python3"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
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"
|
msg_info "Installing Node.js"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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 update
|
||||||
$STD apt-get install -y nodejs
|
$STD apt-get install -y nodejs
|
||||||
msg_ok "Installed Node.js"
|
msg_ok "Installed Node.js"
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ msg_ok "Setup Python3"
|
|||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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 update
|
||||||
$STD apt-get install -y nodejs
|
$STD apt-get install -y nodejs
|
||||||
msg_ok "Installed Node.js"
|
msg_ok "Installed Node.js"
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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 update
|
||||||
$STD apt-get install -y nodejs
|
$STD apt-get install -y nodejs
|
||||||
$STD npm install -g yarn
|
$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
|
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 update
|
||||||
$STD apt-get install -y nodejs
|
$STD apt-get install -y nodejs
|
||||||
|
$STD npm install -g corepack@0.31.0
|
||||||
msg_ok "Installed Node.js"
|
msg_ok "Installed Node.js"
|
||||||
|
|
||||||
msg_info "Installing Hoarder"
|
msg_info "Installing Hoarder"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ $STD apt-get install -y \
|
|||||||
imagemagick
|
imagemagick
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Python3 Dependencies"
|
msg_info "Setup Python3"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
pip \
|
pip \
|
||||||
python3-irc
|
python3-irc
|
||||||
@@ -34,7 +34,7 @@ $STD pip install jaraco.stream
|
|||||||
$STD pip install python-Levenshtein
|
$STD pip install python-Levenshtein
|
||||||
$STD pip install soupsieve
|
$STD pip install soupsieve
|
||||||
$STD pip install pypdf
|
$STD pip install pypdf
|
||||||
msg_ok "Installed Python3 Dependencies"
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
msg_info "Installing LazyLibrarian"
|
msg_info "Installing LazyLibrarian"
|
||||||
$STD git clone https://gitlab.com/LazyLibrarian/LazyLibrarian /opt/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"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js/Yarn"
|
msg_info "Installing Node.js/Yarn"
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
@@ -42,10 +42,12 @@ msg_ok "Installed pnpm"
|
|||||||
|
|
||||||
msg_info "Installing Golang"
|
msg_info "Installing Golang"
|
||||||
set +o pipefail
|
set +o pipefail
|
||||||
GOLANG=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-amd64.tar.gz" | head -n 1)
|
temp_file=$(mktemp)
|
||||||
wget -q https://golang.org/dl/$GOLANG
|
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||||
tar -xzf $GOLANG -C /usr/local
|
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||||
ln -s /usr/local/go/bin/go /usr/local/bin/go
|
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
|
set -o pipefail
|
||||||
msg_ok "Installed Golang"
|
msg_ok "Installed Golang"
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -33,18 +33,18 @@ $STD apt-get install -y --no-install-recommends \
|
|||||||
mc
|
mc
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Python3"
|
msg_info "Setup Python3"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
python3 \
|
python3 \
|
||||||
python3-dev \
|
python3-dev \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-venv
|
python3-venv
|
||||||
msg_ok "Installed Python3"
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -26,10 +26,14 @@ $STD apt-get install -y cmake
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Golang"
|
msg_info "Installing Golang"
|
||||||
$STD wget https://golang.org/dl/go1.23.2.linux-amd64.tar.gz
|
set +o pipefail
|
||||||
$STD tar -xzf go1.23.2.linux-amd64.tar.gz -C /usr/local
|
temp_file=$(mktemp)
|
||||||
$STD ln -s /usr/local/go/bin/go /usr/local/bin/go
|
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||||
rm -rf go1.23.2.linux-amd64.tar.gz
|
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_ok "Installed Golang"
|
||||||
|
|
||||||
msg_info "Setting up Intel® Repositories"
|
msg_info "Setting up Intel® Repositories"
|
||||||
|
|||||||
@@ -24,16 +24,16 @@ $STD apt-get install -y \
|
|||||||
ffmpeg
|
ffmpeg
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Python3 Dependencies"
|
msg_info "Setup Python3"
|
||||||
$STD apt-get install -y --no-install-recommends \
|
$STD apt-get install -y --no-install-recommends \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip
|
python3-pip
|
||||||
msg_ok "Installed Python3 Dependencies"
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -40,14 +40,14 @@ $STD apt-get install -y \
|
|||||||
mc
|
mc
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Python3 Dependencies (Patience)"
|
msg_info "Setup Python3"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-dev \
|
python3-dev \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-wheel
|
python3-wheel
|
||||||
msg_ok "Installed Python3 Dependencies"
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
msg_info "Installing OCR Dependencies (Patience)"
|
msg_info "Installing OCR Dependencies (Patience)"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ msg_ok "Set up PostgreSQL"
|
|||||||
msg_info "Setting up Node.js/Yarn"
|
msg_info "Setting up Node.js/Yarn"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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 update
|
||||||
$STD apt-get install -y nodejs
|
$STD apt-get install -y nodejs
|
||||||
$STD npm install -g npm@latest
|
$STD npm install -g npm@latest
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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 update
|
||||||
$STD apt-get install -y nodejs
|
$STD apt-get install -y nodejs
|
||||||
msg_ok "Installed Node.js"
|
msg_ok "Installed Node.js"
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -35,12 +35,13 @@ $STD apt-get install -y nodejs
|
|||||||
msg_ok "Installed Node.js"
|
msg_ok "Installed Node.js"
|
||||||
|
|
||||||
msg_info "Installing Golang"
|
msg_info "Installing Golang"
|
||||||
cd /tmp
|
|
||||||
set +o pipefail
|
set +o pipefail
|
||||||
GO_RELEASE=$(curl -s https://go.dev/dl/ | grep -o -m 1 "go.*\linux-amd64.tar.gz")
|
temp_file=$(mktemp)
|
||||||
wget -q https://golang.org/dl/${GO_RELEASE}
|
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||||
tar -xzf ${GO_RELEASE} -C /usr/local
|
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||||
ln -s /usr/local/go/bin/go /usr/bin/go
|
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
|
set -o pipefail
|
||||||
msg_ok "Installed Golang"
|
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
|
||||||
@@ -14,9 +14,11 @@ network_check
|
|||||||
update_os
|
update_os
|
||||||
|
|
||||||
msg_info "Installing Dependencies"
|
msg_info "Installing Dependencies"
|
||||||
$STD apt-get install -y curl
|
$STD apt-get install -y \
|
||||||
$STD apt-get install -y sudo
|
curl \
|
||||||
$STD apt-get install -y mc
|
sudo \
|
||||||
|
gpg \
|
||||||
|
mc
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Proxmox Backup Server"
|
msg_info "Installing Proxmox Backup Server"
|
||||||
@@ -21,10 +21,14 @@ $STD apt-get install -y mc
|
|||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Golang"
|
msg_info "Installing Golang"
|
||||||
$STD wget https://golang.org/dl/go1.20.1.linux-amd64.tar.gz
|
set +o pipefail
|
||||||
$STD tar -xzf go1.20.1.linux-amd64.tar.gz -C /usr/local
|
temp_file=$(mktemp)
|
||||||
$STD ln -s /usr/local/go/bin/go /usr/local/bin/go
|
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||||
rm -rf go1.20.1.linux-amd64.tar.gz
|
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_ok "Installed Golang"
|
||||||
|
|
||||||
msg_info "Installing RTSPtoWeb"
|
msg_info "Installing RTSPtoWeb"
|
||||||
|
|||||||
@@ -23,10 +23,12 @@ msg_ok "Installed Dependencies"
|
|||||||
|
|
||||||
msg_info "Installing Golang"
|
msg_info "Installing Golang"
|
||||||
set +o pipefail
|
set +o pipefail
|
||||||
RELEASE=$(curl -s https://go.dev/dl/ | grep -o "go.*\linux-amd64.tar.gz" | head -n 1)
|
temp_file=$(mktemp)
|
||||||
wget -q https://golang.org/dl/$RELEASE
|
golang_tarball=$(curl -s https://go.dev/dl/ | grep -oP 'go[\d\.]+\.linux-amd64\.tar\.gz' | head -n 1)
|
||||||
tar -xzf $RELEASE -C /usr/local
|
wget -q https://golang.org/dl/"$golang_tarball" -O "$temp_file"
|
||||||
$STD ln -s /usr/local/go/bin/go /usr/local/bin/go
|
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
|
set -o pipefail
|
||||||
msg_ok "Installed Golang"
|
msg_ok "Installed Golang"
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -27,13 +27,13 @@ $STD apt-get install -y \
|
|||||||
mc
|
mc
|
||||||
msg_ok "Installed Dependencies"
|
msg_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Installing Python3"
|
msg_info "Setup Python3"
|
||||||
$STD apt-get install -y \
|
$STD apt-get install -y \
|
||||||
python3-dev \
|
python3-dev \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-wheel \
|
python3-wheel \
|
||||||
python3-pip
|
python3-pip
|
||||||
msg_ok "Installed Python3"
|
msg_ok "Setup Python3"
|
||||||
|
|
||||||
msg_info "Installing Spoolman"
|
msg_info "Installing Spoolman"
|
||||||
RELEASE=$(wget -q https://github.com/Donkie/Spoolman/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
|
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_ok "Installed Dependencies"
|
||||||
|
|
||||||
msg_info "Setup SQL Server 2022"
|
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 | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
|
||||||
$STD curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc
|
|
||||||
$STD curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list
|
$STD curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list | tee /etc/apt/sources.list.d/mssql-server-2022.list
|
||||||
$STD apt-get clean *
|
$STD apt-get clean *
|
||||||
$STD apt-get update -y
|
$STD apt-get update -y
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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 update
|
||||||
$STD apt-get install -y nodejs
|
$STD apt-get install -y nodejs
|
||||||
$STD npm install -g pnpm@9.7.1
|
$STD npm install -g pnpm@9.7.1
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
msg_info "Installing Node.js"
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ msg_ok "Installed Dependencies"
|
|||||||
msg_info "Setting up Node.js Repository"
|
msg_info "Setting up Node.js Repository"
|
||||||
mkdir -p /etc/apt/keyrings
|
mkdir -p /etc/apt/keyrings
|
||||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
|
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_ok "Set up Node.js Repository"
|
||||||
|
|
||||||
msg_info "Installing Node.js"
|
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",
|
"type": "default",
|
||||||
"script": "ct/grist.sh",
|
"script": "ct/grist.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 1,
|
"cpu": 2,
|
||||||
"ram": 1024,
|
"ram": 3072,
|
||||||
"hdd": 4,
|
"hdd": 6,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"version": "12"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 4096,
|
"ram": 4096,
|
||||||
"hdd": 8,
|
"hdd": 10,
|
||||||
"os": "debian",
|
"os": "debian",
|
||||||
"version": "12"
|
"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",
|
"name": "Prometheus Proxmox VE Exporter",
|
||||||
"slug": "prometheus-proxmox-ve-exporter",
|
"slug": "prometheus-pve-exporter",
|
||||||
"categories": [
|
"categories": [
|
||||||
1,
|
1,
|
||||||
9
|
9
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "Proxmox Backup Server",
|
"name": "Proxmox Backup Server",
|
||||||
"slug": "pbs",
|
"slug": "proxmox-backup-server",
|
||||||
"categories": [
|
"categories": [
|
||||||
1
|
1
|
||||||
],
|
],
|
||||||
"date_created": "2024-05-02",
|
"date_created": "2024-05-02",
|
||||||
"type": "ct",
|
"type": "ct",
|
||||||
"updateable": false,
|
"updateable": true,
|
||||||
"privileged": false,
|
"privileged": false,
|
||||||
"interface_port": 8007,
|
"interface_port": 8007,
|
||||||
"documentation": "https://pbs.proxmox.com/docs/",
|
"documentation": "https://pbs.proxmox.com/docs/",
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "ct/pbs.sh",
|
"script": "ct/proxmox-backup-server.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 2,
|
"cpu": 2,
|
||||||
"ram": 2048,
|
"ram": 2048,
|
||||||
@@ -27,12 +27,12 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"default_credentials": {
|
"default_credentials": {
|
||||||
"username": null,
|
"username": "root",
|
||||||
"password": null
|
"password": null
|
||||||
},
|
},
|
||||||
"notes": [
|
"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"
|
"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
|
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.
|
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.
|
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.
|
# This function sets various color variables using ANSI escape codes for formatting text in the terminal.
|
||||||
color() {
|
color() {
|
||||||
@@ -791,78 +792,6 @@ advanced_settings() {
|
|||||||
fi
|
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(){
|
diagnostics_check(){
|
||||||
if ! [ -d "/usr/local/community-scripts" ]; then
|
if ! [ -d "/usr/local/community-scripts" ]; then
|
||||||
mkdir -p /usr/local/community-scripts
|
mkdir -p /usr/local/community-scripts
|
||||||
@@ -886,16 +815,13 @@ DIAGNOSTICS=yes
|
|||||||
#"disk_size"
|
#"disk_size"
|
||||||
#"core_count"
|
#"core_count"
|
||||||
#"ram_size"
|
#"ram_size"
|
||||||
#"verbose"
|
|
||||||
#"os_type"
|
#"os_type"
|
||||||
#"os_version"
|
#"os_version"
|
||||||
#"hn"
|
|
||||||
#"disableip6"
|
#"disableip6"
|
||||||
#"ssh"
|
|
||||||
#"tags"
|
|
||||||
#"nsapp"
|
#"nsapp"
|
||||||
#"method"
|
#"method"
|
||||||
#"pve_version"
|
#"pve_version"
|
||||||
|
#"status"
|
||||||
#If you have any concerns, please review the source code at /misc/build.func
|
#If you have any concerns, please review the source code at /misc/build.func
|
||||||
EOF
|
EOF
|
||||||
DIAGNOSTICS="yes"
|
DIAGNOSTICS="yes"
|
||||||
@@ -916,16 +842,13 @@ DIAGNOSTICS=no
|
|||||||
#"disk_size"
|
#"disk_size"
|
||||||
#"core_count"
|
#"core_count"
|
||||||
#"ram_size"
|
#"ram_size"
|
||||||
#"verbose"
|
|
||||||
#"os_type"
|
#"os_type"
|
||||||
#"os_version"
|
#"os_version"
|
||||||
#"hn"
|
|
||||||
#"disableip6"
|
#"disableip6"
|
||||||
#"ssh"
|
|
||||||
#"tags"
|
|
||||||
#"nsapp"
|
#"nsapp"
|
||||||
#"method"
|
#"method"
|
||||||
#"pve_version"
|
#"pve_version"
|
||||||
|
#"status"
|
||||||
#If you have any concerns, please review the source code at /misc/build.func
|
#If you have any concerns, please review the source code at /misc/build.func
|
||||||
EOF
|
EOF
|
||||||
DIAGNOSTICS="no"
|
DIAGNOSTICS="no"
|
||||||
@@ -1101,6 +1024,7 @@ build_container() {
|
|||||||
else
|
else
|
||||||
export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/install.func)"
|
export FUNCTIONS_FILE_PATH="$(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/install.func)"
|
||||||
fi
|
fi
|
||||||
|
export RANDOM_UUID="$RANDOM_UUID"
|
||||||
export CACHER="$APT_CACHER"
|
export CACHER="$APT_CACHER"
|
||||||
export CACHER_IP="$APT_CACHER_IP"
|
export CACHER_IP="$APT_CACHER_IP"
|
||||||
export tz="$timezone"
|
export tz="$timezone"
|
||||||
@@ -1239,10 +1163,10 @@ EOF
|
|||||||
systemctl start ping-instances.service
|
systemctl start ping-instances.service
|
||||||
fi
|
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" "unknown error"' EXIT
|
||||||
trap 'post_update_to_api "failed"' SIGINT
|
trap 'post_update_to_api "failed" "SIG INTERUPT"' SIGINT
|
||||||
trap 'post_update_to_api "failed"' SIGTERM
|
trap 'post_update_to_api "failed" "SIG TERM"' SIGTERM
|
||||||
|
|
||||||
|
|||||||
@@ -22,26 +22,18 @@ function find_orphaned_lvm {
|
|||||||
|
|
||||||
orphaned_volumes=()
|
orphaned_volumes=()
|
||||||
while read -r lv vg size; do
|
while read -r lv vg size; do
|
||||||
container_id=$(echo "$lv" | grep -oE "[0-9]+" | head -1)
|
# Exclude system-critical LVs and Ceph OSDs
|
||||||
|
if [[ "$lv" == "data" || "$lv" == "root" || "$lv" == "swap" || "$lv" =~ ^osd-block- ]]; then
|
||||||
# Exclude system-critical LVs
|
|
||||||
if [[ "$lv" == "data" || "$lv" == "root" || "$lv" == "swap" ]]; then
|
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
container_id=$(echo "$lv" | grep -oE "[0-9]+" | head -1)
|
||||||
# Check if the ID exists as a VM or LXC container
|
# 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
|
if [ -f "/etc/pve/lxc/${container_id}.conf" ] || [ -f "/etc/pve/qemu-server/${container_id}.conf" ]; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
orphaned_volumes+=("$lv" "$vg" "$size")
|
orphaned_volumes+=("$lv" "$vg" "$size")
|
||||||
done < <(lvs --noheadings -o lv_name,vg_name,lv_size --separator ' ' | awk '{print $1, $2, $3}')
|
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
|
# Display orphaned volumes
|
||||||
echo -e "❗ The following orphaned LVM volumes were found:\n"
|
echo -e "❗ The following orphaned LVM volumes were found:\n"
|
||||||
printf "%-25s %-10s %-10s\n" "LV Name" "VG" "Size"
|
printf "%-25s %-10s %-10s\n" "LV Name" "VG" "Size"
|
||||||
|
|||||||
@@ -2,8 +2,9 @@
|
|||||||
|
|
||||||
# Copyright (c) 2021-2025 tteck
|
# Copyright (c) 2021-2025 tteck
|
||||||
# Author: tteck (tteckster)
|
# Author: tteck (tteckster)
|
||||||
# License: MIT
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||||
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
function header_info() {
|
function header_info() {
|
||||||
clear
|
clear
|
||||||
@@ -16,11 +17,13 @@ function header_info() {
|
|||||||
/____/
|
/____/
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
BL=$(echo "\033[36m")
|
BL=$(echo "\033[36m")
|
||||||
RD=$(echo "\033[01;31m")
|
RD=$(echo "\033[01;31m")
|
||||||
CM='\xE2\x9C\x94\033'
|
CM='\xE2\x9C\x94\033'
|
||||||
GN=$(echo "\033[1;92m")
|
GN=$(echo "\033[1;92m")
|
||||||
CL=$(echo "\033[m")
|
CL=$(echo "\033[m")
|
||||||
|
|
||||||
header_info
|
header_info
|
||||||
echo "Loading..."
|
echo "Loading..."
|
||||||
|
|
||||||
@@ -29,47 +32,63 @@ if [ "$ROOT_FS" != "ext4" ]; then
|
|||||||
echo "Root filesystem is not ext4. Exiting script."
|
echo "Root filesystem is not ext4. Exiting script."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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)
|
NODE=$(hostname)
|
||||||
EXCLUDE_MENU=()
|
EXCLUDE_MENU=()
|
||||||
MSG_MAX_LENGTH=0
|
MSG_MAX_LENGTH=0
|
||||||
|
|
||||||
while read -r TAG ITEM; do
|
while read -r TAG ITEM; do
|
||||||
OFFSET=2
|
OFFSET=2
|
||||||
((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET
|
((${#ITEM} + OFFSET > MSG_MAX_LENGTH)) && MSG_MAX_LENGTH=${#ITEM}+OFFSET
|
||||||
EXCLUDE_MENU+=("$TAG" "$ITEM " "OFF")
|
EXCLUDE_MENU+=("$TAG" "$ITEM " "OFF")
|
||||||
done < <(pct list | awk 'NR>1')
|
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() {
|
function trim_container() {
|
||||||
local container=$1
|
local container=$1
|
||||||
header_info
|
header_info
|
||||||
echo -e "${BL}[Info]${GN} Trimming ${BL}$container${CL} \n"
|
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}"
|
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}"
|
echo -e "${GN}Data after trim $after_trim%${CL}"
|
||||||
|
|
||||||
sleep 1.5
|
sleep 1.5
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
for container in $(pct list | awk '{if(NR>1) print $1}'); do
|
||||||
if [[ " ${excluded_containers[@]} " =~ " $container " ]]; then
|
if [[ " ${excluded_containers} " =~ " $container " ]]; then
|
||||||
header_info
|
header_info
|
||||||
echo -e "${BL}[Info]${GN} Skipping ${BL}$container${CL}"
|
echo -e "${BL}[Info]${GN} Skipping ${BL}$container${CL}"
|
||||||
sleep 1
|
sleep 1
|
||||||
else
|
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
|
if [ "$template" == "true" ]; then
|
||||||
header_info
|
header_info
|
||||||
echo -e "${BL}[Info]${GN} Skipping ${container} ${RD}$container is a template ${CL} \n"
|
echo -e "${BL}[Info]${GN} Skipping ${container} ${RD}$container is a template ${CL} \n"
|
||||||
sleep 1
|
sleep 1
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
trim_container $container
|
trim_container "$container"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ catch_errors() {
|
|||||||
|
|
||||||
# This function handles errors
|
# This function handles errors
|
||||||
error_handler() {
|
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
|
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
|
||||||
printf "\e[?25h"
|
printf "\e[?25h"
|
||||||
local exit_code="$?"
|
local exit_code="$?"
|
||||||
@@ -63,8 +64,11 @@ error_handler() {
|
|||||||
local command="$2"
|
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}"
|
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"
|
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"
|
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
|
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
|
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"
|
msg_info "Disabling subscription nag"
|
||||||
# Normal GUI:
|
# 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
|
# 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
|
apt --reinstall install proxmox-widget-toolkit pmg-gui &>/dev/null
|
||||||
msg_ok "Disabled subscription nag (Delete browser cache)"
|
msg_ok "Disabled subscription nag (Delete browser cache)"
|
||||||
;;
|
;;
|
||||||
|
|||||||
Reference in New Issue
Block a user